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:
Uoti Urpala 2008-11-17 20:50:23 +02:00
commit 1715c2a336
31 changed files with 4737 additions and 4064 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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>可以正常播放所生成的文件,其他播放器可能使用错误
的图象比例。

View File

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

View File

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

68
configure vendored
View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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