1
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:
Uoti Urpala 2010-04-26 18:25:34 +03:00
commit 7795726e0f
94 changed files with 8315 additions and 8211 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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)"

View File

@ -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)"

View File

@ -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).

View File

@ -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

View File

@ -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!

View File

@ -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.

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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 *);

View File

@ -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...

View File

@ -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
...

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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.

View File

@ -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.

View File

@ -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
View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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,

View File

@ -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>

View File

@ -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

View File

@ -123,13 +123,13 @@ echo "base=0xd8000000 size=0x2000000 type=write-combining" &gt; /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>

View File

@ -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;
}
*/

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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 &hellip;).
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 &hellip;).
</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>&nbsp;:
<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>&nbsp;:
<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>&nbsp;:
<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&nbsp;:
<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&nbsp;:
<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&nbsp;:
<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&nbsp;:
<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&nbsp;: 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>

View File

@ -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

View File

@ -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>

View File

@ -282,14 +282,14 @@ x86 en utilisant GCC sans assembleur GNU&nbsp;:
Erreur typique obtenue en construisant avec un compilateur C GNU qui n'utilise
pas GNU as&nbsp;:
<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>

View File

@ -45,7 +45,7 @@ Autre façon de lire un fichier:
</synopsis>
</para>
<para>
<para>
Lecture de plusieurs fichiers:
<synopsis>
<command>mplayer</command><!--

View File

@ -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)&nbsp;:
<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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- synced with r25146 -->
<!-- synced with r25146 -->
<chapter id="usage">
<title>Utilizzo</title>

View File

@ -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>

View File

@ -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$))))

View File

@ -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> &gt; mplayer.bug
gdb mplayer --core=core -batch --command=<replaceable>plik_z_poleceniami</replaceable> &gt; mplayer.bug
</screen>
</para>
</sect3>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -193,7 +193,7 @@ VOBsub субтитры состоят из большого (несколько
<term><option>-subdelay <replaceable>sec</replaceable></option></term>
<listitem><para>
Задерживает субтитры на <option><replaceable>sec</replaceable></option>
секунд. Это значение может быть отрицательным.
секунд. Это значение может быть отрицательным.
</para></listitem>
</varlistentry>
<varlistentry>

View File

@ -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 -->

View File

@ -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. $< $@

View File

@ -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
View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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)
{

View File

@ -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).

File diff suppressed because it is too large Load Diff

View File

@ -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;
}

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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" },

View File

@ -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

View File

@ -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);

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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");
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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 */

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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];
}
}

View File

@ -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},

View File

@ -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 */

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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:

View File

@ -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));

View File

@ -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)

View File

@ -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)
{

View File

@ -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 {

View File

@ -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;