mirror of
https://github.com/mpv-player/mpv
synced 2024-12-28 06:03:45 +01:00
Merge svn changes up to r31033
This commit is contained in:
commit
7795726e0f
3
AUTHORS
3
AUTHORS
@ -385,6 +385,9 @@ Hůrka, Tomáš <tom@hukatronic.cz>
|
||||
* Darwin DVD support (mpdvdkit2)
|
||||
* various fixes
|
||||
|
||||
Hysseo, Jehan <hysseo@zemarmot.net>
|
||||
* af_add, af_switch, af_del, af_clr commands.
|
||||
|
||||
Isani, Sidik <lksi@cfht.hawaii.edu>
|
||||
* get_delay() smoothing code (-autosync)
|
||||
* RTC initialization fixes
|
||||
|
@ -1,5 +1,5 @@
|
||||
body,table {
|
||||
font-family : Arial, Helvetica, sans-serif;
|
||||
font-size : 14px;
|
||||
background : white;
|
||||
body,table {
|
||||
font-family : Arial, Helvetica, sans-serif;
|
||||
font-size : 14px;
|
||||
background : white;
|
||||
}
|
||||
|
@ -297,6 +297,8 @@ Mache einen Schnappschuss.
|
||||
Beginne/beende die Aufnahme von Schnappschüssen.
|
||||
.IPs "I\ \ \ \ "
|
||||
Zeige den Dateinamen im OSD.
|
||||
.IPs "P\ \ \ \ "
|
||||
Zeige den Fortschrittsbalken, die abgelaufene Zeit und die Gesamtzeit im OSD.
|
||||
.IPs "! und @"
|
||||
Spult zum Anfang des vorigen/nächsten Kapitels.
|
||||
.IPs "D (nur bei \-vo xvmc, \-vf yadif, \-vf kerndeint)"
|
||||
|
@ -278,6 +278,8 @@ Take a screenshot.
|
||||
Start/stop taking screenshots.
|
||||
.IPs "I\ \ \ \ "
|
||||
Show filename on the OSD.
|
||||
.IPs "P\ \ \ \ "
|
||||
Show progression bar, elapsed time and total duration on the OSD.
|
||||
.IPs "! and @"
|
||||
Seek to the beginning of the previous/next chapter.
|
||||
.IPs "D (\-vo xvmc, \-vo vdpau, \-vf yadif, \-vf kerndeint only)"
|
||||
|
@ -303,6 +303,8 @@ R
|
||||
Amorce/arrête la capture d'écran.
|
||||
.IPs "I\ \ \ \ "
|
||||
Affiche le nom de fichier dans l'OSD.
|
||||
.IPs "P\ \ \ \ "
|
||||
Affiche la barre d'avancement, le temps écoulé et la durée totale sur l'OSD.
|
||||
.IPs "! and @"
|
||||
Saute au début du chapitre précédent/suivant.
|
||||
.IPs "D (\-vo xvmc, \-vo vdpau, \-vf yadif et \-vf kerndeint uniquement)"
|
||||
@ -5782,8 +5784,8 @@ Les aires de m
|
||||
int nch /*nombre de canaux*/
|
||||
int size /*taille du tampon*/
|
||||
unsigned long long counter /*Utilisé pour garder la synchro, mis à jour
|
||||
chaque fois que de nouvelles données son
|
||||
exportées.*/
|
||||
chaque fois que de nouvelles données son
|
||||
exportées.*/
|
||||
.fi
|
||||
.sp 1
|
||||
Le reste est charge utile, constitué de données 16bit (non-entrelacées).
|
||||
|
@ -43,7 +43,7 @@ understand, then you will either need to somehow convert the format to a
|
||||
media file format that the program does understand, or write your own
|
||||
MPlayer file demuxer that can handle the data. Writing a file demuxer
|
||||
is beyond the scope of this document.
|
||||
Try to obtain media that stresses all possible modes of a
|
||||
Try to obtain media that stresses all possible modes of a
|
||||
decoder. If an audio codec is known to work with both mono and stereo
|
||||
data, search for sample media of both types. If a video codec is known to
|
||||
work at 7 different bit depths, then, as painful as it may be, do what you
|
||||
|
@ -66,9 +66,9 @@ The most misunderstood thingie...
|
||||
In MPlayer, we usually have 3 pointers to the Y, U and V planes, so it
|
||||
doesn't matter what the order of the planes in the memory is:
|
||||
for mp_image_t and libvo's draw_slice():
|
||||
planes[0] = Y = luminance
|
||||
planes[1] = U = Cb = blue
|
||||
planes[2] = V = Cr = red
|
||||
planes[0] = Y = luminance
|
||||
planes[1] = U = Cb = blue
|
||||
planes[2] = V = Cr = red
|
||||
Note: planes[1] is ALWAYS U, and planes[2] is V, the FOURCC
|
||||
(YV12 vs. I420) doesn't matter here! So, every codec using 3 pointers
|
||||
(not only the first one) normally supports YV12 and I420 (=IYUV), too!
|
||||
|
@ -14,64 +14,64 @@ The main modules:
|
||||
|
||||
2. demuxer.c: this does the demultiplexing (separating) of the input to
|
||||
audio, video or dvdsub channels, and their reading by buffered packages.
|
||||
The demuxer.c is basically a framework, which is the same for all the
|
||||
input formats, and there are parsers for each of them (mpeg-es,
|
||||
mpeg-ps, avi, avi-ni, asf), these are in the demux_*.c files.
|
||||
The structure is the demuxer_t. There is only one demuxer.
|
||||
The demuxer.c is basically a framework, which is the same for all the
|
||||
input formats, and there are parsers for each of them (mpeg-es,
|
||||
mpeg-ps, avi, avi-ni, asf), these are in the demux_*.c files.
|
||||
The structure is the demuxer_t. There is only one demuxer.
|
||||
|
||||
2.a. demux_packet_t, that is DP.
|
||||
Contains one chunk (avi) or packet (asf,mpg). They are stored in memory as
|
||||
in linked list, cause of their different size.
|
||||
in linked list, cause of their different size.
|
||||
|
||||
2.b. demuxer stream, that is DS.
|
||||
Struct: demux_stream_t
|
||||
Every channel (a/v/s) has one. This contains the packets for the stream
|
||||
(see 2.a). For now, there can be 3 for each demuxer :
|
||||
- audio (d_audio)
|
||||
- video (d_video)
|
||||
- DVD subtitle (d_dvdsub)
|
||||
- audio (d_audio)
|
||||
- video (d_video)
|
||||
- DVD subtitle (d_dvdsub)
|
||||
|
||||
2.c. stream header. There are 2 types (for now): sh_audio_t and sh_video_t
|
||||
This contains every parameter essential for decoding, such as input/output
|
||||
buffers, chosen codec, fps, etc. There are each for every stream in
|
||||
the file. At least one for video, if sound is present then another,
|
||||
but if there are more, then there'll be one structure for each.
|
||||
These are filled according to the header (avi/asf), or demux_mpg.c
|
||||
does it (mpg) if it founds a new stream. If a new stream is found,
|
||||
the ====> Found audio/video stream: <id> messages is displayed.
|
||||
buffers, chosen codec, fps, etc. There are each for every stream in
|
||||
the file. At least one for video, if sound is present then another,
|
||||
but if there are more, then there'll be one structure for each.
|
||||
These are filled according to the header (avi/asf), or demux_mpg.c
|
||||
does it (mpg) if it founds a new stream. If a new stream is found,
|
||||
the ====> Found audio/video stream: <id> messages is displayed.
|
||||
|
||||
The chosen stream header and its demuxer are connected together
|
||||
(ds->sh and sh->ds) to simplify the usage. So it's enough to pass the
|
||||
ds or the sh, depending on the function.
|
||||
The chosen stream header and its demuxer are connected together
|
||||
(ds->sh and sh->ds) to simplify the usage. So it's enough to pass the
|
||||
ds or the sh, depending on the function.
|
||||
|
||||
For example: we have an asf file, 6 streams inside it, 1 audio, 5
|
||||
video. During the reading of the header, 6 sh structs are created, 1
|
||||
audio and 5 video. When it starts reading the packet, it chooses the
|
||||
stream for the first found audio & video packet, and sets the sh
|
||||
pointers of d_audio and d_video according to them. So later it reads
|
||||
only these streams. Of course the user can force choosing a specific
|
||||
stream with
|
||||
-vid and -aid switches.
|
||||
A good example for this is the DVD, where the english stream is not
|
||||
always the first, so every VOB has different language :)
|
||||
That's when we have to use for example the -aid 128 switch.
|
||||
For example: we have an asf file, 6 streams inside it, 1 audio, 5
|
||||
video. During the reading of the header, 6 sh structs are created, 1
|
||||
audio and 5 video. When it starts reading the packet, it chooses the
|
||||
stream for the first found audio & video packet, and sets the sh
|
||||
pointers of d_audio and d_video according to them. So later it reads
|
||||
only these streams. Of course the user can force choosing a specific
|
||||
stream with
|
||||
-vid and -aid switches.
|
||||
A good example for this is the DVD, where the english stream is not
|
||||
always the first, so every VOB has different language :)
|
||||
That's when we have to use for example the -aid 128 switch.
|
||||
|
||||
Now, how this reading works?
|
||||
- demuxer.c/demux_read_data() is called, it gets how many bytes,
|
||||
and where (memory address), would we like to read, and from which
|
||||
- demuxer.c/demux_read_data() is called, it gets how many bytes,
|
||||
and where (memory address), would we like to read, and from which
|
||||
DS. The codecs call this.
|
||||
- this checks if the given DS's buffer contains something, if so, it
|
||||
reads from there as much as needed. If there isn't enough, it calls
|
||||
ds_fill_buffer(), which:
|
||||
- checks if the given DS has buffered packages (DP's), if so, it moves
|
||||
the oldest to the buffer, and reads on. If the list is empty, it
|
||||
calls demux_fill_buffer() :
|
||||
- this calls the parser for the input format, which reads the file
|
||||
onward, and moves the found packages to their buffers.
|
||||
Well it we'd like an audio package, but only a bunch of video
|
||||
packages are available, then sooner or later the:
|
||||
DEMUXER: Too many (%d in %d bytes) audio packets in the buffer
|
||||
error shows up.
|
||||
- this checks if the given DS's buffer contains something, if so, it
|
||||
reads from there as much as needed. If there isn't enough, it calls
|
||||
ds_fill_buffer(), which:
|
||||
- checks if the given DS has buffered packages (DP's), if so, it moves
|
||||
the oldest to the buffer, and reads on. If the list is empty, it
|
||||
calls demux_fill_buffer() :
|
||||
- this calls the parser for the input format, which reads the file
|
||||
onward, and moves the found packages to their buffers.
|
||||
Well it we'd like an audio package, but only a bunch of video
|
||||
packages are available, then sooner or later the:
|
||||
DEMUXER: Too many (%d in %d bytes) audio packets in the buffer
|
||||
error shows up.
|
||||
|
||||
2.d. video.c: this file/function handle the reading and assembling of the
|
||||
video frames. each call to video_read_frame() should read and return a
|
||||
@ -101,7 +101,7 @@ Now, go on:
|
||||
The given stream's actual position is in the 'timer' field of the
|
||||
corresponding stream header (sh_audio / sh_video).
|
||||
|
||||
The structure of the playing loop :
|
||||
The structure of the playing loop :
|
||||
while(not EOF) {
|
||||
fill audio buffer (read & decode audio) + increase a_frame
|
||||
read & decode a single video frame + increase v_frame
|
||||
@ -111,89 +111,89 @@ Now, go on:
|
||||
handle events (keys,lirc etc) -> pause,seek,...
|
||||
}
|
||||
|
||||
When playing (a/v), it increases the variables by the duration of the
|
||||
played a/v.
|
||||
- with audio this is played bytes / sh_audio->o_bps
|
||||
Note: i_bps = number of compressed bytes for one second of audio
|
||||
o_bps = number of uncompressed bytes for one second of audio
|
||||
(this is = bps*samplerate*channels)
|
||||
- with video this is usually == 1.0/fps, but I have to note that
|
||||
fps doesn't really matters at video, for example asf doesn't have that,
|
||||
instead there is "duration" and it can change per frame.
|
||||
MPEG2 has "repeat_count" which delays the frame by 1-2.5 ...
|
||||
Maybe only AVI and MPEG1 has fixed fps.
|
||||
When playing (a/v), it increases the variables by the duration of the
|
||||
played a/v.
|
||||
- with audio this is played bytes / sh_audio->o_bps
|
||||
Note: i_bps = number of compressed bytes for one second of audio
|
||||
o_bps = number of uncompressed bytes for one second of audio
|
||||
(this is = bps*samplerate*channels)
|
||||
- with video this is usually == 1.0/fps, but I have to note that
|
||||
fps doesn't really matters at video, for example asf doesn't have that,
|
||||
instead there is "duration" and it can change per frame.
|
||||
MPEG2 has "repeat_count" which delays the frame by 1-2.5 ...
|
||||
Maybe only AVI and MPEG1 has fixed fps.
|
||||
|
||||
So everything works right until the audio and video are in perfect
|
||||
synchronity, since the audio goes, it gives the timing, and if the
|
||||
time of a frame passed, the next frame is displayed.
|
||||
But what if these two aren't synchronized in the input file?
|
||||
PTS correction kicks in. The input demuxers read the PTS (presentation
|
||||
timestamp) of the packages, and with it we can see if the streams
|
||||
are synchronized. Then MPlayer can correct the a_frame, within
|
||||
a given maximal bounder (see -mc option). The summary of the
|
||||
corrections can be found in c_total .
|
||||
So everything works right until the audio and video are in perfect
|
||||
synchronity, since the audio goes, it gives the timing, and if the
|
||||
time of a frame passed, the next frame is displayed.
|
||||
But what if these two aren't synchronized in the input file?
|
||||
PTS correction kicks in. The input demuxers read the PTS (presentation
|
||||
timestamp) of the packages, and with it we can see if the streams
|
||||
are synchronized. Then MPlayer can correct the a_frame, within
|
||||
a given maximal bounder (see -mc option). The summary of the
|
||||
corrections can be found in c_total .
|
||||
|
||||
Of course this is not everything, several things suck.
|
||||
For example the soundcards delay, which has to be corrected by
|
||||
MPlayer! The audio delay is the sum of all these:
|
||||
- bytes read since the last timestamp:
|
||||
t1 = d_audio->pts_bytes/sh_audio->i_bps
|
||||
- if Win32/ACM then the bytes stored in audio input buffer
|
||||
t2 = a_in_buffer_len/sh_audio->i_bps
|
||||
- uncompressed bytes in audio out buffer
|
||||
t3 = a_buffer_len/sh_audio->o_bps
|
||||
- not yet played bytes stored in the soundcard's (or DMA's) buffer
|
||||
t4 = get_audio_delay()/sh_audio->o_bps
|
||||
Of course this is not everything, several things suck.
|
||||
For example the soundcards delay, which has to be corrected by
|
||||
MPlayer! The audio delay is the sum of all these:
|
||||
- bytes read since the last timestamp:
|
||||
t1 = d_audio->pts_bytes/sh_audio->i_bps
|
||||
- if Win32/ACM then the bytes stored in audio input buffer
|
||||
t2 = a_in_buffer_len/sh_audio->i_bps
|
||||
- uncompressed bytes in audio out buffer
|
||||
t3 = a_buffer_len/sh_audio->o_bps
|
||||
- not yet played bytes stored in the soundcard's (or DMA's) buffer
|
||||
t4 = get_audio_delay()/sh_audio->o_bps
|
||||
|
||||
From this we can calculate what PTS we need for the just played
|
||||
audio, then after we compare this with the video's PTS, we have
|
||||
the difference!
|
||||
From this we can calculate what PTS we need for the just played
|
||||
audio, then after we compare this with the video's PTS, we have
|
||||
the difference!
|
||||
|
||||
Life didn't get simpler with AVI. There's the "official" timing
|
||||
method, the BPS-based, so the header contains how many compressed
|
||||
audio bytes or chunks belong to one second of frames.
|
||||
In the AVI stream header there are 2 important fields, the
|
||||
dwSampleSize, and dwRate/dwScale pairs:
|
||||
- If the dwSampleSize is 0, then it's VBR stream, so its bitrate
|
||||
isn't constant. It means that 1 chunk stores 1 sample, and
|
||||
dwRate/dwScale gives the chunks/sec value.
|
||||
- If the dwSampleSize is >0, then it's constant bitrate, and the
|
||||
time can be measured this way: time = (bytepos/dwSampleSize) /
|
||||
(dwRate/dwScale) (so the sample's number is divided with the
|
||||
samplerate). Now the audio can be handled as a stream, which can
|
||||
be cut to chunks, but can be one chunk also.
|
||||
Life didn't get simpler with AVI. There's the "official" timing
|
||||
method, the BPS-based, so the header contains how many compressed
|
||||
audio bytes or chunks belong to one second of frames.
|
||||
In the AVI stream header there are 2 important fields, the
|
||||
dwSampleSize, and dwRate/dwScale pairs:
|
||||
- If the dwSampleSize is 0, then it's VBR stream, so its bitrate
|
||||
isn't constant. It means that 1 chunk stores 1 sample, and
|
||||
dwRate/dwScale gives the chunks/sec value.
|
||||
- If the dwSampleSize is >0, then it's constant bitrate, and the
|
||||
time can be measured this way: time = (bytepos/dwSampleSize) /
|
||||
(dwRate/dwScale) (so the sample's number is divided with the
|
||||
samplerate). Now the audio can be handled as a stream, which can
|
||||
be cut to chunks, but can be one chunk also.
|
||||
|
||||
The other method can be used only for interleaved files: from
|
||||
the order of the chunks, a timestamp (PTS) value can be calculated.
|
||||
The PTS of the video chunks are simple: chunk number * fps
|
||||
The audio is the same as the previous video chunk was.
|
||||
We have to pay attention to the so called "audio preload", that is,
|
||||
there is a delay between the audio and video streams. This is
|
||||
usually 0.5-1.0 sec, but can be totally different.
|
||||
The exact value was measured until now, but now the demux_avi.c
|
||||
handles it: at the audio chunk after the first video, it calculates
|
||||
the A/V difference, and take this as a measure for audio preload.
|
||||
The other method can be used only for interleaved files: from
|
||||
the order of the chunks, a timestamp (PTS) value can be calculated.
|
||||
The PTS of the video chunks are simple: chunk number * fps
|
||||
The audio is the same as the previous video chunk was.
|
||||
We have to pay attention to the so called "audio preload", that is,
|
||||
there is a delay between the audio and video streams. This is
|
||||
usually 0.5-1.0 sec, but can be totally different.
|
||||
The exact value was measured until now, but now the demux_avi.c
|
||||
handles it: at the audio chunk after the first video, it calculates
|
||||
the A/V difference, and take this as a measure for audio preload.
|
||||
|
||||
3.a. audio playback:
|
||||
Some words on audio playback:
|
||||
Not the playing is hard, but:
|
||||
1. knowing when to write into the buffer, without blocking
|
||||
2. knowing how much was played of what we wrote into
|
||||
The first is needed for audio decoding, and to keep the buffer
|
||||
full (so the audio will never skip). And the second is needed for
|
||||
correct timing, because some soundcards delay even 3-7 seconds,
|
||||
which can't be forgotten about.
|
||||
To solve this, the OSS gives several possibilities:
|
||||
- ioctl(SNDCTL_DSP_GETODELAY): tells how many unplayed bytes are in
|
||||
the soundcard's buffer -> perfect for timing, but not all drivers
|
||||
support it :(
|
||||
- ioctl(SNDCTL_DSP_GETOSPACE): tells how much can we write into the
|
||||
soundcard's buffer, without blocking. If the driver doesn't
|
||||
support GETODELAY, we can use this to know how much the delay is.
|
||||
- select(): should tell if we can write into the buffer without
|
||||
blocking. Unfortunately it doesn't say how much we could :((
|
||||
Also, doesn't/badly works with some drivers.
|
||||
Only used if none of the above works.
|
||||
Some words on audio playback:
|
||||
Not the playing is hard, but:
|
||||
1. knowing when to write into the buffer, without blocking
|
||||
2. knowing how much was played of what we wrote into
|
||||
The first is needed for audio decoding, and to keep the buffer
|
||||
full (so the audio will never skip). And the second is needed for
|
||||
correct timing, because some soundcards delay even 3-7 seconds,
|
||||
which can't be forgotten about.
|
||||
To solve this, the OSS gives several possibilities:
|
||||
- ioctl(SNDCTL_DSP_GETODELAY): tells how many unplayed bytes are in
|
||||
the soundcard's buffer -> perfect for timing, but not all drivers
|
||||
support it :(
|
||||
- ioctl(SNDCTL_DSP_GETOSPACE): tells how much can we write into the
|
||||
soundcard's buffer, without blocking. If the driver doesn't
|
||||
support GETODELAY, we can use this to know how much the delay is.
|
||||
- select(): should tell if we can write into the buffer without
|
||||
blocking. Unfortunately it doesn't say how much we could :((
|
||||
Also, doesn't/badly works with some drivers.
|
||||
Only used if none of the above works.
|
||||
|
||||
4. Codecs. Consists of libmpcodecs/* and separate files or libs,
|
||||
for example liba52, libmpeg2, xa/*, alaw.c, opendivx/*, loader, mp3lib.
|
||||
|
@ -131,9 +131,9 @@ configure mplayer to use adsp instead of dsp. The samplerate constrain
|
||||
is no big deal here since movies usually are in 48Khz anyway. The
|
||||
configuration in '/etc/modules.conf' is no big deal also:
|
||||
|
||||
alias snd-card-0 snd-card-cmipci # insert your card here
|
||||
alias snd-card-1 snd-pcm-oss # load OSS emulation
|
||||
options snd-pcm-oss snd_dsp_map=0 snd_adsp_map=2 # do the mapping
|
||||
alias snd-card-0 snd-card-cmipci # insert your card here
|
||||
alias snd-card-1 snd-pcm-oss # load OSS emulation
|
||||
options snd-pcm-oss snd_dsp_map=0 snd_adsp_map=2 # do the mapping
|
||||
|
||||
This works flawlessly in combination with alsa's native
|
||||
SysVrc-init-script 'alsasound'. Be sure to disable any distribution
|
||||
|
@ -17,7 +17,7 @@ approaches closer to the sometimes convoluted way DirectX works.
|
||||
Each vo driver _has_ to implement these:
|
||||
|
||||
preinit():
|
||||
init the video system (to support querying for supported formats)
|
||||
init the video system (to support querying for supported formats)
|
||||
|
||||
uninit():
|
||||
Uninit the whole system, this is on the same "level" as preinit.
|
||||
@ -26,95 +26,95 @@ Each vo driver _has_ to implement these:
|
||||
Current controls (VOCTRL_QUERY_FORMAT must be implemented,
|
||||
VOCTRL_DRAW_IMAGE, VOCTRL_FULLSCREEN, VOCTRL_UPDATE_SCREENINFO
|
||||
should be implemented):
|
||||
VOCTRL_QUERY_FORMAT - queries if a given pixelformat is supported.
|
||||
It also returns various flags decsirbing the capabilities
|
||||
of the driver with teh given mode. for the flags, see
|
||||
file vfcaps.h !
|
||||
the most important flags, every driver must properly report
|
||||
these:
|
||||
0x1 - supported (with or without conversion)
|
||||
0x2 - supported without conversion (define 0x1 too!)
|
||||
0x100 - driver/hardware handles timing (blocking)
|
||||
also SET sw/hw scaling and osd support flags, and flip,
|
||||
and accept_stride if you implement VOCTRL_DRAW_IMAGE (see bellow)
|
||||
NOTE: VOCTRL_QUERY_FORMAT may be called _before_ first config()
|
||||
but is always called between preinit() and uninit()
|
||||
VOCTRL_GET_IMAGE
|
||||
libmpcodecs Direct Rendering interface
|
||||
You need to update mpi (mp_image.h) structure, for example,
|
||||
look at vo_x11, vo_sdl, vo_xv or mga_common.
|
||||
VOCTRL_DRAW_IMAGE
|
||||
replacement for the current draw_slice/draw_frame way of
|
||||
passing video frames. by implementing SET_IMAGE, you'll get
|
||||
image in mp_image struct instead of by calling draw_*.
|
||||
unless you return VO_TRUE for VOCTRL_DRAW_IMAGE call, the
|
||||
old-style draw_* functils will be called!
|
||||
Note: draw_slice is still mandatory, for per-slice rendering!
|
||||
VOCTRL_RESET - reset the video device
|
||||
This is sent on seeking and similar and is useful if you are
|
||||
using a device which prebuffers frames that need to flush them
|
||||
before refilling audio/video buffers.
|
||||
VOCTRL_PAUSE
|
||||
VOCTRL_RESUME
|
||||
VOCTRL_GUISUPPORT
|
||||
return true only if driver supports co-operation with
|
||||
MPlayer's GUI (not yet used by GUI)
|
||||
VOCTRL_SET_EQUALIZER
|
||||
set the video equalizer to the given values
|
||||
two arguments are provided: item and value
|
||||
item is a string, the possible values are (currently):
|
||||
brightness, contrast, saturation, hue
|
||||
VOCTRL_GET_EQUALIZER
|
||||
get the current video equalizer values
|
||||
two arguments are provided: item and value
|
||||
item is a string, the possible values are (currently):
|
||||
brightness, contrast, saturation, hue
|
||||
VOCTRL_ONTOP
|
||||
Makes the player window stay-on-top. Only supported (currently)
|
||||
by drivers which use X11, except SDL, as well as directx and
|
||||
gl2 under Windows.
|
||||
VOCTRL_BORDER
|
||||
Makes the player window borderless.
|
||||
VOCTRL_FULLSCREEN
|
||||
Switch from and to fullscreen mode
|
||||
VOCTRL_GET_PANSCAN
|
||||
VOCTRL_SET_PANSCAN
|
||||
VOCTRL_QUERY_FORMAT - queries if a given pixelformat is supported.
|
||||
It also returns various flags decsirbing the capabilities
|
||||
of the driver with teh given mode. for the flags, see
|
||||
file vfcaps.h !
|
||||
the most important flags, every driver must properly report
|
||||
these:
|
||||
0x1 - supported (with or without conversion)
|
||||
0x2 - supported without conversion (define 0x1 too!)
|
||||
0x100 - driver/hardware handles timing (blocking)
|
||||
also SET sw/hw scaling and osd support flags, and flip,
|
||||
and accept_stride if you implement VOCTRL_DRAW_IMAGE (see bellow)
|
||||
NOTE: VOCTRL_QUERY_FORMAT may be called _before_ first config()
|
||||
but is always called between preinit() and uninit()
|
||||
VOCTRL_GET_IMAGE
|
||||
libmpcodecs Direct Rendering interface
|
||||
You need to update mpi (mp_image.h) structure, for example,
|
||||
look at vo_x11, vo_sdl, vo_xv or mga_common.
|
||||
VOCTRL_DRAW_IMAGE
|
||||
replacement for the current draw_slice/draw_frame way of
|
||||
passing video frames. by implementing SET_IMAGE, you'll get
|
||||
image in mp_image struct instead of by calling draw_*.
|
||||
unless you return VO_TRUE for VOCTRL_DRAW_IMAGE call, the
|
||||
old-style draw_* functils will be called!
|
||||
Note: draw_slice is still mandatory, for per-slice rendering!
|
||||
VOCTRL_RESET - reset the video device
|
||||
This is sent on seeking and similar and is useful if you are
|
||||
using a device which prebuffers frames that need to flush them
|
||||
before refilling audio/video buffers.
|
||||
VOCTRL_PAUSE
|
||||
VOCTRL_RESUME
|
||||
VOCTRL_GUISUPPORT
|
||||
return true only if driver supports co-operation with
|
||||
MPlayer's GUI (not yet used by GUI)
|
||||
VOCTRL_SET_EQUALIZER
|
||||
set the video equalizer to the given values
|
||||
two arguments are provided: item and value
|
||||
item is a string, the possible values are (currently):
|
||||
brightness, contrast, saturation, hue
|
||||
VOCTRL_GET_EQUALIZER
|
||||
get the current video equalizer values
|
||||
two arguments are provided: item and value
|
||||
item is a string, the possible values are (currently):
|
||||
brightness, contrast, saturation, hue
|
||||
VOCTRL_ONTOP
|
||||
Makes the player window stay-on-top. Only supported (currently)
|
||||
by drivers which use X11, except SDL, as well as directx and
|
||||
gl2 under Windows.
|
||||
VOCTRL_BORDER
|
||||
Makes the player window borderless.
|
||||
VOCTRL_FULLSCREEN
|
||||
Switch from and to fullscreen mode
|
||||
VOCTRL_GET_PANSCAN
|
||||
VOCTRL_SET_PANSCAN
|
||||
Needed to implement pan-scan support ('w' and 'e' keys during
|
||||
playback in fullscreen mode)
|
||||
VOCTRL_START_SLICE
|
||||
Called before the first draw_slice of each frame, useful if
|
||||
you need to do some set-up work.
|
||||
VOCTRL_DRAW_EOSD
|
||||
Required for EOSD (ASS subtitle) support. Provides all
|
||||
information necessary to draw the EOSD for the current video
|
||||
frame.
|
||||
VOCTRL_GET_EOSD_RES
|
||||
Required for EOSD (ASS subtitle) support. Informs the ASS
|
||||
renderer about the properties of the drawing area (size,
|
||||
borders).
|
||||
VOCTRL_SET_DEINTERLACE
|
||||
VOCTRL_GET_DEINTERLACE
|
||||
Get or set deinterlacing status for VOs that support some kind
|
||||
of deinterlacing.
|
||||
VOCTRL_UPDATE_SCREENINFO
|
||||
Should set the xinerama_x, xinerama_y, vo_screenwidth and
|
||||
vo_screenheight appropriately for the currently used
|
||||
monitor and -xineramascreen option.
|
||||
Usually should simply call the w32_update_xinerama_info or
|
||||
update_xinerama_info function.
|
||||
By supporting this, the VO also requests the newer API
|
||||
that sets vo_dx, vo_dy etc. appropriately before config()
|
||||
is called.
|
||||
playback in fullscreen mode)
|
||||
VOCTRL_START_SLICE
|
||||
Called before the first draw_slice of each frame, useful if
|
||||
you need to do some set-up work.
|
||||
VOCTRL_DRAW_EOSD
|
||||
Required for EOSD (ASS subtitle) support. Provides all
|
||||
information necessary to draw the EOSD for the current video
|
||||
frame.
|
||||
VOCTRL_GET_EOSD_RES
|
||||
Required for EOSD (ASS subtitle) support. Informs the ASS
|
||||
renderer about the properties of the drawing area (size,
|
||||
borders).
|
||||
VOCTRL_SET_DEINTERLACE
|
||||
VOCTRL_GET_DEINTERLACE
|
||||
Get or set deinterlacing status for VOs that support some kind
|
||||
of deinterlacing.
|
||||
VOCTRL_UPDATE_SCREENINFO
|
||||
Should set the xinerama_x, xinerama_y, vo_screenwidth and
|
||||
vo_screenheight appropriately for the currently used
|
||||
monitor and -xineramascreen option.
|
||||
Usually should simply call the w32_update_xinerama_info or
|
||||
update_xinerama_info function.
|
||||
By supporting this, the VO also requests the newer API
|
||||
that sets vo_dx, vo_dy etc. appropriately before config()
|
||||
is called.
|
||||
|
||||
config():
|
||||
Set up the video system. You get the dimensions and flags.
|
||||
width, height: size of the source image
|
||||
d_width, d_height: wanted scaled/display size (it's a hint)
|
||||
Flags:
|
||||
0x01 - force fullscreen (-fs)
|
||||
0x02 - allow mode switching (-vm)
|
||||
0x04 - allow software scaling (-zoom)
|
||||
0x08 - flipping (-flip)
|
||||
0x01 - force fullscreen (-fs)
|
||||
0x02 - allow mode switching (-vm)
|
||||
0x04 - allow software scaling (-zoom)
|
||||
0x08 - flipping (-flip)
|
||||
They're defined as VOFLAG_* (see libvo/video_out.h)
|
||||
|
||||
IMPORTANT NOTE: config() may be called 0 (zero), 1 or more (2,3...)
|
||||
@ -132,42 +132,42 @@ Each vo driver _has_ to implement these:
|
||||
support multi-monitor setups (if based on x11_common, w32_common).
|
||||
|
||||
draw_slice(): this displays YV12 pictures (3 planes, one full sized that
|
||||
contains brightness (Y), and 2 quarter-sized which the colour-info
|
||||
(U,V). MPEG codecs (libmpeg2, opendivx) use this. This doesn't have
|
||||
to display the whole frame, only update small parts of it.
|
||||
If this is not supported, it must be signaled in QUERY_FORMAT with
|
||||
VOCAP_NOSLICES.
|
||||
contains brightness (Y), and 2 quarter-sized which the colour-info
|
||||
(U,V). MPEG codecs (libmpeg2, opendivx) use this. This doesn't have
|
||||
to display the whole frame, only update small parts of it.
|
||||
If this is not supported, it must be signaled in QUERY_FORMAT with
|
||||
VOCAP_NOSLICES.
|
||||
|
||||
draw_frame(): this is the older interface, this displays only complete
|
||||
frames, and can do only packed format (YUY2, RGB/BGR).
|
||||
Win32 codecs use this (DivX, Indeo, etc).
|
||||
If you implement VOCTRL_DRAW_IMAGE, you do not need to implement draw_frame.
|
||||
frames, and can do only packed format (YUY2, RGB/BGR).
|
||||
Win32 codecs use this (DivX, Indeo, etc).
|
||||
If you implement VOCTRL_DRAW_IMAGE, you do not need to implement draw_frame.
|
||||
|
||||
draw_osd(): this displays subtitles and OSD.
|
||||
It's a bit tricky to use it, since it's a callback-style stuff.
|
||||
It should call vo_draw_text() with screen dimension and your
|
||||
draw_alpha implementation for the pixelformat (function pointer).
|
||||
The vo_draw_text() checks the characters to draw, and calls
|
||||
draw_alpha() for each. As a help, osd.c contains draw_alpha for
|
||||
each pixelformats, use this if possible!
|
||||
Note that if you do not draw directly onto the video you should
|
||||
use vo_draw_text_ext() which allows you to specify the border
|
||||
values etc. needed to draw DVD menu highlights at the correct place.
|
||||
If you do not want to implement this, you can still use -vf
|
||||
expand=osd=1 to draw the OSD, or even implement code to insert
|
||||
this filter automatically.
|
||||
Make sure you set VFCAP_OSD depending on whether you implemented it
|
||||
or not.
|
||||
It's a bit tricky to use it, since it's a callback-style stuff.
|
||||
It should call vo_draw_text() with screen dimension and your
|
||||
draw_alpha implementation for the pixelformat (function pointer).
|
||||
The vo_draw_text() checks the characters to draw, and calls
|
||||
draw_alpha() for each. As a help, osd.c contains draw_alpha for
|
||||
each pixelformats, use this if possible!
|
||||
Note that if you do not draw directly onto the video you should
|
||||
use vo_draw_text_ext() which allows you to specify the border
|
||||
values etc. needed to draw DVD menu highlights at the correct place.
|
||||
If you do not want to implement this, you can still use -vf
|
||||
expand=osd=1 to draw the OSD, or even implement code to insert
|
||||
this filter automatically.
|
||||
Make sure you set VFCAP_OSD depending on whether you implemented it
|
||||
or not.
|
||||
|
||||
NOTE: This one will be obsolete soon! But it's still useful when
|
||||
you want to do tricks, like rendering osd _after_ hardware scaling
|
||||
(tdfxfb) or render subtitles under of the image (vo_mpegpes, sdl)
|
||||
NOTE: This one will be obsolete soon! But it's still useful when
|
||||
you want to do tricks, like rendering osd _after_ hardware scaling
|
||||
(tdfxfb) or render subtitles under of the image (vo_mpegpes, sdl)
|
||||
|
||||
NOTE2: above NOTE is probably wrong, there are currently no plans to
|
||||
obsolete draw_osd, though there is the more advanced EOSD support for
|
||||
ASS subtitles.
|
||||
NOTE2: above NOTE is probably wrong, there are currently no plans to
|
||||
obsolete draw_osd, though there is the more advanced EOSD support for
|
||||
ASS subtitles.
|
||||
|
||||
flip_page(): this is called after each frame, this displays the buffer for
|
||||
real. This is 'swapbuffers' when doublebuffering.
|
||||
Try to do as little work here as possible, since that affect jitter/
|
||||
A-V sync.
|
||||
real. This is 'swapbuffers' when doublebuffering.
|
||||
Try to do as little work here as possible, since that affect jitter/
|
||||
A-V sync.
|
||||
|
@ -1,6 +1,6 @@
|
||||
------------------------------
|
||||
------------------------------
|
||||
How to build an MPlayer mirror
|
||||
------------------------------
|
||||
------------------------------
|
||||
|
||||
This document might be inacurate or even incomplete, please
|
||||
send feedback + corrections to the mplayer-mirror mailing list.
|
||||
|
@ -6,17 +6,17 @@ Designed by Alex & Arpi
|
||||
The file starts with a variable size header:
|
||||
--------------------------------------------
|
||||
|
||||
32-bit Stream format fourcc (MPVS or MPAS)
|
||||
MPVS = MPlayer Video Stream
|
||||
MPAS = MPlayer Audio Stream
|
||||
8-bit Demuxer type (AVI,MOV,ASF,REAL,...)
|
||||
8-bit Flags (marks dumped headers)
|
||||
Values: 0x1: WAVEFORMATEX
|
||||
0x2: Audio extra codec data
|
||||
0x4: BITMAPINFOHEADER
|
||||
0x8: QT's ImageDesc
|
||||
0x16: indicates 32-bit chunk size before every data chunk
|
||||
16-bit Length of headers
|
||||
32-bit Stream format fourcc (MPVS or MPAS)
|
||||
MPVS = MPlayer Video Stream
|
||||
MPAS = MPlayer Audio Stream
|
||||
8-bit Demuxer type (AVI,MOV,ASF,REAL,...)
|
||||
8-bit Flags (marks dumped headers)
|
||||
Values: 0x1: WAVEFORMATEX
|
||||
0x2: Audio extra codec data
|
||||
0x4: BITMAPINFOHEADER
|
||||
0x8: QT's ImageDesc
|
||||
0x16: indicates 32-bit chunk size before every data chunk
|
||||
16-bit Length of headers
|
||||
|
||||
There's strict rule in the follow-up of the codec-headers.
|
||||
Depending on flags,
|
||||
@ -24,5 +24,5 @@ Depending on flags,
|
||||
Data chunks:
|
||||
------------
|
||||
|
||||
32-bit Optional 32-bit chunk size
|
||||
... Data
|
||||
32-bit Optional 32-bit chunk size
|
||||
... Data
|
||||
|
@ -1,12 +1,12 @@
|
||||
TITLE=Weird Al Yankovic - The Saga Begins (clip)
|
||||
# just to be informative (maybe future
|
||||
# use?)
|
||||
FILE=14233792,7972c637f619e01854ecb453b7339e3f # size,md5
|
||||
# just to be informative (maybe future
|
||||
# use?)
|
||||
FILE=14233792,7972c637f619e01854ecb453b7339e3f # size,md5
|
||||
AUTHOR=Gabucino
|
||||
TYPE=VIDEO # maybe AUDIO in future (for displaying
|
||||
# mp3 lyrics while playing or whatever)
|
||||
FORMAT=TIME # this file contains measures based on
|
||||
# TIME, not frames.
|
||||
TYPE=VIDEO # maybe AUDIO in future (for displaying
|
||||
# mp3 lyrics while playing or whatever)
|
||||
FORMAT=TIME # this file contains measures based on
|
||||
# TIME, not frames.
|
||||
|
||||
# if FORMAT is a number, then it's frame based, i.e.:
|
||||
# FORMAT=25
|
||||
|
@ -51,36 +51,36 @@ typedef struct mp_osd_obj_s {
|
||||
unsigned char type;
|
||||
unsigned char alignment; // 2 bits: x;y percentages, 2 bits: x;y relative to parent; 2 bits: alignment left/right/center
|
||||
unsigned short flags;
|
||||
int x,y; // coords
|
||||
int x,y; // coords
|
||||
unsigned char color[4]; // YUVA
|
||||
mp_osd_bbox_t bbox; // bounding box
|
||||
unsigned int start,duration; // PTS
|
||||
union {
|
||||
struct {
|
||||
int x1,y1,x2,y2;
|
||||
} line;
|
||||
struct {
|
||||
int x,y,w,h;
|
||||
} rect;
|
||||
struct {
|
||||
char* text;
|
||||
mp_font_t* font;
|
||||
} text;
|
||||
struct {
|
||||
int symbol; // unicode
|
||||
mp_font_t* font;
|
||||
} symbol;
|
||||
struct {
|
||||
float value;
|
||||
mp_font_t* font;
|
||||
} pbar;
|
||||
struct {
|
||||
int w,h;
|
||||
unsigned char* image;
|
||||
unsigned int* palette;
|
||||
} spu; // FIXME!
|
||||
struct {
|
||||
struct mp_osd_obj_s* children;
|
||||
} group;
|
||||
struct {
|
||||
int x1,y1,x2,y2;
|
||||
} line;
|
||||
struct {
|
||||
int x,y,w,h;
|
||||
} rect;
|
||||
struct {
|
||||
char* text;
|
||||
mp_font_t* font;
|
||||
} text;
|
||||
struct {
|
||||
int symbol; // unicode
|
||||
mp_font_t* font;
|
||||
} symbol;
|
||||
struct {
|
||||
float value;
|
||||
mp_font_t* font;
|
||||
} pbar;
|
||||
struct {
|
||||
int w,h;
|
||||
unsigned char* image;
|
||||
unsigned int* palette;
|
||||
} spu; // FIXME!
|
||||
struct {
|
||||
struct mp_osd_obj_s* children;
|
||||
} group;
|
||||
} params;
|
||||
} mp_osd_obj_t;
|
||||
|
@ -38,17 +38,17 @@ ulong result=RAOpenCodec2(ra_main_t *raMain);
|
||||
|
||||
ulong result=RAInitDecoder(ra_main_t *raMain, ra_init_struct *raInit);
|
||||
struct ra_init_struct {
|
||||
ulong sample_rate;
|
||||
ushort bits_per_sample; // unused by RAInitDecoder
|
||||
ushort number_of_channels;
|
||||
ushort unknown1; // 0
|
||||
ushort unknown2; // also unused (100)
|
||||
ulong leaf_size; // leaf size (used for interleaving, but
|
||||
// exists in audio stream description header (ASDH))
|
||||
ulong block_align; // packet size
|
||||
ulong bits_per_sample; // unused (always 16)
|
||||
char *ext_data; // 16 bytes located at the end of the
|
||||
// ASDH
|
||||
ulong sample_rate;
|
||||
ushort bits_per_sample; // unused by RAInitDecoder
|
||||
ushort number_of_channels;
|
||||
ushort unknown1; // 0
|
||||
ushort unknown2; // also unused (100)
|
||||
ulong leaf_size; // leaf size (used for interleaving, but
|
||||
// exists in audio stream description header (ASDH))
|
||||
ulong block_align; // packet size
|
||||
ulong bits_per_sample; // unused (always 16)
|
||||
char *ext_data; // 16 bytes located at the end of the
|
||||
// ASDH
|
||||
};
|
||||
|
||||
There are some information missing that you usually need for playback,
|
||||
@ -61,7 +61,7 @@ following command:
|
||||
|
||||
|
||||
void *GetRAFlavorProperty(ra_main_t *raMain, ulong flavor, ulong property,
|
||||
short *property_length_in_bytes);
|
||||
short *property_length_in_bytes);
|
||||
returns property data for a specific data
|
||||
|
||||
This is not important, because it's just a read only function.
|
||||
@ -69,8 +69,8 @@ These flavor properties don't seem to exist in
|
||||
|
||||
|
||||
ulong RADecode(ra_main_t *raMain, char *input_buffer,
|
||||
ulong input_buffer_size, char *output_buffer,
|
||||
ulong *decoded_bytes, ulong p6=-1);
|
||||
ulong input_buffer_size, char *output_buffer,
|
||||
ulong *decoded_bytes, ulong p6=-1);
|
||||
|
||||
RAFreeDecoder(ra_main_t *);
|
||||
|
||||
|
@ -38,8 +38,8 @@ cccc: mask 3FFF: _total_ length of the packet
|
||||
dddd: when it's 0, {} exists (only in this case)
|
||||
mask 3FFF: offset of fragment inside the whole packet. it's counted
|
||||
from the beginning of the packet, except when hdr&0x80,
|
||||
hten it's relative to the _end_ of the packet, so it's
|
||||
equal to fragment size!
|
||||
hten it's relative to the _end_ of the packet, so it's
|
||||
equal to fragment size!
|
||||
mask C000: like cccc, except the first case (always 4000)
|
||||
when it's all 0000, it indicates value >=0x4000, you should read {eeee}
|
||||
and use all 16 bits of it. dunno what happens when length>=65536...
|
||||
|
@ -40,12 +40,12 @@ anything and is only called in the beginning.
|
||||
result=RV20toYUV420Init(struct init_data *, struct rvyuvMain **);
|
||||
|
||||
struct init_data {
|
||||
short constant=0xb;
|
||||
short width, height;
|
||||
short 0, 0, 0;
|
||||
ulong format1;
|
||||
long 1;
|
||||
ulong format2;
|
||||
short constant=0xb;
|
||||
short width, height;
|
||||
short 0, 0, 0;
|
||||
ulong format1;
|
||||
long 1;
|
||||
ulong format2;
|
||||
};
|
||||
|
||||
format1 and format2 are stored in the .rm file's stream headers.
|
||||
@ -53,22 +53,22 @@ format1 and format2 are stored in the .rm file's stream headers.
|
||||
it's the only difference between low and high bitrate files.
|
||||
|
||||
result=RV20toYUV420Transform(char *input_stream, char *output_data,
|
||||
struct transin *, struct transout *, struct rvyuvMain *);
|
||||
struct transin *, struct transout *, struct rvyuvMain *);
|
||||
|
||||
struct transin {
|
||||
ulong length_of_input_data;
|
||||
ulong null;
|
||||
ulong num_sub_packets_in_block_minus_one;
|
||||
ulong *sub_packets_list;
|
||||
ulong another_null;
|
||||
ulong timestamp_from_stream;
|
||||
ulong length_of_input_data;
|
||||
ulong null;
|
||||
ulong num_sub_packets_in_block_minus_one;
|
||||
ulong *sub_packets_list;
|
||||
ulong another_null;
|
||||
ulong timestamp_from_stream;
|
||||
};
|
||||
|
||||
struct transout {
|
||||
ulong flag1; // ((var_94&2!=0)&&(result==0))?1:0
|
||||
ulong flag2; // 4 LBS from var_94
|
||||
ulong zero;
|
||||
ulong width, height;
|
||||
ulong flag1; // ((var_94&2!=0)&&(result==0))?1:0
|
||||
ulong flag2; // 4 LBS from var_94
|
||||
ulong zero;
|
||||
ulong width, height;
|
||||
};
|
||||
|
||||
The length of output_stream is 1.5*width*height (I420 planar yuv 4:2:0).
|
||||
@ -131,37 +131,37 @@ DWORDS (the entries are not always constant)
|
||||
there are two w/h pairs at 05C. the first is the size of the
|
||||
unscaled video stream, the second possibly image size
|
||||
|
||||
000 1 6 3 1
|
||||
010 1 0 AEBFC0D1(magic) 0
|
||||
020 0 ptr->? 0 0
|
||||
030 0 0 ->rvyuvMain+0x050 ?
|
||||
040 width height 0x17 0x479
|
||||
050 ->rvyuvMain 0x17 0x17 width
|
||||
060 height width height 0
|
||||
070 0 1 0 0
|
||||
080 0 0xb w h
|
||||
090 w h 0 0
|
||||
0A0 1 0xb0(w?) 0x58 0x58
|
||||
0B0 ptr->? 0 0 1
|
||||
0C0 0x32 1 0 0
|
||||
0D0 0 0 0 0
|
||||
0E0 0 0 0 0
|
||||
0F0 0 0 0 0
|
||||
100 0 0 0 0
|
||||
110 p p p p p are pointers to several function, for
|
||||
120 p p p p example to the actual public functions
|
||||
130 p p p p (except init, the others are some kind of
|
||||
140 p p p p interfaces)
|
||||
150 p 0 0 0
|
||||
160 0 0x2000 1 0
|
||||
170 0 0 0 0
|
||||
180 1 1 0 0
|
||||
190 0 0 0 0
|
||||
1A0 0 0 0 0
|
||||
1B0 1 0 ptr->? ptr->?
|
||||
1C0 1 0 0 0
|
||||
1D0 0 0 0 0
|
||||
1E0 0 0 0 0
|
||||
000 1 6 3 1
|
||||
010 1 0 AEBFC0D1(magic) 0
|
||||
020 0 ptr->? 0 0
|
||||
030 0 0 ->rvyuvMain+0x050 ?
|
||||
040 width height 0x17 0x479
|
||||
050 ->rvyuvMain 0x17 0x17 width
|
||||
060 height width height 0
|
||||
070 0 1 0 0
|
||||
080 0 0xb w h
|
||||
090 w h 0 0
|
||||
0A0 1 0xb0(w?) 0x58 0x58
|
||||
0B0 ptr->? 0 0 1
|
||||
0C0 0x32 1 0 0
|
||||
0D0 0 0 0 0
|
||||
0E0 0 0 0 0
|
||||
0F0 0 0 0 0
|
||||
100 0 0 0 0
|
||||
110 p p p p p are pointers to several function, for
|
||||
120 p p p p example to the actual public functions
|
||||
130 p p p p (except init, the others are some kind of
|
||||
140 p p p p interfaces)
|
||||
150 p 0 0 0
|
||||
160 0 0x2000 1 0
|
||||
170 0 0 0 0
|
||||
180 1 1 0 0
|
||||
190 0 0 0 0
|
||||
1A0 0 0 0 0
|
||||
1B0 1 0 ptr->? ptr->?
|
||||
1C0 1 0 0 0
|
||||
1D0 0 0 0 0
|
||||
1E0 0 0 0 0
|
||||
...
|
||||
|
||||
|
||||
|
@ -45,6 +45,17 @@ Various tips and tricks (please help expand it!):
|
||||
|
||||
Available commands ('mplayer -input cmdlist' will print a list):
|
||||
|
||||
af_add <filter_arguments_list> (comma separated list of audio filters with parameters)
|
||||
(experimental) Load the given list of audio filters.
|
||||
|
||||
af_clr
|
||||
(experimental) Unload all loaded audio filters.
|
||||
|
||||
af_del <filter_name_list> (comma separated list of audio filter's names)
|
||||
(experimental) Unload the first occurrence of the filters, if loaded.
|
||||
|
||||
af_switch <filter_arguments_list> (comma separated list of audio filters with parameters)
|
||||
(experimental) Remove all the audio filters and replace them with the given list.
|
||||
|
||||
alt_src_step <value> (ASX playlist only)
|
||||
When more than one source is available it selects the next/previous one.
|
||||
@ -201,6 +212,10 @@ mute [value]
|
||||
osd [level]
|
||||
Toggle OSD mode or set it to [level] when [level] >= 0.
|
||||
|
||||
osd_show_progression
|
||||
Show the progression bar, the elapsed time and the total duration of the
|
||||
movie on the OSD.
|
||||
|
||||
osd_show_property_text <string> [duration] [level]
|
||||
Show an expanded property string on the OSD, see -playing-msg for a
|
||||
description of the available expansions. If [duration] is >= 0 the text
|
||||
|
@ -7,21 +7,21 @@ summarize it here.
|
||||
There are 2 approaches:
|
||||
|
||||
1. (preferred) You can generate Unicode subtitles with:
|
||||
subfont --unicode <signle-byte encoding known by iconv> ...
|
||||
subfont --unicode <signle-byte encoding known by iconv> ...
|
||||
or
|
||||
subfont --unicode <path to custom encoding file> ...
|
||||
(this custom encoding file could list all iso-8859-* characters to create
|
||||
subfont --unicode <path to custom encoding file> ...
|
||||
(this custom encoding file could list all iso-8859-* characters to create
|
||||
single font file for common encodings)
|
||||
|
||||
and then run mplayer this way (-subcp and -utf8 expect Unicode font!):
|
||||
mplayer -subcp <any encoding known by iconv> ...
|
||||
mplayer -subcp <any encoding known by iconv> ...
|
||||
or
|
||||
mplayer -utf8 ...
|
||||
mplayer -utf8 ...
|
||||
|
||||
2. (current) Generate subtitles for some specific encoding with:
|
||||
subfont <signle-byte encoding known by iconv> ...
|
||||
subfont <signle-byte encoding known by iconv> ...
|
||||
or
|
||||
subfont <path to custom signle-byte or EUC encoding file> ...
|
||||
subfont <path to custom signle-byte or EUC encoding file> ...
|
||||
|
||||
and then run mplayer without any encoding options for signle-byte
|
||||
encodings, or with -unicode option for EUC (and the like) encodings
|
||||
|
@ -1,18 +1,18 @@
|
||||
software scaler filter docs
|
||||
|
||||
-ssf cgb=<float> chrominance gaussian blur
|
||||
useful for videos with some chroma (color) noise (TV captures, VHS, ...)
|
||||
useful for videos with some chroma (color) noise (TV captures, VHS, ...)
|
||||
|
||||
-ssf lgb=<float> -> luminance gaussian blur
|
||||
hmm, mostly special effect, could be used as lame noise reducer though
|
||||
hmm, mostly special effect, could be used as lame noise reducer though
|
||||
|
||||
-ssf chs=<int> -> shift chrominance horizontally
|
||||
-ssf cvs=<int> -> shift chrominance vertically
|
||||
useful if the luma & chroma are not aligned exactly
|
||||
useful if the luma & chroma are not aligned exactly
|
||||
|
||||
-ssf cs=<float> -> chrominance sharpen
|
||||
-ssf ls=<float> -> luminance sharpen
|
||||
simple sharpening filter
|
||||
simple sharpening filter
|
||||
|
||||
note: these will only work if the swscaler is used at all (use -vf scale)
|
||||
|
||||
|
@ -2,29 +2,29 @@
|
||||
artifact types:
|
||||
---------------------------------------------------------------------
|
||||
ringing
|
||||
wave or noise like patterns around sharp edges
|
||||
bad: sinc, lanczos (with high filter length)
|
||||
acceptable: lanczos (with low filter length), cubic, spline
|
||||
ok: area, (fast)blinear, gauss, point
|
||||
wave or noise like patterns around sharp edges
|
||||
bad: sinc, lanczos (with high filter length)
|
||||
acceptable: lanczos (with low filter length), cubic, spline
|
||||
ok: area, (fast)blinear, gauss, point
|
||||
|
||||
blur
|
||||
loss of detail / high frequency
|
||||
bad: gauss with high variance
|
||||
acceptable: (fast)bilinear, area
|
||||
ok: others
|
||||
loss of detail / high frequency
|
||||
bad: gauss with high variance
|
||||
acceptable: (fast)bilinear, area
|
||||
ok: others
|
||||
|
||||
aliasing (only downscale)
|
||||
straight lines look like staircases
|
||||
areas of high detail look worse
|
||||
regular patterns turn into a funny looking mess (moire patterns)
|
||||
bad: fast bilinear, point, gauss with low variance
|
||||
acceptable: area
|
||||
ok: others
|
||||
straight lines look like staircases
|
||||
areas of high detail look worse
|
||||
regular patterns turn into a funny looking mess (moire patterns)
|
||||
bad: fast bilinear, point, gauss with low variance
|
||||
acceptable: area
|
||||
ok: others
|
||||
|
||||
blocky (upscale only)
|
||||
looks like the image is made of rectangular blocks like a mosaic
|
||||
bad: point
|
||||
ok: others
|
||||
looks like the image is made of rectangular blocks like a mosaic
|
||||
bad: point
|
||||
ok: others
|
||||
|
||||
recommendations: (based upon my personal opinion many ppl might disagree ...)
|
||||
---------------------------------------------------------------------
|
||||
@ -49,20 +49,20 @@ b blurry
|
||||
a aliasing (downscale only)
|
||||
m mosaic (blocky) (upscale only)
|
||||
|
||||
-sws 0 fast bilinear bA
|
||||
-sws 1 bilinear b
|
||||
-sws 2 bicubic high sharpness r
|
||||
low sharpness b
|
||||
-sws 3 experimental ????
|
||||
-sws 4 nearest neighbour AM
|
||||
-sws 5 area ba
|
||||
-sws 6 luma bicubic / chroma bilinear r
|
||||
-sws 7 gauss low sharpness B
|
||||
high sharpness AM
|
||||
-sws 8 sinc R
|
||||
-sws 9 lanczos long filter R
|
||||
short filter b
|
||||
-sws 10 bicubic spline r
|
||||
-sws 0 fast bilinear bA
|
||||
-sws 1 bilinear b
|
||||
-sws 2 bicubic high sharpness r
|
||||
low sharpness b
|
||||
-sws 3 experimental ????
|
||||
-sws 4 nearest neighbour AM
|
||||
-sws 5 area ba
|
||||
-sws 6 luma bicubic / chroma bilinear r
|
||||
-sws 7 gauss low sharpness B
|
||||
high sharpness AM
|
||||
-sws 8 sinc R
|
||||
-sws 9 lanczos long filter R
|
||||
short filter b
|
||||
-sws 10 bicubic spline r
|
||||
|
||||
Notes:
|
||||
area upscale is identical to bilinear
|
||||
area upscale is identical to bilinear
|
||||
|
@ -1,5 +1,5 @@
|
||||
VIDIX - VIDeo Interface for *niX
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
VIDIX - VIDeo Interface for *niX
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This interface was designed and introduced as interface to userspace drivers
|
||||
to provide DGA everywhere where it's possible (unline X11).
|
||||
@ -40,43 +40,43 @@ So any suggestions, reports, criticism are gladly accepted.
|
||||
7) APP calls vixConfigPlayback. Driver should prepare BES on this call.
|
||||
APP pass to driver following info:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
vidix_playback_t.fourcc - contains fourcc of movie
|
||||
vidix_playback_t.capability - currently contsinas copy of vidix_capability_t.flags
|
||||
vidix_playback_t.fourcc - contains fourcc of movie
|
||||
vidix_playback_t.capability - currently contsinas copy of vidix_capability_t.flags
|
||||
vidix_playback_t.blend_factor- currently unused
|
||||
vidix_playback_t.src - x,y,w,h fields contain original movie size
|
||||
(in pixels) x and y often are nulls.
|
||||
vidix_playback_t.src - x,y,w,h fields contain original movie size
|
||||
(in pixels) x and y often are nulls.
|
||||
vidix_playback_t.src.pitch.y These fields contain source pitches
|
||||
vidix_playback_t.src.pitch.u - for each Y,U,V plane in bytes.
|
||||
vidix_playback_t.src.pitch.v (For packed fourcc only Y value is used)
|
||||
They are hints for driver to use same destinition
|
||||
pitches as in source memory (to speed up
|
||||
memcpy process).
|
||||
Note: when source pitches are unknown or
|
||||
variable these field will be filled into 0.
|
||||
vidix_playback_t.dest - x,y,w,h fields contains destinition rectange
|
||||
on the screen in pixels.
|
||||
They are hints for driver to use same destinition
|
||||
pitches as in source memory (to speed up
|
||||
memcpy process).
|
||||
Note: when source pitches are unknown or
|
||||
variable these field will be filled into 0.
|
||||
vidix_playback_t.dest - x,y,w,h fields contains destinition rectange
|
||||
on the screen in pixels.
|
||||
vidix_playback_t.num_frames - maximal # of frames which can be used by APP.
|
||||
(Currently 10).
|
||||
(Currently 10).
|
||||
Driver should fill following fields:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
vidix_playback_t.num_frames - real # of frames which will be used by driver.
|
||||
(Should be less or equal to app's num_frames).
|
||||
(Should be less or equal to app's num_frames).
|
||||
|
||||
vidix_playback_t.dest.pitch.y These fields should contain alignment
|
||||
vidix_playback_t.dest.pitch.u - for each Y,U,V plane in bytes.
|
||||
vidix_playback_t.dest.pitch.v (For packed fourcc only Y value is used)
|
||||
|
||||
vidix_playback_t.frame_size - Driver should tell to app which size of
|
||||
source frame (src.w and src.h) should
|
||||
use APP (according to pitches and offsets)
|
||||
vidix_playback_t.frame_size - Driver should tell to app which size of
|
||||
source frame (src.w and src.h) should
|
||||
use APP (according to pitches and offsets)
|
||||
|
||||
vidix_playback_t.offsets - offsets from begin of BES memory for each frame
|
||||
vidix_playback_t.offsets - offsets from begin of BES memory for each frame
|
||||
|
||||
vidix_playback_t.offset.y These field should contain offset
|
||||
vidix_playback_t.offset.u - for each Y,U,V plane within frame.
|
||||
vidix_playback_t.offset.v (For packed fourcc only Y value is used)
|
||||
vidix_playback_t.offset.y These field should contain offset
|
||||
vidix_playback_t.offset.u - for each Y,U,V plane within frame.
|
||||
vidix_playback_t.offset.v (For packed fourcc only Y value is used)
|
||||
|
||||
vidix_playback_t.dga_addr - Address of BES memory.
|
||||
vidix_playback_t.dga_addr - Address of BES memory.
|
||||
|
||||
Also see this picture:
|
||||
|
||||
@ -85,9 +85,9 @@ VIDEO MEMORY layout:
|
||||
| |
|
||||
v v
|
||||
[ RGB memory | YUV memory | UNDEF ]
|
||||
^
|
||||
|
|
||||
+---- begin of BES memory
|
||||
^
|
||||
|
|
||||
+---- begin of BES memory
|
||||
|
||||
BES MEMORY layout:
|
||||
+-------- begin of BES memory
|
||||
@ -109,22 +109,22 @@ offset of Y plane != offset of first frame
|
||||
But often: vidix_playback_t.offsets[0] = vidix_playback_t.offset.y = 0;
|
||||
|
||||
Formula: (For Y plane) copy source to:
|
||||
vidix_playback_t.dga_addr +
|
||||
vidix_playback_t.offsets[i] +
|
||||
vidix_playback_t.offset.y
|
||||
vidix_playback_t.dga_addr +
|
||||
vidix_playback_t.offsets[i] +
|
||||
vidix_playback_t.offset.y
|
||||
|
||||
8) APP calls vixPlaybackOn. Driver should activate BES on this call.
|
||||
9) PLAYBACK. Driver should sleep here ;)
|
||||
But during playback can be called:
|
||||
vixFrameSelect (if this function is exported)
|
||||
Driver should prepare and activate corresponded frame.
|
||||
This function is used only for double and trilpe buffering and
|
||||
never used for single buffering playback.
|
||||
Driver should prepare and activate corresponded frame.
|
||||
This function is used only for double and trilpe buffering and
|
||||
never used for single buffering playback.
|
||||
vixGet(Set)GrKeys (if this function is exported)
|
||||
This interface should be tuned but intriduced for overlapped playback
|
||||
and video effects (TYPE_FX)
|
||||
This interface should be tuned but intriduced for overlapped playback
|
||||
and video effects (TYPE_FX)
|
||||
vixPlaybackGet(Set)Eq (if this function is exported)
|
||||
For color correction.
|
||||
For color correction.
|
||||
10) APP calls vixPlaybackOff. Driver should deactivate BES on this call.
|
||||
11) If vixDestroy is defined APP calls this function before unloading driver
|
||||
from memory.
|
||||
@ -144,10 +144,10 @@ All other functions are optionaly.
|
||||
|
||||
Useful links:
|
||||
~~~~~~~~~~~~~
|
||||
Guide to DTV http://www.digitaltelevision.com/dtvbook/toc.shtml
|
||||
Fourcc http://www.webartz.com/fourcc/
|
||||
MPEG http://www.mpeg.org/MPEG/index.html
|
||||
Analog colors http://www.miranda.com/en/app_notes/TN/TN-05/TN-05.htm
|
||||
Guide to DTV http://www.digitaltelevision.com/dtvbook/toc.shtml
|
||||
Fourcc http://www.webartz.com/fourcc/
|
||||
MPEG http://www.mpeg.org/MPEG/index.html
|
||||
Analog colors http://www.miranda.com/en/app_notes/TN/TN-05/TN-05.htm
|
||||
|
||||
Please send your suggestions, reports, feedback to mplayer-dev-eng@mplayerhq.hu
|
||||
Best regards! Nick Kurshev.
|
||||
|
@ -39,13 +39,13 @@ Installing the required tools from source
|
||||
2) Download the docbook-xml package from http://www.oasis-open.org/docbook/xml/
|
||||
Use the newest version. The URL will be something like this:
|
||||
|
||||
http://www.oasis-open.org/docbook/xml/4.2/docbook-xml-4.2.zip
|
||||
http://www.oasis-open.org/docbook/xml/4.2/docbook-xml-4.2.zip
|
||||
|
||||
Extract this package into a directory, enter it, and execute the following
|
||||
commands:
|
||||
|
||||
mkdir -p /usr/share/sgml/docbook/dtd/xml/4.2/
|
||||
cp -r * /usr/share/sgml/docbook/dtd/xml/4.2/
|
||||
mkdir -p /usr/share/sgml/docbook/dtd/xml/4.2/
|
||||
cp -r * /usr/share/sgml/docbook/dtd/xml/4.2/
|
||||
|
||||
|
||||
3) Download the docbook-xsl package from
|
||||
@ -53,14 +53,13 @@ Installing the required tools from source
|
||||
|
||||
Use the newest version. The URL will be something like this:
|
||||
|
||||
http://prdownloads.sourceforge.net/docbook/docbook-xsl-1.62.0.tar.gz
|
||||
http://prdownloads.sourceforge.net/docbook/docbook-xsl-1.62.0.tar.gz
|
||||
|
||||
Extract this package into a directory, enter it, and execute the following
|
||||
commands:
|
||||
|
||||
mkdir -p /usr/share/sgml/docbook/stylesheet/xsl/nwalsh
|
||||
cp -r VERSION common html lib \
|
||||
/usr/share/sgml/docbook/stylesheet/xsl/nwalsh
|
||||
mkdir -p /usr/share/sgml/docbook/stylesheet/xsl/nwalsh
|
||||
cp -r VERSION common html lib /usr/share/sgml/docbook/stylesheet/xsl/nwalsh
|
||||
|
||||
|
||||
Building the documentation
|
||||
@ -68,7 +67,7 @@ Building the documentation
|
||||
|
||||
Before trying to build the documentation, run
|
||||
|
||||
make help
|
||||
make help
|
||||
|
||||
to see all available build targets and make your choice. If something goes
|
||||
wrong, check the Configuration section of the toplevel Makefile and adjust
|
||||
@ -82,15 +81,15 @@ As far as I know, the document type declaration in XML files requires
|
||||
both a public and a system identifier. For example:
|
||||
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
"/usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd">
|
||||
"/usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd">
|
||||
|
||||
where
|
||||
|
||||
"-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
"-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
|
||||
is the public, and
|
||||
|
||||
"/usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd"
|
||||
"/usr/share/sgml/docbook/dtd/xml/4.1.2/docbookx.dtd"
|
||||
|
||||
is the system identifier.
|
||||
|
||||
|
@ -5,9 +5,9 @@ in each of those directories to create the HTML documentation
|
||||
in subdirectories of the 'HTML' directory.
|
||||
|
||||
IMPORTANT: Do NOT place sensitive files under 'HTML'!
|
||||
It is for generated documentation only.
|
||||
The whole directory tree is wiped out by the Makefile
|
||||
when running 'make distclean' or 'make clean'.
|
||||
It is for generated documentation only.
|
||||
The whole directory tree is wiped out by the Makefile
|
||||
when running 'make distclean' or 'make clean'.
|
||||
|
||||
Each subdirectory must have a Makefile. Its purpose is to include
|
||||
the toplevel Makefile.inc file (with the rules to build the docs)
|
||||
|
10
DOCS/xml/configure
vendored
10
DOCS/xml/configure
vendored
@ -164,7 +164,7 @@ for lang in `grep 'DOC_LANGS =' ../../config.mak|cut -d= -f2`; do
|
||||
EOF
|
||||
|
||||
for file in `find $lang en -name \*.xml -exec basename \{\} \; | sort -u`; do
|
||||
echo '<!ENTITY '$file' SYSTEM "'$file'">' >> $lang/main.xml
|
||||
echo '<!ENTITY '$file' SYSTEM "'$file'">' >> $lang/main.xml
|
||||
done
|
||||
|
||||
cat >> $lang/main.xml << EOF
|
||||
@ -237,7 +237,7 @@ then
|
||||
if test -z "$_fake_chunk_xsl"
|
||||
then
|
||||
# _xsltcommand="cd \$1 && if test \"\`dirname \$2 | head -c 1\`\" = \".\" ; then $_java -classpath $_saxon_jar com.icl.saxon.StyleSheet \$_IN_DIR/\$3 \$_IN_DIR/\$2 ; else $_java -classpath $_saxon_jar com.icl.saxon.StyleSheet \$_IN_DIR/\$3 \$2 ;fi"
|
||||
_xsltcommand="
|
||||
_xsltcommand="
|
||||
if test \"\`dirname \$2 | head -c 1\`\" = \".\"
|
||||
then
|
||||
_STYLESHEET=\$_IN_DIR/\$2
|
||||
@ -306,9 +306,9 @@ then
|
||||
done
|
||||
if test "x$_docbook_dsl" = "x" -o "x$_xml_dcl" = "x"
|
||||
then
|
||||
echo "One of the files docbook.dsl and xml.dcl or both of them weren't found."
|
||||
echo "Bailing out."
|
||||
exit 1
|
||||
echo "One of the files docbook.dsl and xml.dcl or both of them weren't found."
|
||||
echo "Bailing out."
|
||||
exit 1
|
||||
fi
|
||||
_xsltcommand="cd \$1 && $_jade -t xml -d $_docbook_dsl $_xml_dcl \$_IN_DIR/\$3"
|
||||
else
|
||||
|
@ -2229,7 +2229,7 @@ následující příkaz
|
||||
<screen>
|
||||
mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
|
||||
<replaceable>movie.avi</replaceable>
|
||||
<replaceable>movie.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
|
@ -201,8 +201,8 @@
|
||||
<title>DVD-Entschlüsselung</title>
|
||||
<para>
|
||||
DVD-Entschlüsselung geschieht durch <systemitem>libdvdcss</systemitem>. Die dafür
|
||||
verwendete Methode kann durch Umgebungsvariable <envar>DVDCSS_METHOD</envar> festgelegt werden,
|
||||
siehe Manpage für Details.
|
||||
verwendete Methode kann durch Umgebungsvariable <envar>DVDCSS_METHOD</envar> festgelegt werden,
|
||||
siehe Manpage für Details.
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
|
@ -4224,7 +4224,7 @@ vcodec=mpeg2video:intra_matrix=8,9,12,22,26,27,29,34,9,10,14,26,27,29,34,37,
|
||||
<emphasis role="bold">partitions=all</emphasis>:
|
||||
Diese Option aktiviert die Verwendung von 8x4, 4x8 und 4x4 Unterteilungen
|
||||
in den vorhergesagten Macroblöcken (zusätzlich zu den Standardunterteilungen).
|
||||
Sie zu aktivieren führt zu einem
|
||||
Sie zu aktivieren führt zu einem
|
||||
recht beständigen Geschwindigkeitsverlust von 10%-15%. Sie ist
|
||||
ziemlich nutzlos bei Quellen, die nur langsame Bewegungen enthalten,
|
||||
obwohl in manchen Quellen mit sehr viel Bewegung und vielen kleinen,
|
||||
|
@ -143,7 +143,7 @@
|
||||
<answer>
|
||||
<para>
|
||||
Probiere folgende configure-Optionen:
|
||||
<screen>/configure --target=i386-linux --cc="gcc -m32" --as="as --32" --with-extralibdir=/usr/lib </screen>
|
||||
<screen>/configure --target=i386-linux --cc="gcc -m32" --as="as --32" --with-extralibdir=/usr/lib</screen>
|
||||
</para>
|
||||
</answer>
|
||||
</qandaentry>
|
||||
|
@ -46,7 +46,7 @@
|
||||
<screen>-tv channels=26-MTV1,23-TV2</screen>
|
||||
Erklärung: Durch Verwendung dieser Option sind nur die Kanäle 26 und 23 in Gebrauch,
|
||||
und es wird beim Kanalwechsel einen netten OSD-Text geben, der den Namen des Kanals
|
||||
anzeigt. Leerzeichen im Kanalnamen müssen durch das Zeichen "_" ersetzt werden.
|
||||
anzeigt. Leerzeichen im Kanalnamen müssen durch das Zeichen "_" ersetzt werden.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
@ -304,4 +304,4 @@ mencoder -tv driver=v4l:width=768:height=576 \
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
</chapter>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -123,13 +123,13 @@ echo "base=0xd8000000 size=0x2000000 type=write-combining" > /proc/mtrr
|
||||
|
||||
in <filename>/var/log/XFree86.0.log</filename>
|
||||
|
||||
<note><para>
|
||||
<note><para>
|
||||
Diese Meldung besagt nur, dass die XFree86-Erweiterung
|
||||
geladen wird. Bei einer guten Installation sollte das immer der Fall
|
||||
sein. Das heißt allerdings noch nicht, dass die
|
||||
<emphasis role="bold">XVideo-Unterstützung der Grafikkarte</emphasis>
|
||||
auch geladen wurde!
|
||||
</para></note>
|
||||
</para></note>
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Deine Karte muss unter Linux Xv-Unterstützung haben. Du kannst dich
|
||||
@ -2367,8 +2367,8 @@ mplayer -vo zr -vf crop=720:320:80:0 <replaceable>benhur.avi</replaceable>
|
||||
möchtest. Dann benutzt du dafür das folgende Kommando:
|
||||
<screen>
|
||||
mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
|
||||
<replaceable>movie.avi</replaceable>
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
|
||||
<replaceable>movie.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
|
@ -1,44 +1,44 @@
|
||||
body {
|
||||
color: black;
|
||||
background: white;
|
||||
color: black;
|
||||
background: white;
|
||||
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
/*
|
||||
* It's a Bad Idea(tm) to use fixed font sizes.
|
||||
* Uncomment it if you _really_ want
|
||||
*/
|
||||
font-size: 14px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
div.table table, div.informaltable table {
|
||||
background: #333366;
|
||||
border-collapse: separate;
|
||||
border: solid 1px #333366;
|
||||
border-spacing: 1px;
|
||||
background: #333366;
|
||||
border-collapse: separate;
|
||||
border: solid 1px #333366;
|
||||
border-spacing: 1px;
|
||||
}
|
||||
|
||||
div.table th, div.informaltable th {
|
||||
color: white;
|
||||
background: #4488cc;
|
||||
border: 0px;
|
||||
padding: 2px;
|
||||
color: white;
|
||||
background: #4488cc;
|
||||
border: 0px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
div.table td, div.informaltable td {
|
||||
background: #fffff8;
|
||||
border: 0px;
|
||||
padding: 2px;
|
||||
background: #fffff8;
|
||||
border: 0px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
|
||||
pre.screen {
|
||||
padding: 4px;
|
||||
background: #e0e0e0;
|
||||
padding: 4px;
|
||||
background: #e0e0e0;
|
||||
}
|
||||
|
||||
pre.programlisting {
|
||||
padding: 4px;
|
||||
background: #e0e8f0;
|
||||
padding: 4px;
|
||||
background: #e0e8f0;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -47,37 +47,37 @@ span.application {
|
||||
*/
|
||||
|
||||
span.keycap {
|
||||
background: #ddd;
|
||||
border: solid 1px #aaa;
|
||||
white-space: nowrap;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
background: #ddd;
|
||||
border: solid 1px #aaa;
|
||||
white-space: nowrap;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
}
|
||||
|
||||
span.guimenu, span.guisubmenu, span.guimenuitem {
|
||||
background: #dddddd;
|
||||
background: #dddddd;
|
||||
}
|
||||
|
||||
tt.filename {
|
||||
color: maroon;
|
||||
white-space: nowrap;
|
||||
color: maroon;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
tt.option {
|
||||
color: #066;
|
||||
white-space: nowrap;
|
||||
color: #066;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
div.example {
|
||||
padding-left: 0.5em;
|
||||
border-left: solid 2px black;
|
||||
padding-left: 0.5em;
|
||||
border-left: solid 2px black;
|
||||
}
|
||||
|
||||
div.important .title, div.caution .title, div.warning .title {
|
||||
color: #c00;
|
||||
color: #c00;
|
||||
}
|
||||
/*
|
||||
div.important, div.warning, div.caution {
|
||||
padding-left: 0.5em;
|
||||
border-left: solid 2px maroon;
|
||||
padding-left: 0.5em;
|
||||
border-left: solid 2px maroon;
|
||||
}
|
||||
*/
|
||||
|
@ -253,7 +253,7 @@ use GNU as:
|
||||
% gmake
|
||||
...
|
||||
gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math
|
||||
-fomit-frame-pointer -I/usr/local/include -o mplayer.o mplayer.c
|
||||
-fomit-frame-pointer -I/usr/local/include -o mplayer.o mplayer.c
|
||||
Assembler: mplayer.c
|
||||
"(stdin)", line 3567 : Illegal mnemonic
|
||||
"(stdin)", line 3567 : Syntax error
|
||||
|
@ -2255,7 +2255,7 @@ issue the following command
|
||||
<screen>
|
||||
mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
|
||||
<replaceable>movie.avi</replaceable>
|
||||
<replaceable>movie.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
|
@ -2280,8 +2280,8 @@ la derecha en blanco y negro y el otro debe tener imágenes JPEG con calidad 10,
|
||||
todo esto deberá usar la siguiente órden
|
||||
<screen>
|
||||
mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
|
||||
<replaceable>movie.avi</replaceable>
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
|
||||
<replaceable>movie.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
|
@ -2096,7 +2096,7 @@ mplayer <replaceable>fichier_source.vob</replaceable> -aid 129 -dumpaudio -dumpf
|
||||
et <option>-ofps</option> à deux fois le nombre d'image par seconde de votre source originale.
|
||||
|
||||
<screen>mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc \
|
||||
-fps 60000/1001 -ofps 60000/1001</screen>
|
||||
-fps 60000/1001 -ofps 60000/1001</screen>
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Si vous avez prévu de beaucoup réduire la taille, vous pouvez
|
||||
@ -4460,16 +4460,16 @@ fichiers compatibles <application>QuickTime</application>
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
Vous souhaitez que n'importe quel utilisateur non expérimenté soit capable
|
||||
de regarder votre vidéo sur les plateformes majeures (Windows, Mac OS X, Unices …).
|
||||
Vous souhaitez que n'importe quel utilisateur non expérimenté soit capable
|
||||
de regarder votre vidéo sur les plateformes majeures (Windows, Mac OS X, Unices …).
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
<application>QuickTime</application> est capable de tirer plus
|
||||
amplement profit des accélérations matérielles et logicielles
|
||||
de Mac OS X que les lecteurs plus indépendant de la plateforme
|
||||
comme <application>MPlayer</application> ou <application>VLC</application>.
|
||||
Ainsi, vos vidéos ont plus de chance d'être jouées sans accros sur de
|
||||
veilles machines basées sur des processeurs G4.
|
||||
<application>QuickTime</application> est capable de tirer plus
|
||||
amplement profit des accélérations matérielles et logicielles
|
||||
de Mac OS X que les lecteurs plus indépendant de la plateforme
|
||||
comme <application>MPlayer</application> ou <application>VLC</application>.
|
||||
Ainsi, vos vidéos ont plus de chance d'être jouées sans accros sur de
|
||||
veilles machines basées sur des processeurs G4.
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
<application>QuickTime</application> 7 supporte la nouvelle génération de
|
||||
@ -4484,45 +4484,45 @@ fichiers compatibles <application>QuickTime</application>
|
||||
<title>Limitations de <application>QuickTime</application></title>
|
||||
|
||||
<para>
|
||||
<application>QuickTime</application> 7 supporte la vidéo en H.264 et l'audio en AAC,
|
||||
mais il ne les supporte pas multipléxés dans le format de container AVI.
|
||||
Cependant, vous pouvez utiliser <application>MEncoder</application> pour encoder
|
||||
la vidéo et l'audio, et ensuite utiliser un programme externe comme
|
||||
<application>mp4creator</application> (appartenant à la
|
||||
<ulink url="http://mpeg4ip.sourceforge.net/">suite MPEG4IP</ulink>)
|
||||
pour remultiplexer les pistes vidéos et audios dans un container MP4.
|
||||
<application>QuickTime</application> 7 supporte la vidéo en H.264 et l'audio en AAC,
|
||||
mais il ne les supporte pas multipléxés dans le format de container AVI.
|
||||
Cependant, vous pouvez utiliser <application>MEncoder</application> pour encoder
|
||||
la vidéo et l'audio, et ensuite utiliser un programme externe comme
|
||||
<application>mp4creator</application> (appartenant à la
|
||||
<ulink url="http://mpeg4ip.sourceforge.net/">suite MPEG4IP</ulink>)
|
||||
pour remultiplexer les pistes vidéos et audios dans un container MP4.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Le support <application>QuickTime</application> du H.264 étant limité,
|
||||
il vous faudra laisser tomber certaines options avancées.
|
||||
Si vous encodez votre vidéo en utilisant des options que
|
||||
<application>QuickTime</application> 7 ne supporte pas,
|
||||
les lecteurs basés sur <application>QuickTime</application> afficheront
|
||||
un joli écran blanc au lieu de la vidéo attendue.
|
||||
Le support <application>QuickTime</application> du H.264 étant limité,
|
||||
il vous faudra laisser tomber certaines options avancées.
|
||||
Si vous encodez votre vidéo en utilisant des options que
|
||||
<application>QuickTime</application> 7 ne supporte pas,
|
||||
les lecteurs basés sur <application>QuickTime</application> afficheront
|
||||
un joli écran blanc au lieu de la vidéo attendue.
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
<emphasis role="bold">trames-B</emphasis> :
|
||||
<application>QuickTime</application> 7 supporte un maximum d'une trame-B, i.e.
|
||||
<option>-x264encopts bframes=1</option>. Ainsi,
|
||||
<option>b_pyramid</option> et <option>weight_b</option> n'auront aucun
|
||||
effet car ces options requierent que <option>bframes</option> soit supérieure à 1.
|
||||
<application>QuickTime</application> 7 supporte un maximum d'une trame-B, i.e.
|
||||
<option>-x264encopts bframes=1</option>. Ainsi,
|
||||
<option>b_pyramid</option> et <option>weight_b</option> n'auront aucun
|
||||
effet car ces options requierent que <option>bframes</option> soit supérieure à 1.
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
<emphasis role="bold">Macroblocs</emphasis> :
|
||||
<application>QuickTime</application> 7 ne supporte pas les macroblocs de type 8x8 DCT.
|
||||
Cette option (<option>8x8dct</option>) est désactivée par défaut,
|
||||
donc soyez sûr de ne pas l'activer explicitement. Ceci signifie aussi que l'option
|
||||
<option>i8x8</option> n'aura aucun effet, car elle nécessite l'option <option>8x8dct</option>.
|
||||
<application>QuickTime</application> 7 ne supporte pas les macroblocs de type 8x8 DCT.
|
||||
Cette option (<option>8x8dct</option>) est désactivée par défaut,
|
||||
donc soyez sûr de ne pas l'activer explicitement. Ceci signifie aussi que l'option
|
||||
<option>i8x8</option> n'aura aucun effet, car elle nécessite l'option <option>8x8dct</option>.
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
<emphasis role="bold">Ratio d'aspect</emphasis> :
|
||||
<application>QuickTime</application> 7 ne supporte pas l'information sur le SAR (l'échantillonage
|
||||
de ratio d'aspect ou Sample Aspect Ratio) dans les fichiers MPEG-4; il suppose que SAR=1.
|
||||
Lisez <link linkend="menc-feat-quicktime-7-scale"> la section sur le redimensionnement</link> pour une
|
||||
parade à cette limitation.
|
||||
<application>QuickTime</application> 7 ne supporte pas l'information sur le SAR (l'échantillonage
|
||||
de ratio d'aspect ou Sample Aspect Ratio) dans les fichiers MPEG-4; il suppose que SAR=1.
|
||||
Lisez <link linkend="menc-feat-quicktime-7-scale"> la section sur le redimensionnement</link> pour une
|
||||
parade à cette limitation.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
|
||||
@ -4531,26 +4531,26 @@ fichiers compatibles <application>QuickTime</application>
|
||||
<sect2 id="menc-feat-quicktime-7-crop">
|
||||
<title>Recadrage</title>
|
||||
<para>
|
||||
Supposons que vous voulez encoder votre DVD "Les chroniques de Narnia".
|
||||
Votre DVD étant de région 1, il est en NTSC. L'exemple ci-dessous serait aussi
|
||||
applicable au PAL, hormis qu'il faudrait omettre l'option <option>-ofps 24000/1001</option>
|
||||
et utiliser des dimensions pour <option>crop</option> et <option>scale</option>
|
||||
sensiblement différentes.
|
||||
Supposons que vous voulez encoder votre DVD "Les chroniques de Narnia".
|
||||
Votre DVD étant de région 1, il est en NTSC. L'exemple ci-dessous serait aussi
|
||||
applicable au PAL, hormis qu'il faudrait omettre l'option <option>-ofps 24000/1001</option>
|
||||
et utiliser des dimensions pour <option>crop</option> et <option>scale</option>
|
||||
sensiblement différentes.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Aprés avoir lancé <option>mplayer dvd://1</option>, vous suivez la procédure
|
||||
détaillée dans la section
|
||||
<link linkend="menc-feat-telecine">Comment gérer le téléciné et le dés-entrelacement avec les DVDs NTSC</link>
|
||||
et découvrez que c'est une vidéo progréssive en 24000/1001 image par seconde.
|
||||
Ceci simplifie quelque peu la procédure, car nous n'avons pas besoin d'utliser un filtre téléciné inverse
|
||||
comme <option>pullup</option> ou un filtre de désentrelacement comme
|
||||
<option>yadif</option>.
|
||||
Aprés avoir lancé <option>mplayer dvd://1</option>, vous suivez la procédure
|
||||
détaillée dans la section
|
||||
<link linkend="menc-feat-telecine">Comment gérer le téléciné et le dés-entrelacement avec les DVDs NTSC</link>
|
||||
et découvrez que c'est une vidéo progréssive en 24000/1001 image par seconde.
|
||||
Ceci simplifie quelque peu la procédure, car nous n'avons pas besoin d'utliser un filtre téléciné inverse
|
||||
comme <option>pullup</option> ou un filtre de désentrelacement comme
|
||||
<option>yadif</option>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Ensuite il faut rogner les bandes noires du haut et du bas de la vidéo,
|
||||
comme détaillé dans la section précédente.
|
||||
Ensuite il faut rogner les bandes noires du haut et du bas de la vidéo,
|
||||
comme détaillé dans la section précédente.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
@ -4559,24 +4559,24 @@ fichiers compatibles <application>QuickTime</application>
|
||||
<title>Redimensionnement</title>
|
||||
|
||||
<para>
|
||||
La prochaine étape à de quoi vous briser le coeur.
|
||||
<application>QuickTime</application> 7 ne supporte pas les
|
||||
vidéos MPEG-4 avec échantillonage du ratio d'aspect différent de 1,
|
||||
de fait il vous faudra redimensionner à la hausse (ce qui gaspille
|
||||
beaucoup d'espace disque) ou à la baisse (ce qui diminue le niveau
|
||||
de détail de la source) la vidéo de façon à obtenir des pixels carrés.
|
||||
D'une manière ou d'une autre, cette opération est très inéficace, mais
|
||||
ne peut être evitée si vous souhaitez que votre vidéo soit lisible par
|
||||
<application>QuickTime</application> 7.
|
||||
<application>MEncoder</application> permet d'appliquer le redimensionnement
|
||||
à la hausse ou à la baisse en spécifiant respectivement
|
||||
<option>-vf scale=-10:-1</option> ou <option>-vf scale=-1:-10</option>.
|
||||
Ces options vont redimensionner la vidéo à la bonne largeur pour la hauteur rognée,
|
||||
arrondi au plus proche multiple de 16 pour une compression optimale.
|
||||
La prochaine étape à de quoi vous briser le coeur.
|
||||
<application>QuickTime</application> 7 ne supporte pas les
|
||||
vidéos MPEG-4 avec échantillonage du ratio d'aspect différent de 1,
|
||||
de fait il vous faudra redimensionner à la hausse (ce qui gaspille
|
||||
beaucoup d'espace disque) ou à la baisse (ce qui diminue le niveau
|
||||
de détail de la source) la vidéo de façon à obtenir des pixels carrés.
|
||||
D'une manière ou d'une autre, cette opération est très inéficace, mais
|
||||
ne peut être evitée si vous souhaitez que votre vidéo soit lisible par
|
||||
<application>QuickTime</application> 7.
|
||||
<application>MEncoder</application> permet d'appliquer le redimensionnement
|
||||
à la hausse ou à la baisse en spécifiant respectivement
|
||||
<option>-vf scale=-10:-1</option> ou <option>-vf scale=-1:-10</option>.
|
||||
Ces options vont redimensionner la vidéo à la bonne largeur pour la hauteur rognée,
|
||||
arrondi au plus proche multiple de 16 pour une compression optimale.
|
||||
Rappelez vous que si vous rognez, vous devez d'abord rogner et ensuite
|
||||
redimensionner :
|
||||
|
||||
<screen>-vf crop=720:352:0:62,scale=-10:-1</screen>
|
||||
<screen>-vf crop=720:352:0:62,scale=-10:-1</screen>
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
@ -4585,19 +4585,19 @@ fichiers compatibles <application>QuickTime</application>
|
||||
<title>Synchronisation de l'audio et de la vidéo</title>
|
||||
|
||||
<para>
|
||||
Parce que vous allez remultiplexer dans un container différent,
|
||||
vous devriez toujours utiliser l'option <option>harddup</option>
|
||||
afin de s'assurer que les trames dupliquées soient effectivement
|
||||
dupliquées dans la vidéo de sortie. Sans cette option, <application>MEncoder</application>
|
||||
placera simplement un marqueur dans la flux vidéo signalant qu'une trame
|
||||
a été dupliquée, et délèguera au logiciel client l'initiative d'afficher
|
||||
la même trame deux fois. Malheureusement, cette "duplication douce" ne survivant pas
|
||||
au multiplexage, l'audio perdra lentement la synchronisation avec la vidéo.
|
||||
Parce que vous allez remultiplexer dans un container différent,
|
||||
vous devriez toujours utiliser l'option <option>harddup</option>
|
||||
afin de s'assurer que les trames dupliquées soient effectivement
|
||||
dupliquées dans la vidéo de sortie. Sans cette option, <application>MEncoder</application>
|
||||
placera simplement un marqueur dans la flux vidéo signalant qu'une trame
|
||||
a été dupliquée, et délèguera au logiciel client l'initiative d'afficher
|
||||
la même trame deux fois. Malheureusement, cette "duplication douce" ne survivant pas
|
||||
au multiplexage, l'audio perdra lentement la synchronisation avec la vidéo.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
La chaîne de filtre résultante a cette forme :
|
||||
<screen>-vf crop=720:352:0:62,scale=-10:-1,harddup</screen>
|
||||
<screen>-vf crop=720:352:0:62,scale=-10:-1,harddup</screen>
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
@ -4606,16 +4606,16 @@ fichiers compatibles <application>QuickTime</application>
|
||||
<title>Débit</title>
|
||||
|
||||
<para>
|
||||
Comme toujours, le choix du débit est aussi bien une question de propriétés techniques
|
||||
de la source, comme expliqué
|
||||
<link linkend="menc-feat-dvd-mpeg4-resolution-bitrate">ici</link>, qu'une
|
||||
question de goût.
|
||||
Dans ce film, il y a pas mal d'action et beaucoup de détails, mais le H.264
|
||||
apparait plus beau que le XviD ou tout autre codec MPEG-4 à des débits moindres.
|
||||
Après moultes expérimentations, l'auteur de ce guide a choisi d'encoder ce film à
|
||||
900kbps, et pense que le résultat est joli.
|
||||
Vous pouvez diminuer le débit si vous souhaitez sauver de la place,
|
||||
ou l'augmenter si vous voulez améliorer la qualité.
|
||||
Comme toujours, le choix du débit est aussi bien une question de propriétés techniques
|
||||
de la source, comme expliqué
|
||||
<link linkend="menc-feat-dvd-mpeg4-resolution-bitrate">ici</link>, qu'une
|
||||
question de goût.
|
||||
Dans ce film, il y a pas mal d'action et beaucoup de détails, mais le H.264
|
||||
apparait plus beau que le XviD ou tout autre codec MPEG-4 à des débits moindres.
|
||||
Après moultes expérimentations, l'auteur de ce guide a choisi d'encoder ce film à
|
||||
900kbps, et pense que le résultat est joli.
|
||||
Vous pouvez diminuer le débit si vous souhaitez sauver de la place,
|
||||
ou l'augmenter si vous voulez améliorer la qualité.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
@ -4624,19 +4624,19 @@ fichiers compatibles <application>QuickTime</application>
|
||||
<title>Exemple d'encodage</title>
|
||||
|
||||
<para>
|
||||
Vous êtes maintenant prêt à encoder la vidéo. Comme vous
|
||||
tenez à la qualité, vous effectuerez un encodage en 2 passes, bien entendu.
|
||||
Pour sauver un peu de temps d'encodage, vous pouvez spécifier
|
||||
l'option <option>turbo</option> pour la première passe; cette option
|
||||
réduit <option>subq</option> et <option>frameref</option> à 1.
|
||||
Pour sauvegarder de l'espace disque vous pouvez utiliser l'option <option>ss</option>
|
||||
afin d'enlever les toutes premières secondes de la vidéo.
|
||||
(Je me suis aperçu que ce film a 32 secondes de générique et de logo.)
|
||||
<option>bframes</option> peut être 0 ou 1.
|
||||
Les autres options sont documentées dans <link
|
||||
linkend="menc-feat-x264-encoding-options-speedvquality">Encodage avec
|
||||
le codec <systemitem class="library">x264</systemitem></link> et la page
|
||||
de man.
|
||||
Vous êtes maintenant prêt à encoder la vidéo. Comme vous
|
||||
tenez à la qualité, vous effectuerez un encodage en 2 passes, bien entendu.
|
||||
Pour sauver un peu de temps d'encodage, vous pouvez spécifier
|
||||
l'option <option>turbo</option> pour la première passe; cette option
|
||||
réduit <option>subq</option> et <option>frameref</option> à 1.
|
||||
Pour sauvegarder de l'espace disque vous pouvez utiliser l'option <option>ss</option>
|
||||
afin d'enlever les toutes premières secondes de la vidéo.
|
||||
(Je me suis aperçu que ce film a 32 secondes de générique et de logo.)
|
||||
<option>bframes</option> peut être 0 ou 1.
|
||||
Les autres options sont documentées dans <link
|
||||
linkend="menc-feat-x264-encoding-options-speedvquality">Encodage avec
|
||||
le codec <systemitem class="library">x264</systemitem></link> et la page
|
||||
de man.
|
||||
|
||||
<screen>mencoder dvd://1 -o /dev/null -ss 32 -ovc x264 \
|
||||
-x264encopts pass=1:turbo:bitrate=900:bframes=1:\
|
||||
@ -4645,16 +4645,16 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
|
||||
-oac faac -faacopts br=192:mpeg=4:object=2 -channels 2 -srate 48000 \
|
||||
-ofps 24000/1001</screen>
|
||||
|
||||
Si vous possédez une machine multi-processeur, ne manquez pas l'opportunité
|
||||
d'augmenter grandement la vitesse d'encodage en activant
|
||||
<link linkend="menc-feat-x264-encoding-options-speedvquality-threads">
|
||||
le mode multi-thread du <systemitem class="library">x264</systemitem></link>
|
||||
en ajoutant <option>threads=auto</option> à votre ligne de commande <option>x264encopts</option>.
|
||||
Si vous possédez une machine multi-processeur, ne manquez pas l'opportunité
|
||||
d'augmenter grandement la vitesse d'encodage en activant
|
||||
<link linkend="menc-feat-x264-encoding-options-speedvquality-threads">
|
||||
le mode multi-thread du <systemitem class="library">x264</systemitem></link>
|
||||
en ajoutant <option>threads=auto</option> à votre ligne de commande <option>x264encopts</option>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
La seconde passe est la même, excepté qu'il faut spécifier le fichier de sortie
|
||||
et mettre <option>pass=2</option>.
|
||||
La seconde passe est la même, excepté qu'il faut spécifier le fichier de sortie
|
||||
et mettre <option>pass=2</option>.
|
||||
|
||||
<screen>mencoder dvd://1 <emphasis role="bold">-o narnia.avi</emphasis> -ss 32 -ovc x264 \
|
||||
-x264encopts <emphasis role="bold">pass=2</emphasis>:turbo:bitrate=900:frameref=5:bframes=1:\
|
||||
@ -4665,12 +4665,12 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
|
||||
</para>
|
||||
|
||||
<para>
|
||||
L'AVI résultant doit être parfaitement lu
|
||||
par <application>MPlayer</application>, mais bien entendu
|
||||
<application>QuickTime</application> ne peut le lire
|
||||
car il ne supporte pas le H.264 multiplexé dans de l'AVI.
|
||||
De fait, la prochaine étape est de remultiplexer la vidéo dans
|
||||
un container MP4.
|
||||
L'AVI résultant doit être parfaitement lu
|
||||
par <application>MPlayer</application>, mais bien entendu
|
||||
<application>QuickTime</application> ne peut le lire
|
||||
car il ne supporte pas le H.264 multiplexé dans de l'AVI.
|
||||
De fait, la prochaine étape est de remultiplexer la vidéo dans
|
||||
un container MP4.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
@ -4678,50 +4678,50 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
|
||||
<title>Remultiplexage en MP4</title>
|
||||
|
||||
<para>
|
||||
Il existe différentes manières de remultiplexer des fichiers AVI en MP4.
|
||||
Vous pouvez utiliser <application>mp4creator</application>, qui fait parti de la
|
||||
<ulink url="http://mpeg4ip.sourceforge.net/">suite MPEG4IP</ulink>.
|
||||
Il existe différentes manières de remultiplexer des fichiers AVI en MP4.
|
||||
Vous pouvez utiliser <application>mp4creator</application>, qui fait parti de la
|
||||
<ulink url="http://mpeg4ip.sourceforge.net/">suite MPEG4IP</ulink>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Premièrement, demultiplexez l'AVI en un flux audio et un flux vidéo séparés
|
||||
en utilisant <application>MPlayer</application>.
|
||||
<screen>mplayer narnia.avi -dumpaudio -dumpfile narnia.aac
|
||||
mplayer narnia.avi -dumpvideo -dumpfile narnia.h264</screen>
|
||||
Premièrement, demultiplexez l'AVI en un flux audio et un flux vidéo séparés
|
||||
en utilisant <application>MPlayer</application>.
|
||||
<screen>mplayer narnia.avi -dumpaudio -dumpfile narnia.aac
|
||||
mplayer narnia.avi -dumpvideo -dumpfile narnia.h264</screen>
|
||||
|
||||
Les noms de fichier sont important; <application>mp4creator</application>
|
||||
nécessite que les flux audios AAC soient nommés <systemitem>.aac</systemitem>
|
||||
et les flux vidéos H.264 soient nommés <systemitem>.h264</systemitem>.
|
||||
Les noms de fichier sont important; <application>mp4creator</application>
|
||||
nécessite que les flux audios AAC soient nommés <systemitem>.aac</systemitem>
|
||||
et les flux vidéos H.264 soient nommés <systemitem>.h264</systemitem>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Maintenant utilisez <application>mp4creator</application> pour créer
|
||||
un nouveau fichier MP4 depuis les flux audio et vidéo.
|
||||
Maintenant utilisez <application>mp4creator</application> pour créer
|
||||
un nouveau fichier MP4 depuis les flux audio et vidéo.
|
||||
|
||||
<screen>mp4creator -create=narnia.aac narnia.mp4
|
||||
mp4creator -create=narnia.h264 -rate=23.976 narnia.mp4</screen>
|
||||
<screen>mp4creator -create=narnia.aac narnia.mp4
|
||||
mp4creator -create=narnia.h264 -rate=23.976 narnia.mp4</screen>
|
||||
|
||||
Contrairement à l'étape d'encodage, vous devez spécifier le nombre
|
||||
d'image par seconde comme une valeur décimale (par exemple 23.976), et non
|
||||
comme une valeur fractionnaire (par exemple 24000/1001).
|
||||
Contrairement à l'étape d'encodage, vous devez spécifier le nombre
|
||||
d'image par seconde comme une valeur décimale (par exemple 23.976), et non
|
||||
comme une valeur fractionnaire (par exemple 24000/1001).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Le fichier <systemitem>narnia.mp4</systemitem> devrait être lisible
|
||||
par n'importe quelle application <application>QuickTime</application> 7,
|
||||
comme le <application>lecteur QuickTime</application> ou
|
||||
comme <application>iTunes</application>. Si vous planifiez de voir la
|
||||
vidéo dans un navigateur Internet avec le plugin <application>QuickTime</application>,
|
||||
vous devriez aussi renseigner le film de sorte que le plugin
|
||||
<application>QuickTime</application> puisse commencer à le lire
|
||||
pendant qu'il se télécharge. <application>mp4creator</application>
|
||||
Le fichier <systemitem>narnia.mp4</systemitem> devrait être lisible
|
||||
par n'importe quelle application <application>QuickTime</application> 7,
|
||||
comme le <application>lecteur QuickTime</application> ou
|
||||
comme <application>iTunes</application>. Si vous planifiez de voir la
|
||||
vidéo dans un navigateur Internet avec le plugin <application>QuickTime</application>,
|
||||
vous devriez aussi renseigner le film de sorte que le plugin
|
||||
<application>QuickTime</application> puisse commencer à le lire
|
||||
pendant qu'il se télécharge. <application>mp4creator</application>
|
||||
peut créer ces pistes de renseignement :
|
||||
|
||||
<screen>mp4creator -hint=1 narnia.mp4
|
||||
mp4creator -hint=2 narnia.mp4
|
||||
mp4creator -optimize narnia.mp4</screen>
|
||||
<screen>mp4creator -hint=1 narnia.mp4
|
||||
mp4creator -hint=2 narnia.mp4
|
||||
mp4creator -optimize narnia.mp4</screen>
|
||||
|
||||
Vous pouvez vérifier le résultat final pour vous assurer
|
||||
Vous pouvez vérifier le résultat final pour vous assurer
|
||||
que les pistes de renseignement ont été créées avec succès :
|
||||
|
||||
<screen>mp4creator -list narnia.mp4</screen>
|
||||
@ -4729,12 +4729,12 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
|
||||
Vous devriez voir une liste de pistes : 1 audio, 1 vidéo, et 2 pistes
|
||||
de renseignement
|
||||
|
||||
<screen>Track Type Info
|
||||
1 audio MPEG-4 AAC LC, 8548.714 secs, 190 kbps, 48000 Hz
|
||||
2 video H264 Main@5.1, 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps
|
||||
3 hint Payload mpeg4-generic for track 1
|
||||
4 hint Payload H264 for track 2
|
||||
</screen>
|
||||
<screen>Track Type Info
|
||||
1 audio MPEG-4 AAC LC, 8548.714 secs, 190 kbps, 48000 Hz
|
||||
2 video H264 Main@5.1, 8549.132 secs, 899 kbps, 848x352 @ 23.976001 fps
|
||||
3 hint Payload mpeg4-generic for track 1
|
||||
4 hint Payload H264 for track 2
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
@ -4744,20 +4744,20 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
|
||||
<title>Ajouter des tags de méta-données</title>
|
||||
|
||||
<para>
|
||||
Si vous voulez ajouter des tags dans votre vidéo qui soient visible dans <application>iTunes</application>,
|
||||
vous pouvez utiliser
|
||||
<ulink url="http://atomicparsley.sourceforge.net/">AtomicParsley</ulink>.
|
||||
Si vous voulez ajouter des tags dans votre vidéo qui soient visible dans <application>iTunes</application>,
|
||||
vous pouvez utiliser
|
||||
<ulink url="http://atomicparsley.sourceforge.net/">AtomicParsley</ulink>.
|
||||
|
||||
<screen>AtomicParsley narnia.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite</screen>
|
||||
<screen>AtomicParsley narnia.mp4 --metaEnema --title "The Chronicles of Narnia" --year 2005 --stik Movie --freefree --overWrite</screen>
|
||||
|
||||
L'option <option>--metaEnema</option> efface toutes meta-données existantes.
|
||||
(<application>mp4creator</application> insère son nom dans le tag "encoding tool"),
|
||||
et <option>--freefree</option> récupère l'espace libéré par les méta-données effacées.
|
||||
L'option <option>--stik</option> paramétre le type de vidéo (tel que Film ou Show TV),
|
||||
qu'<application>iTunes</application> utilise pour grouper des fichiers vidéos similaires.
|
||||
L'option <option>--overWrite</option> écrase le fichier d'origine;
|
||||
sans cette option, <application>AtomicParsley</application> créé un fichier automatiquement
|
||||
nommé dans le même répertoire et laisse le fichier d'origine tel quel.
|
||||
L'option <option>--metaEnema</option> efface toutes meta-données existantes.
|
||||
(<application>mp4creator</application> insère son nom dans le tag "encoding tool"),
|
||||
et <option>--freefree</option> récupère l'espace libéré par les méta-données effacées.
|
||||
L'option <option>--stik</option> paramétre le type de vidéo (tel que Film ou Show TV),
|
||||
qu'<application>iTunes</application> utilise pour grouper des fichiers vidéos similaires.
|
||||
L'option <option>--overWrite</option> écrase le fichier d'origine;
|
||||
sans cette option, <application>AtomicParsley</application> créé un fichier automatiquement
|
||||
nommé dans le même répertoire et laisse le fichier d'origine tel quel.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
@ -4822,8 +4822,8 @@ me=umh:partitions=all:trellis=1:qp_step=4:qcomp=0.7:direct_pred=auto:keyint=300
|
||||
<row>
|
||||
<entry>NTSC DVD</entry>
|
||||
<entry>352x240<footnote id='fn-rare-resolutions'><para>
|
||||
Ces résolutions sont rarement utilisées pour les DVDs
|
||||
parce qu'elles sont d'assez basse qualité.</para></footnote></entry>
|
||||
Ces résolutions sont rarement utilisées pour les DVDs
|
||||
parce qu'elles sont d'assez basse qualité.</para></footnote></entry>
|
||||
<entry>MPEG-1</entry>
|
||||
<entry>1856</entry>
|
||||
<entry>48000 Hz</entry>
|
||||
|
@ -500,14 +500,14 @@ Vous pouvez rendre ce réglagle permanant en ajoutant la seconde commande au fic
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Vous pouvez voir l'efficacité du nouveau timer sur la ligne d'état.
|
||||
Les fonctions de gestion de l'énergie des BIOS des certains portables
|
||||
avec des processeurs supportant SpeedStep ne font pas bon ménage avec la RTC.
|
||||
Le son et les images risquent d'être désynchronisés. Brancher le portable sur
|
||||
le secteur avant de le démarrer semble régler le problème dans la plupart des cas.
|
||||
Avec certaines configurations matérielles (confirmé par l'utilisation de lecteurs DVD ne supportant pas
|
||||
le DMA avec une carte-mère basée sur le chipset ALi1541), l'utilisation du timer RTC rend la lecture
|
||||
saccadée (NdT: skippy). Il est recommandé d'utiliser la troisième méthode dans ce cas.
|
||||
Vous pouvez voir l'efficacité du nouveau timer sur la ligne d'état.
|
||||
Les fonctions de gestion de l'énergie des BIOS des certains portables
|
||||
avec des processeurs supportant SpeedStep ne font pas bon ménage avec la RTC.
|
||||
Le son et les images risquent d'être désynchronisés. Brancher le portable sur
|
||||
le secteur avant de le démarrer semble régler le problème dans la plupart des cas.
|
||||
Avec certaines configurations matérielles (confirmé par l'utilisation de lecteurs DVD ne supportant pas
|
||||
le DMA avec une carte-mère basée sur le chipset ALi1541), l'utilisation du timer RTC rend la lecture
|
||||
saccadée (NdT: skippy). Il est recommandé d'utiliser la troisième méthode dans ce cas.
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
<emphasis role="bold">La troisième méthode de synchro</emphasis> est activée par l'option
|
||||
|
@ -359,7 +359,7 @@ MPEG-4 ("DivX") avec la simple copie de la piste audio.
|
||||
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o
|
||||
<replaceable>sortie.avi</replaceable>
|
||||
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
|
||||
-oac copy -o <replaceable>sortie.avi</replaceable>
|
||||
-oac copy -o <replaceable>sortie.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</example>
|
||||
@ -374,9 +374,9 @@ Soyez prudent en utilisant cette méthode car elle peut mener, dans certains cas
|
||||
à des désynchronisation audio/vidéo.
|
||||
<screen>
|
||||
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
|
||||
-oac mp3lame -lameopts vbr=3 -o /dev/null
|
||||
-oac mp3lame -lameopts vbr=3 -o /dev/null
|
||||
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
|
||||
-oac mp3lame -lameopts vbr=3 -o <replaceable>sortie.avi</replaceable>
|
||||
-oac mp3lame -lameopts vbr=3 -o <replaceable>sortie.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</example>
|
||||
@ -514,7 +514,7 @@ utilisera 2: bicubique.
|
||||
Utilisation :
|
||||
<screen>
|
||||
mencoder <replaceable>entree.mpg</replaceable> -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \
|
||||
-vf scale=640:480 -o <replaceable>sortie.avi</replaceable>
|
||||
-vf scale=640:480 -o <replaceable>sortie.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</sect1>
|
||||
@ -569,7 +569,7 @@ jetez un coup d'oeil à <filename>codecs.conf</filename>.
|
||||
Exemple:
|
||||
<screen>
|
||||
mencoder <replaceable>entree.nsv</replaceable> -oac copy -fafmttag 0x706D \
|
||||
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o <replaceable>sortie.avi</replaceable>
|
||||
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o <replaceable>sortie.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
@ -757,9 +757,9 @@ deux passes</title>
|
||||
<screen>
|
||||
rm <replaceable>soustitres.idx</replaceable> <replaceable>soustitres.sub</replaceable>
|
||||
mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
|
||||
-vobsubout <replaceable>soustitres</replaceable> -vobsuboutindex 0 -sid 2
|
||||
-vobsubout <replaceable>soustitres</replaceable> -vobsuboutindex 0 -sid 2
|
||||
mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
|
||||
-vobsubout <replaceable>soustitres</replaceable> -vobsuboutindex 1 -sid 5
|
||||
-vobsubout <replaceable>soustitres</replaceable> -vobsuboutindex 1 -sid 5
|
||||
</screen>
|
||||
</example>
|
||||
|
||||
@ -768,7 +768,7 @@ mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2
|
||||
<screen>
|
||||
rm <replaceable>soustitres.idx</replaceable> <replaceable>soustitres.sub</replaceable>
|
||||
mencoder <replaceable>film.mpg</replaceable> -ifo <replaceable>film.ifo</replaceable> -vobsubout <replaceable>soustitres</replaceable> -vobsuboutindex 0 \
|
||||
-vobsuboutid fr -sid 1 -nosound -ovc copy
|
||||
-vobsuboutid fr -sid 1 -nosound -ovc copy
|
||||
</screen>
|
||||
</example>
|
||||
</sect1>
|
||||
|
@ -282,14 +282,14 @@ x86 en utilisant GCC sans assembleur GNU :
|
||||
Erreur typique obtenue en construisant avec un compilateur C GNU qui n'utilise
|
||||
pas GNU as :
|
||||
<screen>
|
||||
% gmake
|
||||
...
|
||||
gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math
|
||||
-fomit-frame-pointer -I/usr/local/include -o mplayer.o mplayer.c
|
||||
Assembler: mplayer.c
|
||||
"(stdin)", line 3567 : Illegal mnemonic
|
||||
"(stdin)", line 3567 : Syntax error
|
||||
... more "Illegal mnemonic" and "Syntax error" errors ...
|
||||
% gmake
|
||||
...
|
||||
gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math
|
||||
-fomit-frame-pointer -I/usr/local/include -o mplayer.o mplayer.c
|
||||
Assembler: mplayer.c
|
||||
"(stdin)", line 3567 : Illegal mnemonic
|
||||
"(stdin)", line 3567 : Syntax error
|
||||
... more "Illegal mnemonic" and "Syntax error" errors ...
|
||||
</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
@ -381,12 +381,11 @@ Class I H/W Path Driver S/W State H/W Type
|
||||
...
|
||||
ext_bus 1 8/16/5 c720 CLAIMED INTERFACE Built-in SCSI
|
||||
target 3 8/16/5.2 tgt CLAIMED DEVICE
|
||||
disk 4 8/16/5.<emphasis role="bold">2</emphasis>.<emphasis role="bold">0</emphasis> sdisk CLAIMED DEVICE
|
||||
<emphasis role="bold">PIONEER DVD-ROM DVD-305</emphasis> /dev/dsk/c1t2d0
|
||||
<emphasis role="bold">/dev/rdsk/c1t2d0</emphasis>
|
||||
disk 4 8/16/5.<emphasis role="bold">2</emphasis>.<emphasis role="bold">0</emphasis> sdisk CLAIMED DEVICE <emphasis role="bold">PIONEER DVD-ROM DVD-305</emphasis>
|
||||
/dev/dsk/c1t2d0 <emphasis role="bold">/dev/rdsk/c1t2d0</emphasis>
|
||||
target 4 8/16/5.7 tgt CLAIMED DEVICE
|
||||
ctl <emphasis role="bold">1</emphasis> 8/16/5.7.0 sctl CLAIMED DEVICE Initiator
|
||||
/dev/rscsi/c1t7d0 /dev/rscsi/c1t7l0 /dev/scsi/c1t7l0
|
||||
/dev/rscsi/c1t7d0 /dev/rscsi/c1t7l0 /dev/scsi/c1t7l0
|
||||
...
|
||||
</screen>
|
||||
|
||||
|
@ -45,7 +45,7 @@ Autre façon de lire un fichier:
|
||||
</synopsis>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<para>
|
||||
Lecture de plusieurs fichiers:
|
||||
<synopsis>
|
||||
<command>mplayer</command><!--
|
||||
|
@ -150,15 +150,15 @@ screen #0
|
||||
(...)
|
||||
Number of image formats: 7
|
||||
id: 0x32595559 (YUY2)
|
||||
guid: 59555932-0000-0010-8000-00aa00389b71
|
||||
bits per pixel: 16
|
||||
number of planes: 1
|
||||
type: YUV (packed)
|
||||
guid: 59555932-0000-0010-8000-00aa00389b71
|
||||
bits per pixel: 16
|
||||
number of planes: 1
|
||||
type: YUV (packed)
|
||||
id: 0x32315659 (YV12)
|
||||
guid: 59563132-0000-0010-8000-00aa00389b71
|
||||
bits per pixel: 12
|
||||
number of planes: 3
|
||||
type: YUV (planar)
|
||||
guid: 59563132-0000-0010-8000-00aa00389b71
|
||||
bits per pixel: 12
|
||||
number of planes: 3
|
||||
type: YUV (planar)
|
||||
(...etc...)<!--
|
||||
--></screen>
|
||||
Cela doit supporter les formats de pixels YUY2 packed et YV12 planar pour
|
||||
@ -2614,7 +2614,7 @@ qualité
|
||||
10, alors vous taperez la commande suivante
|
||||
<screen>
|
||||
mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10
|
||||
<replaceable>film.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
@ -2915,20 +2915,20 @@ l'exemple suivant (adaptez à votre carte/TV) :
|
||||
|
||||
<programlisting>
|
||||
Section "Device"
|
||||
Identifier "GeForce"
|
||||
VendorName "ASUS"
|
||||
BoardName "nVidia GeForce2/MX 400"
|
||||
pilote "nvidia"
|
||||
#Option "NvAGP" "1"
|
||||
Option "NoLogo"
|
||||
Option "CursorShadow" "on"
|
||||
Identifier "GeForce"
|
||||
VendorName "ASUS"
|
||||
BoardName "nVidia GeForce2/MX 400"
|
||||
pilote "nvidia"
|
||||
#Option "NvAGP" "1"
|
||||
Option "NoLogo"
|
||||
Option "CursorShadow" "on"
|
||||
|
||||
Option "TwinView"
|
||||
Option "TwinViewOrientation" "Clone"
|
||||
Option "MetaModes" "1024x768,640x480"
|
||||
Option "ConnectedMonitor" "CRT, TV"
|
||||
Option "TVStandard" "PAL-B"
|
||||
Option "TVOutFormat" "Composite"
|
||||
Option "TwinView"
|
||||
Option "TwinViewOrientation" "Clone"
|
||||
Option "MetaModes" "1024x768,640x480"
|
||||
Option "ConnectedMonitor" "CRT, TV"
|
||||
Option "TVStandard" "PAL-B"
|
||||
Option "TVOutFormat" "Composite"
|
||||
|
||||
EndSection
|
||||
</programlisting>
|
||||
|
@ -1300,7 +1300,7 @@ Fokozott figyelemmel kell eljárni, ha átlapolt videóval dolgozol:
|
||||
Mindezt észben tartva, itt az első példánk:
|
||||
<screen>
|
||||
mencoder <replaceable>capture.avi</replaceable> -mc 0 -oac lavc -ovc lavc -lavcopts \
|
||||
vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224
|
||||
vcodec=mpeg2video:vbitrate=6000:ilme:ildct:acodec=mp2:abitrate=224
|
||||
</screen>
|
||||
Figyelj az <option>ilme</option> és az <option>ildct</option> kapcsolókra.
|
||||
</para>
|
||||
@ -1560,7 +1560,7 @@ codec használhassa bemenetként.
|
||||
Például:
|
||||
<screen>
|
||||
mplayer <replaceable>forras_fajl.vob</replaceable> -ao pcm:file=<replaceable>cel_hang.wav</replaceable> \
|
||||
-vc dummy -aid 1 -vo null
|
||||
-vc dummy -aid 1 -vo null
|
||||
</screen>
|
||||
ki fogja szedni a második audió sávot a <replaceable>source_file.vob</replaceable>
|
||||
fájlból a <replaceable>destination_sound.wav</replaceable> fájlba.
|
||||
@ -1600,7 +1600,7 @@ konténer formátumokba tud natív audió és videó kimenetet készíteni.
|
||||
Például:
|
||||
<screen>
|
||||
mencoder -oac copy -ovc copy -o <replaceable>kimenet_film.avi</replaceable> \
|
||||
-audiofile <replaceable>bemenet_audio.mp2</replaceable> <replaceable>bemenet_video.avi</replaceable></screen>
|
||||
-audiofile <replaceable>bemenet_audio.mp2</replaceable> <replaceable>bemenet_video.avi</replaceable></screen>
|
||||
Ez a <replaceable>bemenet_video.avi</replaceable> videó fájlból
|
||||
és a <replaceable>bemenet_audio.mp2</replaceable> audió fájlból
|
||||
elkészíti a <replaceable>kimenet_film.avi</replaceable> fájlt.
|
||||
@ -1616,7 +1616,7 @@ demux-álását támogatja.
|
||||
Például:
|
||||
<screen>
|
||||
mencoder -oac copy -ovc copy -o <replaceable>kimenet_film.asf</replaceable> -audiofile <replaceable>bemenet_audio.mp2</replaceable> \
|
||||
<replaceable>bemenet_video.avi</replaceable> -of lavf -lavfopts format=asf</screen>
|
||||
<replaceable>bemenet_video.avi</replaceable> -of lavf -lavfopts format=asf</screen>
|
||||
Ez ugyan azt csinálja, mint az előbbi példa, de a kimeneti
|
||||
konténer ASF lesz.
|
||||
Kérlek figyelj, hogy ez a támogatás még nagyon kísérleti (de minden
|
||||
@ -2170,7 +2170,7 @@ felépítéséhez (ennek vannak hátrányai - lásd a 3. módszert).
|
||||
<emphasis role="bold">kell megadnod</emphasis>.
|
||||
<screen>
|
||||
mencoder dvd://1 -oac copy -vf tfields=2 -ovc lavc \
|
||||
-fps 60000/1001 -ofps 60000/1001<!--
|
||||
-fps 60000/1001 -ofps 60000/1001<!--
|
||||
--></screen>
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
@ -2217,7 +2217,7 @@ képkocka per másodperc sebességű lesz.
|
||||
videók elkódolásához.
|
||||
<screen>
|
||||
mencoder dvd://1 -oac copy -vf pullup,softskip
|
||||
-ovc lavc -ofps 24000/1001<!--
|
||||
-ovc lavc -ofps 24000/1001<!--
|
||||
--></screen>
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
@ -3079,7 +3079,7 @@ Inter:
|
||||
Használat:
|
||||
<screen>
|
||||
mencoder <replaceable>input.avi</replaceable> -o <replaceable>output.avi</replaceable> -oac copy -ovc lavc \
|
||||
-lavcopts inter_matrix=...:intra_matrix=...
|
||||
-lavcopts inter_matrix=...:intra_matrix=...
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
|
@ -259,8 +259,8 @@ Egy Macromedia Flash videó létrehozása, mely lejátszható web böngészőben
|
||||
a Macromedia Flash plugin-nel:
|
||||
<screen>
|
||||
mencoder <replaceable>bemenet.avi</replaceable> -o <replaceable>kimenet.flv</replaceable> -of lavf \
|
||||
-oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \
|
||||
-lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3
|
||||
-oac mp3lame -lameopts abr:br=56 -srate 22050 -ovc lavc \
|
||||
-lavcopts vcodec=flv:vbitrate=500:mbd=2:mv0:trell:v4mv:cbp:last_pred=3
|
||||
</screen>
|
||||
</para>
|
||||
</example>
|
||||
@ -342,7 +342,7 @@ audió sáv másolásával.
|
||||
<screen>
|
||||
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 -oac copy -o /dev/null
|
||||
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
|
||||
-oac copy -o <replaceable>kimenet.avi</replaceable>
|
||||
-oac copy -o <replaceable>kimenet.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</example>
|
||||
@ -356,9 +356,9 @@ Vigyázz ezzela módszerrel, mivel bizonyos esetekben audió/videó
|
||||
deszinkronizációhoz vezethet.
|
||||
<screen>
|
||||
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
|
||||
-oac mp3lame -lameopts vbr=3 -o /dev/null
|
||||
-oac mp3lame -lameopts vbr=3 -o /dev/null
|
||||
mencoder dvd://2 -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
|
||||
-oac mp3lame -lameopts vbr=3 -o <replaceable>kimenet.avi</replaceable>
|
||||
-oac mp3lame -lameopts vbr=3 -o <replaceable>kimenet.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</example>
|
||||
@ -438,15 +438,15 @@ használd a <option>-of mpeg</option> kapcsolót.
|
||||
Példa:
|
||||
<screen>
|
||||
mencoder <replaceable>bemenet.avi</replaceable> -of mpeg -ovc lavc -lavcopts vcodec=mpeg1video \
|
||||
-oac copy <replaceable>egyéb_kapcsolók</replaceable> -o <replaceable>kimenet.mpg</replaceable>
|
||||
-oac copy <replaceable>egyéb_kapcsolók</replaceable> -o <replaceable>kimenet.mpg</replaceable>
|
||||
</screen>
|
||||
Egy MPEG-1-es fájl létrehozása, mely alkalmas minimális multimédia
|
||||
támogatással rendelkező rendszereken, például alapértelmezett Windows
|
||||
telepítéseken történő lejátszásra is:
|
||||
<screen>
|
||||
mencoder <replaceable>bemenet.avi</replaceable> -of mpeg -mpegopts format=mpeg1:tsaf:muxrate=2000 \
|
||||
-o <replaceable>kimenet.mpg</replaceable> -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \
|
||||
-lavcopts vcodec=mpeg1video:vbitrate=1152:keyint=15:mbd=2:aspect=4/3
|
||||
-o <replaceable>kimenet.mpg</replaceable> -oac lavc -lavcopts acodec=mp2:abitrate=224 -ovc lavc \
|
||||
-lavcopts vcodec=mpeg1video:vbitrate=1152:keyint=15:mbd=2:aspect=4/3
|
||||
</screen>
|
||||
Ugyan ez a <systemitem class="library">libavformat</systemitem> MPEG muxer-ének használatával:
|
||||
<screen>
|
||||
@ -497,7 +497,7 @@ Ha ez nincs megadva, akkor a <application>MEncoder</application> a 2: bicubic-et
|
||||
Használat:
|
||||
<screen>
|
||||
mencoder <replaceable>bemenet.mpg</replaceable> -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell \
|
||||
-vf scale=640:480 -o <replaceable>kimenet.avi</replaceable>
|
||||
-vf scale=640:480 -o <replaceable>kimenet.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</sect1>
|
||||
@ -548,7 +548,7 @@ tag-ek listáját megtalálod a <filename>codecs.conf</filename> fájlban.
|
||||
Példa:
|
||||
<screen>
|
||||
mencoder <replaceable>bemenet.nsv</replaceable> -oac copy -fafmttag 0x706D \
|
||||
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o <replaceable>kimenet.avi</replaceable>
|
||||
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -o <replaceable>kimenet.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</sect1>
|
||||
@ -590,7 +590,7 @@ Egy MPEG-4-es fájl létrehozása az aktuális könyvtárból található össze
|
||||
JPEG fájlból:
|
||||
<screen>
|
||||
mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc \
|
||||
-lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o <replaceable>kimenet.avi</replaceable>
|
||||
-lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o <replaceable>kimenet.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</informalexample>
|
||||
@ -600,7 +600,7 @@ mencoder mf://*.jpg -mf w=800:h=600:fps=25:type=jpg -ovc lavc \
|
||||
Egy MPEG-4 fájl létrehozása néhány JPEG fájlból az aktuális könyvtárban:
|
||||
<screen>
|
||||
mencoder mf://<replaceable>frame001.jpg,frame002.jpg</replaceable> -mf w=800:h=600:fps=25:type=jpg \
|
||||
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o <replaceable>kimenet.avi</replaceable>
|
||||
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o <replaceable>kimenet.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</informalexample>
|
||||
@ -611,7 +611,7 @@ Egy MPEG-4 fájl létrehozása JPEG fájlok explicit listájából (az aktuális
|
||||
lévő lista.txt tartalmazza a forrásként felhasználandó fájlokat, soronként egyet):
|
||||
<screen>
|
||||
mencoder mf://<replaceable>@lista.txt</replaceable> -mf w=800:h=600:fps=25:type=jpg \
|
||||
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o <replaceable>kimenet.avi</replaceable>
|
||||
-ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell -oac copy -o <replaceable>kimenet.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
</informalexample>
|
||||
@ -715,9 +715,9 @@ ezeket le kell törölnöd, mielőtt nekiállnál.
|
||||
<screen>
|
||||
rm <replaceable>subtitles.idx</replaceable> <replaceable>subtitles.sub</replaceable>
|
||||
mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:vpass=1 \
|
||||
-vobsubout <replaceable>subtitles</replaceable> -vobsuboutindex 0 -sid 2
|
||||
-vobsubout <replaceable>subtitles</replaceable> -vobsuboutindex 0 -sid 2
|
||||
mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2 \
|
||||
-vobsubout <replaceable>subtitles</replaceable> -vobsuboutindex 1 -sid 5<!--
|
||||
-vobsubout <replaceable>subtitles</replaceable> -vobsuboutindex 1 -sid 5<!--
|
||||
--></screen>
|
||||
</example>
|
||||
|
||||
@ -726,7 +726,7 @@ mencoder dvd://1 -oac copy -ovc lavc -lavcopts vcodec=mpeg4:mbd=2:trell:vpass=2
|
||||
<screen>
|
||||
rm <replaceable>subtitles.idx</replaceable> <replaceable>subtitles.sub</replaceable>
|
||||
mencoder <replaceable>movie.mpg</replaceable> -ifo <replaceable>movie.ifo</replaceable> -vobsubout <replaceable>subtitles</replaceable> -vobsuboutindex 0 \
|
||||
-vobsuboutid fr -sid 1 -nosound -ovc copy
|
||||
-vobsuboutid fr -sid 1 -nosound -ovc copy
|
||||
</screen>
|
||||
</example>
|
||||
</sect1>
|
||||
@ -772,7 +772,7 @@ Lásd a man oldalt a <systemitem>cropdetect</systemitem> és a
|
||||
<para>
|
||||
Használat
|
||||
<screen>mencoder <replaceable>sample-svcd.mpg</replaceable> -vf crop=714:548:0:14 -oac copy -ovc lavc \
|
||||
-lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -o <replaceable>kimenet.avi</replaceable></screen>
|
||||
-lavcopts vcodec=mpeg4:mbd=2:trell:autoaspect -o <replaceable>kimenet.avi</replaceable></screen>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
|
@ -2272,7 +2272,7 @@ parancsot kell használnod:
|
||||
<screen>
|
||||
mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
|
||||
<replaceable>movie.avi</replaceable>
|
||||
<replaceable>movie.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- synced with r25146 -->
|
||||
<!-- synced with r25146 -->
|
||||
<chapter id="usage">
|
||||
<title>Utilizzo</title>
|
||||
|
||||
|
@ -2334,7 +2334,7 @@ eseguire il comando seguente
|
||||
<screen>
|
||||
mplayer -vo zr -zrdev /dev/video0 -zrcrop 352x288+352+0 -zrxdoff 0 -zrbw \
|
||||
-zrcrop 352x288+0+0 -zrdev /dev/video1 -zrquality 10 \
|
||||
<replaceable>film.avi</replaceable>
|
||||
<replaceable>film.avi</replaceable>
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
|
@ -348,9 +348,9 @@
|
||||
(define (shade-verbatim-attr-element element)
|
||||
(list
|
||||
(list "BORDER"
|
||||
(cond
|
||||
((equal? element (normalize "SCREEN")) "1")
|
||||
(else "0")))
|
||||
(cond
|
||||
((equal? element (normalize "SCREEN")) "1")
|
||||
(else "0")))
|
||||
(list "BGCOLOR" (car (cdr (shade-verbatim-element-colors element))))
|
||||
(list "WIDTH" ($table-width$))))
|
||||
|
||||
|
@ -485,7 +485,7 @@ info all-registers
|
||||
</screen>
|
||||
A następnie uruchomić następujące polecenie:
|
||||
<screen>
|
||||
gdb mplayer --core=core -batch --command=<replaceable>plik_z_poleceniami</replaceable> > mplayer.bug
|
||||
gdb mplayer --core=core -batch --command=<replaceable>plik_z_poleceniami</replaceable> > mplayer.bug
|
||||
</screen>
|
||||
</para>
|
||||
</sect3>
|
||||
|
@ -409,7 +409,7 @@ Czy używasz FVWM? Spróbuj tego:
|
||||
<listitem><para>
|
||||
<menuchoice><guimenu>Start</guimenu> <guisubmenu>Settings</guisubmenu>
|
||||
<guisubmenu>Configuration</guisubmenu>
|
||||
<guimenuitem>Base Configuration</guimenuitem></menuchoice>
|
||||
<guimenuitem>Base Configuration</guimenuitem></menuchoice>
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
Ustaw <systemitem>Use Applications position hints</systemitem>
|
||||
|
@ -175,20 +175,20 @@ procesorze z taktowaniem 400MHz. Będziesz potrzebował do tego biblioteki
|
||||
|
||||
<para><emphasis role="bold">Caveat:</emphasis></para>
|
||||
<itemizedlist>
|
||||
<listitem><para><emphasis role="bold">mediaLib</emphasis> jest
|
||||
<emphasis role="bold">aktualnie wyłączone</emphasis> w domyślnej
|
||||
konfiguracji <application>MPlayera</application>, z powodu błędów.
|
||||
Użytkownicy SPARC-ów, którzy budują MPlayera z obsługą mediaLib
|
||||
informowali o delikatnym, zielonymi miganiu wideo kodowane i dekodowanego
|
||||
przez libavcodec. Możesz włączyć mediaLib, jeżeli chcesz używając:
|
||||
<screen>
|
||||
$ ./configure --enable-mlib
|
||||
</screen>
|
||||
Robisz to na własne ryzyko. Użytkownicy x86 powinni
|
||||
<emphasis role="bold">nigdy</emphasis> nie używać mediaLib,
|
||||
ponieważ w efekcie otrzymają kiepską wydajność MPlayera.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
<listitem><para><emphasis role="bold">mediaLib</emphasis> jest
|
||||
<emphasis role="bold">aktualnie wyłączone</emphasis> w domyślnej
|
||||
konfiguracji <application>MPlayera</application>, z powodu błędów.
|
||||
Użytkownicy SPARC-ów, którzy budują MPlayera z obsługą mediaLib
|
||||
informowali o delikatnym, zielonymi miganiu wideo kodowane i dekodowanego
|
||||
przez libavcodec. Możesz włączyć mediaLib, jeżeli chcesz używając:
|
||||
<screen>
|
||||
$ ./configure --enable-mlib
|
||||
</screen>
|
||||
Robisz to na własne ryzyko. Użytkownicy x86 powinni
|
||||
<emphasis role="bold">nigdy</emphasis> nie używać mediaLib,
|
||||
ponieważ w efekcie otrzymają kiepską wydajność MPlayera.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
Aby zbudować pakiet, będziesz potrzebował GNU <application>make</application>
|
||||
@ -224,9 +224,9 @@ systemie).
|
||||
|
||||
<para>Rozwiązania najczęstszych problemów:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
Błąd jaki wyświetli <filename>configure</filename> na Solarisie x86,
|
||||
używającym GCC bez GNU assemblera:
|
||||
<listitem><para>
|
||||
Błąd jaki wyświetli <filename>configure</filename> na Solarisie x86,
|
||||
używającym GCC bez GNU assemblera:
|
||||
<screen>
|
||||
% configure
|
||||
...
|
||||
@ -252,32 +252,31 @@ Typowy błąd, jaki otrzymasz przy próbie budowy kompilatorem GNU C, który nie
|
||||
</listitem>
|
||||
|
||||
<listitem><para><application>MPlayer</application> może się wysypać
|
||||
podczas dekodowania i kodowania wideo używających win32codecs:
|
||||
<screen>
|
||||
...
|
||||
Trying to force audio codec driver family acm...
|
||||
Opening audio decoder: [acm] Win32/ACM decoders
|
||||
sysi86(SI86DSCR): Invalid argument
|
||||
Couldn't install fs segment, expect segfault
|
||||
podczas dekodowania i kodowania wideo używających win32codecs:
|
||||
<screen>
|
||||
...
|
||||
Trying to force audio codec driver family acm...
|
||||
Opening audio decoder: [acm] Win32/ACM decoders
|
||||
sysi86(SI86DSCR): Invalid argument
|
||||
Couldn't install fs segment, expect segfault
|
||||
|
||||
|
||||
MPlayer interrupted by signal 11 in module: init_audio_codec
|
||||
...
|
||||
</screen>
|
||||
Dzieje się tak z powodu zmian w sysi86() w Solaris 10 i wydaniach
|
||||
pre-Solaris Nevada b31. Zostało to naprawione w Solaris Nevada b32;
|
||||
jednak Sun nie przeniósł jeszcze poprawki do Solarisa 10. Projekt
|
||||
MPlayer poinformował o tym problemie Sun i łatka jest aktualnie
|
||||
wprowadzana do Solarisa 10. Więcej informacji o tym błędzie może
|
||||
zostać znaleziona na stronie:
|
||||
<ulink
|
||||
url="http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6308413"/>.
|
||||
</para>
|
||||
</listitem>
|
||||
MPlayer interrupted by signal 11 in module: init_audio_codec
|
||||
...
|
||||
</screen>
|
||||
Dzieje się tak z powodu zmian w sysi86() w Solaris 10 i wydaniach
|
||||
pre-Solaris Nevada b31. Zostało to naprawione w Solaris Nevada b32;
|
||||
jednak Sun nie przeniósł jeszcze poprawki do Solarisa 10. Projekt
|
||||
MPlayer poinformował o tym problemie Sun i łatka jest aktualnie
|
||||
wprowadzana do Solarisa 10. Więcej informacji o tym błędzie może
|
||||
zostać znaleziona na stronie:
|
||||
<ulink
|
||||
url="http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6308413"/>.
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem><para>
|
||||
Ze względu na błędy występujące w Solarisie 8, możesz nie być w stanie odtwarzać
|
||||
płyt DVD o pojemności większej niż 4 GB:
|
||||
Ze względu na błędy występujące w Solarisie 8, możesz nie być w stanie odtwarzać
|
||||
płyt DVD o pojemności większej niż 4 GB:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
@ -469,33 +468,33 @@ znajdziesz je na
|
||||
4Front Technologies udostępnia swoje sterowniki OSS za darmo do niekomercyjnego
|
||||
zastosowania; jednakże, nie ma aktualnie sterowników wyjścia audio dla AIX 5.2 lub 5.3.
|
||||
Oznacza to, że <emphasis role="bold">AIX 5.2 i 5.3 nie potrafią aktualnie używać
|
||||
wyjścia audio MPlayera.</emphasis>
|
||||
wyjścia audio MPlayera.</emphasis>
|
||||
</para>
|
||||
|
||||
<para>Rozwiązania częstych problemów:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Jeżeli otrzymujesz od <filename>configure</filename> taki komunikat błędu:
|
||||
<screen>
|
||||
$ ./configure
|
||||
...
|
||||
Checking for iconv program ... no
|
||||
No working iconv program found, use
|
||||
--charset=US-ASCII to continue anyway.
|
||||
Messages in the GTK-2 interface will be broken then.
|
||||
</screen>
|
||||
To dzieje się tak dlatego, że AIX używa nie standardowych
|
||||
zestawów nazw znaków; dlatego też, konwersja wyjścia MPlayera
|
||||
do innego zestawu znaków (kodowania) nie jest aktualnie obsługiwana.
|
||||
Rozwiązaniem jest użycie:
|
||||
<screen>
|
||||
$ ./configure --charset=noconv
|
||||
</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Jeżeli otrzymujesz od <filename>configure</filename> taki komunikat błędu:
|
||||
<screen>
|
||||
$ ./configure
|
||||
...
|
||||
Checking for iconv program ... no
|
||||
No working iconv program found, use
|
||||
--charset=US-ASCII to continue anyway.
|
||||
Messages in the GTK-2 interface will be broken then.
|
||||
</screen>
|
||||
To dzieje się tak dlatego, że AIX używa nie standardowych
|
||||
zestawów nazw znaków; dlatego też, konwersja wyjścia MPlayera
|
||||
do innego zestawu znaków (kodowania) nie jest aktualnie obsługiwana.
|
||||
Rozwiązaniem jest użycie:
|
||||
<screen>
|
||||
$ ./configure --charset=noconv
|
||||
</screen>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
</sect2>
|
||||
|
||||
@ -625,15 +624,15 @@ wolna.
|
||||
<note>
|
||||
|
||||
<para>Na Windowsie automatyczne wykrywanie typu procesora
|
||||
wyłącza rozszerzenie SSE z powodu okazjonalnych i ciężkich
|
||||
do wyśledzenia błędów powodujących zakończenie aplikacji. Jeżeli
|
||||
nadal chesz mieć obsługę SSE pod Windowsem, będziesz musiał
|
||||
skompilować program bez wykrywania typu CPU w trakcie działania.
|
||||
wyłącza rozszerzenie SSE z powodu okazjonalnych i ciężkich
|
||||
do wyśledzenia błędów powodujących zakończenie aplikacji. Jeżeli
|
||||
nadal chesz mieć obsługę SSE pod Windowsem, będziesz musiał
|
||||
skompilować program bez wykrywania typu CPU w trakcie działania.
|
||||
</para>
|
||||
|
||||
<para>Jeżeli masz Pentium 4 i program wysypuje Ci się podczas używania
|
||||
kodeków RealPlayer'a, prawdopodobnie będziesz musiał wyłączyć
|
||||
obsługę hyperthreading'u.
|
||||
kodeków RealPlayer'a, prawdopodobnie będziesz musiał wyłączyć
|
||||
obsługę hyperthreading'u.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
@ -697,51 +696,51 @@ skorzystać ze sterownika wyjścia video <option>corevideo</option>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Niestety, to podstawowe środowisko ni epozwoli ci na skorzystanie ze
|
||||
wszystkich fajnych możliwości <application>MPlayera</application>.
|
||||
Przykładowo, żeby uzyskać wkompilowaną obsługę OSD, będziesz
|
||||
potrzebował bibliotek <systemitem class="library">fontconfig</systemitem>
|
||||
i <systemitem class="library">freetype</systemitem>
|
||||
zainstalowanych na swojej maszynie.
|
||||
W przeciwieństwie do innych Uniksów, takich jak większość odmian
|
||||
Linuksa i BSD, OS X nie ma systemu pakietów dostarczanego razem
|
||||
z systemem.
|
||||
</para>
|
||||
Niestety, to podstawowe środowisko ni epozwoli ci na skorzystanie ze
|
||||
wszystkich fajnych możliwości <application>MPlayera</application>.
|
||||
Przykładowo, żeby uzyskać wkompilowaną obsługę OSD, będziesz
|
||||
potrzebował bibliotek <systemitem class="library">fontconfig</systemitem>
|
||||
i <systemitem class="library">freetype</systemitem>
|
||||
zainstalowanych na swojej maszynie.
|
||||
W przeciwieństwie do innych Uniksów, takich jak większość odmian
|
||||
Linuksa i BSD, OS X nie ma systemu pakietów dostarczanego razem
|
||||
z systemem.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Można wybierać spośród co najmniej dwóch systemów pakietów:
|
||||
<ulink url="http://fink.sourceforge.net/">Fink</ulink> i
|
||||
<ulink url="http://darwinports.opendarwin.org/">DarwinPorts</ulink>.\
|
||||
Oba dostarczają takie same usługi (np. dużo pakietów do wyboru,
|
||||
rozwiązywanie zależności, możliwość łatwego dodania/aktualizacji/usunięcia
|
||||
pakietów itp.).
|
||||
Fink oferuje zarówno binarne pakiety, jak i możliwość zbudowania wszystkiego
|
||||
ze źródeł. Natomiast DarwinPorts pozwala tylko na budowanie ze źródeł.
|
||||
Autorzy tego przewodnika wybrali DarwinPorts z powodu tej prostej przyczyny,
|
||||
że jego podstawowa wersja była lżejsza.
|
||||
Podane przykłady będą oparte na DarwinPorts.
|
||||
</para>
|
||||
Można wybierać spośród co najmniej dwóch systemów pakietów:
|
||||
<ulink url="http://fink.sourceforge.net/">Fink</ulink> i
|
||||
<ulink url="http://darwinports.opendarwin.org/">DarwinPorts</ulink>.\
|
||||
Oba dostarczają takie same usługi (np. dużo pakietów do wyboru,
|
||||
rozwiązywanie zależności, możliwość łatwego dodania/aktualizacji/usunięcia
|
||||
pakietów itp.).
|
||||
Fink oferuje zarówno binarne pakiety, jak i możliwość zbudowania wszystkiego
|
||||
ze źródeł. Natomiast DarwinPorts pozwala tylko na budowanie ze źródeł.
|
||||
Autorzy tego przewodnika wybrali DarwinPorts z powodu tej prostej przyczyny,
|
||||
że jego podstawowa wersja była lżejsza.
|
||||
Podane przykłady będą oparte na DarwinPorts.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Przykładowo, żeby skomilować <application>MPlayera</application> z obsługą
|
||||
OSD:
|
||||
<screen>sudo port install pkgconfig</screen>
|
||||
Zainstaluje to <application>pkg-config</application>, który jest systemem
|
||||
do zarządzania flagami kompilacji/dowiązań bibliotek.
|
||||
<application>MPlayerowy</application> skrypt
|
||||
<systemitem>configure</systemitem>używa go do prawidłowego
|
||||
wykrywania bibliotek.
|
||||
Następnie możesz zainstalować <application>fontconfig</application>
|
||||
w podobny sposób:
|
||||
<screen>sudo port install fontconfig</screen>
|
||||
Następnie możesz uruchomić <application>MPlayerowy</application> skrypt
|
||||
<systemitem>configure</systemitem> (zapisz zmienne systemowe
|
||||
<systemitem>PKG_CONFIG_PATH</systemitem>
|
||||
i <systemitem>PATH</systemitem>, żeby
|
||||
<systemitem>configure</systemitem> znalazł biblioteki zainstalowane
|
||||
przez DarwinPorts):
|
||||
<screen>PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/ PATH=$PATH:/opt/local/bin/ ./configure</screen>
|
||||
</para>
|
||||
Przykładowo, żeby skomilować <application>MPlayera</application> z obsługą
|
||||
OSD:
|
||||
<screen>sudo port install pkgconfig</screen>
|
||||
Zainstaluje to <application>pkg-config</application>, który jest systemem
|
||||
do zarządzania flagami kompilacji/dowiązań bibliotek.
|
||||
<application>MPlayerowy</application> skrypt
|
||||
<systemitem>configure</systemitem>używa go do prawidłowego
|
||||
wykrywania bibliotek.
|
||||
Następnie możesz zainstalować <application>fontconfig</application>
|
||||
w podobny sposób:
|
||||
<screen>sudo port install fontconfig</screen>
|
||||
Następnie możesz uruchomić <application>MPlayerowy</application> skrypt
|
||||
<systemitem>configure</systemitem> (zapisz zmienne systemowe
|
||||
<systemitem>PKG_CONFIG_PATH</systemitem>
|
||||
i <systemitem>PATH</systemitem>, żeby
|
||||
<systemitem>configure</systemitem> znalazł biblioteki zainstalowane
|
||||
przez DarwinPorts):
|
||||
<screen>PKG_CONFIG_PATH=/opt/local/lib/pkgconfig/ PATH=$PATH:/opt/local/bin/ ./configure</screen>
|
||||
</para>
|
||||
|
||||
<sect2 id="osx_gui">
|
||||
<title>MPlayer OS X GUI</title>
|
||||
@ -775,8 +774,8 @@ AltiVec.
|
||||
<para>
|
||||
Aby pobrać moduł z repozytorium SVN wykonaj polecenia:
|
||||
<screen>
|
||||
svn checkout svn://svn.mplayerhq.hu/mplayerosx/trunk/ mplayerosx
|
||||
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/ main
|
||||
svn checkout svn://svn.mplayerhq.hu/mplayerosx/trunk/ mplayerosx
|
||||
svn checkout svn://svn.mplayerhq.hu/mplayer/trunk/ main
|
||||
</screen>
|
||||
</para>
|
||||
<para>
|
||||
|
@ -1118,55 +1118,55 @@ Otwórz okno przeglądarki skórek.
|
||||
</sect1>
|
||||
|
||||
<sect1 id="skin-quality">
|
||||
<title>Tworzenie dobrych skórek</title>
|
||||
<title>Tworzenie dobrych skórek</title>
|
||||
|
||||
<para>
|
||||
Wygląda na to, że przeczytałeś o tworzeniu skórek
|
||||
dla GUI <application>MPlayera</application>, dałeś z siebie
|
||||
wszystko używając <application>Gimpa</application>
|
||||
i chciałbyś umieścić u nas swoją skórkę?
|
||||
Zapoznaj się z kilkoma wytycznymi, żeby uniknąć najczęstszych pomyłek
|
||||
i stworzyć skórkę wysokiej jakości.
|
||||
</para>
|
||||
<para>
|
||||
Wygląda na to, że przeczytałeś o tworzeniu skórek
|
||||
dla GUI <application>MPlayera</application>, dałeś z siebie
|
||||
wszystko używając <application>Gimpa</application>
|
||||
i chciałbyś umieścić u nas swoją skórkę?
|
||||
Zapoznaj się z kilkoma wytycznymi, żeby uniknąć najczęstszych pomyłek
|
||||
i stworzyć skórkę wysokiej jakości.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Chcemy aby skórki, które dodajemy do naszego repozytorium,
|
||||
spełniały określone standardy jakości. Istnieje również kilka rzeczy,
|
||||
które możesz zrobić, żeby ułatwić sobie życie.
|
||||
</para>
|
||||
<para>
|
||||
Chcemy aby skórki, które dodajemy do naszego repozytorium,
|
||||
spełniały określone standardy jakości. Istnieje również kilka rzeczy,
|
||||
które możesz zrobić, żeby ułatwić sobie życie.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Jako wzorzec możesz wziąć skórkę <systemitem>Blue</systemitem>,
|
||||
od wersji 1.5 spełnia one wszystkie wymienione niżej kryteria.
|
||||
</para>
|
||||
<para>
|
||||
Jako wzorzec możesz wziąć skórkę <systemitem>Blue</systemitem>,
|
||||
od wersji 1.5 spełnia one wszystkie wymienione niżej kryteria.
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem><para>Do każdej skórki powinien być dołączony plik
|
||||
<filename>README</filename> zawierający informacje
|
||||
o tobie, czyli autorze, prawach autorskich i licencji i wszystkie
|
||||
inne informacje, które zechcesz dodać. Jeżeli chcesz prowadzić
|
||||
listę zmian, ten plik jest na to dobrym miejscem.</para></listitem>
|
||||
<itemizedlist>
|
||||
<listitem><para>Do każdej skórki powinien być dołączony plik
|
||||
<filename>README</filename> zawierający informacje
|
||||
o tobie, czyli autorze, prawach autorskich i licencji i wszystkie
|
||||
inne informacje, które zechcesz dodać. Jeżeli chcesz prowadzić
|
||||
listę zmian, ten plik jest na to dobrym miejscem.</para></listitem>
|
||||
|
||||
<listitem><para>Należy dodać plik <filename>VERSION</filename>
|
||||
zawierający tylko i wyłącznie wersję skórki zapisaną w jednej linii (np. 1.0)
|
||||
</para></listitem>
|
||||
<listitem><para>Należy dodać plik <filename>VERSION</filename>
|
||||
zawierający tylko i wyłącznie wersję skórki zapisaną w jednej linii (np. 1.0)
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>Poziome i pionowe kontrolki (suwaki do zmiany głośności
|
||||
albo pozycji) powinny mieć gałki prawidłowo wycentrowane na środku
|
||||
suwaka. Powinno się dać przesunąć gałkę na oba końce suwaka, ale nie
|
||||
poza jego obszar.</para></listitem>
|
||||
<listitem><para>Poziome i pionowe kontrolki (suwaki do zmiany głośności
|
||||
albo pozycji) powinny mieć gałki prawidłowo wycentrowane na środku
|
||||
suwaka. Powinno się dać przesunąć gałkę na oba końce suwaka, ale nie
|
||||
poza jego obszar.</para></listitem>
|
||||
|
||||
<listitem><para>Elementy skórki powinny mieć prawidłowo zadeklarowane
|
||||
rozmiary w pliku skórki. W przeciwnym wypadku możliwe będzie
|
||||
kliknięcie poza obszarem np. przycisku i jego naciśnięcia
|
||||
lub kliknięcie wewnątrz obszaru przycisku i nie naciśnięcie go.
|
||||
</para></listitem>
|
||||
<listitem><para>Elementy skórki powinny mieć prawidłowo zadeklarowane
|
||||
rozmiary w pliku skórki. W przeciwnym wypadku możliwe będzie
|
||||
kliknięcie poza obszarem np. przycisku i jego naciśnięcia
|
||||
lub kliknięcie wewnątrz obszaru przycisku i nie naciśnięcie go.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>Plik <filename>skin</filename> powinien być
|
||||
ładnie sformatowany i nie powinien zawierać tabulacji. Ładnie
|
||||
sformatowany, czyli taki w którym numery są ładnie ustawione
|
||||
w kolumnach.</para></listitem>
|
||||
</itemizedlist>
|
||||
<listitem><para>Plik <filename>skin</filename> powinien być
|
||||
ładnie sformatowany i nie powinien zawierać tabulacji. Ładnie
|
||||
sformatowany, czyli taki w którym numery są ładnie ustawione
|
||||
w kolumnach.</para></listitem>
|
||||
</itemizedlist>
|
||||
|
||||
</sect1>
|
||||
|
||||
|
@ -193,7 +193,7 @@ VOBsub субтитры состоят из большого (несколько
|
||||
<term><option>-subdelay <replaceable>sec</replaceable></option></term>
|
||||
<listitem><para>
|
||||
Задерживает субтитры на <option><replaceable>sec</replaceable></option>
|
||||
секунд. Это значение может быть отрицательным.
|
||||
секунд. Это значение может быть отрицательным.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
|
@ -2,8 +2,7 @@
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version='1.0'
|
||||
xmlns="http://www.w3.org/TR/xhtml1/transitional"
|
||||
exclude-result-prefixes="#default"
|
||||
>
|
||||
exclude-result-prefixes="#default">
|
||||
|
||||
<!-- $Id -->
|
||||
|
||||
|
18
Makefile
18
Makefile
@ -750,21 +750,21 @@ ADD_ALL_EXESUFS = $(1) $(call ADDSUFFIXES,$(EXESUFS_ALL),$(1))
|
||||
|
||||
all: $(ALL_PRG-yes) locales
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ -MD -MP -MF $*.d $<
|
||||
|
||||
%.o: %.cpp
|
||||
$(CXX) $(CXXFLAGS) -c -o $@ -MD -MP -MF $*.d $<
|
||||
|
||||
%.o: %.m
|
||||
$(CC) $(CFLAGS) -c -o $@ -MD -MP -MF $*.d $<
|
||||
|
||||
%.ho: %.h
|
||||
$(CC) $(CFLAGS) -Wno-unused -c -o $@ -x c $<
|
||||
|
||||
%.o: %.S
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
%.o: %.cpp
|
||||
$(CC) $(CXXFLAGS) -c -o $@ $<
|
||||
|
||||
%.o: %.m
|
||||
$(CC) $(CFLAGS) -c -o $@ $<
|
||||
|
||||
%-rc.o: %.rc
|
||||
$(WINDRES) -I. $< $@
|
||||
|
||||
|
48
command.c
48
command.c
@ -2917,6 +2917,17 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
|
||||
mpctx->stop_play = PT_STOP;
|
||||
break;
|
||||
|
||||
case MP_CMD_OSD_SHOW_PROGRESSION:{
|
||||
int len = demuxer_get_time_length(mpctx->demuxer);
|
||||
int pts = demuxer_get_current_time(mpctx->demuxer);
|
||||
set_osd_bar(mpctx, 0, "Position", 0, 100, demuxer_get_percent_pos(mpctx->demuxer));
|
||||
set_osd_msg(OSD_MSG_TEXT, 1, osd_duration,
|
||||
"%c %02d:%02d:%02d / %02d:%02d:%02d",
|
||||
mpctx->osd_function, pts/3600, (pts/60)%60, pts%60,
|
||||
len/3600, (len/60)%60, len%60);
|
||||
}
|
||||
break;
|
||||
|
||||
#ifdef CONFIG_RADIO
|
||||
case MP_CMD_RADIO_STEP_CHANNEL:
|
||||
if (mpctx->demuxer->stream->type == STREAMTYPE_RADIO) {
|
||||
@ -3387,6 +3398,43 @@ void run_command(MPContext *mpctx, mp_cmd_t *cmd)
|
||||
|
||||
#endif
|
||||
|
||||
case MP_CMD_AF_SWITCH:
|
||||
if (sh_audio)
|
||||
{
|
||||
af_uninit(mpctx->mixer.afilter);
|
||||
af_init(mpctx->mixer.afilter);
|
||||
}
|
||||
case MP_CMD_AF_ADD:
|
||||
case MP_CMD_AF_DEL:
|
||||
if (!sh_audio)
|
||||
break;
|
||||
{
|
||||
char* af_args = strdup(cmd->args[0].v.s);
|
||||
char* af_commands = af_args;
|
||||
char* af_command;
|
||||
af_instance_t* af;
|
||||
while ((af_command = strsep(&af_commands, ",")) != NULL)
|
||||
{
|
||||
if (cmd->id == MP_CMD_AF_DEL)
|
||||
{
|
||||
af = af_get(mpctx->mixer.afilter, af_command);
|
||||
if (af != NULL)
|
||||
af_remove(mpctx->mixer.afilter, af);
|
||||
}
|
||||
else
|
||||
af_add(mpctx->mixer.afilter, af_command);
|
||||
}
|
||||
build_afilter_chain(mpctx, sh_audio, &ao_data);
|
||||
free(af_args);
|
||||
}
|
||||
break;
|
||||
case MP_CMD_AF_CLR:
|
||||
if (!sh_audio)
|
||||
break;
|
||||
af_uninit(mpctx->mixer.afilter);
|
||||
af_init(mpctx->mixer.afilter);
|
||||
build_afilter_chain(mpctx, sh_audio, &ao_data);
|
||||
break;
|
||||
default:
|
||||
mp_msg(MSGT_CPLAYER, MSGL_V,
|
||||
"Received unknown cmd %s\n", cmd->name);
|
||||
|
4
configure
vendored
4
configure
vendored
@ -2412,6 +2412,7 @@ else
|
||||
fi
|
||||
|
||||
cc_check -mno-omit-leaf-frame-pointer && cflags_no_omit_leaf_frame_pointer="-mno-omit-leaf-frame-pointer"
|
||||
cc_check -MD -MP && CFLAGS="-MD -MP $CFLAGS"
|
||||
|
||||
|
||||
if test -n "$LDFLAGS" ; then
|
||||
@ -7852,9 +7853,6 @@ EXTRALIBS = $extra_ldflags $_ld_static $_ld_lm $extra_libs
|
||||
EXTRALIBS_MPLAYER = $libs_mplayer
|
||||
EXTRALIBS_MENCODER = $libs_mencoder
|
||||
|
||||
MPDEPEND_CMD = \$(CC) -MM \$(CFLAGS) \$(filter-out %.xpm,\$(filter-out %.h,$^)) | sed -e "s,[0-9a-z._-]*: \([a-z0-9/]*/\)[^/]* ,\1&," -e "s,\(.*\)\.o: ,\1.d &,"
|
||||
MPDEPEND_CMD_CXX = \$(CC) -MM \$(CXXFLAGS) \$(filter-out %.hh,\$(filter-out %.h,$^)) | sed -e "s,[0-9a-z._-]*: \([a-z0-9/]*/\)[^/]* ,\1&," -e "s,\(.*\)\.o: ,\1.d &,"
|
||||
|
||||
GETCH = $_getch
|
||||
TIMER = $_timer
|
||||
|
||||
|
274
drivers/3dfx.h
274
drivers/3dfx.h
@ -29,10 +29,10 @@
|
||||
#define VOODOO_YUV_PLANE_OFFSET ((unsigned long int)0x0C00000)
|
||||
|
||||
#define VOODOO_BLT_FORMAT_YUYV (8<<16)
|
||||
#define VOODOO_BLT_FORMAT_UYVY (9<<16)
|
||||
#define VOODOO_BLT_FORMAT_UYVY (9<<16)
|
||||
#define VOODOO_BLT_FORMAT_16 (3<<16)
|
||||
#define VOODOO_BLT_FORMAT_24 (4<<16)
|
||||
#define VOODOO_BLT_FORMAT_32 (5<<16)
|
||||
#define VOODOO_BLT_FORMAT_24 (4<<16)
|
||||
#define VOODOO_BLT_FORMAT_32 (5<<16)
|
||||
|
||||
#define VOODOO_YUV_STRIDE (1024>>2)
|
||||
|
||||
@ -164,95 +164,95 @@ typedef struct voodoo_yuv_fb_t voodoo_yuv_fb;
|
||||
*/
|
||||
|
||||
#ifndef PCI_DEVICE_ID_3DFX_VOODOO5
|
||||
#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009
|
||||
#define PCI_DEVICE_ID_3DFX_VOODOO5 0x0009
|
||||
#endif
|
||||
|
||||
/* membase0 register offsets */
|
||||
#define STATUS 0x00
|
||||
#define PCIINIT0 0x04
|
||||
#define SIPMONITOR 0x08
|
||||
#define LFBMEMORYCONFIG 0x0c
|
||||
#define MISCINIT0 0x10
|
||||
#define MISCINIT1 0x14
|
||||
#define DRAMINIT0 0x18
|
||||
#define DRAMINIT1 0x1c
|
||||
#define AGPINIT 0x20
|
||||
#define TMUGBEINIT 0x24
|
||||
#define VGAINIT0 0x28
|
||||
#define VGAINIT1 0x2c
|
||||
#define DRAMCOMMAND 0x30
|
||||
#define DRAMDATA 0x34
|
||||
/* reserved 0x38 */
|
||||
/* reserved 0x3c */
|
||||
#define PLLCTRL0 0x40
|
||||
#define PLLCTRL1 0x44
|
||||
#define PLLCTRL2 0x48
|
||||
#define DACMODE 0x4c
|
||||
#define DACADDR 0x50
|
||||
#define DACDATA 0x54
|
||||
#define RGBMAXDELTA 0x58
|
||||
#define VIDPROCCFG 0x5c
|
||||
#define HWCURPATADDR 0x60
|
||||
#define HWCURLOC 0x64
|
||||
#define HWCURC0 0x68
|
||||
#define HWCURC1 0x6c
|
||||
#define VIDINFORMAT 0x70
|
||||
#define VIDINSTATUS 0x74
|
||||
#define VIDSERPARPORT 0x78
|
||||
#define VIDINXDELTA 0x7c
|
||||
#define VIDININITERR 0x80
|
||||
#define VIDINYDELTA 0x84
|
||||
#define VIDPIXBUFTHOLD 0x88
|
||||
#define VIDCHRMIN 0x8c
|
||||
#define VIDCHRMAX 0x90
|
||||
#define VIDCURLIN 0x94
|
||||
#define VIDSCREENSIZE 0x98
|
||||
#define VIDOVRSTARTCRD 0x9c
|
||||
#define VIDOVRENDCRD 0xa0
|
||||
#define VIDOVRDUDX 0xa4
|
||||
#define VIDOVRDUDXOFF 0xa8
|
||||
#define VIDOVRDVDY 0xac
|
||||
#define STATUS 0x00
|
||||
#define PCIINIT0 0x04
|
||||
#define SIPMONITOR 0x08
|
||||
#define LFBMEMORYCONFIG 0x0c
|
||||
#define MISCINIT0 0x10
|
||||
#define MISCINIT1 0x14
|
||||
#define DRAMINIT0 0x18
|
||||
#define DRAMINIT1 0x1c
|
||||
#define AGPINIT 0x20
|
||||
#define TMUGBEINIT 0x24
|
||||
#define VGAINIT0 0x28
|
||||
#define VGAINIT1 0x2c
|
||||
#define DRAMCOMMAND 0x30
|
||||
#define DRAMDATA 0x34
|
||||
/* reserved 0x38 */
|
||||
/* reserved 0x3c */
|
||||
#define PLLCTRL0 0x40
|
||||
#define PLLCTRL1 0x44
|
||||
#define PLLCTRL2 0x48
|
||||
#define DACMODE 0x4c
|
||||
#define DACADDR 0x50
|
||||
#define DACDATA 0x54
|
||||
#define RGBMAXDELTA 0x58
|
||||
#define VIDPROCCFG 0x5c
|
||||
#define HWCURPATADDR 0x60
|
||||
#define HWCURLOC 0x64
|
||||
#define HWCURC0 0x68
|
||||
#define HWCURC1 0x6c
|
||||
#define VIDINFORMAT 0x70
|
||||
#define VIDINSTATUS 0x74
|
||||
#define VIDSERPARPORT 0x78
|
||||
#define VIDINXDELTA 0x7c
|
||||
#define VIDININITERR 0x80
|
||||
#define VIDINYDELTA 0x84
|
||||
#define VIDPIXBUFTHOLD 0x88
|
||||
#define VIDCHRMIN 0x8c
|
||||
#define VIDCHRMAX 0x90
|
||||
#define VIDCURLIN 0x94
|
||||
#define VIDSCREENSIZE 0x98
|
||||
#define VIDOVRSTARTCRD 0x9c
|
||||
#define VIDOVRENDCRD 0xa0
|
||||
#define VIDOVRDUDX 0xa4
|
||||
#define VIDOVRDUDXOFF 0xa8
|
||||
#define VIDOVRDVDY 0xac
|
||||
/* ... */
|
||||
#define VIDOVRDVDYOFF 0xe0
|
||||
#define VIDDESKSTART 0xe4
|
||||
#define VIDDESKSTRIDE 0xe8
|
||||
#define VIDINADDR0 0xec
|
||||
#define VIDINADDR1 0xf0
|
||||
#define VIDINADDR2 0xf4
|
||||
#define VIDINSTRIDE 0xf8
|
||||
#define VIDCUROVRSTART 0xfc
|
||||
#define VIDOVRDVDYOFF 0xe0
|
||||
#define VIDDESKSTART 0xe4
|
||||
#define VIDDESKSTRIDE 0xe8
|
||||
#define VIDINADDR0 0xec
|
||||
#define VIDINADDR1 0xf0
|
||||
#define VIDINADDR2 0xf4
|
||||
#define VIDINSTRIDE 0xf8
|
||||
#define VIDCUROVRSTART 0xfc
|
||||
|
||||
#define INTCTRL (0x00100000 + 0x04)
|
||||
#define CLIP0MIN (0x00100000 + 0x08)
|
||||
#define CLIP0MAX (0x00100000 + 0x0c)
|
||||
#define DSTBASE (0x00100000 + 0x10)
|
||||
#define DSTFORMAT (0x00100000 + 0x14)
|
||||
#define SRCCOLORKEYMIN (0x00100000 + 0x18)
|
||||
#define SRCCOLORKEYMAX (0x00100000 + 0x1c)
|
||||
#define DSTCOLORKEYMIN (0x00100000 + 0x20)
|
||||
#define DSTCOLORKEYMAX (0x00100000 + 0x24)
|
||||
#define ROP123 (0x00100000 + 0x30)
|
||||
#define SRCBASE (0x00100000 + 0x34)
|
||||
#define COMMANDEXTRA_2D (0x00100000 + 0x38)
|
||||
#define CLIP1MIN (0x00100000 + 0x4c)
|
||||
#define CLIP1MAX (0x00100000 + 0x50)
|
||||
#define SRCFORMAT (0x00100000 + 0x54)
|
||||
#define SRCSIZE (0x00100000 + 0x58)
|
||||
#define SRCXY (0x00100000 + 0x5c)
|
||||
#define COLORBACK (0x00100000 + 0x60)
|
||||
#define COLORFORE (0x00100000 + 0x64)
|
||||
#define DSTSIZE (0x00100000 + 0x68)
|
||||
#define DSTXY (0x00100000 + 0x6c)
|
||||
#define COMMAND_2D (0x00100000 + 0x70)
|
||||
#define LAUNCH_2D (0x00100000 + 0x80)
|
||||
#define INTCTRL (0x00100000 + 0x04)
|
||||
#define CLIP0MIN (0x00100000 + 0x08)
|
||||
#define CLIP0MAX (0x00100000 + 0x0c)
|
||||
#define DSTBASE (0x00100000 + 0x10)
|
||||
#define DSTFORMAT (0x00100000 + 0x14)
|
||||
#define SRCCOLORKEYMIN (0x00100000 + 0x18)
|
||||
#define SRCCOLORKEYMAX (0x00100000 + 0x1c)
|
||||
#define DSTCOLORKEYMIN (0x00100000 + 0x20)
|
||||
#define DSTCOLORKEYMAX (0x00100000 + 0x24)
|
||||
#define ROP123 (0x00100000 + 0x30)
|
||||
#define SRCBASE (0x00100000 + 0x34)
|
||||
#define COMMANDEXTRA_2D (0x00100000 + 0x38)
|
||||
#define CLIP1MIN (0x00100000 + 0x4c)
|
||||
#define CLIP1MAX (0x00100000 + 0x50)
|
||||
#define SRCFORMAT (0x00100000 + 0x54)
|
||||
#define SRCSIZE (0x00100000 + 0x58)
|
||||
#define SRCXY (0x00100000 + 0x5c)
|
||||
#define COLORBACK (0x00100000 + 0x60)
|
||||
#define COLORFORE (0x00100000 + 0x64)
|
||||
#define DSTSIZE (0x00100000 + 0x68)
|
||||
#define DSTXY (0x00100000 + 0x6c)
|
||||
#define COMMAND_2D (0x00100000 + 0x70)
|
||||
#define LAUNCH_2D (0x00100000 + 0x80)
|
||||
|
||||
#define COMMAND_3D (0x00200000 + 0x120)
|
||||
#define COMMAND_3D (0x00200000 + 0x120)
|
||||
|
||||
#define SWAPBUFCMD (0x00200000 + 0x128)
|
||||
#define SWAPPENDING (0x00200000 + 0x24C)
|
||||
#define LEFTOVBUF (0x00200000 + 0x250)
|
||||
#define RIGHTOVBUF (0x00200000 + 0x254)
|
||||
#define FBISWAPBUFHIST (0x00200000 + 0x258)
|
||||
#define SWAPBUFCMD (0x00200000 + 0x128)
|
||||
#define SWAPPENDING (0x00200000 + 0x24C)
|
||||
#define LEFTOVBUF (0x00200000 + 0x250)
|
||||
#define RIGHTOVBUF (0x00200000 + 0x254)
|
||||
#define FBISWAPBUFHIST (0x00200000 + 0x258)
|
||||
|
||||
/* register bitfields (not all, only as needed) */
|
||||
|
||||
@ -268,44 +268,44 @@ typedef struct voodoo_yuv_fb_t voodoo_yuv_fb;
|
||||
#define AUTOINC_DSTY BIT(11)
|
||||
|
||||
|
||||
#define COMMAND_2D_S2S_BITBLT 0x01 // screen to screen
|
||||
#define COMMAND_2D_S2S_STRECH_BLT 0x02 // BLT + Strech
|
||||
#define COMMAND_2D_S2S_BITBLT 0x01 // screen to screen
|
||||
#define COMMAND_2D_S2S_STRECH_BLT 0x02 // BLT + Strech
|
||||
#define COMMAND_2D_H2S_BITBLT 0x03 // host to screen
|
||||
#define COMMAND_2D_FILLRECT 0x05
|
||||
#define COMMAND_2D_FILLRECT 0x05
|
||||
|
||||
#define COMMAND_2D_DO_IMMED BIT(8) // Do it immediatly
|
||||
#define COMMAND_2D_DO_IMMED BIT(8) // Do it immediatly
|
||||
|
||||
|
||||
|
||||
#define COMMAND_3D_NOP 0x00
|
||||
#define STATUS_RETRACE BIT(6)
|
||||
#define STATUS_BUSY BIT(9)
|
||||
#define MISCINIT1_CLUT_INV BIT(0)
|
||||
#define MISCINIT1_2DBLOCK_DIS BIT(15)
|
||||
#define DRAMINIT0_SGRAM_NUM BIT(26)
|
||||
#define DRAMINIT0_SGRAM_TYPE BIT(27)
|
||||
#define DRAMINIT1_MEM_SDRAM BIT(30)
|
||||
#define VGAINIT0_VGA_DISABLE BIT(0)
|
||||
#define VGAINIT0_EXT_TIMING BIT(1)
|
||||
#define VGAINIT0_8BIT_DAC BIT(2)
|
||||
#define VGAINIT0_EXT_ENABLE BIT(6)
|
||||
#define VGAINIT0_WAKEUP_3C3 BIT(8)
|
||||
#define VGAINIT0_LEGACY_DISABLE BIT(9)
|
||||
#define VGAINIT0_ALT_READBACK BIT(10)
|
||||
#define VGAINIT0_FAST_BLINK BIT(11)
|
||||
#define VGAINIT0_EXTSHIFTOUT BIT(12)
|
||||
#define VGAINIT0_DECODE_3C6 BIT(13)
|
||||
#define VGAINIT0_SGRAM_HBLANK_DISABLE BIT(22)
|
||||
#define VGAINIT1_MASK 0x1fffff
|
||||
#define VIDCFG_VIDPROC_ENABLE BIT(0)
|
||||
#define VIDCFG_CURS_X11 BIT(1)
|
||||
#define VIDCFG_HALF_MODE BIT(4)
|
||||
#define VIDCFG_DESK_ENABLE BIT(7)
|
||||
#define VIDCFG_CLUT_BYPASS BIT(10)
|
||||
#define VIDCFG_2X BIT(26)
|
||||
#define VIDCFG_HWCURSOR_ENABLE BIT(27)
|
||||
#define VIDCFG_PIXFMT_SHIFT 18
|
||||
#define DACMODE_2X BIT(0)
|
||||
#define COMMAND_3D_NOP 0x00
|
||||
#define STATUS_RETRACE BIT(6)
|
||||
#define STATUS_BUSY BIT(9)
|
||||
#define MISCINIT1_CLUT_INV BIT(0)
|
||||
#define MISCINIT1_2DBLOCK_DIS BIT(15)
|
||||
#define DRAMINIT0_SGRAM_NUM BIT(26)
|
||||
#define DRAMINIT0_SGRAM_TYPE BIT(27)
|
||||
#define DRAMINIT1_MEM_SDRAM BIT(30)
|
||||
#define VGAINIT0_VGA_DISABLE BIT(0)
|
||||
#define VGAINIT0_EXT_TIMING BIT(1)
|
||||
#define VGAINIT0_8BIT_DAC BIT(2)
|
||||
#define VGAINIT0_EXT_ENABLE BIT(6)
|
||||
#define VGAINIT0_WAKEUP_3C3 BIT(8)
|
||||
#define VGAINIT0_LEGACY_DISABLE BIT(9)
|
||||
#define VGAINIT0_ALT_READBACK BIT(10)
|
||||
#define VGAINIT0_FAST_BLINK BIT(11)
|
||||
#define VGAINIT0_EXTSHIFTOUT BIT(12)
|
||||
#define VGAINIT0_DECODE_3C6 BIT(13)
|
||||
#define VGAINIT0_SGRAM_HBLANK_DISABLE BIT(22)
|
||||
#define VGAINIT1_MASK 0x1fffff
|
||||
#define VIDCFG_VIDPROC_ENABLE BIT(0)
|
||||
#define VIDCFG_CURS_X11 BIT(1)
|
||||
#define VIDCFG_HALF_MODE BIT(4)
|
||||
#define VIDCFG_DESK_ENABLE BIT(7)
|
||||
#define VIDCFG_CLUT_BYPASS BIT(10)
|
||||
#define VIDCFG_2X BIT(26)
|
||||
#define VIDCFG_HWCURSOR_ENABLE BIT(27)
|
||||
#define VIDCFG_PIXFMT_SHIFT 18
|
||||
#define DACMODE_2X BIT(0)
|
||||
|
||||
/* AGP registers */
|
||||
#define AGPREQSIZE (0x0080000 + 0x00)
|
||||
@ -332,35 +332,35 @@ typedef struct voodoo_yuv_fb_t voodoo_yuv_fb;
|
||||
#define YUVSTRIDE (0x0080000 + 0x104)
|
||||
|
||||
/* VGA rubbish, need to change this for multihead support */
|
||||
#define MISC_W 0x3c2
|
||||
#define MISC_R 0x3cc
|
||||
#define SEQ_I 0x3c4
|
||||
#define SEQ_D 0x3c5
|
||||
#define CRT_I 0x3d4
|
||||
#define CRT_D 0x3d5
|
||||
#define ATT_IW 0x3c0
|
||||
#define MISC_W 0x3c2
|
||||
#define MISC_R 0x3cc
|
||||
#define SEQ_I 0x3c4
|
||||
#define SEQ_D 0x3c5
|
||||
#define CRT_I 0x3d4
|
||||
#define CRT_D 0x3d5
|
||||
#define ATT_IW 0x3c0
|
||||
#define RAMDAC_R 0x3c7
|
||||
#define RAMDAC_W 0x3c8
|
||||
#define RAMDAC_D 0x3c9
|
||||
#define IS1_R 0x3da
|
||||
#define GRA_I 0x3ce
|
||||
#define GRA_D 0x3cf
|
||||
#define IS1_R 0x3da
|
||||
#define GRA_I 0x3ce
|
||||
#define GRA_D 0x3cf
|
||||
|
||||
#ifndef FB_ACCEL_3DFX_BANSHEE
|
||||
#define FB_ACCEL_3DFX_BANSHEE 31
|
||||
#endif
|
||||
|
||||
#define TDFXF_HSYNC_ACT_HIGH 0x01
|
||||
#define TDFXF_HSYNC_ACT_LOW 0x02
|
||||
#define TDFXF_VSYNC_ACT_HIGH 0x04
|
||||
#define TDFXF_VSYNC_ACT_LOW 0x08
|
||||
#define TDFXF_LINE_DOUBLE 0x10
|
||||
#define TDFXF_VIDEO_ENABLE 0x20
|
||||
#define TDFXF_HSYNC_ACT_HIGH 0x01
|
||||
#define TDFXF_HSYNC_ACT_LOW 0x02
|
||||
#define TDFXF_VSYNC_ACT_HIGH 0x04
|
||||
#define TDFXF_VSYNC_ACT_LOW 0x08
|
||||
#define TDFXF_LINE_DOUBLE 0x10
|
||||
#define TDFXF_VIDEO_ENABLE 0x20
|
||||
|
||||
#define TDFXF_HSYNC_MASK 0x03
|
||||
#define TDFXF_VSYNC_MASK 0x0c
|
||||
#define TDFXF_HSYNC_MASK 0x03
|
||||
#define TDFXF_VSYNC_MASK 0x0c
|
||||
|
||||
#define XYREG(x,y) (((((unsigned long)y) & 0x1FFF) << 16) | (((unsigned long)x) & 0x1FFF))
|
||||
#define XYREG(x,y) (((((unsigned long)y) & 0x1FFF) << 16) | (((unsigned long)x) & 0x1FFF))
|
||||
|
||||
//#define TDFXFB_DEBUG
|
||||
#ifdef TDFXFB_DEBUG
|
||||
|
@ -1,5 +1,5 @@
|
||||
framebuffer driver for ATI Radeon chipset video boards
|
||||
======================================================
|
||||
framebuffer driver for ATI Radeon chipset video boards
|
||||
======================================================
|
||||
|
||||
These files are replacement for linux-2.4.x-ac.y drivers.
|
||||
To use this driver you should have at least linux-2.4.5-ac.1
|
||||
@ -21,7 +21,7 @@ and at least '8bpp packed pixel support' compiled and installed as module.
|
||||
|
||||
|
||||
Radeon video overlay
|
||||
====================
|
||||
====================
|
||||
|
||||
It was designed for MPlayer and currently can be used only by MPlayer.
|
||||
It's RGB-YUV BES for Radeon cards (althrough there is experimental
|
||||
@ -93,7 +93,7 @@ List of driver parameters:
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
mtrr=1/0 Configures MTRR (if available), default = 1.
|
||||
swap_fourcc=1/0 Performs byte swapping of passed fourcc.
|
||||
(It's required for compatibility with -vo mga.)
|
||||
(It's required for compatibility with -vo mga.)
|
||||
|
||||
To know more about driver parameters execute:
|
||||
modinfo radeon_vid
|
||||
|
@ -7,12 +7,12 @@ http://attila.kinali.ch/mga/
|
||||
|
||||
mga_vid - MGA G200/G400 YUV Overlay kernel module
|
||||
|
||||
Author:
|
||||
Aaron Holtzman <aholtzma@ess.engr.uvic.ca>, Oct 1999
|
||||
Author:
|
||||
Aaron Holtzman <aholtzma@ess.engr.uvic.ca>, Oct 1999
|
||||
|
||||
Contributions by:
|
||||
Fredrik Vraalsen <vraalsen@cs.uiuc.edu>
|
||||
Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
Contributions by:
|
||||
Fredrik Vraalsen <vraalsen@cs.uiuc.edu>
|
||||
Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
|
||||
WARNING ----- WARNING
|
||||
|
||||
@ -24,23 +24,23 @@ MAX to spout 6 inch flames. You have been warned.
|
||||
|
||||
What does this code do?
|
||||
|
||||
mga_vid is a kernel module that utilitizes the Matrox G200/G400/G550
|
||||
video scaler/overlay unit to perform YUV->RGB colorspace conversion
|
||||
and arbitrary video scaling.
|
||||
mga_vid is a kernel module that utilitizes the Matrox G200/G400/G550
|
||||
video scaler/overlay unit to perform YUV->RGB colorspace conversion
|
||||
and arbitrary video scaling.
|
||||
|
||||
mga_vid is also a monster hack.
|
||||
mga_vid is also a monster hack.
|
||||
|
||||
How does mga_vid work?
|
||||
|
||||
This kernel module sets up the BES (backend scaler) with appropriate
|
||||
values based on parameters supplied via ioctl. It also maps a chunk of
|
||||
video memory into userspace via mmap. This memory is stolen from X
|
||||
(which may decide to write to it later). The application can then write
|
||||
image data directly to the framebuffer (if it knows the right padding,
|
||||
etc).
|
||||
This kernel module sets up the BES (backend scaler) with appropriate
|
||||
values based on parameters supplied via ioctl. It also maps a chunk of
|
||||
video memory into userspace via mmap. This memory is stolen from X
|
||||
(which may decide to write to it later). The application can then write
|
||||
image data directly to the framebuffer (if it knows the right padding,
|
||||
etc).
|
||||
|
||||
|
||||
How do I know if mga_vid works on my system?
|
||||
|
||||
There is a test application called mga_vid_test. This test code should
|
||||
draw some nice 256x256 images for you if all is working well.
|
||||
There is a test application called mga_vid_test. This test code should
|
||||
draw some nice 256x256 images for you if all is working well.
|
||||
|
@ -233,7 +233,7 @@ static gen_sincos_t g_sincos[201] = {
|
||||
{ 3.141600e+00, -7.346410e-06, -1.000000e-00 }
|
||||
};
|
||||
|
||||
# define M_PI 3.14159265358979323846 /* pi */
|
||||
#define M_PI 3.14159265358979323846 /* pi */
|
||||
|
||||
static double inline gen_sin(double x)
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
ATI chips hacking
|
||||
=================
|
||||
Dedicated to ATI's hackers.
|
||||
Dedicated to ATI's hackers.
|
||||
|
||||
Preface
|
||||
~~~~~~~
|
||||
@ -11,20 +11,20 @@ This document doesn't include information about ATI AIW (All In Wonder) chips.
|
||||
|
||||
What are units on modern ATI chips:
|
||||
DAC - (Digital to Analog Convertor) controls CRTC, LCD, DFP monitor's output
|
||||
Consists from:
|
||||
PLL - (Programable line length) registers
|
||||
CRTC - CRT controller
|
||||
LCD/DFP scaler
|
||||
surface control
|
||||
Consists from:
|
||||
PLL - (Programable line length) registers
|
||||
CRTC - CRT controller
|
||||
LCD/DFP scaler
|
||||
surface control
|
||||
DAC2 - controls CRTC, LCD, DFP monitor's output on second head
|
||||
TVDAC - controls Composite Video and Super Video output ports
|
||||
Consists from:
|
||||
TV_PLL
|
||||
TV scaler & sync unit
|
||||
TV format convertor (PAL/NTSC)
|
||||
Consists from:
|
||||
TV_PLL
|
||||
TV scaler & sync unit
|
||||
TV format convertor (PAL/NTSC)
|
||||
TVCAP - controls Video-In port
|
||||
MPP - Miscellaneous peripheral port. (includes macrovision's filter - copy
|
||||
protection mechanism)
|
||||
protection mechanism)
|
||||
OV - Video overlay (YUV BES) (include subpictures, gamma correction and
|
||||
adaptive deinterlacing)
|
||||
CAP0 - Video capturing
|
||||
@ -61,100 +61,100 @@ of this question:
|
||||
3. Mach32
|
||||
|
||||
4. Mach64.
|
||||
It's first chip which has support from side of open
|
||||
source drivers. Set of mach64 chips is:
|
||||
mach64GX (ATI888GX00)
|
||||
mach64CX (ATI888CX00)
|
||||
mach64CT (ATI264CT)
|
||||
mach64ET (ATI264ET)
|
||||
mach64VTA3 (ATI264VT)
|
||||
mach64VTA4 (ATI264VT)
|
||||
mach64VTB (ATI264VTB)
|
||||
mach64VT4 (ATI264VT4)
|
||||
It's first chip which has support from side of open
|
||||
source drivers. Set of mach64 chips is:
|
||||
mach64GX (ATI888GX00)
|
||||
mach64CX (ATI888CX00)
|
||||
mach64CT (ATI264CT)
|
||||
mach64ET (ATI264ET)
|
||||
mach64VTA3 (ATI264VT)
|
||||
mach64VTA4 (ATI264VT)
|
||||
mach64VTB (ATI264VTB)
|
||||
mach64VT4 (ATI264VT4)
|
||||
|
||||
5. 3D rage chips.
|
||||
It seems that these chips have fully compatible by GPU with Mach64
|
||||
which is extended by 3D possibilities. Set of 3D rage chips is:
|
||||
3D RAGE (GT)
|
||||
3D RAGE II+ (GTB)
|
||||
3D RAGE IIC (PCI)
|
||||
3D RAGE IIC (AGP)
|
||||
3D RAGE LT
|
||||
3D RAGE LT-G
|
||||
3D RAGE PRO (BGA, AGP)
|
||||
3D RAGE PRO (BGA, AGP, 1x only)
|
||||
3D RAGE PRO (BGA, PCI)
|
||||
3D RAGE PRO (PQFP, PCI)
|
||||
3D RAGE PRO (PQFP, PCI, limited 3D)
|
||||
3D RAGE (XL)
|
||||
3D RAGE LT PRO (AGP)
|
||||
3D RAGE LT PRO (PCI)
|
||||
3D RAGE Mobility (PCI)
|
||||
3D RAGE Mobility (AGP)
|
||||
It seems that these chips have fully compatible by GPU with Mach64
|
||||
which is extended by 3D possibilities. Set of 3D rage chips is:
|
||||
3D RAGE (GT)
|
||||
3D RAGE II+ (GTB)
|
||||
3D RAGE IIC (PCI)
|
||||
3D RAGE IIC (AGP)
|
||||
3D RAGE LT
|
||||
3D RAGE LT-G
|
||||
3D RAGE PRO (BGA, AGP)
|
||||
3D RAGE PRO (BGA, AGP, 1x only)
|
||||
3D RAGE PRO (BGA, PCI)
|
||||
3D RAGE PRO (PQFP, PCI)
|
||||
3D RAGE PRO (PQFP, PCI, limited 3D)
|
||||
3D RAGE (XL)
|
||||
3D RAGE LT PRO (AGP)
|
||||
3D RAGE LT PRO (PCI)
|
||||
3D RAGE Mobility (PCI)
|
||||
3D RAGE Mobility (AGP)
|
||||
|
||||
6. Rage128 chips.
|
||||
These chips have perfectly new GPU which supports memory mapped IO
|
||||
space for accelerating port access (It's main cause of incompatibility
|
||||
with mach64). Set of Rage128 chips is:
|
||||
Rage128 GL RE
|
||||
Rage128 GL RF
|
||||
Rage128 GL RG
|
||||
Rage128 GL RH
|
||||
Rage128 GL RI
|
||||
Rage128 VR RK
|
||||
Rage128 VR RL
|
||||
Rage128 VR RM
|
||||
Rage128 VR RN
|
||||
Rage128 VR RO
|
||||
Rage128 Mobility M3 LE
|
||||
Rage128 Mobility M3 LF
|
||||
These chips have perfectly new GPU which supports memory mapped IO
|
||||
space for accelerating port access (It's main cause of incompatibility
|
||||
with mach64). Set of Rage128 chips is:
|
||||
Rage128 GL RE
|
||||
Rage128 GL RF
|
||||
Rage128 GL RG
|
||||
Rage128 GL RH
|
||||
Rage128 GL RI
|
||||
Rage128 VR RK
|
||||
Rage128 VR RL
|
||||
Rage128 VR RM
|
||||
Rage128 VR RN
|
||||
Rage128 VR RO
|
||||
Rage128 Mobility M3 LE
|
||||
Rage128 Mobility M3 LF
|
||||
7. Rage128Pro chips.
|
||||
These chips are successors of Rage128 ones.
|
||||
Rage128Pro GL PA
|
||||
Rage128Pro GL PB
|
||||
Rage128Pro GL PC
|
||||
Rage128Pro GL PD
|
||||
Rage128Pro GL PE
|
||||
Rage128Pro GL PF
|
||||
Rage128Pro VR PG
|
||||
Rage128Pro VR PH
|
||||
Rage128Pro VR PI
|
||||
Rage128Pro VR PJ
|
||||
Rage128Pro VR PK
|
||||
Rage128Pro VR PL
|
||||
Rage128Pro VR PM
|
||||
Rage128Pro VR PN
|
||||
Rage128Pro VR PO
|
||||
Rage128Pro VR PP
|
||||
Rage128Pro VR PQ
|
||||
Rage128Pro VR PR
|
||||
Rage128Pro VR TR
|
||||
Rage128Pro VR PS
|
||||
Rage128Pro VR PT
|
||||
Rage128Pro VR PU
|
||||
Rage128Pro VR PV
|
||||
Rage128Pro VR PW
|
||||
Rage128Pro VR PX
|
||||
Rage128Pro Ultra U1
|
||||
Rage128Pro Ultra U2
|
||||
Rage128Pro Ultra U3
|
||||
These chips are successors of Rage128 ones.
|
||||
Rage128Pro GL PA
|
||||
Rage128Pro GL PB
|
||||
Rage128Pro GL PC
|
||||
Rage128Pro GL PD
|
||||
Rage128Pro GL PE
|
||||
Rage128Pro GL PF
|
||||
Rage128Pro VR PG
|
||||
Rage128Pro VR PH
|
||||
Rage128Pro VR PI
|
||||
Rage128Pro VR PJ
|
||||
Rage128Pro VR PK
|
||||
Rage128Pro VR PL
|
||||
Rage128Pro VR PM
|
||||
Rage128Pro VR PN
|
||||
Rage128Pro VR PO
|
||||
Rage128Pro VR PP
|
||||
Rage128Pro VR PQ
|
||||
Rage128Pro VR PR
|
||||
Rage128Pro VR TR
|
||||
Rage128Pro VR PS
|
||||
Rage128Pro VR PT
|
||||
Rage128Pro VR PU
|
||||
Rage128Pro VR PV
|
||||
Rage128Pro VR PW
|
||||
Rage128Pro VR PX
|
||||
Rage128Pro Ultra U1
|
||||
Rage128Pro Ultra U2
|
||||
Rage128Pro Ultra U3
|
||||
|
||||
8. Radeon chips.
|
||||
Indeed they could be named Rage256 Pro. (With minor changes is fully
|
||||
compatible with Rage128 chips).
|
||||
Radeon QD
|
||||
Radeon QE
|
||||
Radeon QF
|
||||
Radeon QG
|
||||
Radeon VE QY
|
||||
Radeon VE QZ
|
||||
Radeon M6 LY
|
||||
Radeon M6 LZ
|
||||
Radeon M7 LW
|
||||
Indeed they could be named Rage256 Pro. (With minor changes is fully
|
||||
compatible with Rage128 chips).
|
||||
Radeon QD
|
||||
Radeon QE
|
||||
Radeon QF
|
||||
Radeon QG
|
||||
Radeon VE QY
|
||||
Radeon VE QZ
|
||||
Radeon M6 LY
|
||||
Radeon M6 LZ
|
||||
Radeon M7 LW
|
||||
9. Radeon2 chips.
|
||||
Indeed they could be named Rage512 Pro.
|
||||
Radeon2 8500 QL
|
||||
Radeon2 7500 QW
|
||||
Indeed they could be named Rage512 Pro.
|
||||
Radeon2 8500 QL
|
||||
Radeon2 7500 QW
|
||||
|
||||
10. Radeon3 and newest are cooming soon, but I hope that they will be fully
|
||||
compatible with Radeon1 chips.
|
||||
@ -185,31 +185,31 @@ Please compare:
|
||||
Sample for Mach64 compatible chips:
|
||||
***********************************
|
||||
|
||||
#define SPARSE_IO_BASE 0x03fcu
|
||||
#define SPARSE_IO_SELECT 0xfc00u
|
||||
#define SPARSE_IO_BASE 0x03fcu
|
||||
#define SPARSE_IO_SELECT 0xfc00u
|
||||
|
||||
#define BLOCK_IO_BASE 0xff00u
|
||||
#define BLOCK_IO_SELECT 0x00fcu
|
||||
#define BLOCK_IO_BASE 0xff00u
|
||||
#define BLOCK_IO_SELECT 0x00fcu
|
||||
|
||||
#define MM_IO_SELECT 0x03fcu
|
||||
#define BLOCK_SELECT 0x0400u
|
||||
#define DWORD_SELECT (BLOCK_SELECT | MM_IO_SELECT)
|
||||
#define MM_IO_SELECT 0x03fcu
|
||||
#define BLOCK_SELECT 0x0400u
|
||||
#define DWORD_SELECT (BLOCK_SELECT | MM_IO_SELECT)
|
||||
|
||||
#define IO_BYTE_SELECT 0x0003u
|
||||
#define IO_BYTE_SELECT 0x0003u
|
||||
|
||||
#define SPARSE_IO_PORT (SPARSE_IO_BASE | IO_BYTE_SELECT)
|
||||
#define BLOCK_IO_PORT (BLOCK_IO_BASE | IO_BYTE_SELECT)
|
||||
#define SPARSE_IO_PORT (SPARSE_IO_BASE | IO_BYTE_SELECT)
|
||||
#define BLOCK_IO_PORT (BLOCK_IO_BASE | IO_BYTE_SELECT)
|
||||
|
||||
#define IOPortTag(_SparseIOSelect, _BlockIOSelect) \
|
||||
(SetBits(_SparseIOSelect, SPARSE_IO_SELECT) | \
|
||||
SetBits(_BlockIOSelect, BLOCK_SELECT | MM_IO_SELECT))
|
||||
#define SparseIOTag(_IOSelect) IOPortTag(_IOSelect, 0)
|
||||
#define BlockIOTag(_IOSelect) IOPortTag(0, _IOSelect)
|
||||
#define IOPortTag(_SparseIOSelect, _BlockIOSelect) \
|
||||
(SetBits(_SparseIOSelect, SPARSE_IO_SELECT) | \
|
||||
SetBits(_BlockIOSelect, BLOCK_SELECT | MM_IO_SELECT))
|
||||
#define SparseIOTag(_IOSelect) IOPortTag(_IOSelect, 0)
|
||||
#define BlockIOTag(_IOSelect) IOPortTag(0, _IOSelect)
|
||||
|
||||
...
|
||||
|
||||
#define OVERLAY_Y_X_START BlockIOTag(0x100u)
|
||||
#define OVERLAY_Y_X_END BlockIOTag(0x101u)
|
||||
#define OVERLAY_Y_X_START BlockIOTag(0x100u)
|
||||
#define OVERLAY_Y_X_END BlockIOTag(0x101u)
|
||||
|
||||
...
|
||||
|
||||
@ -231,8 +231,8 @@ OUTREG(OVERLAY_Y_X_END,((drw_x+drw_w)<<16)|(drw_y+drw_h));
|
||||
|
||||
...
|
||||
|
||||
#define INREG(addr) readl((rage_mmio_base)+addr)
|
||||
#define OUTREG(addr,val) writel(val, (rage_mmio_base)+addr)
|
||||
#define INREG(addr) readl((rage_mmio_base)+addr)
|
||||
#define OUTREG(addr,val) writel(val, (rage_mmio_base)+addr)
|
||||
|
||||
...
|
||||
|
||||
@ -263,7 +263,7 @@ GATOS was designed and introduced as General ATI TV and Overlay Sowfware.
|
||||
You will be able to find out there a lots of useful hacking utilities
|
||||
(at location gatos-ati/gatos):
|
||||
gfxdump - Program for dumping graphics chips registers on Linux and Windows 9X.
|
||||
(it's more useful for Win9x to hack their values).
|
||||
(it's more useful for Win9x to hack their values).
|
||||
xatitv - For working with tv-in (currently is under hard development)
|
||||
atitvout- For working with tv-out
|
||||
and lot of other stuff.
|
||||
@ -271,11 +271,11 @@ BUT: After studing of Gatos and X11 stuffs I've found that they are bad
|
||||
optimized for movie playback.
|
||||
Please compare:
|
||||
radeon_vid - configures video overlay only once and provides DGA to it.
|
||||
(doesn't require to be MMX optimized)
|
||||
(doesn't require to be MMX optimized)
|
||||
gatos and X11 - configures video overlay at every slice of frame, then
|
||||
performs unoptimized copying of source stuff to video memory
|
||||
often with using CopyMungedData (it's C-analog of YV12_to_YUY2)
|
||||
since there are lacks in yv12 support.
|
||||
often with using CopyMungedData (it's C-analog of YV12_to_YUY2)
|
||||
since there are lacks in yv12 support.
|
||||
(is not MMX optimized that's gladly accepted, but probably
|
||||
will be never optimized due portability).
|
||||
|
||||
|
2214
drivers/mga_vid.c
2214
drivers/mga_vid.c
File diff suppressed because it is too large
Load Diff
@ -44,192 +44,192 @@ uint8_t cb_image[SRC_IMAGE_WIDTH * SRC_IMAGE_HEIGHT];
|
||||
void
|
||||
write_frame_g200(uint8_t *y,uint8_t *cr, uint8_t *cb)
|
||||
{
|
||||
uint8_t *dest;
|
||||
uint32_t bespitch,h,w;
|
||||
uint8_t *dest;
|
||||
uint32_t bespitch,h,w;
|
||||
|
||||
dest = mga_vid_base;
|
||||
bespitch = (config.src_width + 31) & ~31;
|
||||
dest = mga_vid_base;
|
||||
bespitch = (config.src_width + 31) & ~31;
|
||||
|
||||
for(h=0; h < config.src_height; h++)
|
||||
{
|
||||
memcpy(dest, y, config.src_width);
|
||||
y += config.src_width;
|
||||
dest += bespitch;
|
||||
}
|
||||
for(h=0; h < config.src_height; h++)
|
||||
{
|
||||
memcpy(dest, y, config.src_width);
|
||||
y += config.src_width;
|
||||
dest += bespitch;
|
||||
}
|
||||
|
||||
for(h=0; h < config.src_height/2; h++)
|
||||
{
|
||||
for(w=0; w < config.src_width/2; w++)
|
||||
{
|
||||
*dest++ = *cb++;
|
||||
*dest++ = *cr++;
|
||||
}
|
||||
dest += bespitch - config.src_width;
|
||||
}
|
||||
for(h=0; h < config.src_height/2; h++)
|
||||
{
|
||||
for(w=0; w < config.src_width/2; w++)
|
||||
{
|
||||
*dest++ = *cb++;
|
||||
*dest++ = *cr++;
|
||||
}
|
||||
dest += bespitch - config.src_width;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
write_frame_g400(uint8_t *y,uint8_t *cr, uint8_t *cb)
|
||||
{
|
||||
uint8_t *dest;
|
||||
uint32_t bespitch,h;
|
||||
uint8_t *dest;
|
||||
uint32_t bespitch,h;
|
||||
|
||||
dest = mga_vid_base;
|
||||
bespitch = (config.src_width + 31) & ~31;
|
||||
dest = mga_vid_base;
|
||||
bespitch = (config.src_width + 31) & ~31;
|
||||
|
||||
for(h=0; h < config.src_height; h++)
|
||||
{
|
||||
memcpy(dest, y, config.src_width);
|
||||
y += config.src_width;
|
||||
dest += bespitch;
|
||||
}
|
||||
for(h=0; h < config.src_height; h++)
|
||||
{
|
||||
memcpy(dest, y, config.src_width);
|
||||
y += config.src_width;
|
||||
dest += bespitch;
|
||||
}
|
||||
|
||||
for(h=0; h < config.src_height/2; h++)
|
||||
{
|
||||
memcpy(dest, cb, config.src_width/2);
|
||||
cb += config.src_width/2;
|
||||
dest += bespitch/2;
|
||||
}
|
||||
for(h=0; h < config.src_height/2; h++)
|
||||
{
|
||||
memcpy(dest, cb, config.src_width/2);
|
||||
cb += config.src_width/2;
|
||||
dest += bespitch/2;
|
||||
}
|
||||
|
||||
for(h=0; h < config.src_height/2; h++)
|
||||
{
|
||||
memcpy(dest, cr, config.src_width/2);
|
||||
cr += config.src_width/2;
|
||||
dest += bespitch/2;
|
||||
}
|
||||
for(h=0; h < config.src_height/2; h++)
|
||||
{
|
||||
memcpy(dest, cr, config.src_width/2);
|
||||
cr += config.src_width/2;
|
||||
dest += bespitch/2;
|
||||
}
|
||||
}
|
||||
|
||||
void write_frame(uint8_t *y,uint8_t *cr, uint8_t *cb)
|
||||
{
|
||||
if(is_g400)
|
||||
write_frame_g400(y,cr,cb);
|
||||
else
|
||||
write_frame_g200(y,cr,cb);
|
||||
if(is_g400)
|
||||
write_frame_g400(y,cr,cb);
|
||||
else
|
||||
write_frame_g200(y,cr,cb);
|
||||
}
|
||||
|
||||
void
|
||||
draw_cool_pattern(void)
|
||||
{
|
||||
int i,x,y;
|
||||
int i,x,y;
|
||||
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height; y++) {
|
||||
for (x=0; x<config.src_width; x++) {
|
||||
y_image[i++] = x*x/2 + y*y/2 - 128;
|
||||
}
|
||||
}
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height; y++) {
|
||||
for (x=0; x<config.src_width; x++) {
|
||||
y_image[i++] = x*x/2 + y*y/2 - 128;
|
||||
}
|
||||
}
|
||||
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height/2; y++)
|
||||
for (x=0; x<config.src_width/2; x++)
|
||||
{
|
||||
cr_image[i++] = x - 128;
|
||||
}
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height/2; y++)
|
||||
for (x=0; x<config.src_width/2; x++)
|
||||
{
|
||||
cr_image[i++] = x - 128;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height/2; y++)
|
||||
for (x=0; x<config.src_width/2; x++)
|
||||
{
|
||||
cb_image[i++] = y - 128;
|
||||
}
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height/2; y++)
|
||||
for (x=0; x<config.src_width/2; x++)
|
||||
{
|
||||
cb_image[i++] = y - 128;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
draw_color_blend(void)
|
||||
{
|
||||
int i,x,y;
|
||||
int i,x,y;
|
||||
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height; y++) {
|
||||
for (x=0; x<config.src_width; x++) {
|
||||
y_image[i++] = 0;
|
||||
}
|
||||
}
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height; y++) {
|
||||
for (x=0; x<config.src_width; x++) {
|
||||
y_image[i++] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height/2; y++)
|
||||
for (x=0; x<config.src_width/2; x++)
|
||||
{
|
||||
cr_image[i++] = x - 128;
|
||||
}
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height/2; y++)
|
||||
for (x=0; x<config.src_width/2; x++)
|
||||
{
|
||||
cr_image[i++] = x - 128;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height/2; y++)
|
||||
for (x=0; x<config.src_width/2; x++)
|
||||
{
|
||||
cb_image[i++] = y - 128;
|
||||
}
|
||||
i = 0;
|
||||
for (y=0; y<config.src_height/2; y++)
|
||||
for (x=0; x<config.src_width/2; x++)
|
||||
{
|
||||
cb_image[i++] = y - 128;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
int f;
|
||||
int f;
|
||||
|
||||
f = open("/dev/mga_vid",O_RDWR);
|
||||
f = open("/dev/mga_vid",O_RDWR);
|
||||
|
||||
if(f == -1)
|
||||
{
|
||||
fprintf(stderr,"Couldn't open driver\n");
|
||||
exit(1);
|
||||
}
|
||||
if(f == -1)
|
||||
{
|
||||
fprintf(stderr,"Couldn't open driver\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
config.version = MGA_VID_VERSION;
|
||||
config.src_width = SRC_IMAGE_WIDTH;
|
||||
config.src_height= SRC_IMAGE_HEIGHT;
|
||||
config.dest_width = SRC_IMAGE_WIDTH;
|
||||
config.dest_height = SRC_IMAGE_HEIGHT;
|
||||
config.x_org= 10;
|
||||
config.y_org= 10;
|
||||
config.colkey_on = 0;
|
||||
config.format = MGA_VID_FORMAT_YV12;
|
||||
config.frame_size=SRC_IMAGE_WIDTH*SRC_IMAGE_HEIGHT*2;
|
||||
config.num_frames=1;
|
||||
config.version = MGA_VID_VERSION;
|
||||
config.src_width = SRC_IMAGE_WIDTH;
|
||||
config.src_height= SRC_IMAGE_HEIGHT;
|
||||
config.dest_width = SRC_IMAGE_WIDTH;
|
||||
config.dest_height = SRC_IMAGE_HEIGHT;
|
||||
config.x_org= 10;
|
||||
config.y_org= 10;
|
||||
config.colkey_on = 0;
|
||||
config.format = MGA_VID_FORMAT_YV12;
|
||||
config.frame_size=SRC_IMAGE_WIDTH*SRC_IMAGE_HEIGHT*2;
|
||||
config.num_frames=1;
|
||||
|
||||
if (ioctl(f,MGA_VID_CONFIG,&config))
|
||||
{
|
||||
perror("Error in config ioctl");
|
||||
}
|
||||
if (ioctl(f,MGA_VID_CONFIG,&config))
|
||||
{
|
||||
perror("Error in config ioctl");
|
||||
}
|
||||
|
||||
if (config.card_type == MGA_G200)
|
||||
{
|
||||
printf("Testing MGA G200 Backend Scaler with %d MB of RAM\n", config.ram_size);
|
||||
is_g400 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Testing MGA G400 Backend Scaler with %d MB of RAM\n", config.ram_size);
|
||||
is_g400 = 1;
|
||||
}
|
||||
if (config.card_type == MGA_G200)
|
||||
{
|
||||
printf("Testing MGA G200 Backend Scaler with %d MB of RAM\n", config.ram_size);
|
||||
is_g400 = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("Testing MGA G400 Backend Scaler with %d MB of RAM\n", config.ram_size);
|
||||
is_g400 = 1;
|
||||
}
|
||||
|
||||
ioctl(f,MGA_VID_ON,0);
|
||||
mga_vid_base = (uint8_t*)mmap(0,256 * 4096,PROT_WRITE,MAP_SHARED,f,0);
|
||||
printf("mga_vid_base = %8p\n",mga_vid_base);
|
||||
ioctl(f,MGA_VID_ON,0);
|
||||
mga_vid_base = (uint8_t*)mmap(0,256 * 4096,PROT_WRITE,MAP_SHARED,f,0);
|
||||
printf("mga_vid_base = %8p\n",mga_vid_base);
|
||||
|
||||
|
||||
//memset(y_image,80,256 * 128);
|
||||
//memset(cr_image,80,256/2 * 20);
|
||||
//memset(cb_image,80,256/2 * 20);
|
||||
write_frame(y_image,cr_image,cb_image);
|
||||
printf("(1) There should be a green square, offset by 10 pixels from\n"
|
||||
" the upper left corner displayed\n");
|
||||
sleep(3);
|
||||
//memset(y_image,80,256 * 128);
|
||||
//memset(cr_image,80,256/2 * 20);
|
||||
//memset(cb_image,80,256/2 * 20);
|
||||
write_frame(y_image,cr_image,cb_image);
|
||||
printf("(1) There should be a green square, offset by 10 pixels from\n"
|
||||
" the upper left corner displayed\n");
|
||||
sleep(3);
|
||||
|
||||
|
||||
draw_cool_pattern();
|
||||
write_frame(y_image,cr_image,cb_image);
|
||||
printf("(2) There should be a cool mosaic like pattern now.\n");
|
||||
sleep(3);
|
||||
draw_cool_pattern();
|
||||
write_frame(y_image,cr_image,cb_image);
|
||||
printf("(2) There should be a cool mosaic like pattern now.\n");
|
||||
sleep(3);
|
||||
|
||||
draw_color_blend();
|
||||
write_frame(y_image,cr_image,cb_image);
|
||||
printf("(3) There should be a color blend with black, red, purple, blue\n"
|
||||
" corners (starting top left going CW)\n");
|
||||
sleep(3);
|
||||
draw_color_blend();
|
||||
write_frame(y_image,cr_image,cb_image);
|
||||
printf("(3) There should be a color blend with black, red, purple, blue\n"
|
||||
" corners (starting top left going CW)\n");
|
||||
sleep(3);
|
||||
|
||||
ioctl(f,MGA_VID_OFF,0);
|
||||
ioctl(f,MGA_VID_OFF,0);
|
||||
|
||||
close(f);
|
||||
return 0;
|
||||
close(f);
|
||||
return 0;
|
||||
}
|
||||
|
3570
drivers/radeon.h
3570
drivers/radeon.h
File diff suppressed because it is too large
Load Diff
@ -41,6 +41,7 @@ INS alt_src_step 1
|
||||
DEL alt_src_step -1
|
||||
o osd
|
||||
I osd_show_property_text "${filename}" # display filename in osd
|
||||
P osd_show_progression
|
||||
z sub_delay -0.1 # subtract 100 ms delay from subs
|
||||
x sub_delay +0.1 # add
|
||||
9 volume -1
|
||||
|
@ -105,6 +105,7 @@ static const mp_cmd_t mp_cmds[] = {
|
||||
{ MP_CMD_OSD, "osd",0, { {MP_CMD_ARG_INT,{-1}}, {-1,{0}} } },
|
||||
{ MP_CMD_OSD_SHOW_TEXT, "osd_show_text", 1, { {MP_CMD_ARG_STRING, {0}}, {MP_CMD_ARG_INT,{-1}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
|
||||
{ MP_CMD_OSD_SHOW_PROPERTY_TEXT, "osd_show_property_text",1, { {MP_CMD_ARG_STRING, {0}}, {MP_CMD_ARG_INT,{-1}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
|
||||
{ MP_CMD_OSD_SHOW_PROGRESSION, "osd_show_progression", 0, { {-1,{0}} } },
|
||||
{ MP_CMD_VOLUME, "volume", 1, { { MP_CMD_ARG_FLOAT,{0} }, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
|
||||
{ MP_CMD_BALANCE, "balance", 1, { { MP_CMD_ARG_FLOAT,{0} }, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
|
||||
{ MP_CMD_MIXER_USEMASTER, "use_master", 0, { {-1,{0}} } },
|
||||
@ -210,6 +211,11 @@ static const mp_cmd_t mp_cmds[] = {
|
||||
{ MP_CMD_SEEK_CHAPTER, "seek_chapter", 1, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
|
||||
{ MP_CMD_SET_MOUSE_POS, "set_mouse_pos", 2, { {MP_CMD_ARG_INT,{0}}, {MP_CMD_ARG_INT,{0}}, {-1,{0}} } },
|
||||
|
||||
{ MP_CMD_AF_SWITCH, "af_switch", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } },
|
||||
{ MP_CMD_AF_ADD, "af_add", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } },
|
||||
{ MP_CMD_AF_DEL, "af_del", 1, { {MP_CMD_ARG_STRING, {0}}, {-1,{0}} } },
|
||||
{ MP_CMD_AF_CLR, "af_clr", 0, { {-1,{0}} } },
|
||||
|
||||
{ 0, NULL, 0, {} }
|
||||
};
|
||||
|
||||
@ -402,6 +408,7 @@ static const mp_cmd_bind_t def_cmd_binds[] = {
|
||||
{ { KEY_DEL, 0 }, "alt_src_step -1" },
|
||||
{ { 'o', 0 }, "osd" },
|
||||
{ { 'I', 0 }, "osd_show_property_text \"${filename}\"" },
|
||||
{ { 'P', 0 }, "osd_show_progression" },
|
||||
{ { 'z', 0 }, "sub_delay -0.1" },
|
||||
{ { 'x', 0 }, "sub_delay +0.1" },
|
||||
{ { 'g', 0 }, "sub_step -1" },
|
||||
|
@ -93,6 +93,7 @@ typedef enum {
|
||||
MP_CMD_SET_PROPERTY_OSD,
|
||||
MP_CMD_GET_PROPERTY,
|
||||
MP_CMD_OSD_SHOW_PROPERTY_TEXT,
|
||||
MP_CMD_OSD_SHOW_PROGRESSION,
|
||||
MP_CMD_SEEK_CHAPTER,
|
||||
MP_CMD_FILE_FILTER,
|
||||
MP_CMD_GET_FILENAME,
|
||||
@ -149,6 +150,13 @@ typedef enum {
|
||||
MP_CMD_CHELP = 7000,
|
||||
MP_CMD_CEXIT,
|
||||
MP_CMD_CHIDE,
|
||||
|
||||
/// Audio Filter commands
|
||||
MP_CMD_AF_SWITCH,
|
||||
MP_CMD_AF_ADD,
|
||||
MP_CMD_AF_DEL,
|
||||
MP_CMD_AF_CLR,
|
||||
|
||||
} mp_command_type;
|
||||
|
||||
// The arg types
|
||||
|
@ -37,7 +37,7 @@
|
||||
#include "libavcodec/eval.h"
|
||||
|
||||
struct vf_priv_s {
|
||||
AVEvalExpr * e[3];
|
||||
AVExpr * e[3];
|
||||
int framenum;
|
||||
mp_image_t *mpi;
|
||||
};
|
||||
@ -116,7 +116,8 @@ static int put_image(struct vf_instance* vf, mp_image_t *mpi, double pts){
|
||||
const_values[3]=y;
|
||||
for(x=0; x<w; x++){
|
||||
const_values[2]=x;
|
||||
dst[x+y* dst_stride]= ff_parse_eval(vf->priv->e[plane], const_values, vf);
|
||||
dst[x + y * dst_stride] = ff_eval_expr(vf->priv->e[plane],
|
||||
const_values, vf);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -178,7 +179,7 @@ static int vf_open(vf_instance_t *vf, char *args){
|
||||
NULL
|
||||
};
|
||||
char * a;
|
||||
vf->priv->e[plane] = ff_parse(eq[plane], const_names, NULL, NULL, func2, func2_names, &a);
|
||||
vf->priv->e[plane] = ff_parse_expr(eq[plane], const_names, NULL, NULL, func2, func2_names, &a);
|
||||
|
||||
if (!vf->priv->e[plane]) {
|
||||
mp_msg(MSGT_VFILTER, MSGL_ERR, "geq: error loading equation `%s': %s\n", eq[plane], a);
|
||||
|
@ -188,7 +188,7 @@ static void filter_line_ssse3(uint8_t *dst, uint8_t *src, uint16_t *dc,
|
||||
}
|
||||
#endif // HAVE_SSSE3
|
||||
|
||||
#if HAVE_6REGS && HAVE_SSE2
|
||||
#if HAVE_SSE2 && HAVE_6REGS
|
||||
#define BLURV(load)\
|
||||
intptr_t x = -2*width;\
|
||||
__asm__ volatile(\
|
||||
@ -385,7 +385,7 @@ static int vf_open(vf_instance_t *vf, char *args)
|
||||
|
||||
vf->priv->blur_line = blur_line_c;
|
||||
vf->priv->filter_line = filter_line_c;
|
||||
#if HAVE_6REGS && HAVE_SSE2
|
||||
#if HAVE_SSE2 && HAVE_6REGS
|
||||
if (gCpuCaps.hasSSE2)
|
||||
vf->priv->blur_line = blur_line_sse2;
|
||||
#endif
|
||||
|
@ -68,7 +68,7 @@ static int config(struct vf_instance* vf,
|
||||
};
|
||||
|
||||
const char *error = NULL;
|
||||
vf->priv->lut[i+129]= lrintf(ff_eval2(vf->priv->eq, const_values, const_names, NULL, NULL, NULL, NULL, NULL, &error));
|
||||
vf->priv->lut[i+129]= lrintf(ff_parse_and_eval_expr(vf->priv->eq, const_values, const_names, NULL, NULL, NULL, NULL, NULL, &error));
|
||||
if (error)
|
||||
mp_msg(MSGT_VFILTER, MSGL_ERR, "qp: Error evaluating \"%s\": %s\n", vf->priv->eq, error);
|
||||
}
|
||||
|
@ -148,6 +148,12 @@
|
||||
#ifndef GL_CON_1_ATI
|
||||
#define GL_CON_1_ATI 0x8942
|
||||
#endif
|
||||
#ifndef GL_CON_2_ATI
|
||||
#define GL_CON_2_ATI 0x8943
|
||||
#endif
|
||||
#ifndef GL_CON_3_ATI
|
||||
#define GL_CON_3_ATI 0x8944
|
||||
#endif
|
||||
#ifndef GL_ADD_ATI
|
||||
#define GL_ADD_ATI 0x8963
|
||||
#endif
|
||||
@ -163,6 +169,9 @@
|
||||
#ifndef GL_4X_BIT_ATI
|
||||
#define GL_4X_BIT_ATI 2
|
||||
#endif
|
||||
#ifndef GL_8X_BIT_ATI
|
||||
#define GL_8X_BIT_ATI 4
|
||||
#endif
|
||||
#ifndef GL_BIAS_BIT_ATI
|
||||
#define GL_BIAS_BIT_ATI 8
|
||||
#endif
|
||||
|
@ -189,21 +189,21 @@ static void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf)
|
||||
ts[SBLIMIT*(8-(v))] = out1[8-(v)] + sum0 * w[8-(v)]; \
|
||||
ts[SBLIMIT*(9+(v))] = out1[9+(v)] + sum0 * w[9+(v)];
|
||||
#define MACRO1(v) { \
|
||||
real sum0,sum1; \
|
||||
real sum0, sum1; \
|
||||
sum0 = tmp1a + tmp2a; \
|
||||
sum1 = (tmp1b + tmp2b) * tfcos36[(v)]; \
|
||||
MACRO0(v); }
|
||||
sum1 = (tmp1b + tmp2b) * tfcos36[(v)]; \
|
||||
MACRO0(v); }
|
||||
#define MACRO2(v) { \
|
||||
real sum0,sum1; \
|
||||
real sum0, sum1; \
|
||||
sum0 = tmp2a - tmp1a; \
|
||||
sum1 = (tmp2b - tmp1b) * tfcos36[(v)]; \
|
||||
MACRO0(v); }
|
||||
MACRO0(v); }
|
||||
|
||||
register const real *c = COS9;
|
||||
register real *out2 = o2;
|
||||
register real *w = wintab;
|
||||
register real *out1 = o1;
|
||||
register real *ts = tsbuf;
|
||||
register real *w = wintab;
|
||||
register real *out1 = o1;
|
||||
register real *ts = tsbuf;
|
||||
|
||||
real ta33,ta66,tb33,tb66;
|
||||
|
||||
@ -256,12 +256,12 @@ static void dct36(real *inbuf,real *o1,real *o2,real *wintab,real *tsbuf)
|
||||
MACRO2(5);
|
||||
}
|
||||
|
||||
{
|
||||
real sum0,sum1;
|
||||
sum0 = in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0];
|
||||
sum1 = (in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ) * tfcos36[4];
|
||||
MACRO0(4);
|
||||
}
|
||||
{
|
||||
real sum0,sum1;
|
||||
sum0 = in[2*0+0] - in[2*2+0] + in[2*4+0] - in[2*6+0] + in[2*8+0];
|
||||
sum1 = (in[2*0+1] - in[2*2+1] + in[2*4+1] - in[2*6+1] + in[2*8+1] ) * tfcos36[4];
|
||||
MACRO0(4);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -40,462 +40,462 @@ void dct36_3dnow(real *inbuf, real *o1,
|
||||
#endif
|
||||
{
|
||||
__asm__ volatile(
|
||||
"movq (%%eax),%%mm0\n\t"
|
||||
"movq 4(%%eax),%%mm1\n\t"
|
||||
"pfadd %%mm1,%%mm0\n\t"
|
||||
"movq %%mm0,4(%%eax)\n\t"
|
||||
"psrlq $32,%%mm1\n\t"
|
||||
"movq 12(%%eax),%%mm2\n\t"
|
||||
"punpckldq %%mm2,%%mm1\n\t"
|
||||
"pfadd %%mm2,%%mm1\n\t"
|
||||
"movq %%mm1,12(%%eax)\n\t"
|
||||
"psrlq $32,%%mm2\n\t"
|
||||
"movq 20(%%eax),%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm2\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq %%mm2,20(%%eax)\n\t"
|
||||
"psrlq $32,%%mm3\n\t"
|
||||
"movq 28(%%eax),%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq %%mm3,28(%%eax)\n\t"
|
||||
"psrlq $32,%%mm4\n\t"
|
||||
"movq 36(%%eax),%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,36(%%eax)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movq 44(%%eax),%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movq %%mm5,44(%%eax)\n\t"
|
||||
"psrlq $32,%%mm6\n\t"
|
||||
"movq 52(%%eax),%%mm7\n\t"
|
||||
"punpckldq %%mm7,%%mm6\n\t"
|
||||
"pfadd %%mm7,%%mm6\n\t"
|
||||
"movq %%mm6,52(%%eax)\n\t"
|
||||
"psrlq $32,%%mm7\n\t"
|
||||
"movq 60(%%eax),%%mm0\n\t"
|
||||
"punpckldq %%mm0,%%mm7\n\t"
|
||||
"pfadd %%mm0,%%mm7\n\t"
|
||||
"movq %%mm7,60(%%eax)\n\t"
|
||||
"psrlq $32,%%mm0\n\t"
|
||||
"movd 68(%%eax),%%mm1\n\t"
|
||||
"pfadd %%mm1,%%mm0\n\t"
|
||||
"movd %%mm0,68(%%eax)\n\t"
|
||||
"movd 4(%%eax),%%mm0\n\t"
|
||||
"movd 12(%%eax),%%mm1\n\t"
|
||||
"punpckldq %%mm1,%%mm0\n\t"
|
||||
"punpckldq 20(%%eax),%%mm1\n\t"
|
||||
"pfadd %%mm1,%%mm0\n\t"
|
||||
"movd %%mm0,12(%%eax)\n\t"
|
||||
"psrlq $32,%%mm0\n\t"
|
||||
"movd %%mm0,20(%%eax)\n\t"
|
||||
"psrlq $32,%%mm1\n\t"
|
||||
"movd 28(%%eax),%%mm2\n\t"
|
||||
"punpckldq %%mm2,%%mm1\n\t"
|
||||
"punpckldq 36(%%eax),%%mm2\n\t"
|
||||
"pfadd %%mm2,%%mm1\n\t"
|
||||
"movd %%mm1,28(%%eax)\n\t"
|
||||
"psrlq $32,%%mm1\n\t"
|
||||
"movd %%mm1,36(%%eax)\n\t"
|
||||
"psrlq $32,%%mm2\n\t"
|
||||
"movd 44(%%eax),%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm2\n\t"
|
||||
"punpckldq 52(%%eax),%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movd %%mm2,44(%%eax)\n\t"
|
||||
"psrlq $32,%%mm2\n\t"
|
||||
"movd %%mm2,52(%%eax)\n\t"
|
||||
"psrlq $32,%%mm3\n\t"
|
||||
"movd 60(%%eax),%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm3\n\t"
|
||||
"punpckldq 68(%%eax),%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movd %%mm3,60(%%eax)\n\t"
|
||||
"psrlq $32,%%mm3\n\t"
|
||||
"movd %%mm3,68(%%eax)\n\t"
|
||||
"movq (%%eax),%%mm0\n\t"
|
||||
"movq 4(%%eax),%%mm1\n\t"
|
||||
"pfadd %%mm1,%%mm0\n\t"
|
||||
"movq %%mm0,4(%%eax)\n\t"
|
||||
"psrlq $32,%%mm1\n\t"
|
||||
"movq 12(%%eax),%%mm2\n\t"
|
||||
"punpckldq %%mm2,%%mm1\n\t"
|
||||
"pfadd %%mm2,%%mm1\n\t"
|
||||
"movq %%mm1,12(%%eax)\n\t"
|
||||
"psrlq $32,%%mm2\n\t"
|
||||
"movq 20(%%eax),%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm2\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq %%mm2,20(%%eax)\n\t"
|
||||
"psrlq $32,%%mm3\n\t"
|
||||
"movq 28(%%eax),%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq %%mm3,28(%%eax)\n\t"
|
||||
"psrlq $32,%%mm4\n\t"
|
||||
"movq 36(%%eax),%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,36(%%eax)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movq 44(%%eax),%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movq %%mm5,44(%%eax)\n\t"
|
||||
"psrlq $32,%%mm6\n\t"
|
||||
"movq 52(%%eax),%%mm7\n\t"
|
||||
"punpckldq %%mm7,%%mm6\n\t"
|
||||
"pfadd %%mm7,%%mm6\n\t"
|
||||
"movq %%mm6,52(%%eax)\n\t"
|
||||
"psrlq $32,%%mm7\n\t"
|
||||
"movq 60(%%eax),%%mm0\n\t"
|
||||
"punpckldq %%mm0,%%mm7\n\t"
|
||||
"pfadd %%mm0,%%mm7\n\t"
|
||||
"movq %%mm7,60(%%eax)\n\t"
|
||||
"psrlq $32,%%mm0\n\t"
|
||||
"movd 68(%%eax),%%mm1\n\t"
|
||||
"pfadd %%mm1,%%mm0\n\t"
|
||||
"movd %%mm0,68(%%eax)\n\t"
|
||||
"movd 4(%%eax),%%mm0\n\t"
|
||||
"movd 12(%%eax),%%mm1\n\t"
|
||||
"punpckldq %%mm1,%%mm0\n\t"
|
||||
"punpckldq 20(%%eax),%%mm1\n\t"
|
||||
"pfadd %%mm1,%%mm0\n\t"
|
||||
"movd %%mm0,12(%%eax)\n\t"
|
||||
"psrlq $32,%%mm0\n\t"
|
||||
"movd %%mm0,20(%%eax)\n\t"
|
||||
"psrlq $32,%%mm1\n\t"
|
||||
"movd 28(%%eax),%%mm2\n\t"
|
||||
"punpckldq %%mm2,%%mm1\n\t"
|
||||
"punpckldq 36(%%eax),%%mm2\n\t"
|
||||
"pfadd %%mm2,%%mm1\n\t"
|
||||
"movd %%mm1,28(%%eax)\n\t"
|
||||
"psrlq $32,%%mm1\n\t"
|
||||
"movd %%mm1,36(%%eax)\n\t"
|
||||
"psrlq $32,%%mm2\n\t"
|
||||
"movd 44(%%eax),%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm2\n\t"
|
||||
"punpckldq 52(%%eax),%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movd %%mm2,44(%%eax)\n\t"
|
||||
"psrlq $32,%%mm2\n\t"
|
||||
"movd %%mm2,52(%%eax)\n\t"
|
||||
"psrlq $32,%%mm3\n\t"
|
||||
"movd 60(%%eax),%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm3\n\t"
|
||||
"punpckldq 68(%%eax),%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movd %%mm3,60(%%eax)\n\t"
|
||||
"psrlq $32,%%mm3\n\t"
|
||||
"movd %%mm3,68(%%eax)\n\t"
|
||||
|
||||
"movq 24(%%eax),%%mm0\n\t"
|
||||
"movq 48(%%eax),%%mm1\n\t"
|
||||
"movd "MANGLE(COS9)"+12,%%mm2\n\t"
|
||||
"punpckldq %%mm2,%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+24,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm2,%%mm0\n\t"
|
||||
"pfmul %%mm3,%%mm1\n\t"
|
||||
"pushl %%eax\n\t"
|
||||
"movl $1,%%eax\n\t"
|
||||
"movd %%eax,%%mm7\n\t"
|
||||
"pi2fd %%mm7,%%mm7\n\t"
|
||||
"popl %%eax\n\t"
|
||||
"movq 8(%%eax),%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+4,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm3,%%mm2\n\t"
|
||||
"pfadd %%mm0,%%mm2\n\t"
|
||||
"movq 40(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+20,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq 56(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+28,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq (%%eax),%%mm3\n\t"
|
||||
"movq 16(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+8,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq 32(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+16,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm1,%%mm3\n\t"
|
||||
"movq 64(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+32,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq %%mm2,%%mm4\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+0,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 108(%%edx),%%mm6\n\t"
|
||||
"punpckldq 104(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movq 24(%%eax),%%mm0\n\t"
|
||||
"movq 48(%%eax),%%mm1\n\t"
|
||||
"movd "MANGLE(COS9)"+12,%%mm2\n\t"
|
||||
"punpckldq %%mm2,%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+24,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm2,%%mm0\n\t"
|
||||
"pfmul %%mm3,%%mm1\n\t"
|
||||
"pushl %%eax\n\t"
|
||||
"movl $1,%%eax\n\t"
|
||||
"movd %%eax,%%mm7\n\t"
|
||||
"pi2fd %%mm7,%%mm7\n\t"
|
||||
"popl %%eax\n\t"
|
||||
"movq 8(%%eax),%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+4,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm3,%%mm2\n\t"
|
||||
"pfadd %%mm0,%%mm2\n\t"
|
||||
"movq 40(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+20,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq 56(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+28,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq (%%eax),%%mm3\n\t"
|
||||
"movq 16(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+8,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq 32(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+16,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm1,%%mm3\n\t"
|
||||
"movq 64(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+32,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq %%mm2,%%mm4\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+0,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 108(%%edx),%%mm6\n\t"
|
||||
"punpckldq 104(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
#ifdef DCT36_OPTIMIZE_FOR_K7
|
||||
"pswapd %%mm5,%%mm5\n\t"
|
||||
"movq %%mm5,32(%%ecx)\n\t"
|
||||
"pswapd %%mm5,%%mm5\n\t"
|
||||
"movq %%mm5,32(%%ecx)\n\t"
|
||||
#else
|
||||
"movd %%mm5,36(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,32(%%ecx)\n\t"
|
||||
"movd %%mm5,36(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,32(%%ecx)\n\t"
|
||||
#endif
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 32(%%edx),%%mm6\n\t"
|
||||
"punpckldq 36(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 32(%%esi),%%mm6\n\t"
|
||||
"punpckldq 36(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,1024(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1152(%%ebx)\n\t"
|
||||
"movq %%mm3,%%mm4\n\t"
|
||||
"pfsub %%mm2,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+32,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 140(%%edx),%%mm6\n\t"
|
||||
"punpckldq 72(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,68(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,0(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 0(%%edx),%%mm6\n\t"
|
||||
"punpckldq 68(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 0(%%esi),%%mm6\n\t"
|
||||
"punpckldq 68(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,0(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,2176(%%ebx)\n\t"
|
||||
"movq 8(%%eax),%%mm2\n\t"
|
||||
"movq 40(%%eax),%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm2\n\t"
|
||||
"movq 56(%%eax),%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+12,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm3,%%mm2\n\t"
|
||||
"movq 16(%%eax),%%mm3\n\t"
|
||||
"movq 32(%%eax),%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq 64(%%eax),%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+24,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"movq 48(%%eax),%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq (%%eax),%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq %%mm2,%%mm4\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+4,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 112(%%edx),%%mm6\n\t"
|
||||
"punpckldq 100(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,40(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,28(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 28(%%edx),%%mm6\n\t"
|
||||
"punpckldq 40(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 28(%%esi),%%mm6\n\t"
|
||||
"punpckldq 40(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,896(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1280(%%ebx)\n\t"
|
||||
"movq %%mm3,%%mm4\n\t"
|
||||
"pfsub %%mm2,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+28,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 136(%%edx),%%mm6\n\t"
|
||||
"punpckldq 76(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,64(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,4(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 4(%%edx),%%mm6\n\t"
|
||||
"punpckldq 64(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 4(%%esi),%%mm6\n\t"
|
||||
"punpckldq 64(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,128(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,2048(%%ebx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 32(%%edx),%%mm6\n\t"
|
||||
"punpckldq 36(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 32(%%esi),%%mm6\n\t"
|
||||
"punpckldq 36(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,1024(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1152(%%ebx)\n\t"
|
||||
"movq %%mm3,%%mm4\n\t"
|
||||
"pfsub %%mm2,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+32,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 140(%%edx),%%mm6\n\t"
|
||||
"punpckldq 72(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,68(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,0(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 0(%%edx),%%mm6\n\t"
|
||||
"punpckldq 68(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 0(%%esi),%%mm6\n\t"
|
||||
"punpckldq 68(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,0(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,2176(%%ebx)\n\t"
|
||||
"movq 8(%%eax),%%mm2\n\t"
|
||||
"movq 40(%%eax),%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm2\n\t"
|
||||
"movq 56(%%eax),%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+12,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm3,%%mm2\n\t"
|
||||
"movq 16(%%eax),%%mm3\n\t"
|
||||
"movq 32(%%eax),%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq 64(%%eax),%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+24,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"movq 48(%%eax),%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq (%%eax),%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq %%mm2,%%mm4\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+4,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 112(%%edx),%%mm6\n\t"
|
||||
"punpckldq 100(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,40(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,28(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 28(%%edx),%%mm6\n\t"
|
||||
"punpckldq 40(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 28(%%esi),%%mm6\n\t"
|
||||
"punpckldq 40(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,896(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1280(%%ebx)\n\t"
|
||||
"movq %%mm3,%%mm4\n\t"
|
||||
"pfsub %%mm2,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+28,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 136(%%edx),%%mm6\n\t"
|
||||
"punpckldq 76(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,64(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,4(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 4(%%edx),%%mm6\n\t"
|
||||
"punpckldq 64(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 4(%%esi),%%mm6\n\t"
|
||||
"punpckldq 64(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,128(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,2048(%%ebx)\n\t"
|
||||
|
||||
"movq 8(%%eax),%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+20,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm3,%%mm2\n\t"
|
||||
"pfsub %%mm0,%%mm2\n\t"
|
||||
"movq 40(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+28,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm2\n\t"
|
||||
"movq 56(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+4,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq (%%eax),%%mm3\n\t"
|
||||
"movq 16(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+32,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq 32(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+8,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm1,%%mm3\n\t"
|
||||
"movq 64(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+16,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq %%mm2,%%mm4\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+8,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 116(%%edx),%%mm6\n\t"
|
||||
"punpckldq 96(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,44(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,24(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 24(%%edx),%%mm6\n\t"
|
||||
"punpckldq 44(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 24(%%esi),%%mm6\n\t"
|
||||
"punpckldq 44(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,768(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1408(%%ebx)\n\t"
|
||||
"movq %%mm3,%%mm4\n\t"
|
||||
"pfsub %%mm2,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+24,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 132(%%edx),%%mm6\n\t"
|
||||
"punpckldq 80(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,60(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,8(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 8(%%edx),%%mm6\n\t"
|
||||
"punpckldq 60(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 8(%%esi),%%mm6\n\t"
|
||||
"punpckldq 60(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,256(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1920(%%ebx)\n\t"
|
||||
"movq 8(%%eax),%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+28,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm3,%%mm2\n\t"
|
||||
"pfsub %%mm0,%%mm2\n\t"
|
||||
"movq 40(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+4,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq 56(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+20,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm2\n\t"
|
||||
"movq (%%eax),%%mm3\n\t"
|
||||
"movq 16(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+16,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq 32(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+32,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm1,%%mm3\n\t"
|
||||
"movq 64(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+8,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq %%mm2,%%mm4\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+12,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 120(%%edx),%%mm6\n\t"
|
||||
"punpckldq 92(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,48(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,20(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 20(%%edx),%%mm6\n\t"
|
||||
"punpckldq 48(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 20(%%esi),%%mm6\n\t"
|
||||
"punpckldq 48(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,640(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1536(%%ebx)\n\t"
|
||||
"movq %%mm3,%%mm4\n\t"
|
||||
"pfsub %%mm2,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+20,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 128(%%edx),%%mm6\n\t"
|
||||
"punpckldq 84(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,56(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,12(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 12(%%edx),%%mm6\n\t"
|
||||
"punpckldq 56(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 12(%%esi),%%mm6\n\t"
|
||||
"punpckldq 56(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,384(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1792(%%ebx)\n\t"
|
||||
"movq 8(%%eax),%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+20,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm3,%%mm2\n\t"
|
||||
"pfsub %%mm0,%%mm2\n\t"
|
||||
"movq 40(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+28,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm2\n\t"
|
||||
"movq 56(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+4,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq (%%eax),%%mm3\n\t"
|
||||
"movq 16(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+32,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq 32(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+8,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm1,%%mm3\n\t"
|
||||
"movq 64(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+16,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"movq %%mm2,%%mm4\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+8,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 116(%%edx),%%mm6\n\t"
|
||||
"punpckldq 96(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,44(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,24(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 24(%%edx),%%mm6\n\t"
|
||||
"punpckldq 44(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 24(%%esi),%%mm6\n\t"
|
||||
"punpckldq 44(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,768(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1408(%%ebx)\n\t"
|
||||
"movq %%mm3,%%mm4\n\t"
|
||||
"pfsub %%mm2,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+24,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 132(%%edx),%%mm6\n\t"
|
||||
"punpckldq 80(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,60(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,8(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 8(%%edx),%%mm6\n\t"
|
||||
"punpckldq 60(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 8(%%esi),%%mm6\n\t"
|
||||
"punpckldq 60(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,256(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1920(%%ebx)\n\t"
|
||||
"movq 8(%%eax),%%mm2\n\t"
|
||||
"movd "MANGLE(COS9)"+28,%%mm3\n\t"
|
||||
"punpckldq %%mm3,%%mm3\n\t"
|
||||
"pfmul %%mm3,%%mm2\n\t"
|
||||
"pfsub %%mm0,%%mm2\n\t"
|
||||
"movq 40(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+4,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm2\n\t"
|
||||
"movq 56(%%eax),%%mm3\n\t"
|
||||
"movd "MANGLE(COS9)"+20,%%mm4\n\t"
|
||||
"punpckldq %%mm4,%%mm4\n\t"
|
||||
"pfmul %%mm4,%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm2\n\t"
|
||||
"movq (%%eax),%%mm3\n\t"
|
||||
"movq 16(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+16,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq 32(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+32,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfadd %%mm4,%%mm3\n\t"
|
||||
"pfadd %%mm1,%%mm3\n\t"
|
||||
"movq 64(%%eax),%%mm4\n\t"
|
||||
"movd "MANGLE(COS9)"+8,%%mm5\n\t"
|
||||
"punpckldq %%mm5,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"pfsub %%mm4,%%mm3\n\t"
|
||||
"movq %%mm2,%%mm4\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+12,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 120(%%edx),%%mm6\n\t"
|
||||
"punpckldq 92(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,48(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,20(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 20(%%edx),%%mm6\n\t"
|
||||
"punpckldq 48(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 20(%%esi),%%mm6\n\t"
|
||||
"punpckldq 48(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,640(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1536(%%ebx)\n\t"
|
||||
"movq %%mm3,%%mm4\n\t"
|
||||
"pfsub %%mm2,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+20,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 128(%%edx),%%mm6\n\t"
|
||||
"punpckldq 84(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,56(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,12(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 12(%%edx),%%mm6\n\t"
|
||||
"punpckldq 56(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 12(%%esi),%%mm6\n\t"
|
||||
"punpckldq 56(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,384(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1792(%%ebx)\n\t"
|
||||
|
||||
"movq (%%eax),%%mm4\n\t"
|
||||
"movq 16(%%eax),%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm4\n\t"
|
||||
"movq 32(%%eax),%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq 48(%%eax),%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm4\n\t"
|
||||
"movq 64(%%eax),%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+16,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 124(%%edx),%%mm6\n\t"
|
||||
"punpckldq 88(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,52(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,16(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 16(%%edx),%%mm6\n\t"
|
||||
"punpckldq 52(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 16(%%esi),%%mm6\n\t"
|
||||
"punpckldq 52(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,512(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1664(%%ebx)\n\t"
|
||||
"movq (%%eax),%%mm4\n\t"
|
||||
"movq 16(%%eax),%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm4\n\t"
|
||||
"movq 32(%%eax),%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq 48(%%eax),%%mm3\n\t"
|
||||
"pfsub %%mm3,%%mm4\n\t"
|
||||
"movq 64(%%eax),%%mm3\n\t"
|
||||
"pfadd %%mm3,%%mm4\n\t"
|
||||
"movq %%mm7,%%mm5\n\t"
|
||||
"punpckldq "MANGLE(tfcos36)"+16,%%mm5\n\t"
|
||||
"pfmul %%mm5,%%mm4\n\t"
|
||||
"movq %%mm4,%%mm5\n\t"
|
||||
"pfacc %%mm5,%%mm5\n\t"
|
||||
"movd 124(%%edx),%%mm6\n\t"
|
||||
"punpckldq 88(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,52(%%ecx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,16(%%ecx)\n\t"
|
||||
"movq %%mm4,%%mm6\n\t"
|
||||
"punpckldq %%mm6,%%mm5\n\t"
|
||||
"pfsub %%mm6,%%mm5\n\t"
|
||||
"punpckhdq %%mm5,%%mm5\n\t"
|
||||
"movd 16(%%edx),%%mm6\n\t"
|
||||
"punpckldq 52(%%edx),%%mm6\n\t"
|
||||
"pfmul %%mm6,%%mm5\n\t"
|
||||
"movd 16(%%esi),%%mm6\n\t"
|
||||
"punpckldq 52(%%esi),%%mm6\n\t"
|
||||
"pfadd %%mm6,%%mm5\n\t"
|
||||
"movd %%mm5,512(%%ebx)\n\t"
|
||||
"psrlq $32,%%mm5\n\t"
|
||||
"movd %%mm5,1664(%%ebx)\n\t"
|
||||
|
||||
"femms\n\t"
|
||||
:
|
||||
: "a" (inbuf), "S" (o1), "c" (o2), "d" (wintab), "b" (tsbuf)
|
||||
: "memory");
|
||||
"femms\n\t"
|
||||
:
|
||||
: "a" (inbuf), "S" (o1), "c" (o2), "d" (wintab), "b" (tsbuf)
|
||||
: "memory");
|
||||
}
|
||||
|
1576
mp3lib/dct64_3dnow.c
1576
mp3lib/dct64_3dnow.c
File diff suppressed because it is too large
Load Diff
1310
mp3lib/dct64_k7.c
1310
mp3lib/dct64_k7.c
File diff suppressed because it is too large
Load Diff
1540
mp3lib/dct64_mmx.c
1540
mp3lib/dct64_mmx.c
File diff suppressed because it is too large
Load Diff
@ -22,10 +22,10 @@
|
||||
#if 0
|
||||
/* old WRITE_SAMPLE */
|
||||
/* is portable */
|
||||
#define WRITE_SAMPLE(samples,sum,clip) { \
|
||||
if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
|
||||
#define WRITE_SAMPLE(samples,sum,clip) { \
|
||||
if( (sum) > 32767.0) { *(samples) = 0x7fff; (clip)++; } \
|
||||
else if( (sum) < -32768.0) { *(samples) = -0x8000; (clip)++; }\
|
||||
else { *(samples) = sum; } \
|
||||
else { *(samples) = sum; } \
|
||||
}
|
||||
#else
|
||||
/* new WRITE_SAMPLE */
|
||||
@ -55,9 +55,9 @@
|
||||
* it doesn't work for you, just enable the "old WRITE_SAMPLE" macro.
|
||||
*/
|
||||
#if HAVE_BIGENDIAN
|
||||
#define MANTISSA_OFFSET 1
|
||||
#define MANTISSA_OFFSET 1
|
||||
#else
|
||||
#define MANTISSA_OFFSET 0
|
||||
#define MANTISSA_OFFSET 0
|
||||
#endif
|
||||
|
||||
/* sizeof(int) == 4 */
|
||||
|
@ -311,8 +311,8 @@ int synth_1to1_pent(real *bandPtr, int channel, short *samples)
|
||||
" jnz .L68\n\t"
|
||||
" movl %%edi,%%eax\n\t"
|
||||
" movl "MANGLE(saved_ebp)",%%ebp\n\t"
|
||||
:"=a"(retval)
|
||||
:"m"(bandPtr),"m"(channel),"m"(samples),"m"(tmp[0])
|
||||
:"memory","%edi","%esi","%ebx","%ecx","%edx");
|
||||
:"=a"(retval)
|
||||
:"m"(bandPtr),"m"(channel),"m"(samples),"m"(tmp[0])
|
||||
:"memory","%edi","%esi","%ebx","%ecx","%edx");
|
||||
return retval;
|
||||
}
|
||||
|
@ -15,37 +15,37 @@ static const unsigned long long attribute_used __attribute__((aligned(8))) null_
|
||||
static const unsigned long long attribute_used __attribute__((aligned(8))) one_null = 0xffff0000ffff0000ULL;
|
||||
const unsigned int __attribute__((aligned(16))) costab_mmx[] =
|
||||
{
|
||||
1056974725,
|
||||
1057056395,
|
||||
1057223771,
|
||||
1057485416,
|
||||
1057855544,
|
||||
1058356026,
|
||||
1059019886,
|
||||
1059897405,
|
||||
1061067246,
|
||||
1062657950,
|
||||
1064892987,
|
||||
1066774581,
|
||||
1069414683,
|
||||
1073984175,
|
||||
1079645762,
|
||||
1092815430,
|
||||
1057005197,
|
||||
1057342072,
|
||||
1058087743,
|
||||
1059427869,
|
||||
1061799040,
|
||||
1065862217,
|
||||
1071413542,
|
||||
1084439708,
|
||||
1057128951,
|
||||
1058664893,
|
||||
1063675095,
|
||||
1076102863,
|
||||
1057655764,
|
||||
1067924853,
|
||||
1060439283,
|
||||
1056974725,
|
||||
1057056395,
|
||||
1057223771,
|
||||
1057485416,
|
||||
1057855544,
|
||||
1058356026,
|
||||
1059019886,
|
||||
1059897405,
|
||||
1061067246,
|
||||
1062657950,
|
||||
1064892987,
|
||||
1066774581,
|
||||
1069414683,
|
||||
1073984175,
|
||||
1079645762,
|
||||
1092815430,
|
||||
1057005197,
|
||||
1057342072,
|
||||
1058087743,
|
||||
1059427869,
|
||||
1061799040,
|
||||
1065862217,
|
||||
1071413542,
|
||||
1084439708,
|
||||
1057128951,
|
||||
1058664893,
|
||||
1063675095,
|
||||
1076102863,
|
||||
1057655764,
|
||||
1067924853,
|
||||
1060439283,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -55,134 +55,134 @@ const unsigned int __attribute__((aligned(16))) costab_mmx[] =
|
||||
*/
|
||||
static const short __attribute__((aligned(8))) mp3lib_decwins[] =
|
||||
{
|
||||
0, 7, 54, 114, 510, 1288, 1644, 9372,
|
||||
18760, -9373, 1644, -1289, 510, -115, 54, -8,
|
||||
0, 7, 54, 114, 510, 1288, 1644, 9372,
|
||||
18760, -9373, 1644, -1289, 510, -115, 54, -8,
|
||||
0, 7, 55, 129, 500, 1379, 1490, 9834,
|
||||
18748, -8910, 1784, -1197, 516, -101, 52, -7,
|
||||
0, 7, 55, 129, 500, 1379, 1490, 9834,
|
||||
18748, -8910, 1784, -1197, 516, -101, 52, -7,
|
||||
0, 8, 56, 145, 488, 1469, 1322, 10294,
|
||||
18714, -8448, 1910, -1107, 520, -87, 51, -6,
|
||||
0, 8, 56, 145, 488, 1469, 1322, 10294,
|
||||
18714, -8448, 1910, -1107, 520, -87, 51, -6,
|
||||
0, 9, 57, 161, 474, 1559, 1141, 10751,
|
||||
18658, -7987, 2023, -1016, 522, -74, 49, -6,
|
||||
0, 9, 57, 161, 474, 1559, 1141, 10751,
|
||||
18658, -7987, 2023, -1016, 522, -74, 49, -6,
|
||||
0, 10, 57, 177, 456, 1647, 944, 11205,
|
||||
18579, -7528, 2123, -927, 522, -61, 48, -5,
|
||||
0, 10, 57, 177, 456, 1647, 944, 11205,
|
||||
18579, -7528, 2123, -927, 522, -61, 48, -5,
|
||||
0, 11, 57, 194, 435, 1733, 734, 11654,
|
||||
18477, -7073, 2210, -838, 519, -50, 46, -5,
|
||||
0, 11, 57, 194, 435, 1733, 734, 11654,
|
||||
18477, -7073, 2210, -838, 519, -50, 46, -5,
|
||||
0, 12, 57, 212, 411, 1817, 510, 12097,
|
||||
18354, -6621, 2285, -751, 515, -39, 44, -4,
|
||||
0, 12, 57, 212, 411, 1817, 510, 12097,
|
||||
18354, -6621, 2285, -751, 515, -39, 44, -4,
|
||||
0, 13, 57, 229, 384, 1899, 271, 12534,
|
||||
18209, -6174, 2348, -666, 508, -28, 43, -4,
|
||||
0, 13, 57, 229, 384, 1899, 271, 12534,
|
||||
18209, -6174, 2348, -666, 508, -28, 43, -4,
|
||||
0, 14, 56, 247, 354, 1977, 18, 12963,
|
||||
18043, -5733, 2398, -583, 501, -18, 41, -4,
|
||||
0, 14, 56, 247, 354, 1977, 18, 12963,
|
||||
18043, -5733, 2398, -583, 501, -18, 41, -4,
|
||||
0, 15, 56, 266, 320, 2052, -249, 13383,
|
||||
17855, -5298, 2438, -502, 491, -9, 39, -3,
|
||||
0, 15, 56, 266, 320, 2052, -249, 13383,
|
||||
17855, -5298, 2438, -502, 491, -9, 39, -3,
|
||||
0, 17, 54, 284, 283, 2122, -530, 13794,
|
||||
17648, -4870, 2466, -423, 480, -1, 37, -3,
|
||||
0, 17, 54, 284, 283, 2122, -530, 13794,
|
||||
17648, -4870, 2466, -423, 480, -1, 37, -3,
|
||||
0, 18, 52, 302, 243, 2188, -825, 14194,
|
||||
17420, -4450, 2484, -347, 468, 7, 35, -3,
|
||||
0, 18, 52, 302, 243, 2188, -825, 14194,
|
||||
17420, -4450, 2484, -347, 468, 7, 35, -3,
|
||||
0, 19, 50, 320, 199, 2249, -1133, 14583,
|
||||
17173, -4039, 2492, -274, 455, 14, 33, -2,
|
||||
0, 19, 50, 320, 199, 2249, -1133, 14583,
|
||||
17173, -4039, 2492, -274, 455, 14, 33, -2,
|
||||
-1, 21, 48, 339, 152, 2304, -1454, 14959,
|
||||
16908, -3637, 2490, -204, 440, 20, 32, -2,
|
||||
-1, 21, 48, 339, 152, 2304, -1454, 14959,
|
||||
16908, -3637, 2490, -204, 440, 20, 32, -2,
|
||||
-1, 22, 45, 357, 101, 2354, -1788, 15322,
|
||||
16624, -3245, 2479, -137, 425, 26, 30, -2,
|
||||
-1, 22, 45, 357, 101, 2354, -1788, 15322,
|
||||
16624, -3245, 2479, -137, 425, 26, 30, -2,
|
||||
-1, 24, 41, 374, 47, 2396, -2135, 15671,
|
||||
16323, -2864, 2460, -72, 409, 31, 28, -2,
|
||||
-1, 24, 41, 374, 47, 2396, -2135, 15671,
|
||||
16323, -2864, 2460, -72, 409, 31, 28, -2,
|
||||
-1, 26, 37, 391, -11, 2431, -2493, 16004,
|
||||
16005, -2494, 2432, -12, 392, 36, 26, -2,
|
||||
-1, 26, 37, 391, -11, 2431, -2493, 16004,
|
||||
16005, -2494, 2432, -12, 392, 36, 26, -2,
|
||||
-2, -28, 31, -409, -72, -2460, -2864, -16323,
|
||||
15671, 2135, 2396, -47, 374, -41, 24, 1,
|
||||
-2, -28, 31, -409, -72, -2460, -2864, -16323,
|
||||
15671, 2135, 2396, -47, 374, -41, 24, 1,
|
||||
-2, -30, 26, -425, -137, -2479, -3245, -16624,
|
||||
15322, 1788, 2354, -101, 357, -45, 22, 1,
|
||||
-2, -30, 26, -425, -137, -2479, -3245, -16624,
|
||||
15322, 1788, 2354, -101, 357, -45, 22, 1,
|
||||
-2, -32, 20, -440, -204, -2490, -3637, -16908,
|
||||
14959, 1454, 2304, -152, 339, -48, 21, 1,
|
||||
-2, -32, 20, -440, -204, -2490, -3637, -16908,
|
||||
14959, 1454, 2304, -152, 339, -48, 21, 1,
|
||||
-2, -33, 14, -455, -274, -2492, -4039, -17173,
|
||||
14583, 1133, 2249, -199, 320, -50, 19, 0,
|
||||
-2, -33, 14, -455, -274, -2492, -4039, -17173,
|
||||
14583, 1133, 2249, -199, 320, -50, 19, 0,
|
||||
-3, -35, 7, -468, -347, -2484, -4450, -17420,
|
||||
14194, 825, 2188, -243, 302, -52, 18, 0,
|
||||
-3, -35, 7, -468, -347, -2484, -4450, -17420,
|
||||
14194, 825, 2188, -243, 302, -52, 18, 0,
|
||||
-3, -37, -1, -480, -423, -2466, -4870, -17648,
|
||||
13794, 530, 2122, -283, 284, -54, 17, 0,
|
||||
-3, -37, -1, -480, -423, -2466, -4870, -17648,
|
||||
13794, 530, 2122, -283, 284, -54, 17, 0,
|
||||
-3, -39, -9, -491, -502, -2438, -5298, -17855,
|
||||
13383, 249, 2052, -320, 266, -56, 15, 0,
|
||||
-3, -39, -9, -491, -502, -2438, -5298, -17855,
|
||||
13383, 249, 2052, -320, 266, -56, 15, 0,
|
||||
-4, -41, -18, -501, -583, -2398, -5733, -18043,
|
||||
12963, -18, 1977, -354, 247, -56, 14, 0,
|
||||
-4, -41, -18, -501, -583, -2398, -5733, -18043,
|
||||
12963, -18, 1977, -354, 247, -56, 14, 0,
|
||||
-4, -43, -28, -508, -666, -2348, -6174, -18209,
|
||||
12534, -271, 1899, -384, 229, -57, 13, 0,
|
||||
-4, -43, -28, -508, -666, -2348, -6174, -18209,
|
||||
12534, -271, 1899, -384, 229, -57, 13, 0,
|
||||
-4, -44, -39, -515, -751, -2285, -6621, -18354,
|
||||
12097, -510, 1817, -411, 212, -57, 12, 0,
|
||||
-4, -44, -39, -515, -751, -2285, -6621, -18354,
|
||||
12097, -510, 1817, -411, 212, -57, 12, 0,
|
||||
-5, -46, -50, -519, -838, -2210, -7073, -18477,
|
||||
11654, -734, 1733, -435, 194, -57, 11, 0,
|
||||
-5, -46, -50, -519, -838, -2210, -7073, -18477,
|
||||
11654, -734, 1733, -435, 194, -57, 11, 0,
|
||||
-5, -48, -61, -522, -927, -2123, -7528, -18579,
|
||||
11205, -944, 1647, -456, 177, -57, 10, 0,
|
||||
-5, -48, -61, -522, -927, -2123, -7528, -18579,
|
||||
11205, -944, 1647, -456, 177, -57, 10, 0,
|
||||
-6, -49, -74, -522, -1016, -2023, -7987, -18658,
|
||||
10751, -1141, 1559, -474, 161, -57, 9, 0,
|
||||
-6, -49, -74, -522, -1016, -2023, -7987, -18658,
|
||||
10751, -1141, 1559, -474, 161, -57, 9, 0,
|
||||
-6, -51, -87, -520, -1107, -1910, -8448, -18714,
|
||||
10294, -1322, 1469, -488, 145, -56, 8, 0,
|
||||
-6, -51, -87, -520, -1107, -1910, -8448, -18714,
|
||||
10294, -1322, 1469, -488, 145, -56, 8, 0,
|
||||
-7, -52, -101, -516, -1197, -1784, -8910, -18748,
|
||||
9834, -1490, 1379, -500, 129, -55, 7, 0,
|
||||
-7, -52, -101, -516, -1197, -1784, -8910, -18748,
|
||||
9834, -1490, 1379, -500, 129, -55, 7, 0,
|
||||
0, 7, 54, 114, 510, 1288, 1644, 9372,
|
||||
18760, -9373, 1644, -1289, 510, -115, 54, -8,
|
||||
0, 7, 54, 114, 510, 1288, 1644, 9372,
|
||||
18760, -9373, 1644, -1289, 510, -115, 54, -8,
|
||||
0, 7, 55, 129, 500, 1379, 1490, 9834,
|
||||
18748, -8910, 1784, -1197, 516, -101, 52, -7,
|
||||
0, 7, 55, 129, 500, 1379, 1490, 9834,
|
||||
18748, -8910, 1784, -1197, 516, -101, 52, -7,
|
||||
0, 8, 56, 145, 488, 1469, 1322, 10294,
|
||||
18714, -8448, 1910, -1107, 520, -87, 51, -6,
|
||||
0, 8, 56, 145, 488, 1469, 1322, 10294,
|
||||
18714, -8448, 1910, -1107, 520, -87, 51, -6,
|
||||
0, 9, 57, 161, 474, 1559, 1141, 10751,
|
||||
18658, -7987, 2023, -1016, 522, -74, 49, -6,
|
||||
0, 9, 57, 161, 474, 1559, 1141, 10751,
|
||||
18658, -7987, 2023, -1016, 522, -74, 49, -6,
|
||||
0, 10, 57, 177, 456, 1647, 944, 11205,
|
||||
18579, -7528, 2123, -927, 522, -61, 48, -5,
|
||||
0, 10, 57, 177, 456, 1647, 944, 11205,
|
||||
18579, -7528, 2123, -927, 522, -61, 48, -5,
|
||||
0, 11, 57, 194, 435, 1733, 734, 11654,
|
||||
18477, -7073, 2210, -838, 519, -50, 46, -5,
|
||||
0, 11, 57, 194, 435, 1733, 734, 11654,
|
||||
18477, -7073, 2210, -838, 519, -50, 46, -5,
|
||||
0, 12, 57, 212, 411, 1817, 510, 12097,
|
||||
18354, -6621, 2285, -751, 515, -39, 44, -4,
|
||||
0, 12, 57, 212, 411, 1817, 510, 12097,
|
||||
18354, -6621, 2285, -751, 515, -39, 44, -4,
|
||||
0, 13, 57, 229, 384, 1899, 271, 12534,
|
||||
18209, -6174, 2348, -666, 508, -28, 43, -4,
|
||||
0, 13, 57, 229, 384, 1899, 271, 12534,
|
||||
18209, -6174, 2348, -666, 508, -28, 43, -4,
|
||||
0, 14, 56, 247, 354, 1977, 18, 12963,
|
||||
18043, -5733, 2398, -583, 501, -18, 41, -4,
|
||||
0, 14, 56, 247, 354, 1977, 18, 12963,
|
||||
18043, -5733, 2398, -583, 501, -18, 41, -4,
|
||||
0, 15, 56, 266, 320, 2052, -249, 13383,
|
||||
17855, -5298, 2438, -502, 491, -9, 39, -3,
|
||||
0, 15, 56, 266, 320, 2052, -249, 13383,
|
||||
17855, -5298, 2438, -502, 491, -9, 39, -3,
|
||||
0, 17, 54, 284, 283, 2122, -530, 13794,
|
||||
17648, -4870, 2466, -423, 480, -1, 37, -3,
|
||||
0, 17, 54, 284, 283, 2122, -530, 13794,
|
||||
17648, -4870, 2466, -423, 480, -1, 37, -3,
|
||||
0, 18, 52, 302, 243, 2188, -825, 14194,
|
||||
17420, -4450, 2484, -347, 468, 7, 35, -3,
|
||||
0, 18, 52, 302, 243, 2188, -825, 14194,
|
||||
17420, -4450, 2484, -347, 468, 7, 35, -3,
|
||||
0, 19, 50, 320, 199, 2249, -1133, 14583,
|
||||
17173, -4039, 2492, -274, 455, 14, 33, -2,
|
||||
0, 19, 50, 320, 199, 2249, -1133, 14583,
|
||||
17173, -4039, 2492, -274, 455, 14, 33, -2,
|
||||
-1, 21, 48, 339, 152, 2304, -1454, 14959,
|
||||
16908, -3637, 2490, -204, 440, 20, 32, -2,
|
||||
-1, 21, 48, 339, 152, 2304, -1454, 14959,
|
||||
16908, -3637, 2490, -204, 440, 20, 32, -2,
|
||||
-1, 22, 45, 357, 101, 2354, -1788, 15322,
|
||||
16624, -3245, 2479, -137, 425, 26, 30, -2,
|
||||
-1, 22, 45, 357, 101, 2354, -1788, 15322,
|
||||
16624, -3245, 2479, -137, 425, 26, 30, -2,
|
||||
-1, 24, 41, 374, 47, 2396, -2135, 15671,
|
||||
16323, -2864, 2460, -72, 409, 31, 28, -2,
|
||||
-1, 24, 41, 374, 47, 2396, -2135, 15671,
|
||||
16323, -2864, 2460, -72, 409, 31, 28, -2,
|
||||
-1, 26, 37, 391, -11, 2431, -2493, 16004,
|
||||
16005, -2494, 2432, -12, 392, 36, 26, -2,
|
||||
-1, 26, 37, 391, -11, 2431, -2493, 16004,
|
||||
16005, -2494, 2432, -12, 392, 36, 26, -2,
|
||||
-2, -28, 31, -409, -72, -2460, -2864, -16323,
|
||||
15671, 2135, 2396, -47, 374, -41, 24, 1,
|
||||
-2, -28, 31, -409, -72, -2460, -2864, -16323,
|
||||
15671, 2135, 2396, -47, 374, -41, 24, 1,
|
||||
-2, -30, 26, -425, -137, -2479, -3245, -16624,
|
||||
15322, 1788, 2354, -101, 357, -45, 22, 1,
|
||||
-2, -30, 26, -425, -137, -2479, -3245, -16624,
|
||||
15322, 1788, 2354, -101, 357, -45, 22, 1,
|
||||
-2, -32, 20, -440, -204, -2490, -3637, -16908,
|
||||
14959, 1454, 2304, -152, 339, -48, 21, 1,
|
||||
-2, -32, 20, -440, -204, -2490, -3637, -16908,
|
||||
14959, 1454, 2304, -152, 339, -48, 21, 1,
|
||||
-2, -33, 14, -455, -274, -2492, -4039, -17173,
|
||||
14583, 1133, 2249, -199, 320, -50, 19, 0,
|
||||
-2, -33, 14, -455, -274, -2492, -4039, -17173,
|
||||
14583, 1133, 2249, -199, 320, -50, 19, 0,
|
||||
-3, -35, 7, -468, -347, -2484, -4450, -17420,
|
||||
14194, 825, 2188, -243, 302, -52, 18, 0,
|
||||
-3, -35, 7, -468, -347, -2484, -4450, -17420,
|
||||
14194, 825, 2188, -243, 302, -52, 18, 0,
|
||||
-3, -37, -1, -480, -423, -2466, -4870, -17648,
|
||||
13794, 530, 2122, -283, 284, -54, 17, 0,
|
||||
-3, -37, -1, -480, -423, -2466, -4870, -17648,
|
||||
13794, 530, 2122, -283, 284, -54, 17, 0,
|
||||
-3, -39, -9, -491, -502, -2438, -5298, -17855,
|
||||
13383, 249, 2052, -320, 266, -56, 15, 0,
|
||||
-3, -39, -9, -491, -502, -2438, -5298, -17855,
|
||||
13383, 249, 2052, -320, 266, -56, 15, 0,
|
||||
-4, -41, -18, -501, -583, -2398, -5733, -18043,
|
||||
12963, -18, 1977, -354, 247, -56, 14, 0,
|
||||
-4, -41, -18, -501, -583, -2398, -5733, -18043,
|
||||
12963, -18, 1977, -354, 247, -56, 14, 0,
|
||||
-4, -43, -28, -508, -666, -2348, -6174, -18209,
|
||||
12534, -271, 1899, -384, 229, -57, 13, 0,
|
||||
-4, -43, -28, -508, -666, -2348, -6174, -18209,
|
||||
12534, -271, 1899, -384, 229, -57, 13, 0,
|
||||
-4, -44, -39, -515, -751, -2285, -6621, -18354,
|
||||
12097, -510, 1817, -411, 212, -57, 12, 0,
|
||||
-4, -44, -39, -515, -751, -2285, -6621, -18354,
|
||||
12097, -510, 1817, -411, 212, -57, 12, 0,
|
||||
-5, -46, -50, -519, -838, -2210, -7073, -18477,
|
||||
11654, -734, 1733, -435, 194, -57, 11, 0,
|
||||
-5, -46, -50, -519, -838, -2210, -7073, -18477,
|
||||
11654, -734, 1733, -435, 194, -57, 11, 0,
|
||||
-5, -48, -61, -522, -927, -2123, -7528, -18579,
|
||||
11205, -944, 1647, -456, 177, -57, 10, 0,
|
||||
-5, -48, -61, -522, -927, -2123, -7528, -18579,
|
||||
11205, -944, 1647, -456, 177, -57, 10, 0,
|
||||
-6, -49, -74, -522, -1016, -2023, -7987, -18658,
|
||||
10751, -1141, 1559, -474, 161, -57, 9, 0,
|
||||
-6, -49, -74, -522, -1016, -2023, -7987, -18658,
|
||||
10751, -1141, 1559, -474, 161, -57, 9, 0,
|
||||
-6, -51, -87, -520, -1107, -1910, -8448, -18714,
|
||||
10294, -1322, 1469, -488, 145, -56, 8, 0,
|
||||
-6, -51, -87, -520, -1107, -1910, -8448, -18714,
|
||||
10294, -1322, 1469, -488, 145, -56, 8, 0,
|
||||
-7, -52, -101, -516, -1197, -1784, -8910, -18748,
|
||||
9834, -1490, 1379, -500, 129, -55, 7, 0,
|
||||
-7, -52, -101, -516, -1197, -1784, -8910, -18748,
|
||||
9834, -1490, 1379, -500, 129, -55, 7, 0,
|
||||
};
|
||||
|
||||
int synth_1to1_MMX(real *bandPtr, int channel, short *samples)
|
||||
@ -194,23 +194,23 @@ int synth_1to1_MMX(real *bandPtr, int channel, short *samples)
|
||||
int bo1, i = 8;
|
||||
|
||||
if (channel == 0) {
|
||||
bo = (bo - 1) & 0xf;
|
||||
buf = buffs[1];
|
||||
bo = (bo - 1) & 0xf;
|
||||
buf = buffs[1];
|
||||
} else {
|
||||
samples++;
|
||||
buf = buffs[0];
|
||||
samples++;
|
||||
buf = buffs[0];
|
||||
}
|
||||
|
||||
if (bo & 1) {
|
||||
b0 = buf[1];
|
||||
bo1 = bo + 1;
|
||||
a = buf[0] + bo;
|
||||
b = buf[1] + ((bo + 1) & 0xf);
|
||||
b0 = buf[1];
|
||||
bo1 = bo + 1;
|
||||
a = buf[0] + bo;
|
||||
b = buf[1] + ((bo + 1) & 0xf);
|
||||
} else {
|
||||
b0 = buf[0];
|
||||
bo1 = bo;
|
||||
b = buf[0] + bo;
|
||||
a = buf[1] + ((bo + 1) & 0xf);
|
||||
b0 = buf[0];
|
||||
bo1 = bo;
|
||||
b = buf[0] + bo;
|
||||
a = buf[1] + ((bo + 1) & 0xf);
|
||||
}
|
||||
|
||||
dct64_MMX_func(a, b, bandPtr);
|
||||
@ -252,18 +252,18 @@ ASMALIGN(4)
|
||||
"packssdw %%mm0,%%mm0\n\t"
|
||||
"packssdw %%mm4,%%mm4\n\t"
|
||||
|
||||
"movq (%3), %%mm1\n\t"
|
||||
"punpckldq %%mm4, %%mm0\n\t"
|
||||
"pand "MANGLE(one_null)", %%mm1\n\t"
|
||||
"pand "MANGLE(null_one)", %%mm0\n\t"
|
||||
"por %%mm0, %%mm1\n\t"
|
||||
"movq %%mm1,(%3)\n\t"
|
||||
"movq (%3), %%mm1\n\t"
|
||||
"punpckldq %%mm4, %%mm0\n\t"
|
||||
"pand "MANGLE(one_null)", %%mm1\n\t"
|
||||
"pand "MANGLE(null_one)", %%mm0\n\t"
|
||||
"por %%mm0, %%mm1\n\t"
|
||||
"movq %%mm1,(%3)\n\t"
|
||||
|
||||
"add $64,%2\n\t"
|
||||
"add $128,%1\n\t"
|
||||
"add $8,%3\n\t"
|
||||
|
||||
"decl %0\n\t"
|
||||
"decl %0\n\t"
|
||||
"jnz 0b\n\t"
|
||||
|
||||
"movq (%1),%%mm0\n\t"
|
||||
@ -283,7 +283,7 @@ ASMALIGN(4)
|
||||
"psrad $13,%%mm0\n\t"
|
||||
"packssdw %%mm0,%%mm0\n\t"
|
||||
"movd %%mm0,%%eax\n\t"
|
||||
"movw %%ax, (%3)\n\t"
|
||||
"movw %%ax, (%3)\n\t"
|
||||
"sub $32,%2\n\t"
|
||||
"add $64,%1\n\t"
|
||||
"add $4,%3\n\t"
|
||||
@ -328,18 +328,18 @@ ASMALIGN(4)
|
||||
"psubsw %%mm1,%%mm0\n\t"
|
||||
"psubsw %%mm5,%%mm4\n\t"
|
||||
|
||||
"movq (%3), %%mm1\n\t"
|
||||
"punpckldq %%mm4, %%mm0\n\t"
|
||||
"pand "MANGLE(one_null)", %%mm1\n\t"
|
||||
"pand "MANGLE(null_one)", %%mm0\n\t"
|
||||
"por %%mm0, %%mm1\n\t"
|
||||
"movq %%mm1,(%3)\n\t"
|
||||
"movq (%3), %%mm1\n\t"
|
||||
"punpckldq %%mm4, %%mm0\n\t"
|
||||
"pand "MANGLE(one_null)", %%mm1\n\t"
|
||||
"pand "MANGLE(null_one)", %%mm0\n\t"
|
||||
"por %%mm0, %%mm1\n\t"
|
||||
"movq %%mm1,(%3)\n\t"
|
||||
|
||||
"sub $64,%2\n\t"
|
||||
"add $128,%1\n\t"
|
||||
"add $8,%3\n\t"
|
||||
"decl %0\n\t"
|
||||
"jnz 1b\n\t"
|
||||
"jnz 1b\n\t"
|
||||
|
||||
"movq (%1),%%mm0\n\t"
|
||||
"pmaddwd (%2),%%mm0\n\t"
|
||||
@ -360,10 +360,10 @@ ASMALIGN(4)
|
||||
"psubd %%mm0,%%mm0\n\t"
|
||||
"psubsw %%mm1,%%mm0\n\t"
|
||||
"movd %%mm0,%%eax\n\t"
|
||||
"movw %%ax,(%3)\n\t"
|
||||
"emms\n\t"
|
||||
:"+r"(i), "+r"(window), "+r"(b0), "+r"(samples)
|
||||
:
|
||||
:"memory", "%eax");
|
||||
"movw %%ax,(%3)\n\t"
|
||||
"emms\n\t"
|
||||
:"+r"(i), "+r"(window), "+r"(b0), "+r"(samples)
|
||||
:
|
||||
:"memory", "%eax");
|
||||
return 0;
|
||||
}
|
||||
|
@ -2,78 +2,77 @@
|
||||
|
||||
void init_spline(float *x, float *y, int n, float *y2)
|
||||
{
|
||||
int i, k;
|
||||
float p, qn, sig, un, *u;
|
||||
u = malloc(n * sizeof (float));
|
||||
|
||||
int i, k;
|
||||
float p, qn, sig, un, *u;
|
||||
u = malloc(n * sizeof (float));
|
||||
y2[0] = u[0] = 0.0;
|
||||
|
||||
y2[0] = u[0] = 0.0;
|
||||
for (i = 1; i < n - 1; i++)
|
||||
{
|
||||
sig = ((float) x[i] - x[i - 1]) / ((float) x[i + 1] - x[i - 1]);
|
||||
p = sig * y2[i - 1] + 2.0;
|
||||
y2[i] = (sig - 1.0) / p;
|
||||
u[i] = (((float) y[i + 1] - y[i]) / (x[i + 1] - x[i])) -
|
||||
(((float) y[i] - y[i - 1]) / (x[i] - x[i - 1]));
|
||||
u[i] = (6.0 * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p;
|
||||
}
|
||||
qn = un = 0.0;
|
||||
|
||||
for (i = 1; i < n - 1; i++)
|
||||
{
|
||||
sig = ((float) x[i] - x[i - 1]) / ((float) x[i + 1] - x[i - 1]);
|
||||
p = sig * y2[i - 1] + 2.0;
|
||||
y2[i] = (sig - 1.0) / p;
|
||||
u[i] = (((float) y[i + 1] - y[i]) / (x[i + 1] - x[i])) -
|
||||
(((float) y[i] - y[i - 1]) / (x[i] - x[i - 1]));
|
||||
u[i] = (6.0 * u[i] / (x[i + 1] - x[i - 1]) - sig * u[i - 1]) / p;
|
||||
}
|
||||
qn = un = 0.0;
|
||||
|
||||
y2[n - 1] = (un - qn * u[n - 2]) / (qn * y2[n - 2] + 1.0);
|
||||
for (k = n - 2; k >= 0; k--)
|
||||
y2[k] = y2[k] * y2[k + 1] + u[k];
|
||||
free(u);
|
||||
y2[n - 1] = (un - qn * u[n - 2]) / (qn * y2[n - 2] + 1.0);
|
||||
for (k = n - 2; k >= 0; k--)
|
||||
y2[k] = y2[k] * y2[k + 1] + u[k];
|
||||
free(u);
|
||||
}
|
||||
|
||||
float eval_spline(float xa[], float ya[], float y2a[], int n, float x)
|
||||
{
|
||||
int klo, khi, k;
|
||||
float h, b, a;
|
||||
int klo, khi, k;
|
||||
float h, b, a;
|
||||
|
||||
klo = 0;
|
||||
khi = n - 1;
|
||||
while (khi - klo > 1)
|
||||
{
|
||||
k = (khi + klo) >> 1;
|
||||
if (xa[k] > x)
|
||||
khi = k;
|
||||
else
|
||||
klo = k;
|
||||
}
|
||||
h = xa[khi] - xa[klo];
|
||||
a = (xa[khi] - x) / h;
|
||||
b = (x - xa[klo]) / h;
|
||||
return (a * ya[klo] + b * ya[khi] + ((a * a * a - a) * y2a[klo] + (b * b * b - b) * y2a[khi])
|
||||
* (h * h) / 6.0);
|
||||
klo = 0;
|
||||
khi = n - 1;
|
||||
while (khi - klo > 1)
|
||||
{
|
||||
k = (khi + klo) >> 1;
|
||||
if (xa[k] > x)
|
||||
khi = k;
|
||||
else
|
||||
klo = k;
|
||||
}
|
||||
h = xa[khi] - xa[klo];
|
||||
a = (xa[khi] - x) / h;
|
||||
b = (x - xa[klo]) / h;
|
||||
return (a * ya[klo] + b * ya[khi] + ((a * a * a - a) * y2a[klo] + (b * b * b - b) * y2a[khi])
|
||||
* (h * h) / 6.0);
|
||||
}
|
||||
|
||||
void mpg123_set_eq(int on, float preamp, float *b)
|
||||
{
|
||||
float x[] =
|
||||
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, yf[10], val, band[10];
|
||||
int bands[] =
|
||||
{0, 4, 8, 16, 26, 78, 157, 313, 366, 418};
|
||||
int i, j;
|
||||
float x[] =
|
||||
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}, yf[10], val, band[10];
|
||||
int bands[] =
|
||||
{0, 4, 8, 16, 26, 78, 157, 313, 366, 418};
|
||||
int i, j;
|
||||
|
||||
mpg123_info->eq_active = on;
|
||||
if (mpg123_info->eq_active)
|
||||
{
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
band[i] = b[i] + preamp;
|
||||
}
|
||||
mpg123_info->eq_active = on;
|
||||
if (mpg123_info->eq_active)
|
||||
{
|
||||
for (i = 0; i < 10; i++)
|
||||
{
|
||||
band[i] = b[i] + preamp;
|
||||
}
|
||||
|
||||
init_spline(x, band, 10, yf);
|
||||
for (i = 0; i < 9; i++)
|
||||
{
|
||||
for (j = bands[i]; j < bands[i + 1]; j++)
|
||||
{
|
||||
val = eval_spline(x, band, yf, 10, i + ((float) (j - bands[i]) * (1.0 / (bands[i + 1] - bands[i]))));
|
||||
mpg123_info->eq_mul[j] = pow(2, val / 10.0);
|
||||
}
|
||||
}
|
||||
for (i = bands[9]; i < 576; i++)
|
||||
mpg123_info->eq_mul[i] = mpg123_info->eq_mul[bands[9] - 1];
|
||||
}
|
||||
init_spline(x, band, 10, yf);
|
||||
for (i = 0; i < 9; i++)
|
||||
{
|
||||
for (j = bands[i]; j < bands[i + 1]; j++)
|
||||
{
|
||||
val = eval_spline(x, band, yf, 10, i + ((float) (j - bands[i]) * (1.0 / (bands[i + 1] - bands[i]))));
|
||||
mpg123_info->eq_mul[j] = pow(2, val / 10.0);
|
||||
}
|
||||
}
|
||||
for (i = bands[9]; i < 576; i++)
|
||||
mpg123_info->eq_mul[i] = mpg123_info->eq_mul[bands[9] - 1];
|
||||
}
|
||||
}
|
||||
|
@ -17,143 +17,143 @@
|
||||
*/
|
||||
|
||||
static struct al_table alloc_0[] = {
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767} };
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767} };
|
||||
|
||||
static struct al_table alloc_1[] = {
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767} };
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{3,-3},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},{10,-511},
|
||||
{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{3,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767},
|
||||
{2,0},{5,3},{7,5},{16,-32767} };
|
||||
|
||||
static struct al_table alloc_2[] = {
|
||||
{4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
|
||||
{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
|
||||
{4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
|
||||
{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
|
||||
{4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
|
||||
{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
|
||||
{4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
|
||||
{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
|
||||
|
||||
static struct al_table alloc_3[] = {
|
||||
{4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
|
||||
{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
|
||||
{4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
|
||||
{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
|
||||
{4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
|
||||
{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
|
||||
{4,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},{9,-255},
|
||||
{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},{15,-16383},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63} };
|
||||
|
||||
static struct al_table alloc_4[] = {
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
|
||||
{4,0},{5,3},{7,5},{3,-3},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},{8,-127},
|
||||
{9,-255},{10,-511},{11,-1023},{12,-2047},{13,-4095},{14,-8191},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{3,0},{5,3},{7,5},{10,9},{4,-7},{5,-15},{6,-31},{7,-63},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
{2,0},{5,3},{7,5},{10,9},
|
||||
|
@ -61,7 +61,7 @@ static void I_step_one(unsigned int balloc[], unsigned int scale_index[2][SBLIMI
|
||||
}
|
||||
|
||||
static void I_step_two(real fraction[2][SBLIMIT],unsigned int balloc[2*SBLIMIT],
|
||||
unsigned int scale_index[2][SBLIMIT],struct frame *fr)
|
||||
unsigned int scale_index[2][SBLIMIT],struct frame *fr)
|
||||
{
|
||||
int i,n;
|
||||
int smpb[2*SBLIMIT]; /* values: 0-65535 */
|
||||
|
@ -18,7 +18,7 @@ static int grp_3tab[32 * 3] = { 0, }; /* used: 27 */
|
||||
static int grp_5tab[128 * 3] = { 0, }; /* used: 125 */
|
||||
static int grp_9tab[1024 * 3] = { 0, }; /* used: 729 */
|
||||
|
||||
static real muls[27][64]; /* also used by layer 1 */
|
||||
static real muls[27][64]; /* also used by layer 1 */
|
||||
|
||||
static void init_layer2(void)
|
||||
{
|
||||
@ -59,7 +59,7 @@ static void init_layer2(void)
|
||||
if(_has_mmx)
|
||||
{
|
||||
for(j=3,i=0;i<63;i++,j--)
|
||||
*table++ = 16384 * m * pow(2.0,(double) j / 3.0);
|
||||
*table++ = 16384 * m * pow(2.0,(double) j / 3.0);
|
||||
}
|
||||
else
|
||||
for(j=3,i=0;i<63;i++,j--)
|
||||
@ -189,7 +189,7 @@ static void II_step_two(unsigned int *bit_alloc,real fraction[2][4][SBLIMIT],int
|
||||
for (i=jsbound;i<sblimit;i++,alloc1+=(1<<step))
|
||||
{
|
||||
step = alloc1->bits;
|
||||
bita++; /* channel 1 and channel 2 bitalloc are the same */
|
||||
bita++; /* channel 1 and channel 2 bitalloc are the same */
|
||||
if ( (ba=*bita++) )
|
||||
{
|
||||
k=(alloc2 = alloc1+ba)->bits;
|
||||
|
@ -25,7 +25,7 @@
|
||||
#define CUT_HF
|
||||
#endif
|
||||
|
||||
# define REAL_MUL(x, y) ((x) * (y))
|
||||
#define REAL_MUL(x, y) ((x) * (y))
|
||||
|
||||
static real ispow[8207];
|
||||
static real aa_ca[8],aa_cs[8];
|
||||
@ -734,8 +734,8 @@ static int III_dequantize_sample(real xr[SBLIMIT][SSLIMIT],int *scf,
|
||||
mask <<= 1;
|
||||
}
|
||||
if(part2remain+num <= 0) {
|
||||
num -= part2remain+num;
|
||||
break;
|
||||
num -= part2remain+num;
|
||||
break;
|
||||
}
|
||||
|
||||
for(i=0;i<4;i++) {
|
||||
@ -851,7 +851,7 @@ static int III_dequantize_sample(real xr[SBLIMIT][SSLIMIT],int *scf,
|
||||
|
||||
if (x == 15 && h->linbits) {
|
||||
max = cb;
|
||||
REFRESH_MASK;
|
||||
REFRESH_MASK;
|
||||
x += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
|
||||
num -= h->linbits+1;
|
||||
mask <<= h->linbits;
|
||||
@ -875,7 +875,7 @@ static int III_dequantize_sample(real xr[SBLIMIT][SSLIMIT],int *scf,
|
||||
|
||||
if (y == 15 && h->linbits) {
|
||||
max = cb;
|
||||
REFRESH_MASK;
|
||||
REFRESH_MASK;
|
||||
y += ((unsigned long) mask) >> (BITSHIFT+8-h->linbits);
|
||||
num -= h->linbits+1;
|
||||
mask <<= h->linbits;
|
||||
@ -914,7 +914,7 @@ static int III_dequantize_sample(real xr[SBLIMIT][SSLIMIT],int *scf,
|
||||
mask <<= 1;
|
||||
}
|
||||
if(part2remain+num <= 0) {
|
||||
num -= part2remain+num;
|
||||
num -= part2remain+num;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1003,7 +1003,7 @@ static void III_i_stereo(real xr_buf[2][SBLIMIT][SSLIMIT],int *scalefac,
|
||||
#if 0
|
||||
if(lsf) {
|
||||
int p = gr_info->scalefac_compress & 0x1;
|
||||
if(ms_stereo) {
|
||||
if(ms_stereo) {
|
||||
tab1 = pow1_2[p]; tab2 = pow2_2[p];
|
||||
}
|
||||
else {
|
||||
@ -1329,17 +1329,17 @@ static int do_layer3(struct frame *fr,int single){
|
||||
|
||||
for(ch=0;ch<stereo1;ch++) {
|
||||
struct gr_info_s *gr_info = &(sideinfo.ch[ch].gr[gr]);
|
||||
III_antialias(hybridIn[ch],gr_info);
|
||||
III_hybrid(hybridIn[ch], hybridOut[ch], ch,gr_info);
|
||||
III_antialias(hybridIn[ch],gr_info);
|
||||
III_hybrid(hybridIn[ch], hybridOut[ch], ch,gr_info);
|
||||
}
|
||||
|
||||
for(ss=0;ss<SSLIMIT;ss++) {
|
||||
if(single >= 0) {
|
||||
clip += (fr->synth_mono)(hybridOut[0][ss],pcm_sample,&pcm_point);
|
||||
} else {
|
||||
int p1 = pcm_point;
|
||||
clip += (fr->synth)(hybridOut[0][ss],0,pcm_sample,&p1);
|
||||
clip += (fr->synth)(hybridOut[1][ss],1,pcm_sample,&pcm_point);
|
||||
clip += (fr->synth_mono)(hybridOut[0][ss],pcm_sample,&pcm_point);
|
||||
} else {
|
||||
int p1 = pcm_point;
|
||||
clip += (fr->synth)(hybridOut[0][ss],0,pcm_sample,&p1);
|
||||
clip += (fr->synth)(hybridOut[1][ss],1,pcm_sample,&pcm_point);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -15,10 +15,10 @@
|
||||
#include "config.h"
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.141592653589793238462
|
||||
#define M_PI 3.141592653589793238462
|
||||
#endif
|
||||
#ifndef M_SQRT2
|
||||
#define M_SQRT2 1.414213562373095048802
|
||||
#define M_SQRT2 1.414213562373095048802
|
||||
#endif
|
||||
#define REAL_IS_FLOAT
|
||||
#define NEW_DCT9
|
||||
|
36
mp3lib/sr1.c
36
mp3lib/sr1.c
@ -408,34 +408,34 @@ void MP3_Init(void){
|
||||
#if HAVE_MMX
|
||||
if (gCpuCaps.hasMMX)
|
||||
{
|
||||
_has_mmx = 1;
|
||||
synth_func = synth_1to1_MMX;
|
||||
_has_mmx = 1;
|
||||
synth_func = synth_1to1_MMX;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if HAVE_AMD3DNOWEXT
|
||||
if (gCpuCaps.has3DNowExt)
|
||||
{
|
||||
dct36_func=dct36_3dnowex;
|
||||
dct64_MMX_func= dct64_MMX_3dnowex;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using 3DNow!Ex optimized decore!\n");
|
||||
dct36_func=dct36_3dnowex;
|
||||
dct64_MMX_func= dct64_MMX_3dnowex;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using 3DNow!Ex optimized decore!\n");
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#if HAVE_AMD3DNOW
|
||||
if (gCpuCaps.has3DNow)
|
||||
{
|
||||
dct36_func = dct36_3dnow;
|
||||
dct64_MMX_func = dct64_MMX_3dnow;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using 3DNow! optimized decore!\n");
|
||||
dct36_func = dct36_3dnow;
|
||||
dct64_MMX_func = dct64_MMX_3dnow;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using 3DNow! optimized decore!\n");
|
||||
}
|
||||
else
|
||||
#endif
|
||||
#if HAVE_SSE
|
||||
if (gCpuCaps.hasSSE)
|
||||
{
|
||||
dct64_MMX_func = dct64_sse;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using SSE optimized decore!\n");
|
||||
dct64_MMX_func = dct64_sse;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using SSE optimized decore!\n");
|
||||
}
|
||||
else
|
||||
#endif
|
||||
@ -443,28 +443,28 @@ void MP3_Init(void){
|
||||
#if HAVE_MMX
|
||||
if (gCpuCaps.hasMMX)
|
||||
{
|
||||
dct64_MMX_func = dct64_MMX;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using MMX optimized decore!\n");
|
||||
dct64_MMX_func = dct64_MMX;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using MMX optimized decore!\n");
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (gCpuCaps.cpuType >= CPUTYPE_I586)
|
||||
{
|
||||
synth_func = synth_1to1_pent;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using Pentium optimized decore!\n");
|
||||
synth_func = synth_1to1_pent;
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using Pentium optimized decore!\n");
|
||||
}
|
||||
else
|
||||
#endif /* ARCH_X86_32 */
|
||||
#if HAVE_ALTIVEC
|
||||
if (gCpuCaps.hasAltiVec)
|
||||
{
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using AltiVec optimized decore!\n");
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using AltiVec optimized decore!\n");
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
synth_func = NULL; /* use default c version */
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using generic C decore!\n");
|
||||
synth_func = NULL; /* use default c version */
|
||||
mp_msg(MSGT_DECAUDIO,MSGL_V,"mp3lib: using generic C decore!\n");
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FAKE_MONO
|
||||
@ -531,7 +531,7 @@ int MP3_DecodeFrame(unsigned char *hova,short single){
|
||||
case 3: do_layer3(&fr,single);break;
|
||||
case 1: do_layer1(&fr,single);break;
|
||||
default:
|
||||
return 0; // unsupported
|
||||
return 0; // unsupported
|
||||
}
|
||||
// ++MP3_frames;
|
||||
return pcm_point ? pcm_point : 2;
|
||||
|
@ -158,8 +158,6 @@ static struct cookie_list_type *load_cookies_from(const char *filename,
|
||||
char *ptr;
|
||||
off_t length;
|
||||
|
||||
mp_msg(MSGT_NETWORK, MSGL_V, "Loading cookie file: %s\n", filename);
|
||||
|
||||
ptr = load_file(filename, &length);
|
||||
if (!ptr)
|
||||
return list;
|
||||
|
@ -98,7 +98,7 @@ static int control(stream_t *stream, int cmd, void *arg) {
|
||||
mp_vcd_priv_t *vcd = vcd_read_toc(stream->fd);
|
||||
if (!vcd)
|
||||
break;
|
||||
*(unsigned int *)arg = vcd->tochdr.cdth_trk1;
|
||||
*(unsigned int *)arg = vcd_end_track(vcd);
|
||||
return STREAM_OK;
|
||||
}
|
||||
case STREAM_CTRL_SEEK_TO_CHAPTER:
|
||||
|
@ -145,6 +145,11 @@ static mp_vcd_priv_t* vcd_read_toc(int fd){
|
||||
return vcd;
|
||||
}
|
||||
|
||||
static int vcd_end_track(mp_vcd_priv_t* vcd)
|
||||
{
|
||||
return vcd->tochdr.cdth_trk1;
|
||||
}
|
||||
|
||||
static int vcd_read(mp_vcd_priv_t* vcd,char *mem){
|
||||
#if defined(__linux__) || defined(__bsdi__)
|
||||
memcpy(vcd->buf,&vcd->entry.cdte_addr.msf,sizeof(struct cdrom_msf));
|
||||
|
@ -208,6 +208,11 @@ static mp_vcd_priv_t* vcd_read_toc(int fd)
|
||||
return vcd;
|
||||
}
|
||||
|
||||
static int vcd_end_track(mp_vcd_priv_t* vcd)
|
||||
{
|
||||
return vcd->hdr.lastTrackNumberInLastSessionLSB;
|
||||
}
|
||||
|
||||
static int vcd_read(mp_vcd_priv_t* vcd,char *mem)
|
||||
{
|
||||
if (pread(vcd->fd,&vcd->buf,VCD_SECTOR_SIZE,vcd_get_msf(vcd)*VCD_SECTOR_SIZE) != VCD_SECTOR_SIZE)
|
||||
|
@ -212,6 +212,11 @@ vcd_read_toc(int fd)
|
||||
return vcd;
|
||||
}
|
||||
|
||||
static int vcd_end_track(mp_vcd_priv_t* vcd)
|
||||
{
|
||||
return vcd->tochdr.ending_track;
|
||||
}
|
||||
|
||||
static int
|
||||
vcd_read(mp_vcd_priv_t* vcd, char *mem)
|
||||
{
|
||||
|
@ -188,6 +188,11 @@ static mp_vcd_priv_t *vcd_read_toc(int fd)
|
||||
return vcd;
|
||||
}
|
||||
|
||||
static int vcd_end_track(mp_vcd_priv_t* vcd)
|
||||
{
|
||||
return vcd->iLastTrack;
|
||||
}
|
||||
|
||||
static int vcd_read(mp_vcd_priv_t *vcd, char *mem)
|
||||
{
|
||||
struct {
|
||||
|
@ -132,6 +132,11 @@ static mp_vcd_priv_t* vcd_read_toc(int fd)
|
||||
return vcd;
|
||||
}
|
||||
|
||||
static int vcd_end_track(mp_vcd_priv_t* vcd)
|
||||
{
|
||||
return vcd->toc.LastTrack;
|
||||
}
|
||||
|
||||
static int vcd_read(mp_vcd_priv_t* vcd, char *mem)
|
||||
{
|
||||
DWORD dwBytesReturned;
|
||||
|
Loading…
Reference in New Issue
Block a user