mirror of https://github.com/mpv-player/mpv
Merge svn changes up to r27949
Conflicts: common.mak libvo/vo_xv.c libvo/x11_common.c libvo/x11_common.h stream/cache2.c
This commit is contained in:
commit
1715c2a336
|
@ -10048,34 +10048,38 @@ exhaustive search (very slow, and no better than umh)
|
|||
radius of exhaustive or multi-hexagon motion search (default: 16)
|
||||
.
|
||||
.TP
|
||||
.B subq=<1\-9>
|
||||
.B subq=<0\-9>
|
||||
Adjust subpel refinement quality.
|
||||
This parameter controls quality versus speed tradeoffs involved in the motion
|
||||
estimation decision process.
|
||||
subq=5 can compress up to 10% better than subq=1.
|
||||
.PD 0
|
||||
.RSs
|
||||
.IPs 1
|
||||
.IPs 0
|
||||
Runs fullpixel precision motion estimation on all candidate
|
||||
macroblock types.
|
||||
Then selects the best type.
|
||||
Then refines the motion of that type to fast quarterpixel precision (fastest).
|
||||
Then selects the best type with SAD metric (faster than subq=1, not recommended
|
||||
unless you're looking for ultra-fast encoding).
|
||||
.IPs 1
|
||||
Does as 0, then refines the motion of that type to fast quarterpixel precision
|
||||
(fast).
|
||||
.IPs 2
|
||||
Runs halfpixel precision motion estimation on all candidate macroblock types.
|
||||
Then selects the best type.
|
||||
Then selects the best type with SATD metric.
|
||||
Then refines the motion of that type to fast quarterpixel precision.
|
||||
.IPs 3
|
||||
As 2, but uses a slower quarterpixel refinement.
|
||||
.IPs 4
|
||||
Runs fast quarterpixel precision motion estimation on all candidate
|
||||
macroblock types.
|
||||
Then selects the best type.
|
||||
Then selects the best type with SATD metric.
|
||||
Then finishes the quarterpixel refinement for that type.
|
||||
.IPs 5
|
||||
Runs best quality quarterpixel precision motion estimation on all
|
||||
candidate macroblock types, before selecting the best type.
|
||||
Also refines the two motion vectors used in bidirectional macroblocks,
|
||||
rather than reusing vectors from the forward and backward searches.
|
||||
Also refines the two motion vectors used in bidirectional macroblocks with
|
||||
SATD metric, rather than reusing vectors from the forward and backward
|
||||
searches.
|
||||
.IPs 6
|
||||
Enables rate-distortion optimization of macroblock types in
|
||||
I- and P-frames (default).
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.\" synced with r27895
|
||||
.\" synced with r27906
|
||||
.\" Encoding: iso-8859-1
|
||||
.\" MPlayer (C) 2000-2008 MPlayer Team
|
||||
.\" The English man page was/is done by Gabucino, Diego Biurrun, Jonas Jermann
|
||||
|
@ -10594,24 +10594,27 @@ rayon de de la recherche exhaustive et multi-hexagonale de mouvement
|
|||
(par défaut\ 16)
|
||||
.
|
||||
.TP
|
||||
.B subq=<1\-9>
|
||||
.B subq=<0\-9>
|
||||
Ajuste la qualité d'affinement de subpel.
|
||||
Ce paramètre contrôle le compromis qualité/\:vitesse lié aux décisions du
|
||||
processus d'estimation du mouvement.
|
||||
subq=5 peut augmenter jusqu'à 10% le taux de compression par rapport à subq=1.
|
||||
.PD 0
|
||||
.RSs
|
||||
.IPs 1
|
||||
.IPs 0
|
||||
Effectue une recherche de mouvement d'une précision fullpixel (c-à-d qu'elle
|
||||
capture les mouvements d'une trame à la suivante avec une précision d'un pixel)
|
||||
sur tous les types de macro-blocs candidats.
|
||||
Sélectionne ensuite le meilleur type.
|
||||
Puis affine rapidement avec une précision qu'un quart de pixel le mouvement de
|
||||
ce type (le plus rapide).
|
||||
Sélectionne ensuite le meilleur type avec la métrique SAD (plus rapide que
|
||||
subq=1, mais non recommandé à moins que vous cherchiez à réaliser un encodage
|
||||
ultra-rapide).
|
||||
.IPs 1
|
||||
Comme 0, affine ensuite rapidement avec une précision qu'un quart de pixel le
|
||||
mouvement de ce type (rapide).
|
||||
.IPs 2
|
||||
Effectue une recherche de mouvement d'une précision demi pixel sur tous les
|
||||
types de macro-blocs candidats.
|
||||
Sélectionne ensuite le meilleur type.
|
||||
Sélectionne ensuite le meilleur type avec la métrique SATD.
|
||||
Puis affine rapidement avec une précision qu'un quart de pixel le mouvement de
|
||||
ce type.
|
||||
.IPs 3
|
||||
|
@ -10619,13 +10622,14 @@ Comme 2, mais utilise un affinage plus lent qu'un quart de pixel.
|
|||
.IPs 4
|
||||
Effectue une rapide recherche de mouvement d'une précision d'un quart de
|
||||
pixel (quarterpixel) sur tous les types de macro-blocs candidats.
|
||||
Puis termine l'affinement quarterpixel pour ce type
|
||||
Puis sélectionne le meilleur type avec la métrique SATD.
|
||||
Termine ensuite l'affinement quarterpixel pour ce type.
|
||||
.IPs 5
|
||||
Effectue la recherche de mouvement de la meilleure qualité sur tous les
|
||||
types de macro-blocs candidats, avant de choisir le meilleur type.
|
||||
Affine aussi les deux vecteurs de mouvement utilisés par les macro-blocs
|
||||
bi-directionnels, au lieu de ré-utiliser les vecteurs des recherches
|
||||
avant et arrière.
|
||||
bi-directionnels avec la métrique SATD, au lieu de ré-utiliser les vecteurs
|
||||
des recherches avant et arrière.
|
||||
.IPs 6
|
||||
Active la sélection des macro-blocs en fonction de leur taux de distortion,
|
||||
pour les trames-I et P (par défaut).
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
.\" Synced with r27691
|
||||
.\" Synced with r27906
|
||||
.\" MPlayer (C) 2000-2008 MPlayer Team
|
||||
.\" Ezt a man oldalt Gabucino, Diego Biurrun és Jonas Jermann készíti/készítette
|
||||
.\" Karbantartó: Gabrov
|
||||
|
@ -33,7 +33,7 @@
|
|||
.\" Név
|
||||
.\" --------------------------------------------------------------------------
|
||||
.
|
||||
.TH MPlayer 1 "2008. 10. 05." "MPlayer Project" "A film lejátszó"
|
||||
.TH MPlayer 1 "2008. 11. 16." "MPlayer Project" "A film lejátszó"
|
||||
.
|
||||
.SH NÉV
|
||||
mplayer \- film lejátszó
|
||||
|
@ -107,7 +107,7 @@ cue://f
|
|||
.
|
||||
.br
|
||||
.B mplayer
|
||||
[fájl|mms[t]|http|http_proxy|rt[s]p|ftp|udp|unsv|smb]://
|
||||
[fájl|mms[t]|http|http_proxy|rt[s]p|ftp|udp|unsv|icyx|noicyx|smb]://
|
||||
[felhasználó:jelszó@]URL[:port] [opciók]
|
||||
.
|
||||
.br
|
||||
|
@ -2661,6 +2661,12 @@ amit
|
|||
A mixer hangerő változtatásának léptékét állítja be a teljes tartomány
|
||||
százalékában (alapértelmezett: 3).
|
||||
.
|
||||
.TP
|
||||
.B \-volume <-1\-100> (lásd még \-af volume)
|
||||
Beállítja a kezdő hangerőt a keverőben, akár hardveres, akár szoftveres (ha a
|
||||
\-softvol-lal együtt használod).
|
||||
A -1-es érték (alapértelmezett) nem változtat a hangerőn.
|
||||
.
|
||||
.
|
||||
.
|
||||
.SH "AUDIÓ KIMENETI VEZÉRLŐK (CSAK MPLAYER)"
|
||||
|
@ -3219,12 +3225,12 @@ Nem minden vide
|
|||
.
|
||||
.TP
|
||||
.B \-screenh <pixel>
|
||||
A függőleges képernyő felbontás megadása az olyan videó kimeneti vezérlőnek,
|
||||
A képernyő magasságának megadása az olyan videó kimeneti vezérlőnek,
|
||||
ami nem tudja a képernyő felbontását, mint az fbdev, x11 és TV-out.
|
||||
.
|
||||
.TP
|
||||
.B \-screenw <pixel>
|
||||
A vízszintes képernyő felbontás megadása az olyan videó kimeneti vezérlőnek,
|
||||
A képernyő szélességének megadása az olyan videó kimeneti vezérlőnek,
|
||||
ami nem tudja a képernyő felbontását, mint az fbdev, x11 és TV-out.
|
||||
.
|
||||
.TP
|
||||
|
@ -10064,18 +10070,20 @@ alapos keres
|
|||
az alapos vagy többszörös-hatszög mozgás keresés sugara (alapértelmezett: 16)
|
||||
.
|
||||
.TP
|
||||
.B subq=<1\-7>
|
||||
.B subq=<0\-9>
|
||||
A subpel finomítási minőségének beállítása.
|
||||
Ez a paraméter szabályozza a minőség kontra sebesség arányt a
|
||||
mozgás becslési döntések folyamatában.
|
||||
A subq=5 akár 10%-kal gyorsabb lehet, mint a subq=1.
|
||||
.PD 0
|
||||
.RSs
|
||||
.IPs 1
|
||||
.IPs 0
|
||||
Teljes pixeles pontosságú mozgás becslést végez minden résztvevő
|
||||
makroblokk típuson.
|
||||
Ezután kiválasztja a legjobb típust.
|
||||
Majd finomítja azt a típusú mozgást egy gyors negyedpixeles pontossághoz (leggyorsabb).
|
||||
Ezután SAD metrikával kiválasztja a legjobb típust (gyorsabb, mint a subq=1, de nem
|
||||
javasolt, csak ha nagyon gyors kódolást akarsz).
|
||||
.IPs 1
|
||||
Ugyan az, mint a 0, majd finomítja a mozgást gyors negyedpixeles precizítással (gyors).
|
||||
.IPs 2
|
||||
Félpixeles pontosságú mozgás becslést végez minden részvevő makroblokk
|
||||
típuson.
|
||||
|
@ -10086,18 +10094,25 @@ Mint az 2, de lassabb negyedpixeles finom
|
|||
.IPs 4
|
||||
Gyors negyedpixeles pontosságú mozgás becslést futtat le minden résztvevő
|
||||
makroblokk típuson.
|
||||
Majd kiválasztja a legjobb típust.
|
||||
Majd SATD metrikával kiválasztja a legjobb típust.
|
||||
Ezután befejezi a negyedpixeles finomítást azon a típuson.
|
||||
.IPs 5
|
||||
Legjobb minőségű negyedpixel pontosságú mozgás becslést futtat le
|
||||
minden résztvevő makroblokk típuson, mielőtt kiválaszaná a legjobb
|
||||
típust. (alapértelmezett)
|
||||
típust.
|
||||
Finomítja a két, bidirekcionális makroblokkban használt mozgás vektort is
|
||||
SATD metrikával a kétirányú kereséssel megtalált vektorok újra felhasználása helyett.
|
||||
.IPs 6
|
||||
Engedélyezi a ráta-torzítás optimalizálását a makroblokk típusokra
|
||||
az I- és P-kockáknál.
|
||||
az I- és P-kockáknál (alapértelmezett).
|
||||
.IPs 7
|
||||
Engedélyezi a ráta-torzítás optimalizálását az intra módokra és a mozgás
|
||||
vektorokra. (legjobb)
|
||||
Engedélyezi a ráta-torzítás optimalizálását a makroblokk típusokra minden kockánál.
|
||||
.IPs 8
|
||||
Engedélyezi a ráta-torzítás optimalizálását a mozgás vektorokra és a
|
||||
belső jósló módokra az I- és P-kockáknál.
|
||||
.IPs 9
|
||||
Engedélyezi a ráta-torzítás optimalizálását a mozgás vektorokra és a
|
||||
belső jósló módokra minden kockánál (legjobb).
|
||||
.RE
|
||||
.PD 1
|
||||
.RS
|
||||
|
@ -10119,18 +10134,7 @@ Ezen opci
|
|||
frameref>1 szükséges.
|
||||
.
|
||||
.TP
|
||||
.B (no)brdo
|
||||
Engedélyezi a ráta-torzító optimalizálást a B-kockák makroblokk típusain.
|
||||
subq>=6 szükséges.
|
||||
.
|
||||
.TP
|
||||
.B (no)bime
|
||||
Finomítja a kétirányú makroblokkokban használt két mozgásvektort,
|
||||
az előre és visszafelé történő keresésből származó vektorok újrafelhasználása helyett.
|
||||
Ennek az opciónakl nincs hatása B-kockák nélkül.
|
||||
.
|
||||
.TP
|
||||
.B trellis=<0\-2>
|
||||
.B trellis=<0\-2> (csak cabac)
|
||||
ráta-torzító optimális kvantálás
|
||||
.PD 0
|
||||
.RSs
|
||||
|
@ -10144,6 +10148,19 @@ minden m
|
|||
.PD 1
|
||||
.
|
||||
.TP
|
||||
.B psy-rd=rd[,trell]
|
||||
Beállítja a pszichovizuális optimalizáció erősségét.
|
||||
.PD 0
|
||||
.RSs
|
||||
.IPs rd=<0.0\-10.0>
|
||||
psy optimalizáció erőssége (subq>=6 kell hozzá) (alapértelmezett: 1.0)
|
||||
.IPs trell=<0.0\-10.0>
|
||||
trellis (trellis kell hozzá, kísérleti) (alapértelmezett: 0.0)
|
||||
.RE
|
||||
.PD 1
|
||||
.
|
||||
.
|
||||
.TP
|
||||
.B deadzone_inter=<0\-32>
|
||||
Beállítja az inter luma kvantálás holtterét a nem-rácsos kvantáláshoz
|
||||
(alapértelmezett: 21).
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,5 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- synced with r26990 -->
|
||||
<!-- synced with r27890 -->
|
||||
<appendix id="bugs">
|
||||
<title>Ismert hibák</title>
|
||||
|
||||
|
@ -7,13 +7,6 @@
|
|||
<title>Speciális rendszer/CPU-specifikus hibák/problémák</title>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>SIGILL (signal 4) P3-on 2.2.x kernelekkel:</para>
|
||||
<para>Probléma: a 2.2.x kernelben nincs megfelelő (működő) SSE támogatás</para>
|
||||
<para>Megoldás: frissítsd a kernelt 2.4.x-re</para>
|
||||
<para>Tüneti kezelés: <command>./configure --disable-sse</command></para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Általános SIGILL (signal 4):</para>
|
||||
<para>
|
||||
|
@ -139,78 +132,6 @@
|
|||
</itemizedlist>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="bugs-nosound">
|
||||
<title>Egyáltalán nincs hang</title>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>a fájlod nem támogatott audió codec-et használ</para>
|
||||
<para>
|
||||
Megoldás: olvasd el a dokumentációt és segíts a támogatás elkészítésében
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="bugs-nopicture">
|
||||
<title>Egyáltalán nincs kép (csak üres szürke/zöld ablak)</title>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>a fájlod egy nem támogatott videó codec-et használ</para>
|
||||
<para>
|
||||
Megoldás: olvasd el a dokumentációt és segíts a támogatás elkészítésében
|
||||
</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>
|
||||
az automatikusan kiválasztott codec nem tudja dekódolni a fájlt, próbálj meg másik
|
||||
codec-et kiválasztani a <option>-vc</option> vagy <option>-vfm</option> kapcsolókkal
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="bugs-video">
|
||||
<title>Videó-kimeneti problémák</title>
|
||||
|
||||
<para>
|
||||
Vedd figyelembe, hogy a <option>-fs -vm</option> és <option>-zoom</option> kapcsolókat
|
||||
nem mindegyik vezérlő támogatja. Ráadásul csak pár vezérlő támogatja a hardveres
|
||||
méretezést/nagyítást.
|
||||
</para>
|
||||
|
||||
<formalpara>
|
||||
<title>OSD/felirat vibrálás</title>
|
||||
<para>
|
||||
<itemizedlist>
|
||||
<listitem><para>x11 vezérlő: bocs, ez jelenleg nem javítható</para></listitem>
|
||||
<listitem><para>xv vezérlő: használd a <option>-double</option> kapcsolót</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
<formalpara>
|
||||
<title>Zöld kép mga_vid használatakor
|
||||
(<option>-vo mga</option> / <option>-vo xmga</option>)</title>
|
||||
<para>
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
az mga_vid rosszul detektálja a kártyád RAM-jának méretét, töltsd be
|
||||
újra a <option>mga_ram_size</option> kapcsolóval
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</formalpara>
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
</appendix>
|
||||
|
|
|
@ -1,524 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- synced with r27107 -->
|
||||
<chapter id="containers">
|
||||
<title>Konténerek</title>
|
||||
|
||||
<para>
|
||||
Fontos, hogy eloszlassunk egy gyakori tévhitet. A legtöbben ha egy
|
||||
<filename>.AVI</filename> kiterjesztésű filmet látnak, rögtön arra következtetnek,
|
||||
hogy az nem egy MPEG fájl. Ez nem igaz. Legalábbis nem teljesen. Az átlagos
|
||||
véleménnyel ellentétben egy ilyen fájl <emphasis>tartalmazhat</emphasis> MPEG-1 videót.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Mint láthatod, egy <emphasis role="bold">codec</emphasis> nem ugyan az,
|
||||
mint egy <emphasis role="bold">konténer formátum</emphasis>.
|
||||
Például videó <emphasis role="bold">codec</emphasis>-ek ezek: MPEG-1, MPEG-2,
|
||||
MPEG-4 (DivX), Indeo5, 3ivx.
|
||||
De konténer <emphasis role="bold">formátumok</emphasis> ezek:
|
||||
MPG, AVI, ASF.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Elméletileg egy OpenDivX-es videót és MP3 audiót beletehetsz egy
|
||||
<emphasis role="bold">MPG konténerbe</emphasis>. Habár a legtöbb
|
||||
lejátszó nem fogja lejátszani, mert MPEG-1-es videót és MP2-es
|
||||
audiót várnak (az <emphasis role="bold">AVI</emphasis>-val ellentétben
|
||||
az <emphasis role="bold">MPG</emphasis> nem rendelkezik a megfelelő
|
||||
mezőkkel a videó és audió folyamainak leírásához). Vagy tehetsz
|
||||
MPEG-1 videót is AVI fájlba. Az
|
||||
<ulink url="http://ffmpeg.org/">FFmpeg</ulink> és a
|
||||
<link linkend="mencoder"><application>MEncoder</application></link> tud készíteni ilyen fájlokat.
|
||||
</para>
|
||||
|
||||
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
|
||||
|
||||
<sect1 id="video-formats">
|
||||
<title>Videó formátumok</title>
|
||||
|
||||
<sect2 id="mpg-vob-dat">
|
||||
<title>MPEG fájlok</title>
|
||||
|
||||
<para>
|
||||
Az MPEG fájlok különböző alakúak lehetnek:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
MPG: Ez a <emphasis role="bold">legalapabb</emphasis> formátum az
|
||||
MPEG fájl formátumok közül. MPEG-1 videót és MP2 (MPEG-1 layer 2) vagy
|
||||
ritkán MP1 audiót tartalmaz.
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
DAT: Ez majdnem ugyan olyan formátum, mint az MPG, csak a kiterjesztés
|
||||
különbözik. <emphasis role="bold">Video CD</emphasis>-ken használják. A VCD-k
|
||||
készítési és a Linux tervezési módja miatt a DAT fájlokat nem lehet sem
|
||||
lejátszani sem átmásolni a VCD-kről mint rendes fájlokat. A
|
||||
<option>vcd://</option> előtagot kell használnod a Video CD lejátszásához.
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
VOB: Ez a <emphasis role="bold">DVD</emphasis>-ken használt MPEG fájl formátum.
|
||||
Ugyan az, mint az MPG, plusz tartalmazhat feliratot és nem-MPEG (AC-3) hangot.
|
||||
Kódolt MPEG-2 videót és általában AC-3 audiót tartalmaz, de DTS, MP2 és
|
||||
tömörítetlen LPCM is megengedett. <emphasis role="bold">Olvasd el a
|
||||
<link linkend="dvd">DVD</link> részt</emphasis>!
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
TY: Ez egy TiVo MPEG stream. MPEG PES adatot tartalmaz az audió és
|
||||
videó stream-hez, valamint extra információkat, mint pl. zárt feliratok.
|
||||
A konténer nem MPEG program stream, csak egy TiVo által készített hasonló
|
||||
formátum. Ha többet akarsz megtudni a TiVo stream formátumról, olvasd el a
|
||||
<ulink url="http://dvd-create.sourceforge.net/tystudio/tystream.shtml">
|
||||
TyStudio oldalát</ulink>.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
A képkockák sorozata független csoportokat alkot az MPEG fájlokban. Ez azt
|
||||
jelenti, hogy egy MPEG fájlt szabványos fájl eszközökkel (például
|
||||
<command>dd</command>, <command>cut</command>) vághatsz/összeilleszthetsz,
|
||||
úgy, hogy teljesen működőképes marad.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Az MPEG-ek egyik legfontosabb tulajdonsága, hogy van egy mezőjük, mely a
|
||||
videó folyam képarányát írja le. Például az SVCD-knek 480x480 felbontású
|
||||
videójuk van, a fejlécben ilyenkor ez a mező 4:3 arányra van állítva, ezért
|
||||
játszódnak le 640x480-ban. Az AVI fájlokból gyakran hiányzik ez a mező,
|
||||
ezért ezeket újra kell méretezni a <option>-aspect</option> kapcsolóval
|
||||
kódolás vagy lejátszás közben.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="avi">
|
||||
<title>AVI fájlok</title>
|
||||
|
||||
<para>
|
||||
A Microsoft által tervezett
|
||||
<emphasis role="bold">AVI (Audio Video Interleaved)</emphasis>
|
||||
egy széles körben elterjedt, többcélú formátum, melyet jelenleg leginkább
|
||||
MPEG-4 (DivX és DivX4) videóknál használnak. Rengeteg ismert hátránya és
|
||||
hiányossága van (például stream-elésben). Támogat egy videó folyamot 0-99
|
||||
audió folyammal, max 2 GB-ig, de van egy <emphasis role="bold">OpenDML</emphasis>
|
||||
kiterjesztés, amivel ennél nagyobb fájlok is kezelhetőek. A Microsoft már
|
||||
nem javasolja a használatát, és az ASF/WMV használatára buzdít. Nem
|
||||
mintha ez bárkit is érdekelne.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Van egy hack, aminek a segítségével az AVI fájlokban lehet Ogg Vorbis audió
|
||||
folyam is, de így inkompatibilisek lesznek a szabványos AVI-val.
|
||||
Az <application>MPlayer</application> le tudja játszani ezeket a fájlokat. A
|
||||
keresés is megoldott, de ezt egyszerűen gátolja a rosszul kódolt fájlok
|
||||
zavaros fejléce. Sajnos jelenleg az egyetlen kódoló program, ami tud ilyen
|
||||
fájlokat készíteni, a <application>NanDub</application> is küzd ezzel a problémával.
|
||||
</para>
|
||||
|
||||
<note><para>
|
||||
A DV kamerák készítenek nyers DV folyamokat, amit a DV grab-belő segédprogramja
|
||||
két különböző típusú AVI fájllá konvertál. Az AVI ezután vagy külön audió és videó
|
||||
stream-et fog tartalmazni, amit az <application>MPlayer</application> le tud
|
||||
játszani vagy nyers DV stream-et, aminek a támogatása még fejlesztés alatt van.
|
||||
</para></note>
|
||||
|
||||
<para>
|
||||
Kétfajta AVI fájl létezik:
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
<emphasis role="bold">Interleaved (átlapolt):</emphasis> Az audió és a
|
||||
videó tartalom át van lapolva. Ez az alapértelmezett. Javasolt és a
|
||||
legtöbbször használt. Néhány segédprogram hibás szinkronú átlapolt AVI-t készít.
|
||||
Az <application>MPlayer</application> ezeket átlapoltként detektálja és
|
||||
emiatt elveszik az A/V szinkronizáció, valószínűleg pörgetésnél.
|
||||
Ezeket a fájlokat nem-átlapoltként kell lejátszani
|
||||
(a <option>-ni</option> kapcsolóval).
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
<emphasis role="bold">Non-interleaved (Nem-átlapolt):</emphasis> Először jön
|
||||
a teljes videó folyam, majd a teljes audió folyam. Így rengeteg ugrásra van
|
||||
szükség, mely megnehezíti a hálózati és CD-ROM-ról történő lejátszást.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Az <application>MPlayer</application> kétféle időzítést támogat az AVI
|
||||
fájlokhoz:
|
||||
<itemizedlist>
|
||||
<listitem><para>
|
||||
<emphasis role="bold">bps-alapú:</emphasis> A videó/audió folyam
|
||||
bitrátán/mintavételi rátáján alapul. Ezt a módszert használja a legtöbb
|
||||
lejátszó, beleértve az <ulink url="http://avifile.sf.net">avifile</ulink>t
|
||||
és a <application>Windows Media Player</application>-t. A sérült fejlécű
|
||||
vagy VBR audióval, de nem VBR-kész kódolóval készített fájlok A/V
|
||||
deszinkronizációhoz vezetnek ezzel a módszerrel (legtöbbször pörgetésnél).
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
<emphasis role="bold">interleaving-alapú:</emphasis> Nem használja a
|
||||
fejléc bitráta értékét, inkább az átlapolt audió és videó darabok
|
||||
relatív pozícióját nézi, lehetővé téve ezzel a VBR audió-s, rosszul
|
||||
kódolt fájlok lejátszását.
|
||||
</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Bármelyik audió és videó codec engedélyezett, de vedd figyelembe, hogy a
|
||||
VBR audiót a legtöbb lejátszó nem támogatja. A fájl formátum lehetővé teszi
|
||||
a VBR audió használatát, de a legtöbb lejátszó CBR audiót vár, így elakadnak
|
||||
a VBR-ben. A VBR ritka és a Microsoft AVI specifikációi csak a CBR audiót
|
||||
írják le. Azt is észre lehet venni, hogy a legtöbb AVI kódoló/multiplexelő
|
||||
hibás fájlt készít VBR audió használatakor.
|
||||
Csak két ismert kivétel van: a <application>NanDub</application> és a
|
||||
<link linkend="mencoder"><application>MEncoder</application></link>.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="asf-wmv">
|
||||
<title>ASF/WMV fájlok</title>
|
||||
|
||||
<para>
|
||||
Az ASF (Active Streaming Format) szintén a Microsofttól származik. Az ASF-nek
|
||||
kétfajta verzióját készítették el, v1.0 és v2.0. A v1.0-t a saját média
|
||||
eszközeik használják (<application>Windows Media Player</application> és
|
||||
<application>Windows Media Encoder</application>) és nagyon titkos. A
|
||||
v2.0 nyilvános és szabadalmaztatott :). Természetesen különböznek,
|
||||
semmilyen kompatibilitás nincs köztük (ez is csak egy jogi játék).
|
||||
Az <application>MPlayer</application> csak a v1.0-t támogatja, mivel még
|
||||
soha senki sem látott v2.0 fájlokat :). Figyelj rá, hogy az ASF fájlok
|
||||
manapság <filename>.WMA</filename> vagy <filename>.WMV</filename> kiterjesztésűek.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="mov">
|
||||
<title>QuickTime/MOV fájlok</title>
|
||||
|
||||
<para>
|
||||
Ezeket a formátumokat az Apple fejlesztette ki, és bármilyen codec-et
|
||||
tartalmazhatnak, CBR-t vagy VBR-t. Legtöbbször <filename>.QT</filename> vagy
|
||||
<filename>.MOV</filename> kiterjesztésük van. Megjegyzendő, hogy mióta az
|
||||
MPEG-4 csapat a QuickTime-ot választotta az MPEG-4 javasolt fájlformátumának,
|
||||
a MOV fájlaik <filename>.MPG</filename> vagy <filename>.MP4</filename>
|
||||
kiterjesztéssel jönnek (érdekes módon a videó és audió folyamok ezekben a
|
||||
fájlokban igazi MPG és AAC fájlok. Még ki is tudod őket csomagolni a
|
||||
<option>-dumpvideo</option> és <option>-dumpaudio</option> kapcsolókkal.).
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="vivo">
|
||||
<title>VIVO fájlok</title>
|
||||
|
||||
<para>
|
||||
Az <application>MPlayer</application> örömmel demuxálja a VIVO fájl formátumokat.
|
||||
A legnagyobb hátránya a formátumnak az, hogy nincs index blokkja, sem
|
||||
fix csomag mérete vagy szinkron bájtja, és a legtöbb fájlban még a
|
||||
kulcs képkockák is hiányoznak, így felejtsd el a pörgetést!
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A VIVO/1.0 fájlok videó codec-je szabványos
|
||||
<emphasis role="bold">h.263</emphasis>.
|
||||
A VIVO/2.0 fájlok videó codec-je módosult, nem szabványos
|
||||
<emphasis role="bold">h.263v2</emphasis>. Az audio ugyan az, valószínűleg
|
||||
<emphasis role="bold">g.723 (standard)</emphasis> vagy
|
||||
<emphasis role="bold">Vivo Siren</emphasis>.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="fli">
|
||||
<title>FLI fájlok</title>
|
||||
|
||||
<para>
|
||||
A <emphasis role="bold">FLI</emphasis> egy nagyon régi fájl formátum,
|
||||
melyet az Autodesk Animator használt, de gyakoran használják rövid
|
||||
animációkhoz a neten.
|
||||
Az <application>MPlayer</application> demuxálja és dekódolja a FLI
|
||||
filmeket és még keresni is tud bennük (hasznos a <option>-loop</option>
|
||||
kapcsolóval történő ciklikus lejátszásnál). A FLI fájlokban nincs kulcs
|
||||
képkocka, így a kép egy rövid időre zavaros lesz a keresés után.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="realmedia">
|
||||
<title>RealMedia (RM) fájlok</title>
|
||||
|
||||
<para>
|
||||
Igen, az <application>MPlayer</application> tudja olvasni (demuxálni)
|
||||
a RealMedia (<filename>.rm</filename>) fájlokat.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="nuppelvideo">
|
||||
<title>NuppelVideo fájlok</title>
|
||||
|
||||
<para>
|
||||
A NuppelVideo
|
||||
egy TV grab-belő eszköz (AFAIK:). Az <application>MPlayer</application> tudja
|
||||
olvasni a <filename>.NUV</filename> fájlait (csak NuppelVideo 5.0). Ezek a
|
||||
fájlok tartalmazhatnak tömörítetlen YV12, YV12+RTJpeg tömörített,
|
||||
YV12 RTJpeg+lzo tömörített és YV12+lzo tömörített képkockákat.
|
||||
Az <application>MPlayer</application> dekódolja (és
|
||||
<emphasis role="bold">kódolja</emphasis>
|
||||
a <application>MEncoder</application>rel MPEG-4-be (DivX)/stb.!) őket.
|
||||
A keresés működik.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="yuv4mpeg">
|
||||
<title>yuv4mpeg fájlok</title>
|
||||
|
||||
<para>
|
||||
A <ulink url="http://mjpeg.sf.net">yuv4mpeg / yuv4mpeg2</ulink>
|
||||
egy az <ulink url="http://mjpeg.sf.net">mjpegtools programok</ulink>
|
||||
által használt fájlformátum. Grab-belheted, készíthetsz, szűrheted vagy
|
||||
kódolhatod az ilyen formátumú videókat ezekkel az eszközökkel.
|
||||
A fájl formátum igazából tömörítetlen YUV 4:2:0 képek sorozatából áll.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="film">
|
||||
<title>FILM fájlok</title>
|
||||
|
||||
<para>
|
||||
Ezt a formátumot a régi Sega Saturn CD-ROM játékok használták.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="roq">
|
||||
<title>RoQ fájlok</title>
|
||||
|
||||
<para>
|
||||
A RoQ fájlok multimédia fájlok, melyeket pár ID játék használ, pl. a Quake III és
|
||||
a Return to Castle Wolfenstein.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="ogg">
|
||||
<title>OGG/OGM fájlok</title>
|
||||
|
||||
<para>
|
||||
Ez egy új fájl formátum a
|
||||
<ulink url="http://www.xiph.org">Xiph.Org Alapítvány</ulink>tól.
|
||||
Bármilyen videó és audió codec-et tartalmazhat, CBR vagy VBR. El kell végezned
|
||||
a <systemitem class="library">libogg</systemitem> és a
|
||||
<systemitem class="library">libvorbis</systemitem> telepítését az
|
||||
<application>MPlayer</application> fordítása előtt, hogy le tudd játszani
|
||||
ezeket a fájlokat.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="sdp">
|
||||
<title>SDP fájlok</title>
|
||||
|
||||
<para>
|
||||
Az <ulink url="ftp://ftp.rfc-editor.org/in-notes/rfc2327.txt">SDP</ulink> egy
|
||||
IETF szabványos formátum videó és/vagy audió RTP folyamok leírásához.
|
||||
("<ulink url="http://www.live555.com/mplayer/">LIVE555 Streaming Media</ulink>"
|
||||
szükséges.)
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="pva">
|
||||
<title>PVA fájlok</title>
|
||||
|
||||
<para>
|
||||
A PVA egy MPEG-szerű formátum, melyet a DVB TV kártyák szoftvere használ (pl.:
|
||||
<application>MultiDec</application>,
|
||||
<application>WinTV</application> Windows alatt).
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="nsv">
|
||||
<title>NSV fájlok</title>
|
||||
|
||||
<para>
|
||||
NSV (NullSoft Video) egy a <application>Winamp</application> lejátszó által
|
||||
használt formátum audio és video stream-eléshez.
|
||||
A videó VP3, VP5 vagy VP6, az audió MP3, AAC vagy VLB.
|
||||
Az csak audiót tartalmazó fájlnak <filename>.nsa</filename> kiterjesztése van.
|
||||
Az <application>MPlayer</application> mindkét NSV folyamot és fájlt le tudja
|
||||
játszani.
|
||||
Meg szeretném jegyezni, hogy a
|
||||
<ulink url="http://www.winamp.com">Winamp oldalán</ulink> a legtöbb fájl VLB audiót
|
||||
használ, amit nem lehet dekódolni még. Ezenkívül több stream az oldalon külön
|
||||
szétcsomagoló réteget igényel, amit még el kellene készíteni (ezek a fájlok
|
||||
úgyis lejátszhatatlanok, mert VLB audiót használnak).
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="matroska">
|
||||
<title>Matroska fájlok</title>
|
||||
|
||||
<para>
|
||||
A Matroska egy nyílt konténer formátum.
|
||||
További infók a <ulink url="http://www.matroska.org/">hivatalos weboldalukon</ulink> találhatóak.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="nut">
|
||||
<title>NUT fájlok</title>
|
||||
|
||||
<para>
|
||||
A NUT az <application>MPlayer</application>es és az <application>FFmpeg</application>es
|
||||
emberkék által kifejlesztett konténer formátum. Mindkét projekt támogatja.
|
||||
További infókat a <ulink url="http://www.nut-container.org/">hivatalos weboldalon</ulink> olvashatsz.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="gif">
|
||||
<title>GIF fájlok</title>
|
||||
|
||||
<para>
|
||||
A <emphasis role="bold">GIF</emphasis> egy gyakori web-es grafikus formátum.
|
||||
Két verziója van a GIF specifikációnak, GIF87a és GIF89a. A fő különbség az,
|
||||
hogy a GIF89a megengedi az animációt. Az <application>MPlayer</application>
|
||||
támogatja mindkét formátumot a <systemitem class="library">libungif</systemitem>
|
||||
vagy más libgif-kompatibilis függvénykönyvtár segítségével. A nem animált GIF-ek
|
||||
egy képkockát tartalmazó videóként lesznek megjelenítve.
|
||||
(Használd a <option>-loop</option> és a <option>-fixed-vo</option> kapcsolókat
|
||||
a hosszabb megjelenítéshez.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Az <application>MPlayer</application> jelenleg nem támogatja a keresést
|
||||
a GIF fájlokban. A GIF fájlok nem szükségszerűen fix képkocka méretűek,
|
||||
sem fix framrátájúak. Inkább minden egyes képkocka független méretű és
|
||||
meghatározott helyzetű egy fix méretű mezőn. A framerátát egy opcionális
|
||||
blokk vezérli minden egyes képkocka előtt, ami leírja a következő
|
||||
képkocka késleltetését centisecundumokban.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A szabványos GIF fájlok 24-bites RGB képkockákat tartalmaznak legtöbbször
|
||||
egy 8-bites indexelt palettával. Ezeket a képkockák legtöbbször LZW-vel
|
||||
tömörítettek, habár néhány GIF kódoló tömörítetlen képkockákat készít,
|
||||
hogy elkerüljék az LZW tömörítés szabadalmának megsértését.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Ha a disztribúciódban nincs <systemitem class="library">libungif</systemitem>,
|
||||
töltsd le a
|
||||
<ulink url="http://sourceforge.net/projects/libungif">libungif
|
||||
weboldaláról</ulink>. Bővebb technikai információkért vess egy pillantást a
|
||||
<ulink url="http://www.w3.org/Graphics/GIF/spec-gif89a.txt">GIF89a specifikációra</ulink>.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
|
||||
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
|
||||
|
||||
|
||||
<sect1 id="audio-formats">
|
||||
<title>Audió formátumok</title>
|
||||
|
||||
<para>
|
||||
Az <application>MPlayer</application> egy <emphasis role="bold">film</emphasis>
|
||||
és nem egy <emphasis role="bold">zene</emphasis> lejátszó, ennek ellenére
|
||||
le tud játszani néhány audió fájl formátumot (az alábbi részben vannak felsorolva).
|
||||
Nem javaslom az <application>MPlayer</application> ilyen formában történő használatát,
|
||||
jobb ha <ulink url="http://www.xmms.org">XMMS</ulink>-t használsz.
|
||||
</para>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="mp3">
|
||||
<title>MP3 fájlok</title>
|
||||
|
||||
<para>
|
||||
Bizonyos MP3 <application>MPlayer</application>rel történő lejátszásakor
|
||||
problémáid lehetnek, mert rosszul, MPEG-ként ismeri fel és vagy rosszul
|
||||
vagy sehogy sem játsza le. Ez nem javítható anélkül, hogy ne törölnénk
|
||||
bizonyos sérült MPEG fájlok lejátszásának támogatását, így a belátható
|
||||
jövőben ez így is marad. A <option>-demuxer</option> kapcsoló, melyet a man
|
||||
oldal ír le, segíthet ezekben az esetekben.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="ogg-vorbis">
|
||||
<title>OGG/OGM fájlok (Vorbis)</title>
|
||||
|
||||
<para>
|
||||
Megfelelően telepített
|
||||
<systemitem class="library">libogg</systemitem> és
|
||||
<systemitem class="library">libvorbis</systemitem> kell hozzá.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="cdda">
|
||||
<title>CD audio</title>
|
||||
|
||||
<para>
|
||||
Az <application>MPlayer</application> fel tudja használni a <application>cdparanoia</application>-t
|
||||
CDDA (Audio CD) lejátszásához. A <application>cdparanoia</application> jellemzőinek
|
||||
felsorolása átlépi ezen fejezet kereteit.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Lásd a man oldal <option>-cdda</option> kapcsolóra vonatkozó részét, melynek a segítségével
|
||||
kapcsolókat adhatsz tovább a <application>cdparanoia</application>-nak.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ********** -->
|
||||
|
||||
<sect2 id="xmms">
|
||||
<title>XMMS</title>
|
||||
|
||||
<para>
|
||||
Az <application>MPlayer</application> fel tudja használni az <application>XMMS</application>
|
||||
bemeneti plugin-jeit több fájl formátum lejátszásához. Van plugin SNES játék hangok, SID
|
||||
hangok (Commodore 64), sok Amiga formátum, .xm, .it, VQF, Musepack, Bonk,
|
||||
és számos egyéb lejátszásához. Megtalálhatóak az
|
||||
<ulink url="http://www.xmms.org/plugins.php?category=input">XMMS bemeneti plugin oldalán</ulink>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Ehhez a képességhez <application>XMMS</application> és
|
||||
<filename>./configure --enable-xmms</filename> kapcsolóval fordított
|
||||
<application>MPlayer</application> kell.
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
File diff suppressed because it is too large
Load Diff
|
@ -110,7 +110,7 @@ It can encode with various codecs, like
|
|||
</para></listitem>
|
||||
<listitem><para>
|
||||
编码到所有FFmpeg的
|
||||
<link linkend="ffmpeg"><systemitem class="library">libavcodec</systemitem></link>
|
||||
<systemitem class="library">libavcodec</systemitem>
|
||||
所支持的编码
|
||||
</para></listitem>
|
||||
<listitem><para>
|
||||
|
|
|
@ -688,7 +688,7 @@ SVCD)及H.263文件一样。可惜的是,除了<application>MPlayer</applicati
|
|||
|
||||
<para>
|
||||
这种特性之可以与
|
||||
<link linkend="ffmpeg"><systemitem class="library">libavcodec</systemitem></link>的
|
||||
<systemitem class="library">libavcodec</systemitem>的
|
||||
<systemitem>mpeg4</systemitem>编码器一同使用。记住:虽然
|
||||
<application>MPlayer</application>可以正常播放所生成的文件,其他播放器可能使用错误
|
||||
的图象比例。
|
||||
|
|
4
Makefile
4
Makefile
|
@ -876,10 +876,10 @@ doxygen:
|
|||
doxygen DOCS/tech/Doxyfile
|
||||
|
||||
TAGS:
|
||||
rm -f $@; ( find -name '*.[chS]' -print ) | xargs etags -a
|
||||
rm -f $@; ( find -name '*.[chS]' -o -name '*.asm' -print ) | xargs etags -a
|
||||
|
||||
tags:
|
||||
rm -f $@; ( find -name '*.[chS]' -print ) | xargs ctags -a
|
||||
rm -f $@; ( find -name '*.[chS]' -o -name '*.asm' -print ) | xargs ctags -a
|
||||
|
||||
|
||||
|
||||
|
|
35
common.mak
35
common.mak
|
@ -8,11 +8,18 @@ ifndef SUBDIR
|
|||
vpath %.c $(SRC_DIR)
|
||||
vpath %.h $(SRC_DIR)
|
||||
vpath %.S $(SRC_DIR)
|
||||
vpath %.asm $(SRC_DIR)
|
||||
|
||||
ifeq ($(SRC_DIR),$(SRC_PATH_BARE))
|
||||
BUILD_ROOT_REL = .
|
||||
else
|
||||
BUILD_ROOT_REL = ..
|
||||
endif
|
||||
|
||||
ALLFFLIBS = avcodec avdevice avfilter avformat avutil postproc swscale
|
||||
|
||||
CFLAGS = -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
|
||||
-D_ISOC9X_SOURCE -I$(BUILD_ROOT) -I$(SRC_PATH) -I$(SRC_PATH)/ffmpeg $(OPTFLAGS)
|
||||
CFLAGS := -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
|
||||
-I$(BUILD_ROOT_REL) -I$(SRC_PATH) -I$(SRC_PATH)/ffmpeg $(OPTFLAGS)
|
||||
|
||||
%.o: %.c
|
||||
$(CC) $(CFLAGS) $(LIBOBJFLAGS) -c -o $@ $<
|
||||
|
@ -32,8 +39,18 @@ CFLAGS = -DHAVE_AV_CONFIG_H -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE \
|
|||
%.d: %.cpp
|
||||
$(DEPEND_CMD) > $@
|
||||
|
||||
%.o: %.d
|
||||
|
||||
%$(EXESUF): %.c
|
||||
|
||||
SVN_ENTRIES = $(SRC_PATH_BARE)/.svn/entries
|
||||
ifeq ($(wildcard $(SVN_ENTRIES)),$(SVN_ENTRIES))
|
||||
$(BUILD_ROOT_REL)/version.h: $(SVN_ENTRIES)
|
||||
endif
|
||||
|
||||
$(BUILD_ROOT_REL)/version.h:
|
||||
$(SRC_PATH)/version.sh $(SRC_PATH) $@ $(EXTRA_VERSION)
|
||||
|
||||
install: install-libs install-headers
|
||||
|
||||
uninstall: uninstall-libs uninstall-headers
|
||||
|
@ -43,18 +60,12 @@ endif
|
|||
|
||||
CFLAGS += $(CFLAGS-yes)
|
||||
OBJS += $(OBJS-yes)
|
||||
ASM_OBJS += $(ASM_OBJS-yes)
|
||||
CPP_OBJS += $(CPP_OBJS-yes)
|
||||
FFLIBS := $(FFLIBS-yes) $(FFLIBS)
|
||||
TESTS += $(TESTS-yes)
|
||||
|
||||
FFEXTRALIBS := $(addprefix -l,$(addsuffix $(BUILDSUF),$(FFLIBS))) $(EXTRALIBS)
|
||||
FFLDFLAGS := $(addprefix -L$(BUILD_ROOT)/lib,$(FFLIBS)) $(LDFLAGS)
|
||||
|
||||
SRCS := $(OBJS:.o=.c) $(ASM_OBJS:.o=.S) $(CPP_OBJS:.o=.cpp)
|
||||
OBJS := $(OBJS) $(ASM_OBJS) $(CPP_OBJS)
|
||||
|
||||
SRCS := $(addprefix $(SUBDIR),$(SRCS))
|
||||
OBJS := $(addprefix $(SUBDIR),$(OBJS))
|
||||
TESTS := $(addprefix $(SUBDIR),$(TESTS))
|
||||
|
||||
|
@ -68,7 +79,7 @@ depend dep: $(DEPS)
|
|||
|
||||
CLEANSUFFIXES = *.o *~ *.ho
|
||||
LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a *.exp *.map
|
||||
DISTCLEANSUFFIXES = *.d
|
||||
DISTCLEANSUFFIXES = *.d *.pc
|
||||
|
||||
define RULES
|
||||
$(SUBDIR)%$(EXESUF): $(SUBDIR)%.o
|
||||
|
@ -80,6 +91,12 @@ $(SUBDIR)%-test.o: $(SUBDIR)%.c
|
|||
$(SUBDIR)%-test.o: $(SUBDIR)%-test.c
|
||||
$(CC) $(CFLAGS) -DTEST -c -o $$@ $$^
|
||||
|
||||
$(SUBDIR)i386/%.o: $(SUBDIR)i386/%.asm
|
||||
$(YASM) $(YASMFLAGS) -I $$(<D)/ -o $$@ $$<
|
||||
|
||||
$(SUBDIR)i386/%.d: $(SUBDIR)i386/%.asm
|
||||
$(YASM) $(YASMFLAGS) -I $$(<D)/ -M -o $$(@:%.d=%.o) $$< > $$@
|
||||
|
||||
clean::
|
||||
rm -f $(TESTS) $(addprefix $(SUBDIR),$(CLEANFILES) $(CLEANSUFFIXES) $(LIBSUFFIXES)) \
|
||||
$(addprefix $(SUBDIR), $(foreach suffix,$(CLEANSUFFIXES),$(addsuffix /$(suffix),$(DIRS))))
|
||||
|
|
|
@ -78,6 +78,19 @@ cxx_check() {
|
|||
compile_check $TMPCPP $@ -lstdc++
|
||||
}
|
||||
|
||||
yasm_check() {
|
||||
echo >> "$TMPLOG"
|
||||
cat "$TMPS" >> "$TMPLOG"
|
||||
echo >> "$TMPLOG"
|
||||
echo "$_yasm $YASMFLAGS -o $TMPEXE $TMPS $@" >> "$TMPLOG"
|
||||
rm -f "$TMPEXE"
|
||||
$_yasm $YASMFLAGS -o "$TMPEXE" "$TMPS" "$@" >> "$TMPLOG" 2>&1
|
||||
TMP="$?"
|
||||
echo >> "$TMPLOG"
|
||||
echo >> "$TMPLOG"
|
||||
return "$TMP"
|
||||
}
|
||||
|
||||
tmp_run() {
|
||||
"$TMPEXE" >> "$TMPLOG" 2>&1
|
||||
}
|
||||
|
@ -408,6 +421,7 @@ Miscellaneous options:
|
|||
--cc=COMPILER C compiler to build MPlayer [gcc]
|
||||
--host-cc=COMPILER C compiler for tools needed while building [gcc]
|
||||
--as=ASSEMBLER assembler to build MPlayer [as]
|
||||
--yasm=YASM Yasm assembler to build MPlayer [yasm]
|
||||
--ar=AR librarian to build MPlayer [ar]
|
||||
--ranlib=RANLIB ranlib to build MPlayer [ranlib]
|
||||
--windres=WINDRES windres to build MPlayer [windres]
|
||||
|
@ -493,6 +507,7 @@ _cc=cc
|
|||
_ar=ar
|
||||
test "$CC" && _cc="$CC"
|
||||
_as=auto
|
||||
_yasm=yasm
|
||||
_runtime_cpudetection=no
|
||||
_cross_compile=auto
|
||||
_prefix="/usr/local"
|
||||
|
@ -790,6 +805,9 @@ for ac_option do
|
|||
--as=*)
|
||||
_as=`echo $ac_option | cut -d '=' -f 2`
|
||||
;;
|
||||
--yasm=*)
|
||||
_yasm=`echo $ac_option | cut -d '=' -f 2`
|
||||
;;
|
||||
--ar=*)
|
||||
_ar=`echo $ac_option | cut -d '=' -f 2`
|
||||
;;
|
||||
|
@ -1543,7 +1561,7 @@ elif test -r /compat/linux/proc/cpuinfo && ! x86_32 ; then
|
|||
# FreeBSD with Linux emulation /proc mounted,
|
||||
# extract CPU information from it
|
||||
_cpuinfo="cat /compat/linux/proc/cpuinfo"
|
||||
elif darwin && ! x86_32 ; then
|
||||
elif darwin && ! x86 ; then
|
||||
# use hostinfo on Darwin
|
||||
_cpuinfo="hostinfo"
|
||||
elif aix; then
|
||||
|
@ -2385,6 +2403,40 @@ else
|
|||
fi
|
||||
echores $_asmalign_pot
|
||||
|
||||
echocheck "yasm"
|
||||
if test -z "$YASMFLAGS" ; then
|
||||
if darwin ; then
|
||||
x86_64 && objformat="macho64" || objformat="macho32"
|
||||
elif win32 ; then
|
||||
objformat="win32"
|
||||
else
|
||||
objformat="elf"
|
||||
fi
|
||||
# currently tested for Linux x86, x86_64
|
||||
YASMFLAGS="-f $objformat"
|
||||
x86_64 && YASMFLAGS="$YASMFLAGS -DARCH_X86_64 -m amd64"
|
||||
case "$objformat" in
|
||||
elf) test $_debug && YASMFLAGS="$YASMFLAGS -g dwarf2" ;;
|
||||
macho64) YASMFLAGS="$YASMFLAGS -DPIC -DPREFIX" ;;
|
||||
*) YASMFLAGS="$YASMFLAGS -DPREFIX" ;;
|
||||
esac
|
||||
else
|
||||
_warn_CFLAGS=yes
|
||||
fi
|
||||
|
||||
echo "pabsw xmm0, xmm0" > $TMPS
|
||||
yasm_check || _yasm=""
|
||||
if test $_yasm ; then
|
||||
test "$_mmx" = "yes" && fft_mmx="yes"
|
||||
_def_yasm='#define HAVE_YASM 1'
|
||||
_have_yasm="yes"
|
||||
echores "$_yasm"
|
||||
else
|
||||
_def_yasm='#undef HAVE_YASM'
|
||||
fft_mmx="no"
|
||||
_have_yasm="no"
|
||||
echores "no"
|
||||
fi
|
||||
|
||||
#FIXME: This should happen before the check for CFLAGS..
|
||||
if ppc && ( test "$_altivec" = yes || test "$_runtime_cpudetection" = yes ) ; then
|
||||
|
@ -3521,7 +3573,7 @@ if test "$_macosx" = auto ; then
|
|||
else
|
||||
_macosx=no
|
||||
_noaomodules="macosx $_noaomodules"
|
||||
_novomodules="quartz $_novomodules"
|
||||
_novomodules="macosx quartz $_novomodules"
|
||||
fi
|
||||
fi
|
||||
if test "$_macosx" = yes ; then
|
||||
|
@ -5785,7 +5837,7 @@ if test "$_zlib" = yes ; then
|
|||
_ld_extra="$_ld_extra -lz"
|
||||
else
|
||||
_def_zlib='#undef CONFIG_ZLIB'
|
||||
_libavdecoders=`echo $_libavdecoders | sed -e s/FLASHSV_DECODER// -e s/PNG_DECODER// -e s/ZMBV_DECODER// -e s/DXA_DECODER// -e/TSCC_DECODER// `
|
||||
_libavdecoders=`echo $_libavdecoders | sed -e s/FLASHSV_DECODER// -e s/PNG_DECODER// -e s/ZMBV_DECODER// -e s/DXA_DECODER// -e s/TSCC_DECODER// `
|
||||
_libavencoders=`echo $_libavencoders | sed -e s/FLASHSV_ENCODER// -e s/PNG_ENCODER// -e s/ZMBV_ENCODER// `
|
||||
fi
|
||||
echores "$_zlib"
|
||||
|
@ -7766,6 +7818,8 @@ if test "$cc_vendor" = "gnu" ; then
|
|||
cc_check -std=gnu99 && CFLAGS="-std=gnu99 $CFLAGS"
|
||||
cc_check -Wno-pointer-sign && CFLAGS="-Wno-pointer-sign $CFLAGS"
|
||||
cc_check -Wdisabled-optimization && CFLAGS="-Wdisabled-optimization $CFLAGS"
|
||||
else
|
||||
CFLAGS="-D_ISOC99_SOURCE -D_BSD_SOURCE $CFLAGS"
|
||||
fi
|
||||
|
||||
CFLAGS_FFMPEG="-I../.. $CFLAGS"
|
||||
|
@ -7800,6 +7854,7 @@ AR = $_ar
|
|||
CC = $_cc
|
||||
CXX = $_cc
|
||||
HOST_CC = $_host_cc
|
||||
YASM = $_yasm
|
||||
INSTALL = $_install
|
||||
INSTALLSTRIP = $_install_strip
|
||||
RANLIB = $_ranlib
|
||||
|
@ -7819,6 +7874,7 @@ CFLAGS_NO_OMIT_LEAF_FRAME_POINTER = $cflags_no_omit_leaf_frame_pointer
|
|||
CFLAGS_STACKREALIGN = $cflags_stackrealign
|
||||
CFLAGS_SVGALIB_HELPER = $cflags_svgalib_helper
|
||||
CFLAGS_TREMOR_LOW = $cflags_tremor_low
|
||||
YASMFLAGS = $YASMFLAGS
|
||||
|
||||
EXTRALIBS = $_extra_libs
|
||||
EXTRA_LIB = $_ld_extra $_ld_static $_ld_lm
|
||||
|
@ -7986,6 +8042,7 @@ LIBNAME=\$(LIBPREF)\$(NAME)\$(LIBSUF)
|
|||
|
||||
# Some FFmpeg codecs depend on these. Enable them unconditionally for now.
|
||||
CONFIG_FFT=yes
|
||||
CONFIG_FFT_MMX=$fft_mmx
|
||||
CONFIG_GOLOMB=yes
|
||||
CONFIG_MDCT=yes
|
||||
|
||||
|
@ -8010,6 +8067,7 @@ CONFIG_ZLIB=$_zlib
|
|||
|
||||
HAVE_PTHREADS = $_pthreads
|
||||
HAVE_W32THREADS = $_w32threads
|
||||
HAVE_YASM = $_have_yasm
|
||||
|
||||
`echo $_libavdecoders | tr '[a-z] ' '[A-Z]\n' | sed 's/^/CONFIG_/;s/$/=yes/'`
|
||||
`echo $_libavencoders | tr '[a-z] ' '[A-Z]\n' | sed 's/^/CONFIG_/;s/$/=yes/'`
|
||||
|
@ -8413,6 +8471,7 @@ $_def_threads
|
|||
#else
|
||||
#define ENABLE_THREADS 0
|
||||
#endif
|
||||
$_def_yasm
|
||||
|
||||
#define CONFIG_GPL 1
|
||||
#define ENABLE_SMALL 0
|
||||
|
@ -8544,7 +8603,8 @@ EOF
|
|||
if test "$_warn_CFLAGS" = yes; then
|
||||
cat <<EOF
|
||||
|
||||
MPlayer compilation will use the CPPFLAGS/CFLAGS/LDFLAGS set by you, but:
|
||||
MPlayer compilation will use the CPPFLAGS/CFLAGS/LDFLAGS/YASMFLAGS set by you,
|
||||
but:
|
||||
|
||||
*** *** DO NOT REPORT BUGS IF IT DOES NOT COMPILE/WORK! *** ***
|
||||
|
||||
|
|
|
@ -1966,6 +1966,59 @@ static char help_text[]=
|
|||
#define MSGTR_RADIO_DriverV4L2 "[radio] Utilizando interfaz de radio V4Lv2.\n"
|
||||
#define MSGTR_RADIO_DriverV4L "[radio] Utilizando interfaz de radio V4Lv1.\n"
|
||||
#define MSGTR_RADIO_DriverBSDBT848 "[radio] Usando la interfaz de radio *BSD BT848.\n"
|
||||
#define MSGTR_RADIO_AvailableDrivers "[radio] Drivers disponibles: "
|
||||
|
||||
//tv.c
|
||||
#define MSGTR_TV_BogusNormParameter "tv.c: norm_from_string(%s): Parametro de normal inválido al configurar %s.\n"
|
||||
#define MSGTR_TV_NoVideoInputPresent "Error: Entrada de video no encontrada!\n"
|
||||
#define MSGTR_TV_UnknownImageFormat ""\
|
||||
"==================================================================\n"\
|
||||
" ADVERTENCIA: HA SELECCIONADO UN FORMATO DE SALIDA DE IMAGEN NO \n"\
|
||||
" CONOCIDO Y/O NO PROBADO (0x%x) \n"\
|
||||
" Esto podría causarle problemas de reproducción o que el programa\n"\
|
||||
" se cayera! Los Bug reports serán ignorados! Intentelo nuevamente\n"\
|
||||
" con YV12 (el colorspace por omisión) y leer la documentación. \n"\
|
||||
"==================================================================\n"
|
||||
#define MSGTR_TV_SelectedNormId "Id norma seleccionada: %d\n"
|
||||
#define MSGTR_TV_SelectedNorm "Norma seleccionada : %s\n"
|
||||
#define MSGTR_TV_CannotSetNorm "Error: No puedo configurar la norma!\n"
|
||||
#define MSGTR_TV_MJP_WidthHeight " MJP: ancho %d alto %d\n"
|
||||
#define MSGTR_TV_UnableToSetWidth "Imposible configurar ancho requerido: %d\n"
|
||||
#define MSGTR_TV_UnableToSetHeight "Imposible configurar alto requerido: %d\n"
|
||||
#define MSGTR_TV_NoTuner "No hay un sintonizador en la entrada seleccionada!\n"
|
||||
#define MSGTR_TV_UnableFindChanlist "Imposible encontrar lista de canales seleccionada! (%s)\n"
|
||||
#define MSGTR_TV_SelectedChanlist "Lista de canales seleccionada: %s (incluyendo %d canales)\n"
|
||||
#define MSGTR_TV_ChannelFreqParamConflict "No puede configurar simultaneamente frecuencia y canal!\n"
|
||||
#define MSGTR_TV_ChannelNamesDetected "Nombres de canales de TV detectados.\n"
|
||||
#define MSGTR_TV_NoFreqForChannel "Imposible encontrar frecuencia para el canal %s (%s)\n"
|
||||
#define MSGTR_TV_SelectedChannel3 "Canal seleccionado: %s - %s (freq: %.3f)\n"
|
||||
#define MSGTR_TV_SelectedChannel2 "Canal seleccionado: %s (freq: %.3f)\n"
|
||||
#define MSGTR_TV_SelectedFrequency "Frecuencia seleccionada: %lu (%.3f)\n"
|
||||
#define MSGTR_TV_RequestedChannel "Canal requerido: %s\n"
|
||||
#define MSGTR_TV_UnsupportedAudioType "Tipo de audio '%s (%x)' no soportado!\n"
|
||||
#define MSGTR_TV_AudioFormat " Audio TV: %d canales, %d bits, %d Hz\n"
|
||||
#define MSGTR_TV_AvailableDrivers "Drivers disponibles:\n"
|
||||
#define MSGTR_TV_DriverInfo "Driver seleccionado: %s\n nombre: %s\n autor: %s\n comentario: %s\n"
|
||||
#define MSGTR_TV_NoSuchDriver "Ese driver no existe: %s\n"
|
||||
#define MSGTR_TV_DriverAutoDetectionFailed "Falló la utodeteccion del driver de TV.\n"
|
||||
#define MSGTR_TV_UnknownColorOption "Se especificó una opción de color desconodida (%d)!\n"
|
||||
#define MSGTR_TV_CurrentFrequency "Frecuencia actual: %lu (%.3f)\n"
|
||||
#define MSGTR_TV_NoTeletext "Sin teletexto"
|
||||
#define MSGTR_TV_Bt848IoctlFailed "tvi_bsdbt848: llamada a %s ioctl fallida. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848InvalidAudioRate "tvi_bsdbt848: Audio rate inválido. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848ErrorOpeningBktrDev "tvi_bsdbt848: Imposible abrir dispositivo bktr. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848ErrorOpeningTunerDev "tvi_bsdbt848: Imposible abrir dispositivo sintonizador. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848ErrorOpeningDspDev "tvi_bsdbt848: Imposible abrir dispositivo dsp. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848ErrorConfiguringDsp "tvi_bsdbt848: Falló la configuración del dsp. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848ErrorReadingAudio "tvi_bsdbt848: Error leyendo datos de audio. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848MmapFailed "tvi_bsdbt848: mmap fallido. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848FrameBufAllocFailed "tvi_bsdbt848: Fallo al reservar frame buffer (allocation failed). Error: %s\n"
|
||||
#define MSGTR_TV_Bt848ErrorSettingWidth "tvi_bsdbt848: Error configurando el ancho del picture. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848ErrorSettingHeight "tvi_bsdbt848: Error configurando el alto del picture. Error: %s\n"
|
||||
#define MSGTR_TV_Bt848UnableToStopCapture "tvi_bsdbt848: Imposible detener la captura. Error: %s\n"
|
||||
#define MSGTR_TV_TTSupportedLanguages "Idiomas de teletexto soportados:\n"
|
||||
#define MSGTR_TV_TTSelectedLanguage "Se seleccionó el idioma de teletexto por omisión: %s\n"
|
||||
#define MSGTR_TV_ScannerNotAvailableWithoutTuner "No se puede utilizar el scanner de canales sin un sintonizador\n"
|
||||
|
||||
// ================================== LIBASS ====================================
|
||||
|
||||
|
|
1555
help/help_mp-ru.h
1555
help/help_mp-ru.h
File diff suppressed because it is too large
Load Diff
|
@ -605,7 +605,7 @@ static void high_res_mp3_seek(demuxer_t *demuxer,float time) {
|
|||
static void demux_audio_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,int flags){
|
||||
sh_audio_t* sh_audio;
|
||||
stream_t* s;
|
||||
int base,pos;
|
||||
int64_t base,pos;
|
||||
float len;
|
||||
da_priv_t* priv;
|
||||
|
||||
|
|
|
@ -1826,11 +1826,12 @@ static inline void RENAME(rgb24ToY)(uint8_t *dst, uint8_t *src, long width, uint
|
|||
|
||||
static inline void RENAME(rgb24ToUV)(uint8_t *dstU, uint8_t *dstV, uint8_t *src1, uint8_t *src2, long width, uint32_t *unused)
|
||||
{
|
||||
int i;
|
||||
assert(src1==src2);
|
||||
#ifdef HAVE_MMX
|
||||
assert(src1==src2);
|
||||
RENAME(bgr24ToUV_mmx)(dstU, dstV, src1, width, PIX_FMT_RGB24);
|
||||
#else
|
||||
int i;
|
||||
assert(src1==src2);
|
||||
for (i=0; i<width; i++)
|
||||
{
|
||||
int r= src1[3*i + 0];
|
||||
|
|
|
@ -1608,13 +1608,7 @@ int setGlWindow(XVisualInfo **vinfo, GLXContext *context, Window win)
|
|||
|
||||
// set new values
|
||||
vo_window = win;
|
||||
{
|
||||
Window root;
|
||||
int tmp;
|
||||
unsigned utmp;
|
||||
XGetGeometry(mDisplay, vo_window, &root, &tmp, &tmp,
|
||||
(unsigned *)&vo_dwidth, (unsigned *)&vo_dheight, &utmp, &utmp);
|
||||
}
|
||||
vo_x11_update_geometry();
|
||||
if (!keep_context) {
|
||||
void *(*getProcAddress)(const GLubyte *);
|
||||
const char *(*glXExtStr)(Display *, int);
|
||||
|
|
|
@ -540,9 +540,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_
|
|||
overlay_set_mode(overlay_data, EM8300_OVERLAY_MODE_OVERLAY);
|
||||
overlay_set_mode(overlay_data, EM8300_OVERLAY_MODE_RECTANGLE);
|
||||
}
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -170,6 +170,7 @@ static void texSize(int w, int h, int *texw, int *texh) {
|
|||
while (*texh < h)
|
||||
*texh *= 2;
|
||||
}
|
||||
if (ati_hack) *texw = (*texw + 511) & ~511;
|
||||
}
|
||||
|
||||
//! maximum size of custom fragment program
|
||||
|
@ -689,12 +690,8 @@ static uint32_t get_image(mp_image_t *mpi) {
|
|||
}
|
||||
if (mpi->flags & MP_IMGFLAG_READABLE) return VO_FALSE;
|
||||
if (ati_hack) {
|
||||
int s = 1;
|
||||
// for unexplainable reasons, with width < 512 chroma tends to be messed up
|
||||
// (after ca. 2/3 the previous line repeats all over)
|
||||
if (mpi->width < 512) return VO_FALSE;
|
||||
while (s < mpi->width) s *= 2;
|
||||
mpi->width = s;
|
||||
mpi->width = texture_width;
|
||||
mpi->height = texture_height;
|
||||
}
|
||||
if (!gl_buffer)
|
||||
GenBuffers(1, &gl_buffer);
|
||||
|
@ -734,6 +731,8 @@ static uint32_t draw_image(mp_image_t *mpi) {
|
|||
int stride[3];
|
||||
unsigned char *planes[3];
|
||||
mp_image_t mpi2 = *mpi;
|
||||
int w = mpi->w, h = mpi->h;
|
||||
if (ati_hack) { w = texture_width; h = texture_height; }
|
||||
if (mpi->flags & MP_IMGFLAG_DRAW_CALLBACK)
|
||||
goto skip_upload;
|
||||
mpi2.flags = 0; mpi2.type = MP_IMGTYPE_TEMP;
|
||||
|
@ -763,14 +762,14 @@ static uint32_t draw_image(mp_image_t *mpi) {
|
|||
slice = 0; // always "upload" full texture
|
||||
}
|
||||
glUploadTex(gl_target, gl_format, gl_type, planes[0], stride[0],
|
||||
mpi->x, mpi->y, mpi->w, mpi->h, slice);
|
||||
mpi->x, mpi->y, w, h, slice);
|
||||
if (mpi->imgfmt == IMGFMT_YV12) {
|
||||
ActiveTexture(GL_TEXTURE1);
|
||||
glUploadTex(gl_target, gl_format, gl_type, planes[1], stride[1],
|
||||
mpi->x / 2, mpi->y / 2, mpi->w / 2, mpi->h / 2, slice);
|
||||
mpi->x / 2, mpi->y / 2, w / 2, h / 2, slice);
|
||||
ActiveTexture(GL_TEXTURE2);
|
||||
glUploadTex(gl_target, gl_format, gl_type, planes[2], stride[2],
|
||||
mpi->x / 2, mpi->y / 2, mpi->w / 2, mpi->h / 2, slice);
|
||||
mpi->x / 2, mpi->y / 2, w / 2, h / 2, slice);
|
||||
ActiveTexture(GL_TEXTURE0);
|
||||
}
|
||||
if (mpi->flags & MP_IMGFLAG_DIRECT)
|
||||
|
|
|
@ -670,9 +670,6 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
|
|||
|
||||
if (initGl(vo_dwidth, vo_dheight) == -1)
|
||||
return -1;
|
||||
#ifndef GL_WIN32
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay,vo_window, vo_ontop);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -191,8 +191,8 @@ static int
|
|||
query_format(uint32_t format)
|
||||
{
|
||||
switch(format){
|
||||
case IMGFMT_RGB|24:
|
||||
case IMGFMT_BGR|24:
|
||||
case IMGFMT_RGB24:
|
||||
case IMGFMT_BGR24:
|
||||
return VFCAP_CSP_SUPPORTED|VFCAP_CSP_SUPPORTED_BY_HW|VFCAP_ACCEPT_STRIDE;
|
||||
}
|
||||
return 0;
|
||||
|
|
106
libvo/vo_x11.c
106
libvo/vo_x11.c
|
@ -304,7 +304,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
{
|
||||
// int screen;
|
||||
int fullscreen = 0;
|
||||
int vm = 0;
|
||||
|
||||
// int interval, prefer_blank, allow_exp, nothing;
|
||||
unsigned int fg, bg;
|
||||
|
@ -315,15 +314,14 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
const struct fmt2Xfmtentry_s *fmte = fmt2Xfmt;
|
||||
|
||||
#ifdef CONFIG_XF86VM
|
||||
unsigned int modeline_width, modeline_height;
|
||||
static uint32_t vm_width;
|
||||
static uint32_t vm_height;
|
||||
int vm = 0;
|
||||
#endif
|
||||
|
||||
vo_mouse_autohide = 1;
|
||||
old_vo_dwidth = -1;
|
||||
old_vo_dheight = -1;
|
||||
|
||||
int_pause = 0;
|
||||
if (!title)
|
||||
title = "MPlayer X11 (XImage/Shm) render";
|
||||
|
||||
|
@ -333,13 +331,14 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
|
||||
if (flags & (VOFLAG_FULLSCREEN|VOFLAG_MODESWITCHING))
|
||||
fullscreen = 1;
|
||||
#ifdef CONFIG_XF86VM
|
||||
if (flags & VOFLAG_MODESWITCHING)
|
||||
vm = 1;
|
||||
#endif
|
||||
if (flags & VOFLAG_FLIPPING)
|
||||
Flip_Flag = 1;
|
||||
zoomFlag = flags & VOFLAG_SWSCALE;
|
||||
|
||||
int_pause = 0;
|
||||
// if(!fullscreen) zoomFlag=1; //it makes no sense to avoid zooming on windowd mode
|
||||
|
||||
//printf( "w: %d h: %d\n\n",vo_dwidth,vo_dheight );
|
||||
|
@ -375,21 +374,7 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
#ifdef CONFIG_XF86VM
|
||||
if (vm)
|
||||
{
|
||||
if ((d_width == 0) && (d_height == 0))
|
||||
{
|
||||
vm_width = image_width;
|
||||
vm_height = image_height;
|
||||
} else
|
||||
{
|
||||
vm_width = d_width;
|
||||
vm_height = d_height;
|
||||
}
|
||||
vo_vm_switch(vm_width, vm_height, &modeline_width,
|
||||
&modeline_height);
|
||||
vo_dx = (vo_screenwidth - modeline_width) / 2;
|
||||
vo_dy = (vo_screenheight - modeline_height) / 2;
|
||||
vo_dwidth = modeline_width;
|
||||
vo_dheight = modeline_height;
|
||||
vo_vm_switch();
|
||||
}
|
||||
#endif
|
||||
bg = WhitePixel(mDisplay, mScreen);
|
||||
|
@ -415,7 +400,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
vo_window = WinID ? ((Window) WinID) : mRootWin;
|
||||
if (WinID)
|
||||
{
|
||||
int border;
|
||||
XUnmapWindow(mDisplay, vo_window);
|
||||
XChangeWindowAttributes(mDisplay, vo_window, xswamask,
|
||||
&xswa);
|
||||
|
@ -428,27 +412,20 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
ButtonReleaseMask |
|
||||
ExposureMask);
|
||||
XMapWindow(mDisplay, vo_window);
|
||||
XGetGeometry(mDisplay, vo_window, &mRootWin,
|
||||
&vo_dx, &vo_dy, &vo_dwidth, &vo_dheight,
|
||||
&border, &depth);
|
||||
depth = vo_x11_update_geometry();
|
||||
} else
|
||||
XSelectInput(mDisplay, vo_window, ExposureMask);
|
||||
} else
|
||||
{
|
||||
vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, d_width, d_height,
|
||||
vo_x11_create_vo_window(&vinfo, vo_dx, vo_dy, vo_dwidth, vo_dheight,
|
||||
flags, theCmap, "x11", title);
|
||||
}
|
||||
|
||||
if (vo_gc != None)
|
||||
XFreeGC(mDisplay, vo_gc);
|
||||
vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv);
|
||||
XSync(mDisplay, False);
|
||||
|
||||
vo_x11_selectinput_witherr(mDisplay, vo_window,
|
||||
StructureNotifyMask | KeyPressMask |
|
||||
PropertyChangeMask | ExposureMask |
|
||||
((WinID ==
|
||||
0) ? 0 : (ButtonPressMask |
|
||||
ButtonReleaseMask |
|
||||
PointerMotionMask)));
|
||||
|
||||
#ifdef CONFIG_XF86VM
|
||||
if (vm)
|
||||
{
|
||||
|
@ -462,10 +439,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
#endif
|
||||
}
|
||||
|
||||
if (vo_gc != None)
|
||||
XFreeGC(mDisplay, vo_gc);
|
||||
vo_gc = XCreateGC(mDisplay, vo_window, 0L, &xgcv);
|
||||
|
||||
if (myximage)
|
||||
{
|
||||
freeMyXImage();
|
||||
|
@ -473,12 +446,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
}
|
||||
getMyXImage();
|
||||
|
||||
if (!WinID)
|
||||
{
|
||||
vo_dwidth = vo_screenwidth;
|
||||
vo_dheight = vo_screenheight;
|
||||
}
|
||||
|
||||
while (fmte->mpfmt) {
|
||||
int depth = IMGFMT_RGB_DEPTH(fmte->mpfmt);
|
||||
/* bits_per_pixel in X seems to be set to 16 for 15 bit formats
|
||||
|
@ -540,30 +507,31 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
dst_width = width;
|
||||
//printf( "X11 bpp: %d color mask: R:%lX G:%lX B:%lX\n",bpp,myximage->red_mask,myximage->green_mask,myximage->blue_mask );
|
||||
|
||||
if (vo_ontop)
|
||||
vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void Display_Image(XImage * myximage, uint8_t * ImageData)
|
||||
{
|
||||
int x = (vo_dwidth - dst_width) / 2;
|
||||
int y = (vo_dheight - myximage->height) / 2;
|
||||
if (WinID == 0) {
|
||||
x = vo_dx;
|
||||
y = vo_dy;
|
||||
}
|
||||
myximage->data += out_offset;
|
||||
#ifdef HAVE_SHM
|
||||
if (Shmem_Flag)
|
||||
{
|
||||
XShmPutImage(mDisplay, vo_window, vo_gc, myximage,
|
||||
0, 0,
|
||||
(vo_dwidth - dst_width) / 2,
|
||||
(vo_dheight - myximage->height) / 2, dst_width,
|
||||
x, y, dst_width,
|
||||
myximage->height, True);
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
XPutImage(mDisplay, vo_window, vo_gc, myximage,
|
||||
0, 0,
|
||||
(vo_dwidth - dst_width) / 2,
|
||||
(vo_dheight - myximage->height) / 2, dst_width,
|
||||
x, y, dst_width,
|
||||
myximage->height);
|
||||
}
|
||||
myximage->data -= out_offset;
|
||||
|
@ -637,27 +605,7 @@ static int draw_slice(uint8_t * src[], int stride[], int w, int h,
|
|||
|
||||
static int draw_frame(uint8_t * src[])
|
||||
{
|
||||
#if 0
|
||||
int stride[3] = { 0, 0, 0 };
|
||||
|
||||
if (in_format == IMGFMT_YUY2)
|
||||
stride[0] = srcW * 2;
|
||||
else if (in_format == IMGFMT_BGR8)
|
||||
stride[0] = srcW;
|
||||
else if (in_format == IMGFMT_BGR15)
|
||||
stride[0] = srcW * 2;
|
||||
else if (in_format == IMGFMT_BGR16)
|
||||
stride[0] = srcW * 2;
|
||||
else if (in_format == IMGFMT_BGR24)
|
||||
stride[0] = srcW * 3;
|
||||
else if (in_format == IMGFMT_BGR32)
|
||||
stride[0] = srcW * 4;
|
||||
|
||||
return draw_slice(src, stride, srcW, srcH, 0, 0);
|
||||
#else
|
||||
mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_X11_DrawFrameCalled);
|
||||
return -1;
|
||||
#endif
|
||||
return VO_ERROR;
|
||||
}
|
||||
|
||||
static uint32_t get_image(mp_image_t * mpi)
|
||||
|
@ -729,7 +677,7 @@ static void uninit(void)
|
|||
freeMyXImage();
|
||||
|
||||
#ifdef CONFIG_XF86VM
|
||||
vo_vm_close(mDisplay);
|
||||
vo_vm_close();
|
||||
#endif
|
||||
|
||||
zoomFlag = 0;
|
||||
|
@ -761,10 +709,14 @@ static int control(uint32_t request, void *data)
|
|||
return int_pause = 0;
|
||||
case VOCTRL_QUERY_FORMAT:
|
||||
return query_format(*((uint32_t *) data));
|
||||
case VOCTRL_GUISUPPORT:
|
||||
return VO_TRUE;
|
||||
case VOCTRL_GET_IMAGE:
|
||||
return get_image(data);
|
||||
case VOCTRL_GUISUPPORT:
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
vo_x11_fullscreen();
|
||||
vo_x11_clearwindow(mDisplay, vo_window);
|
||||
return VO_TRUE;
|
||||
case VOCTRL_SET_EQUALIZER:
|
||||
{
|
||||
struct voctrl_set_equalizer_args *args = data;
|
||||
|
@ -778,12 +730,6 @@ static int control(uint32_t request, void *data)
|
|||
case VOCTRL_ONTOP:
|
||||
vo_x11_ontop();
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
{
|
||||
vo_x11_fullscreen();
|
||||
vo_x11_clearwindow(mDisplay, vo_window);
|
||||
}
|
||||
return VO_TRUE;
|
||||
case VOCTRL_UPDATE_SCREENINFO:
|
||||
update_xinerama_info();
|
||||
return VO_TRUE;
|
||||
|
|
|
@ -248,9 +248,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
|
||||
set_window(); // set up mga_vid_config.dest_width etc
|
||||
|
||||
if (vo_ontop)
|
||||
vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
XSync(mDisplay, False);
|
||||
|
||||
ioctl(f, MGA_VID_ON, 0);
|
||||
|
|
|
@ -188,8 +188,6 @@ static void set_window(int force_update)
|
|||
XFillRectangle(mDisplay, vo_window, vo_gc, drwX, drwY, drwWidth,
|
||||
(vo_fs ? drwHeight - 1 : drwHeight));
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
/* flush, update drawable */
|
||||
XFlush(mDisplay);
|
||||
|
||||
|
|
|
@ -181,7 +181,6 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
|
|||
{
|
||||
struct MPOpts *opts = vo->opts;
|
||||
struct vo_x11_state *x11 = vo->x11;
|
||||
XSizeHints hint;
|
||||
XVisualInfo vinfo;
|
||||
XGCValues xgcv;
|
||||
XSetWindowAttributes xswa;
|
||||
|
@ -223,44 +222,18 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
|
|||
|
||||
#ifdef CONFIG_GUI
|
||||
if (use_gui)
|
||||
guiGetEvent(guiSetShVideo, 0); // let the GUI to setup/resize our window
|
||||
guiGetEvent(guiSetShVideo, 0); // the GUI will set up / resize the window
|
||||
else
|
||||
#endif
|
||||
{
|
||||
hint.x = vo->dx;
|
||||
hint.y = vo->dy;
|
||||
hint.width = d_width;
|
||||
hint.height = d_height;
|
||||
#ifdef CONFIG_XF86VM
|
||||
unsigned int modeline_width, modeline_height;
|
||||
uint32_t vm_width;
|
||||
uint32_t vm_height;
|
||||
int vm = flags & VOFLAG_MODESWITCHING;
|
||||
if (vm)
|
||||
{
|
||||
if ((d_width == 0) && (d_height == 0))
|
||||
{
|
||||
vm_width = ctx->image_width;
|
||||
vm_height = ctx->image_height;
|
||||
} else
|
||||
{
|
||||
vm_width = d_width;
|
||||
vm_height = d_height;
|
||||
}
|
||||
vo_vm_switch(vo, vm_width, vm_height, &modeline_width,
|
||||
&modeline_height);
|
||||
vo_vm_switch(vo);
|
||||
ctx->mode_switched = 1;
|
||||
hint.x = (opts->vo_screenwidth - modeline_width) / 2;
|
||||
hint.y = (opts->vo_screenheight - modeline_height) / 2;
|
||||
hint.width = modeline_width;
|
||||
hint.height = modeline_height;
|
||||
aspect_save_screenres(vo, modeline_width, modeline_height);
|
||||
} else
|
||||
#warning This "else" makes no sense
|
||||
}
|
||||
#endif
|
||||
hint.flags = PPosition | PSize /* | PBaseSize */ ;
|
||||
hint.base_width = hint.width;
|
||||
hint.base_height = hint.height;
|
||||
XGetWindowAttributes(x11->display, DefaultRootWindow(x11->display),
|
||||
&attribs);
|
||||
depth = attribs.depth;
|
||||
|
@ -293,18 +266,13 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
|
|||
ButtonReleaseMask |
|
||||
ExposureMask);
|
||||
XMapWindow(x11->display, x11->window);
|
||||
Window mRoot;
|
||||
uint32_t drwBorderWidth, drwDepth;
|
||||
XGetGeometry(x11->display, x11->window, &mRoot,
|
||||
&ctx->drwX, &ctx->drwY, &vo->dwidth, &vo->dheight,
|
||||
&drwBorderWidth, &drwDepth);
|
||||
if (vo->dwidth <= 0) vo->dwidth = d_width;
|
||||
if (vo->dheight <= 0) vo->dheight = d_height;
|
||||
vo_x11_update_geometry(vo);
|
||||
aspect_save_prescale(vo, vo->dwidth, vo->dheight);
|
||||
}
|
||||
} else
|
||||
XSelectInput(x11->display, x11->window, ExposureMask);
|
||||
} else
|
||||
{
|
||||
vo_x11_create_vo_window(vo, &vinfo, vo->dx, vo->dy, d_width, d_height,
|
||||
vo_x11_create_vo_window(vo, &vinfo, vo->dx, vo->dy, vo->dwidth, vo->dheight,
|
||||
flags, CopyFromParent, "xv", title);
|
||||
XChangeWindowAttributes(x11->display, x11->window, xswamask, &xswa);
|
||||
}
|
||||
|
@ -360,10 +328,6 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
|
|||
ctx->current_buf = 0;
|
||||
ctx->current_ip_buf = 0;
|
||||
|
||||
#if 0
|
||||
set_gamma_correction();
|
||||
#endif
|
||||
|
||||
aspect(vo, &vo->dwidth, &vo->dheight, A_NOZOOM);
|
||||
if ((flags & VOFLAG_FULLSCREEN) && WinID <= 0) vo_fs = 1;
|
||||
calc_drwXY(vo, &ctx->drwX, &ctx->drwY);
|
||||
|
@ -378,9 +342,6 @@ static int config(struct vo *vo, uint32_t width, uint32_t height,
|
|||
mp_msg(MSGT_VO, MSGL_V, "[xv] dx: %d dy: %d dw: %d dh: %d\n", ctx->drwX,
|
||||
ctx->drwY, vo->dwidth, vo->dheight);
|
||||
|
||||
if (opts->vo_ontop)
|
||||
vo_x11_setlayer(vo, x11->window, opts->vo_ontop);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -480,16 +441,7 @@ static void check_events(struct vo *vo)
|
|||
int e = vo_x11_check_events(vo);
|
||||
|
||||
if (e & VO_EVENT_RESIZE)
|
||||
{
|
||||
Window mRoot;
|
||||
uint32_t drwBorderWidth, drwDepth;
|
||||
XGetGeometry(x11->display, x11->window, &mRoot, &ctx->drwX, &ctx->drwY,
|
||||
&vo->dwidth, &vo->dheight, &drwBorderWidth, &drwDepth);
|
||||
mp_msg(MSGT_VO, MSGL_V, "[xv] dx: %d dy: %d dw: %d dh: %d\n", ctx->drwX,
|
||||
ctx->drwY, vo->dwidth, vo->dheight);
|
||||
|
||||
calc_drwXY(vo, &ctx->drwX, &ctx->drwY);
|
||||
}
|
||||
|
||||
if (e & VO_EVENT_EXPOSE || e & VO_EVENT_RESIZE)
|
||||
{
|
||||
|
@ -577,8 +529,7 @@ static int draw_slice(struct vo *vo, uint8_t * image[], int stride[], int w,
|
|||
|
||||
static int draw_frame(struct vo *vo, uint8_t * src[])
|
||||
{
|
||||
mp_msg(MSGT_VO,MSGL_INFO, MSGTR_LIBVO_XV_DrawFrameCalled);
|
||||
return -1;
|
||||
return VO_ERROR;
|
||||
}
|
||||
|
||||
static uint32_t draw_image(struct vo *vo, mp_image_t * mpi)
|
||||
|
|
|
@ -340,9 +340,6 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
|
|||
|
||||
panscan_calc();
|
||||
|
||||
if (vo_ontop)
|
||||
vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -454,7 +454,6 @@ int i,mode_id,rez;
|
|||
int numblocks,blocks_per_macroblock;//bpmb we have 6,8,12
|
||||
|
||||
//from vo_xv
|
||||
XSizeHints hint;
|
||||
XVisualInfo vinfo;
|
||||
XGCValues xgcv;
|
||||
XSetWindowAttributes xswa;
|
||||
|
@ -463,9 +462,6 @@ unsigned long xswamask;
|
|||
int depth;
|
||||
#ifdef CONFIG_XF86VM
|
||||
int vm=0;
|
||||
unsigned int modeline_width, modeline_height;
|
||||
static uint32_t vm_width;
|
||||
static uint32_t vm_height;
|
||||
#endif
|
||||
//end of vo_xv
|
||||
|
||||
|
@ -649,28 +645,13 @@ skip_surface_allocation:
|
|||
else
|
||||
#endif
|
||||
{
|
||||
hint.x = vo_dx;
|
||||
hint.y = vo_dy;
|
||||
hint.width = d_width;
|
||||
hint.height = d_height;
|
||||
#ifdef CONFIG_XF86VM
|
||||
if ( vm )
|
||||
{
|
||||
if ((d_width==0) && (d_height==0))
|
||||
{ vm_width=image_width; vm_height=image_height; }
|
||||
else
|
||||
{ vm_width=d_width; vm_height=d_height; }
|
||||
vo_vm_switch(vm_width, vm_height,&modeline_width, &modeline_height);
|
||||
hint.x=(vo_screenwidth-modeline_width)/2;
|
||||
hint.y=(vo_screenheight-modeline_height)/2;
|
||||
hint.width=modeline_width;
|
||||
hint.height=modeline_height;
|
||||
aspect_save_screenres(modeline_width,modeline_height);
|
||||
vo_vm_switch();
|
||||
}
|
||||
else
|
||||
#endif
|
||||
hint.flags = PPosition | PSize /* | PBaseSize */;
|
||||
hint.base_width = hint.width; hint.base_height = hint.height;
|
||||
XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs);
|
||||
depth=attribs.depth;
|
||||
if (depth != 15 && depth != 16 && depth != 24 && depth != 32) depth = 24;
|
||||
|
@ -726,8 +707,6 @@ skip_surface_allocation:
|
|||
|
||||
mp_msg(MSGT_VO,MSGL_V, "[xvmc] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,vo_dwidth,vo_dheight );
|
||||
|
||||
if (vo_ontop) vo_x11_setlayer(mDisplay, vo_window, vo_ontop);
|
||||
|
||||
//end vo_xv
|
||||
|
||||
/* store image dimesions for displaying */
|
||||
|
@ -1085,11 +1064,6 @@ int e=vo_x11_check_events(mDisplay);
|
|||
{
|
||||
e |= VO_EVENT_EXPOSE;
|
||||
|
||||
XGetGeometry( mDisplay,vo_window,&mRoot,&drwX,&drwY,&vo_dwidth,&vo_dheight,
|
||||
&drwBorderWidth,&drwDepth );
|
||||
mp_msg(MSGT_VO,MSGL_V, "[xvmc] dx: %d dy: %d dw: %d dh: %d\n",drwX,drwY,
|
||||
vo_dwidth,vo_dheight );
|
||||
|
||||
calc_drwXY(&drwX, &drwY);
|
||||
}
|
||||
if ( e & VO_EVENT_EXPOSE )
|
||||
|
@ -1152,7 +1126,7 @@ static void uninit(void){
|
|||
xvmc_free();
|
||||
//from vo_xv
|
||||
#ifdef CONFIG_XF86VM
|
||||
vo_vm_close(mDisplay);
|
||||
vo_vm_close();
|
||||
#endif
|
||||
vo_x11_uninit();
|
||||
}
|
||||
|
|
|
@ -46,8 +46,6 @@ static BOOL (WINAPI* myEnumDisplayMonitors)(HDC, LPCRECT, MONITORENUMPROC, LPARA
|
|||
static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
|
||||
RECT r;
|
||||
POINT p;
|
||||
if (WinID < 0 || message == WM_PAINT || message == WM_ERASEBKGND ||
|
||||
message == WM_SIZE) {
|
||||
switch (message) {
|
||||
case WM_ERASEBKGND: // no need to erase background seperately
|
||||
return 1;
|
||||
|
@ -150,19 +148,6 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM l
|
|||
break;
|
||||
}
|
||||
}
|
||||
} else switch (message) {
|
||||
case WM_MOUSEMOVE:
|
||||
case WM_LBUTTONDOWN:
|
||||
case WM_LBUTTONUP:
|
||||
case WM_LBUTTONDBLCLK:
|
||||
case WM_MBUTTONDOWN:
|
||||
case WM_MBUTTONUP:
|
||||
case WM_MBUTTONDBLCLK:
|
||||
case WM_RBUTTONDOWN:
|
||||
case WM_RBUTTONUP:
|
||||
case WM_RBUTTONDBLCLK:
|
||||
SendNotifyMessage(WinID, message, wParam, lParam);
|
||||
}
|
||||
|
||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||
}
|
||||
|
@ -397,6 +382,7 @@ int vo_w32_init(void) {
|
|||
vo_window = CreateWindowEx(WS_EX_NOPARENTNOTIFY, classname, classname,
|
||||
WS_CHILD | WS_VISIBLE,
|
||||
0, 0, vo_dwidth, vo_dheight, WinID, 0, hInstance, 0);
|
||||
EnableWindow(vo_window, 0);
|
||||
} else
|
||||
vo_window = CreateWindowEx(0, classname, classname,
|
||||
vo_border ? (WS_OVERLAPPEDWINDOW | WS_SIZEBOX) : WS_POPUP,
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <inttypes.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "options.h"
|
||||
|
@ -1008,25 +1009,7 @@ int vo_x11_check_events(struct vo *vo)
|
|||
// if (vo_fs && Event.xconfigure.width != opts->vo_screenwidth && Event.xconfigure.height != opts->vo_screenheight) break;
|
||||
if (x11->window == None)
|
||||
break;
|
||||
vo->dwidth = Event.xconfigure.width;
|
||||
vo->dheight = Event.xconfigure.height;
|
||||
#if 0
|
||||
/* when resizing, x and y are zero :( */
|
||||
vo->dx = Event.xconfigure.x;
|
||||
vo->dy = Event.xconfigure.y;
|
||||
#else
|
||||
{
|
||||
Window root;
|
||||
int foo;
|
||||
Window win;
|
||||
|
||||
XGetGeometry(display, x11->window, &root, &foo, &foo,
|
||||
&foo /*width */ , &foo /*height */ , &foo,
|
||||
&foo);
|
||||
XTranslateCoordinates(display, x11->window, root, 0, 0,
|
||||
&vo->dx, &vo->dy, &win);
|
||||
}
|
||||
#endif
|
||||
vo_x11_update_geometry(vo);
|
||||
ret |= VO_EVENT_RESIZE;
|
||||
break;
|
||||
case KeyPress:
|
||||
|
@ -1479,6 +1462,27 @@ static int vo_x11_get_fs_type(int supported)
|
|||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief update vo->dx, vo->dy, vo->dwidth and vo->dheight with current values of vo->x11->window
|
||||
* \return returns current color depth of vo->x11->window
|
||||
*/
|
||||
int vo_x11_update_geometry(struct vo *vo)
|
||||
{
|
||||
struct vo_x11_state *x11 = vo->x11;
|
||||
unsigned depth, w, h;
|
||||
int dummy_int;
|
||||
Window dummy_win;
|
||||
XGetGeometry(x11->display, x11->window, &dummy_win, &dummy_int, &dummy_int,
|
||||
&w, &h, &dummy_int, &depth);
|
||||
if (w <= INT_MAX && h <= INT_MAX) {
|
||||
vo->dwidth = w;
|
||||
vo->dheight = h;
|
||||
}
|
||||
XTranslateCoordinates(x11->display, x11->window, x11->rootwin, 0, 0,
|
||||
&vo->dx, &vo->dy, &dummy_win);
|
||||
return depth <= INT_MAX ? depth : 0;
|
||||
}
|
||||
|
||||
void vo_x11_fullscreen(struct vo *vo)
|
||||
{
|
||||
struct MPOpts *opts = vo->opts;
|
||||
|
@ -1731,8 +1735,7 @@ void vo_x11_selectinput_witherr(Display * display, Window w,
|
|||
}
|
||||
|
||||
#ifdef CONFIG_XF86VM
|
||||
void vo_vm_switch(struct vo *vo, uint32_t X, uint32_t Y, int *modeline_width,
|
||||
int *modeline_height)
|
||||
void vo_vm_switch(struct vo *vo)
|
||||
{
|
||||
struct vo_x11_state *x11 = vo->x11;
|
||||
struct MPOpts *opts = vo->opts;
|
||||
|
@ -1740,6 +1743,8 @@ void vo_vm_switch(struct vo *vo, uint32_t X, uint32_t Y, int *modeline_width,
|
|||
int vm_event, vm_error;
|
||||
int vm_ver, vm_rev;
|
||||
int i, j, have_vm = 0;
|
||||
int X = vo->dwidth, Y = vo->dheight;
|
||||
int modeline_width, modeline_height;
|
||||
|
||||
int modecount;
|
||||
|
||||
|
@ -1749,9 +1754,10 @@ void vo_vm_switch(struct vo *vo, uint32_t X, uint32_t Y, int *modeline_width,
|
|||
mp_msg(MSGT_VO, MSGL_V, "XF86VidMode extension v%i.%i\n", vm_ver,
|
||||
vm_rev);
|
||||
have_vm = 1;
|
||||
} else
|
||||
} else {
|
||||
mp_msg(MSGT_VO, MSGL_WARN,
|
||||
"XF86VidMode extension not available.\n");
|
||||
}
|
||||
|
||||
if (have_vm)
|
||||
{
|
||||
|
@ -1759,28 +1765,35 @@ void vo_vm_switch(struct vo *vo, uint32_t X, uint32_t Y, int *modeline_width,
|
|||
XF86VidModeGetAllModeLines(mDisplay, x11->screen, &modecount,
|
||||
&vidmodes);
|
||||
j = 0;
|
||||
*modeline_width = vidmodes[0]->hdisplay;
|
||||
*modeline_height = vidmodes[0]->vdisplay;
|
||||
modeline_width = vidmodes[0]->hdisplay;
|
||||
modeline_height = vidmodes[0]->vdisplay;
|
||||
|
||||
for (i = 1; i < modecount; i++)
|
||||
if ((vidmodes[i]->hdisplay >= X)
|
||||
&& (vidmodes[i]->vdisplay >= Y))
|
||||
if ((vidmodes[i]->hdisplay <= *modeline_width)
|
||||
&& (vidmodes[i]->vdisplay <= *modeline_height))
|
||||
if ((vidmodes[i]->hdisplay <= modeline_width)
|
||||
&& (vidmodes[i]->vdisplay <= modeline_height))
|
||||
{
|
||||
*modeline_width = vidmodes[i]->hdisplay;
|
||||
*modeline_height = vidmodes[i]->vdisplay;
|
||||
modeline_width = vidmodes[i]->hdisplay;
|
||||
modeline_height = vidmodes[i]->vdisplay;
|
||||
j = i;
|
||||
}
|
||||
|
||||
mp_msg(MSGT_VO, MSGL_INFO, MSGTR_SelectedVideoMode,
|
||||
*modeline_width, *modeline_height, X, Y);
|
||||
modeline_width, modeline_height, X, Y);
|
||||
XF86VidModeLockModeSwitch(mDisplay, x11->screen, 0);
|
||||
XF86VidModeSwitchToMode(mDisplay, x11->screen, vidmodes[j]);
|
||||
XF86VidModeSwitchToMode(mDisplay, x11->screen, vidmodes[j]);
|
||||
X = (opts->vo_screenwidth - *modeline_width) / 2;
|
||||
Y = (opts->vo_screenheight - *modeline_height) / 2;
|
||||
|
||||
// FIXME: all this is more of a hack than proper solution
|
||||
X = (opts->vo_screenwidth - modeline_width) / 2;
|
||||
Y = (opts->vo_screenheight - modeline_height) / 2;
|
||||
XF86VidModeSetViewPort(mDisplay, x11->screen, X, Y);
|
||||
vo->dx = X;
|
||||
vo->dy = Y;
|
||||
vo->dwidth = modeline_width;
|
||||
vo->dheight = modeline_height;
|
||||
aspect_save_screenres(vo, modeline_width, modeline_height);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1795,9 +1808,6 @@ void vo_vm_close(struct vo *vo)
|
|||
#endif
|
||||
{
|
||||
int i, modecount;
|
||||
int screen;
|
||||
|
||||
screen = DefaultScreen(dpy);
|
||||
|
||||
free(vidmodes);
|
||||
vidmodes = NULL;
|
||||
|
@ -1813,8 +1823,8 @@ void vo_vm_close(struct vo *vo)
|
|||
break;
|
||||
}
|
||||
|
||||
XF86VidModeSwitchToMode(dpy, screen, vidmodes[i]);
|
||||
XF86VidModeSwitchToMode(dpy, screen, vidmodes[i]);
|
||||
XF86VidModeSwitchToMode(dpy, vo->x11->screen, vidmodes[i]);
|
||||
XF86VidModeSwitchToMode(dpy, vo->x11->screen, vidmodes[i]);
|
||||
free(vidmodes);
|
||||
vidmodes = NULL;
|
||||
}
|
||||
|
|
|
@ -94,18 +94,19 @@ extern int mLocalDisplay;
|
|||
struct vo_x11_state *vo_x11_init_state(void);
|
||||
int vo_init(struct vo *vo);
|
||||
void vo_uninit(struct vo_x11_state *x11);
|
||||
extern void vo_x11_decoration(struct vo *vo, int d );
|
||||
void vo_x11_decoration(struct vo *vo, int d );
|
||||
void vo_x11_classhint(struct vo *vo, Window window, char *name);
|
||||
void vo_x11_sizehint(struct vo *vo, int x, int y, int width, int height, int max);
|
||||
int vo_x11_check_events(struct vo *vo);
|
||||
extern void vo_x11_selectinput_witherr(Display *display, Window w, long event_mask);
|
||||
void vo_x11_selectinput_witherr(Display *display, Window w, long event_mask);
|
||||
void vo_x11_fullscreen(struct vo *vo);
|
||||
int vo_x11_update_geometry(struct vo *vo);
|
||||
void vo_x11_setlayer(struct vo *vo, Window vo_window, int layer);
|
||||
void vo_x11_uninit(struct vo *vo);
|
||||
Colormap vo_x11_create_colormap(struct vo *vo, XVisualInfo *vinfo);
|
||||
uint32_t vo_x11_set_equalizer(struct vo *vo, char *name, int value);
|
||||
extern uint32_t vo_x11_get_equalizer(char *name, int *value);
|
||||
extern void fstype_help(void);
|
||||
uint32_t vo_x11_get_equalizer(char *name, int *value);
|
||||
void fstype_help(void);
|
||||
void vo_x11_create_vo_window(struct vo *vo, XVisualInfo *vis,
|
||||
int x, int y, unsigned int width, unsigned int height, int flags,
|
||||
Colormap col_map, const char *classname, const char *title);
|
||||
|
@ -113,7 +114,7 @@ void vo_x11_clearwindow_part(struct vo *vo, Window vo_window,
|
|||
int img_width, int img_height, int use_fs);
|
||||
void vo_x11_clearwindow(struct vo *vo, Window vo_window);
|
||||
void vo_x11_ontop(struct vo *vo);
|
||||
extern void vo_x11_border(struct vo *vo);
|
||||
void vo_x11_border(struct vo *vo);
|
||||
void vo_x11_ewmh_fullscreen(struct vo_x11_state *x11, int action);
|
||||
|
||||
#endif
|
||||
|
@ -146,7 +147,7 @@ int xv_test_ckm( void * arg );
|
|||
void vo_x11_putkey(struct vo *vo, int key);
|
||||
|
||||
#ifdef CONFIG_XF86VM
|
||||
void vo_vm_switch(struct vo *vo, uint32_t, uint32_t, int*, int*);
|
||||
void vo_vm_switch(struct vo *vo);
|
||||
void vo_vm_close(struct vo *vo);
|
||||
#endif
|
||||
|
||||
|
@ -161,6 +162,7 @@ void xscreensaver_heartbeat(struct vo_x11_state *x11);
|
|||
#ifdef IS_OLD_VO
|
||||
#define vo_x11_create_vo_window(...) vo_x11_create_vo_window(global_vo, __VA_ARGS__)
|
||||
#define vo_x11_fullscreen() vo_x11_fullscreen(global_vo)
|
||||
#define vo_x11_update_geometry() vo_x11_update_geometry(global_vo)
|
||||
#define vo_x11_ontop() vo_x11_ontop(global_vo)
|
||||
#define vo_init() vo_init(global_vo)
|
||||
#define vo_x11_ewmh_fullscreen(action) vo_x11_ewmh_fullscreen(global_vo->x11->display, action)
|
||||
|
@ -168,7 +170,7 @@ void xscreensaver_heartbeat(struct vo_x11_state *x11);
|
|||
#define vo_x11_uninit() vo_x11_uninit(global_vo)
|
||||
#define vo_x11_check_events(display) vo_x11_check_events(global_vo)
|
||||
#define vo_x11_sizehint(...) vo_x11_sizehint(global_vo, __VA_ARGS__)
|
||||
#define vo_vm_switch(...) vo_vm_switch(global_vo, __VA_ARGS__)
|
||||
#define vo_vm_switch() vo_vm_switch(global_vo)
|
||||
#define vo_x11_create_colormap(vinfo) vo_x11_create_colormap(global_vo, vinfo)
|
||||
#define vo_x11_set_equalizer(...) vo_x11_set_equalizer(global_vo, __VA_ARGS__)
|
||||
#define vo_xv_set_eq(...) vo_xv_set_eq(global_vo, __VA_ARGS__)
|
||||
|
@ -178,7 +180,7 @@ void xscreensaver_heartbeat(struct vo_x11_state *x11);
|
|||
#define vo_xv_init_colorkey() vo_xv_init_colorkey(global_vo)
|
||||
#define vo_xv_draw_colorkey(...) vo_xv_draw_colorkey(global_vo, __VA_ARGS__)
|
||||
#define vo_x11_clearwindow_part(display, ...) vo_x11_clearwindow_part(global_vo, __VA_ARGS__)
|
||||
#define vo_vm_close(display) vo_vm_close(global_vo)
|
||||
#define vo_vm_close() vo_vm_close(global_vo)
|
||||
#define vo_x11_clearwindow(display, window) vo_x11_clearwindow(global_vo, window)
|
||||
#define vo_x11_classhint(display, window, name) vo_x11_classhint(global_vo, window, name)
|
||||
#define vo_x11_setlayer(display, window, layer) vo_x11_setlayer(global_vo, window, layer)
|
||||
|
|
|
@ -16,16 +16,22 @@
|
|||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include "cache2.h"
|
||||
#ifdef __CYGWIN__
|
||||
#define PTHREAD_CACHE 1
|
||||
#endif
|
||||
|
||||
#include "osdep/shmem.h"
|
||||
#include "osdep/timer.h"
|
||||
#if defined(__MINGW32__) || defined(__CYGWIN__)
|
||||
#if defined(__MINGW32__)
|
||||
#include <windows.h>
|
||||
static void ThreadProc( void *s );
|
||||
#elif defined(__OS2__)
|
||||
#define INCL_DOS
|
||||
#include <os2.h>
|
||||
static void ThreadProc( void *s );
|
||||
#elif defined(PTHREAD_CACHE)
|
||||
#include <pthread.h>
|
||||
static void *ThreadProc(void *s);
|
||||
#else
|
||||
#include <sys/wait.h>
|
||||
#endif
|
||||
|
@ -34,6 +40,7 @@ static void ThreadProc( void *s );
|
|||
#include "help_mp.h"
|
||||
|
||||
#include "stream.h"
|
||||
#include "cache2.h"
|
||||
extern int use_gui;
|
||||
|
||||
typedef struct {
|
||||
|
@ -242,7 +249,7 @@ static int cache_execute_control(cache_vars_t *s) {
|
|||
|
||||
static cache_vars_t* cache_init(int size,int sector){
|
||||
int num;
|
||||
#if !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(__OS2__)
|
||||
#if !defined(__MINGW32__) && !defined(PTHREAD_CACHE) && !defined(__OS2__)
|
||||
cache_vars_t* s=shmem_alloc(sizeof(cache_vars_t));
|
||||
#else
|
||||
cache_vars_t* s=malloc(sizeof(cache_vars_t));
|
||||
|
@ -256,14 +263,14 @@ static cache_vars_t* cache_init(int size,int sector){
|
|||
}//32kb min_size
|
||||
s->buffer_size=num*sector;
|
||||
s->sector_size=sector;
|
||||
#if !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(__OS2__)
|
||||
#if !defined(__MINGW32__) && !defined(PTHREAD_CACHE) && !defined(__OS2__)
|
||||
s->buffer=shmem_alloc(s->buffer_size);
|
||||
#else
|
||||
s->buffer=malloc(s->buffer_size);
|
||||
#endif
|
||||
|
||||
if(s->buffer == NULL){
|
||||
#if !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(__OS2__)
|
||||
#if !defined(__MINGW32__) && !defined(PTHREAD_CACHE) && !defined(__OS2__)
|
||||
shmem_free(s,sizeof(cache_vars_t));
|
||||
#else
|
||||
free(s);
|
||||
|
@ -279,14 +286,14 @@ static cache_vars_t* cache_init(int size,int sector){
|
|||
void cache_uninit(stream_t *s) {
|
||||
cache_vars_t* c = s->cache_data;
|
||||
if(!s->cache_pid) return;
|
||||
#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__OS2__)
|
||||
#if defined(__MINGW32__) || defined(PTHREAD_CACHE) || defined(__OS2__)
|
||||
cache_do_control(s, -2, NULL);
|
||||
#else
|
||||
kill(s->cache_pid,SIGKILL);
|
||||
waitpid(s->cache_pid,NULL,0);
|
||||
#endif
|
||||
if(!c) return;
|
||||
#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__OS2__)
|
||||
#if defined(__MINGW32__) || defined(PTHREAD_CACHE) || defined(__OS2__)
|
||||
free(c->stream);
|
||||
free(c->buffer);
|
||||
free(s->cache_data);
|
||||
|
@ -327,17 +334,23 @@ int stream_enable_cache(stream_t *stream,int size,int min,int seek_limit){
|
|||
min = s->buffer_size - s->fill_limit;
|
||||
}
|
||||
|
||||
#if !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(__OS2__)
|
||||
#if !defined(__MINGW32__) && !defined(PTHREAD_CACHE) && !defined(__OS2__)
|
||||
if((stream->cache_pid=fork())){
|
||||
#else
|
||||
{
|
||||
stream_t* stream2=malloc(sizeof(stream_t));
|
||||
memcpy(stream2,s->stream,sizeof(stream_t));
|
||||
s->stream=stream2;
|
||||
#if defined(__MINGW32__) || defined(__CYGWIN__)
|
||||
#if defined(__MINGW32__)
|
||||
stream->cache_pid = _beginthread( ThreadProc, 0, s );
|
||||
#else
|
||||
#elif defined(__OS2__)
|
||||
stream->cache_pid = _beginthread( ThreadProc, NULL, 256 * 1024, s );
|
||||
#else
|
||||
{
|
||||
pthread_t tid;
|
||||
pthread_create(&tid, NULL, ThreadProc, s);
|
||||
stream->cache_pid = 1;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
// wait until cache is filled at least prefill_init %
|
||||
|
@ -356,10 +369,14 @@ int stream_enable_cache(stream_t *stream,int size,int min,int seek_limit){
|
|||
return 1; // parent exits
|
||||
}
|
||||
|
||||
#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__OS2__)
|
||||
#if defined(__MINGW32__) || defined(PTHREAD_CACHE) || defined(__OS2__)
|
||||
}
|
||||
#ifdef PTHREAD_CACHE
|
||||
static void *ThreadProc( void *s ){
|
||||
#else
|
||||
static void ThreadProc( void *s ){
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_GUI
|
||||
use_gui = 0; // mp_msg may not use gui stuff in forked code
|
||||
|
@ -372,9 +389,12 @@ static void ThreadProc( void *s ){
|
|||
}
|
||||
// cache_stats(s->cache_data);
|
||||
} while (cache_execute_control(s));
|
||||
#if defined(__MINGW32__) || defined(__CYGWIN__) || defined(__OS2__)
|
||||
#if defined(__MINGW32__) || defined(__OS2__)
|
||||
_endthread();
|
||||
#endif
|
||||
#ifdef PTHREAD_CACHE
|
||||
return NULL;
|
||||
#endif
|
||||
}
|
||||
|
||||
int cache_stream_fill_buffer(stream_t *s){
|
||||
|
|
Loading…
Reference in New Issue