mirror of
https://github.com/mpv-player/mpv
synced 2024-12-28 06:03:45 +01:00
Merge svn changes up to r29962
This commit is contained in:
commit
5995bc175a
1
AUTHORS
1
AUTHORS
@ -794,6 +794,7 @@ Togni, Roberto (rxt) <r_togni@tiscali.it>
|
|||||||
|
|
||||||
Tresoldi, Paolo "PaulTT" (ptt) <mplayer@paultt.org>
|
Tresoldi, Paolo "PaulTT" (ptt) <mplayer@paultt.org>
|
||||||
* mplayer -endpos option
|
* mplayer -endpos option
|
||||||
|
* -name, -title and -use-filename-title options
|
||||||
* Italian man page and console messages translations
|
* Italian man page and console messages translations
|
||||||
* Italian documentation translation
|
* Italian documentation translation
|
||||||
|
|
||||||
|
20
Changelog
20
Changelog
@ -5,23 +5,39 @@ MPlayer (1.0)
|
|||||||
* YUY2 Lossless Codec (YLC0) via binary DLL
|
* YUY2 Lossless Codec (YLC0) via binary DLL
|
||||||
* Truemotion RT codec (TR20) via binary DLL
|
* Truemotion RT codec (TR20) via binary DLL
|
||||||
* Nogantech Codec (NTN1 and NTN2) via binary DLL
|
* Nogantech Codec (NTN1 and NTN2) via binary DLL
|
||||||
* add new FourCCs (m1v1)
|
* add new FourCCs (m1v1,yuvs,VYUY,Y42B,V422,YUNV,UYNV,UYNY,uyv1,2Vu1,P422,HDYC,
|
||||||
TwoCCs (0xA106,0x6c75,0xAAC0)
|
IJLV,MVJP)
|
||||||
|
TwoCCs (0xA106,0x6c75,0xAAC0,0x55005354)
|
||||||
to existing decoders.
|
to existing decoders.
|
||||||
* AMR now handled via opencore decoder
|
* AMR now handled via opencore decoder
|
||||||
* updated Windoes Media Screen Codec (MSS1,MSS2) via binary DLL
|
* updated Windoes Media Screen Codec (MSS1,MSS2) via binary DLL
|
||||||
* h264 decoder (CoreAVC) on Windows only via binary DLL
|
* h264 decoder (CoreAVC) on Windows only via binary DLL
|
||||||
* Kega Game video codec (KGV1) via binary DLL
|
* Kega Game video codec (KGV1) via binary DLL
|
||||||
|
* SoftLab-NSK Forward MPEG2 I-frames (SLIF) via binary DLL
|
||||||
|
|
||||||
Demuxers:
|
Demuxers:
|
||||||
* support for TrueHD in BluRay streams in libmpdemux
|
* support for TrueHD in BluRay streams in libmpdemux
|
||||||
* more BluRay codec support with lavf
|
* more BluRay codec support with lavf
|
||||||
|
* fix length in asf/wmv files
|
||||||
|
* support ISDB-Tb dvb streams
|
||||||
|
|
||||||
Other:
|
Other:
|
||||||
* -nosub option for disabling auto-selected subtitles
|
* -nosub option for disabling auto-selected subtitles
|
||||||
* support for displaying subs in the term (FIXME)
|
* support for displaying subs in the term (FIXME)
|
||||||
* support for subtitles with audio only files
|
* support for subtitles with audio only files
|
||||||
|
* support for right-to-left languages with embedded subtitles
|
||||||
* support for 8 channel audio
|
* support for 8 channel audio
|
||||||
|
* sync dvd:// and dvdnav:// features
|
||||||
|
* support for mpeg4 asp in VDPAU video output (non B-frame only)
|
||||||
|
* support for live and non-live DVB teletext with demuxer lavf
|
||||||
|
* -name, -title and -use-filename-title options for MPlayer
|
||||||
|
* support for stream handling via FFmpeg
|
||||||
|
Configure with --enable-protocol="file_protocol pipe_protocol
|
||||||
|
http_protocol rtmp_protocol tcp_protocol udp_protocol"
|
||||||
|
and use e.g. ffmpeg://http://example.com/test
|
||||||
|
|
||||||
|
MEncoder:
|
||||||
|
* add -tsprog for demuxer lavf
|
||||||
|
|
||||||
rc3: "BikeshedCounter" March 27, 2009
|
rc3: "BikeshedCounter" March 27, 2009
|
||||||
Decoders:
|
Decoders:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" Synced with r29661
|
.\" Synced with r29905
|
||||||
.\" MPlayer (C) 2000-2009 MPlayer Team
|
.\" MPlayer (C) 2000-2009 MPlayer Team
|
||||||
.\" Ezt a man oldalt Gabucino, Diego Biurrun és Jonas Jermann készíti/készítette
|
.\" Ezt a man oldalt Gabucino, Diego Biurrun és Jonas Jermann készíti/készítette
|
||||||
.\" Karbantartó: Gabrov
|
.\" Karbantartó: Gabrov
|
||||||
@ -33,7 +33,7 @@
|
|||||||
.\" Név
|
.\" Név
|
||||||
.\" --------------------------------------------------------------------------
|
.\" --------------------------------------------------------------------------
|
||||||
.
|
.
|
||||||
.TH MPlayer 1 "2009. 09. 11." "MPlayer Project" "A film lejátszó"
|
.TH MPlayer 1 "2009. 11. 16." "MPlayer Project" "A film lejátszó"
|
||||||
.
|
.
|
||||||
.SH NÉV
|
.SH NÉV
|
||||||
mplayer \- film lejátszó
|
mplayer \- film lejátszó
|
||||||
@ -184,7 +184,11 @@ nagy
|
|||||||
RGB/\:YUV átalakítás) és így tovább.
|
RGB/\:YUV átalakítás) és így tovább.
|
||||||
.PP
|
.PP
|
||||||
.B gmplayer
|
.B gmplayer
|
||||||
egy MPlayer grafikus felhasználó felülettel. Ugyan azt tudja, mint az MPlayer.
|
egy MPlayer grafikus felhasználó felülettel.
|
||||||
|
Ugyan azok az opciói, mint az MPlayer-nek, de nem biztos, hogy minden tökéletesen
|
||||||
|
fog működni a GUI konfigurációja miatt (ami a gui.conf fájlban van).
|
||||||
|
Gyakorlatilag néhány opció felülírásra kerül a gui.conf fájl beállításaival,
|
||||||
|
míg mások véglegesen ott kerülnek tárolásra.
|
||||||
.PP
|
.PP
|
||||||
A gyors kezdéshez példákat ezen man oldal végén találhatsz.
|
A gyors kezdéshez példákat ezen man oldal végén találhatsz.
|
||||||
.PP
|
.PP
|
||||||
@ -427,7 +431,8 @@ V
|
|||||||
.RS
|
.RS
|
||||||
.
|
.
|
||||||
(A következő gombok csak akkor működnek, ha teletext támogatással fordítottál:
|
(A következő gombok csak akkor működnek, ha teletext támogatással fordítottál:
|
||||||
a TV teletext irányítására szolgálnak.)
|
a TV teletext irányítására szolgálnak, melynek adatai jöhetnek
|
||||||
|
analóg TV forrásból vagy egy MPEG Transport Stream-ből.)
|
||||||
.RE
|
.RE
|
||||||
.PP
|
.PP
|
||||||
.PD 0
|
.PD 0
|
||||||
@ -527,8 +532,9 @@ lej
|
|||||||
a parancssorban vagy a globális konfigurációs fájlban).
|
a parancssorban vagy a globális konfigurációs fájlban).
|
||||||
Ha egy fájl specifikus konfigurációs fájl található ugyan abban a könyvtárban, nem
|
Ha egy fájl specifikus konfigurációs fájl található ugyan abban a könyvtárban, nem
|
||||||
tölt be egy fájl specifikus konfigurációt sem a ~/.mplayer könyvtárból.
|
tölt be egy fájl specifikus konfigurációt sem a ~/.mplayer könyvtárból.
|
||||||
Ráadásul a \-use\-filedir\-conf opció engedélyezi a könyvtár specifikus konfigurációs
|
Ráadásul a \-use\-filedir\-conf opció engedélyezi a könyvtár specifikus
|
||||||
fájlokat. Ezért az MPlayer először megpróbálja betölteni az mplayer.conf-ot az
|
konfigurációs fájlokat.
|
||||||
|
Ezért az MPlayer először megpróbálja betölteni az mplayer.conf-ot az
|
||||||
lejátszandó fájlt tartalmazó könyvtárból, majd megpróbál betölteni bármilyen fájl
|
lejátszandó fájlt tartalmazó könyvtárból, majd megpróbál betölteni bármilyen fájl
|
||||||
specifikus konfigurációt.
|
specifikus konfigurációt.
|
||||||
.PP
|
.PP
|
||||||
@ -1330,6 +1336,8 @@ sztere
|
|||||||
térhatás
|
térhatás
|
||||||
.IPs 6
|
.IPs 6
|
||||||
teljes 5.1
|
teljes 5.1
|
||||||
|
.IPs 8
|
||||||
|
teljes 7.1
|
||||||
.RE
|
.RE
|
||||||
.PD 1
|
.PD 1
|
||||||
.
|
.
|
||||||
@ -1829,7 +1837,7 @@ faktorral. Nem biztos, hogy j
|
|||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
.B \-srate <Hz>
|
.B \-srate <Hz>
|
||||||
A megadott audio lejátszási ráta kiválasztása (természetesen a hangkártya
|
A használni kívánt mintavételi ráta megadása (természetesen a hangkártya
|
||||||
által megszabott határon belül).
|
által megszabott határon belül).
|
||||||
Ha a kiválasztott minta frekvencia különbözik az aktuális médiáétól, a
|
Ha a kiválasztott minta frekvencia különbözik az aktuális médiáétól, a
|
||||||
resample vagy a lavcresample audió szűrő beillesztődik az audió rétegbe
|
resample vagy a lavcresample audió szűrő beillesztődik az audió rétegbe
|
||||||
@ -2352,6 +2360,11 @@ Ha a feliratok valamelyik
|
|||||||
\-vobsubid kapcsolót.
|
\-vobsubid kapcsolót.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-nosub
|
||||||
|
Letilt minden automatikusan kiválasztott feliratot (mint pl.\& amit a
|
||||||
|
Matroska/mkv demuxer támogat).
|
||||||
|
.
|
||||||
|
.TP
|
||||||
.B \-slang <nyelv kód[,nyelv kód,...]> (lásd még \-sid)
|
.B \-slang <nyelv kód[,nyelv kód,...]> (lásd még \-sid)
|
||||||
Felirat nyelvek priorítási listájának megadására használható.
|
Felirat nyelvek priorítási listájának megadására használható.
|
||||||
A különböző konténer formátumok különböző nyelvi kódokat használnak.
|
A különböző konténer formátumok különböző nyelvi kódokat használnak.
|
||||||
@ -2794,8 +2807,8 @@ Hasznos, ha bizonyos kapcsolatokat automatikusan akarsz fel
|
|||||||
.IPs (no)estimate
|
.IPs (no)estimate
|
||||||
Megbecsüli az audió késleltetést, a szándékok szerint folyamatosabbá
|
Megbecsüli az audió késleltetést, a szándékok szerint folyamatosabbá
|
||||||
teszi a videó lejátszást (alapértelmezett: engedélyezve).
|
teszi a videó lejátszást (alapértelmezett: engedélyezve).
|
||||||
.IPs (no)autostart (alapértelmezett: letiltva)
|
.IPs (no)autostart
|
||||||
Automatikusan elindítja a jackd-t, ha szükséges.
|
Automatikusan elindítja a jackd-t, ha szükséges (alapértelmezett: letiltva).
|
||||||
Emlékezz rá, hogy ez nem megbízható és a szerver üzenetek bepiszkítják az stdout-ot.
|
Emlékezz rá, hogy ez nem megbízható és a szerver üzenetek bepiszkítják az stdout-ot.
|
||||||
.RE
|
.RE
|
||||||
.PD 1
|
.PD 1
|
||||||
@ -3110,7 +3123,7 @@ A _WIN_LAYER hint-et haszn
|
|||||||
.IPs netwm
|
.IPs netwm
|
||||||
NETWM stílus kényszerítése.
|
NETWM stílus kényszerítése.
|
||||||
.IPs "none\ "
|
.IPs "none\ "
|
||||||
Ne állítsa be a teljes képernyős ablak rétegét.
|
Törli a módok listáját; ezután hozzáadhatsz módokat az engedélyezéséhez.
|
||||||
.IPs stays_on_top
|
.IPs stays_on_top
|
||||||
A _NETWM_STATE_STAYS_ON_TOP hint-et használja, ha elérhető.
|
A _NETWM_STATE_STAYS_ON_TOP hint-et használja, ha elérhető.
|
||||||
.REss
|
.REss
|
||||||
@ -3205,6 +3218,10 @@ Az 1 n
|
|||||||
(megfelelő a (legtöbb?) LCD képernyőn).
|
(megfelelő a (legtöbb?) LCD képernyőn).
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-name (csak X11)
|
||||||
|
Beállítja az ablak osztály nevét.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
.B \-nodouble
|
.B \-nodouble
|
||||||
Letiltja a dupla bufferelést, leginkább hibakeresési célzattal.
|
Letiltja a dupla bufferelést, leginkább hibakeresési célzattal.
|
||||||
A dupla bufferelés kiküszöböli a vibrálást úgy, hogy két képet tart a memóriában
|
A dupla bufferelés kiküszöböli a vibrálást úgy, hogy két képet tart a memóriában
|
||||||
@ -3285,6 +3302,16 @@ Ha a k
|
|||||||
használd inkább a \-heartbeat\-cmd kapcsolót.
|
használd inkább a \-heartbeat\-cmd kapcsolót.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
.B \-title (lásd még \-use\-filename\-title)
|
||||||
|
Beállítja az ablak címét.
|
||||||
|
Az X11 alapú videó kimeneti vezérlők támogatják.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
|
.B \-use\-filename\-title (lásd még \-title)
|
||||||
|
Beállítja az ablak címét a média fájlnevére, ha nincs megadva a \-title opcióval.
|
||||||
|
Az X11 alapú videó kimeneti vezérlők támogatják.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
.B "\-vm \ \ \ "
|
.B "\-vm \ \ \ "
|
||||||
Megpróbál átváltani egy másik videó módba. A dga, x11, xv, sdl és
|
Megpróbál átváltani egy másik videó módba. A dga, x11, xv, sdl és
|
||||||
directx videó kimeneti meghajtók támogatják.
|
directx videó kimeneti meghajtók támogatják.
|
||||||
@ -3419,7 +3446,8 @@ lej
|
|||||||
Ha nem tudsz harver specifikus vezérlőt használni, valószínűleg ez a
|
Ha nem tudsz harver specifikus vezérlőt használni, valószínűleg ez a
|
||||||
legjobb opció.
|
legjobb opció.
|
||||||
A használt színkulcsról és annak megjelenítéséről a \-v opcióval ad
|
A használt színkulcsról és annak megjelenítéséről a \-v opcióval ad
|
||||||
információkat az MPlayer, keresd az [xv common] tag-gel kezdődő sorokat.
|
információkat az MPlayer, keresd az [xv common] tag-gel kezdődő
|
||||||
|
sorokat.
|
||||||
.PD 0
|
.PD 0
|
||||||
.RSs
|
.RSs
|
||||||
.IPs adaptor=<szám>
|
.IPs adaptor=<szám>
|
||||||
@ -3467,7 +3495,8 @@ Vez
|
|||||||
.PD 1
|
.PD 1
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
.B vdpau (\-vc ffmpeg12vdpau, ffwmv3vdpau, ffvc1vdpau vagy ffh264vdpau kapcsolókkal)
|
.B vdpau (\-vc ffmpeg12vdpau, ffwmv3vdpau, ffvc1vdpau, ffh264vdpau vagy
|
||||||
|
ffodivxvdpau kapcsolókkal)
|
||||||
Videó kimenet, ami a VDPAU-t használja a videó hardveres dekódolásához.
|
Videó kimenet, ami a VDPAU-t használja a videó hardveres dekódolásához.
|
||||||
Támogatja a szoftveresen dekódolt videó megjelenítését is.
|
Támogatja a szoftveresen dekódolt videó megjelenítését is.
|
||||||
.PD 0
|
.PD 0
|
||||||
@ -3482,17 +3511,17 @@ Kiv
|
|||||||
Minden mód > 0 figyelembe veszi a \-field\-dominance kapcsolót.
|
Minden mód > 0 figyelembe veszi a \-field\-dominance kapcsolót.
|
||||||
.RSss
|
.RSss
|
||||||
.IPs 0
|
.IPs 0
|
||||||
Nincs deinterlace.
|
nincs deinterlace
|
||||||
.IPs 1
|
.IPs 1
|
||||||
Csak az első mezőt mutatja, hasonló a \-vf field kapcsolóhoz.
|
Csak az első mezőt mutatja, hasonló a \-vf field kapcsolóhoz.
|
||||||
.IPs 2
|
.IPs 2
|
||||||
Bob deinterlace, hasonló a \-vf tfields=1 kapcsolóhoz.
|
Bob deinterlace, hasonló a \-vf tfields=1 kapcsolóhoz.
|
||||||
.IPs 3
|
.IPs 3
|
||||||
Mozgás adaptív időbeli deinterlace.
|
mozgás adaptív időbeli deinterlace
|
||||||
A/V deszinkronizációt okozhat lassú videó hardveren és/vagy nagy felbontásnál.
|
A/V deszinkronizációt okozhat lassú videó hardveren és/vagy nagy felbontásnál.
|
||||||
Ez az alapértelmezett, ha a "D" gombbal engedélyezhető a deinterlacing.
|
Ez az alapértelmezett, ha a "D" gombbal engedélyezhető a deinterlacing.
|
||||||
.IPs 4
|
.IPs 4
|
||||||
Mozgás adaptív időbeli deinterlace él-vezérelt térbeli interpolációval.
|
mozgás adaptív időbeli deinterlace él-vezérelt térbeli interpolációval
|
||||||
Gyors videó hardver kell hozzá.
|
Gyors videó hardver kell hozzá.
|
||||||
.RE
|
.RE
|
||||||
.IPs chroma\-deint
|
.IPs chroma\-deint
|
||||||
@ -3502,6 +3531,36 @@ szeretn
|
|||||||
Hasznos lassú videó memóriánál.
|
Hasznos lassú videó memóriánál.
|
||||||
.IPs pullup
|
.IPs pullup
|
||||||
Inverz telecine-t próbál alkalmazni, mozgás adaptív időbeli deinterlace kell hozzá.
|
Inverz telecine-t próbál alkalmazni, mozgás adaptív időbeli deinterlace kell hozzá.
|
||||||
|
.IPs colorspace
|
||||||
|
Kiválasztja a színteret a YUV-RGB konverzióhoz.
|
||||||
|
Általában a BT.601 használatos a szabvány felbontású (SD) tartalomhoz és
|
||||||
|
a BT.709 a nagy felbontású (HD) tartalomhoz.
|
||||||
|
A hibás színtér használata kicsit alul vagy túl telített képet és
|
||||||
|
elcsúszott színeket okoz.
|
||||||
|
.RSss
|
||||||
|
.IPs 0
|
||||||
|
Megpróbálja kitalálni a színteret a videó felbontása alapján.
|
||||||
|
A szélesség >= 1280 vagy magasság > 576 méretű videók HD-ként lesznek kezelve,
|
||||||
|
és a BT.709 színtér lesz használva.
|
||||||
|
.IPs 1
|
||||||
|
Az ITU-R BT.601 színteret használja (alapértelmezett).
|
||||||
|
.IPs 2
|
||||||
|
Az ITU-R BT.709 színteret használja.
|
||||||
|
.IPs 3
|
||||||
|
Az SMPTE-240M színteret használja.
|
||||||
|
.RE
|
||||||
|
.IPs hqscaling
|
||||||
|
.RSss
|
||||||
|
.IPs 0
|
||||||
|
Az alapértelmezett VDPAU méretezést használja (alapértelmezett).
|
||||||
|
.IPs 1\-9
|
||||||
|
Nagyon jó minőségű VDPAU méretezést használ (megfelelő hardver kell hozzá).
|
||||||
|
.RE
|
||||||
|
.IPs force\-mixer
|
||||||
|
Kényszeríti a VDPAU mixer használatát, ami implementálja a fenti opciókat (alapértelmezett).
|
||||||
|
A noforce\-mixer használatával jeleníthető meg a BGRA színtér.
|
||||||
|
(Letiltja az összes fenti opciót és a hardveres equalizert, ha
|
||||||
|
a BGRA képformátum van használva.)
|
||||||
.RE
|
.RE
|
||||||
.PD 1
|
.PD 1
|
||||||
.
|
.
|
||||||
@ -3552,7 +3611,7 @@ opci
|
|||||||
Emlékezz rá, hogy számos kisebb hibája van (\-vm/\-novm opciót a
|
Emlékezz rá, hogy számos kisebb hibája van (\-vm/\-novm opciót a
|
||||||
legtöbbször figyelmen kívül hagyja, a \-fs úgy működik, ahogy a
|
legtöbbször figyelmen kívül hagyja, a \-fs úgy működik, ahogy a
|
||||||
\-novm opciónak kellene, az ablak a bal felső sarokba kerül, ha
|
\-novm opciónak kellene, az ablak a bal felső sarokba kerül, ha
|
||||||
kikapcsolod a teljes képernyős megjelenítést, a panscan nem támogatott, ...)
|
kikapcsolod a teljes képernyős megjelenítést, a panscan nem támogatott, ...).
|
||||||
.PD 0
|
.PD 0
|
||||||
.RSs
|
.RSs
|
||||||
.IPs driver=<vezérlő>
|
.IPs driver=<vezérlő>
|
||||||
@ -3637,7 +3696,7 @@ K
|
|||||||
.IPs dive
|
.IPs dive
|
||||||
Kényszeríti a DIVE módot.
|
Kényszeríti a DIVE módot.
|
||||||
.IPs (no)t23
|
.IPs (no)t23
|
||||||
Engedélyezi/letiltja a T23 laptopokra vonatkozó kódot (alapértelmezett: letiltott).
|
Engedélyezi vagy letiltja a T23 laptopokra vonatkozó kódot (alapértelmezett: letiltott).
|
||||||
Próbáld meg engedélyezni ezt az opciót, ha a videó kártyád csak a felméretezést támogatja.
|
Próbáld meg engedélyezni ezt az opciót, ha a videó kártyád csak a felméretezést támogatja.
|
||||||
.RE
|
.RE
|
||||||
.PD 1
|
.PD 1
|
||||||
@ -5101,7 +5160,7 @@ Az
|
|||||||
.PD 1
|
.PD 1
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
.B bs2b[=opció1:opció2]
|
.B bs2b[=opció1:opció2:...]
|
||||||
Bauer térhatásúból két fülesbe történő transzformálás libbs2b-vel.
|
Bauer térhatásúból két fülesbe történő transzformálás libbs2b-vel.
|
||||||
Javítja a fülhallgatón történő hallgatást úgy, hogy a hangot hasonlóvá
|
Javítja a fülhallgatón történő hallgatást úgy, hogy a hangot hasonlóvá
|
||||||
teszi, mintha hangszóróból jönne, lehetővé téve hogy mindkét fül
|
teszi, mintha hangszóróból jönne, lehetővé téve hogy mindkét fül
|
||||||
@ -5116,14 +5175,15 @@ Megadja a v
|
|||||||
Megadja az erősítés mértékét az alacsony frekvenciákhoz 0.1*dB-ben.
|
Megadja az erősítés mértékét az alacsony frekvenciákhoz 0.1*dB-ben.
|
||||||
.IPs profile=<érték>
|
.IPs profile=<érték>
|
||||||
Több profil is elérhető a kényelmesebb használatért:
|
Több profil is elérhető a kényelmesebb használatért:
|
||||||
|
.PD 0
|
||||||
.RSs
|
.RSs
|
||||||
default: ez lesz használva, ha nincs más megadva (fcut=700, feed=45);
|
.IPs default
|
||||||
.br
|
ez lesz használva, ha nincs más megadva (fcut=700, feed=45);
|
||||||
cmoy: Chu Moy körkörös implementáció (fcut=700, feed=60);
|
.IPs "cmoy\ "
|
||||||
.br
|
Chu Moy körkörös implementáció (fcut=700, feed=60);
|
||||||
jmeier: Jan Meier körkörös implementáció (fcut=650, feed=95).
|
.IPs jmeier
|
||||||
.REss
|
Jan Meier körkörös implementáció (fcut=650, feed=95).
|
||||||
.PD 1
|
.RE
|
||||||
.RE
|
.RE
|
||||||
.sp 1
|
.sp 1
|
||||||
.RS
|
.RS
|
||||||
@ -5207,11 +5267,11 @@ csatorn
|
|||||||
.PD 0
|
.PD 0
|
||||||
.RSs
|
.RSs
|
||||||
.IPs <nch>
|
.IPs <nch>
|
||||||
kimeneti csatornák száma (1\-6)
|
kimeneti csatornák száma (1\-8)
|
||||||
.IPs "<nr>\ "
|
.IPs "<nr>\ "
|
||||||
útvonalak száma (1\-6)
|
útvonalak száma (1\-8)
|
||||||
.IPs <honnan1:hova1:honnan2:hova2:honnan3:hova3:...>
|
.IPs <honnan1:hova1:honnan2:hova2:honnan3:hova3:...>
|
||||||
Számpárok 0 és 5 között, amik megadják az egyes csatornák irányítását.
|
Számpárok 0 és 7 között, amik megadják az egyes csatornák irányítását.
|
||||||
.RE
|
.RE
|
||||||
.sp 1
|
.sp 1
|
||||||
.RS
|
.RS
|
||||||
@ -5313,7 +5373,7 @@ csatorn
|
|||||||
.PD 0
|
.PD 0
|
||||||
.RSs
|
.RSs
|
||||||
.IPs "<n>\ \ "
|
.IPs "<n>\ \ "
|
||||||
a kimeneti csatornák száma (1\-6)
|
a kimeneti csatornák száma (1\-8)
|
||||||
.IPs <Lij>
|
.IPs <Lij>
|
||||||
A i. bemeneti csatorna mekkora része lesz átmixelve az j. kimeneti csatornára (0\-1).
|
A i. bemeneti csatorna mekkora része lesz átmixelve az j. kimeneti csatornára (0\-1).
|
||||||
Az alapötlet, hogy van n számod, ami megadja, hogy mit kell csinálni az első bemeneti
|
Az alapötlet, hogy van n számod, ami megadja, hogy mit kell csinálni az első bemeneti
|
||||||
@ -5355,7 +5415,7 @@ A legjobb eredm
|
|||||||
állítani. Ez növeli a sztereó és térhatású hangélményt.
|
állítani. Ez növeli a sztereó és térhatású hangélményt.
|
||||||
.IPs "<ch>\ "
|
.IPs "<ch>\ "
|
||||||
Meghatározza a csatorna számot, amibe az al-csatorna audiót be kell tenni.
|
Meghatározza a csatorna számot, amibe az al-csatorna audiót be kell tenni.
|
||||||
A csatorna szám 0 és 5 között lehet (alapértelmezett: 5).
|
A csatorna szám 0 és 7 között lehet (alapértelmezett: 5).
|
||||||
Figyeld meg, hogy a csatornák száma automatikusan megnő <ch>-ra,
|
Figyeld meg, hogy a csatornák száma automatikusan megnő <ch>-ra,
|
||||||
ha szükséges.
|
ha szükséges.
|
||||||
.RE
|
.RE
|
||||||
@ -5380,7 +5440,7 @@ felezi a csatorn
|
|||||||
.RSs
|
.RSs
|
||||||
.IPs "<ch>\ "
|
.IPs "<ch>\ "
|
||||||
Meghatározza a csatorna számát, ahova a középső csatornát be kell illeszteni.
|
Meghatározza a csatorna számát, ahova a középső csatornát be kell illeszteni.
|
||||||
A csatorna száma 0 és 5 közötti lehet (alapértelmezett: 5).
|
A csatorna száma 0 és 7 közötti lehet (alapértelmezett: 5).
|
||||||
Figyeld meg, hogy a csatornák száma automatikusan megnő <ch>-ra,
|
Figyeld meg, hogy a csatornák száma automatikusan megnő <ch>-ra,
|
||||||
ha szükséges.
|
ha szükséges.
|
||||||
.RE
|
.RE
|
||||||
@ -7340,6 +7400,10 @@ fejezetet a r
|
|||||||
az első szabad szám felhasználásával \- egy fájl sem lesz felülírva.
|
az első szabad szám felhasználásával \- egy fájl sem lesz felülírva.
|
||||||
A szűrő nem jelent hátrányt, ha nem használod és elfogad minden
|
A szűrő nem jelent hátrányt, ha nem használod és elfogad minden
|
||||||
színteret, így nyugodtan beleírható a konfigurációs fájlba.
|
színteret, így nyugodtan beleírható a konfigurációs fájlba.
|
||||||
|
Győződj meg róla, hogy a screenshot szűrő az összes többi olyan
|
||||||
|
szűrő után van megadva, melyek hatását rögzíteni szeretnéd a képen.
|
||||||
|
Pl.\& utolsóként kell megadni, ha pontosan olyan képernyő mentést
|
||||||
|
szeretnél, mint amit a monitoron látsz.
|
||||||
.RE
|
.RE
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
@ -10350,7 +10414,6 @@ trellis (trellis kell hozz
|
|||||||
.RE
|
.RE
|
||||||
.PD 1
|
.PD 1
|
||||||
.
|
.
|
||||||
.
|
|
||||||
.TP
|
.TP
|
||||||
.B deadzone_inter=<0\-32>
|
.B deadzone_inter=<0\-32>
|
||||||
Beállítja az inter luma kvantálás holtterét a nem-rácsos kvantáláshoz
|
Beállítja az inter luma kvantálás holtterét a nem-rácsos kvantáláshoz
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<!-- synced with r28615 -->
|
<!-- synced with r29902 -->
|
||||||
<appendix id="bugreports">
|
<appendix id="bugreports">
|
||||||
<title>Hogyan jelentsd a hibákat</title>
|
<title>Hogyan jelentsd a hibákat</title>
|
||||||
|
|
||||||
|
4
Makefile
4
Makefile
@ -136,7 +136,9 @@ SRCS_COMMON-$(LIBAVCODEC_INTERNALS) += libaf/af_lavcac3enc.c \
|
|||||||
libmpcodecs/vf_qp.c \
|
libmpcodecs/vf_qp.c \
|
||||||
libmpcodecs/vf_spp.c \
|
libmpcodecs/vf_spp.c \
|
||||||
|
|
||||||
SRCS_COMMON-$(LIBAVFORMAT) += libmpdemux/demux_lavf.c
|
SRCS_COMMON-$(LIBAVFORMAT) += libmpdemux/demux_lavf.c \
|
||||||
|
stream/stream_ffmpeg.c \
|
||||||
|
|
||||||
SRCS_COMMON-$(LIBBS2B) += libaf/af_bs2b.c
|
SRCS_COMMON-$(LIBBS2B) += libaf/af_bs2b.c
|
||||||
SRCS_COMMON-$(LIBDCA) += libmpcodecs/ad_libdca.c
|
SRCS_COMMON-$(LIBDCA) += libmpcodecs/ad_libdca.c
|
||||||
SRCS_COMMON-$(LIBDV) += libmpcodecs/ad_libdv.c \
|
SRCS_COMMON-$(LIBDV) += libmpcodecs/ad_libdv.c \
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
//... Okay enough of the hw, now send the other two!
|
//... Okay enough of the hw, now send the other two!
|
||||||
//
|
//
|
||||||
// Updated by: Gabrov <gabrov@freemail.hu>
|
// Updated by: Gabrov <gabrov@freemail.hu>
|
||||||
// Sync'ed with help_mp-en.h r29549 (2009. 09. 11.)
|
// Sync'ed with help_mp-en.h r29912 (2009. 11. 16.)
|
||||||
|
|
||||||
|
|
||||||
// ========================= MPlayer help ===========================
|
// ========================= MPlayer help ===========================
|
||||||
@ -210,6 +210,7 @@ static const char help_text[]=
|
|||||||
#define MSGTR_OSDosd "OSD: %s"
|
#define MSGTR_OSDosd "OSD: %s"
|
||||||
#define MSGTR_OSDChapter "Fejezet: (%d) %s"
|
#define MSGTR_OSDChapter "Fejezet: (%d) %s"
|
||||||
#define MSGTR_OSDAngle "Szög: %d/%d"
|
#define MSGTR_OSDAngle "Szög: %d/%d"
|
||||||
|
#define MSGTR_OSDDeinterlace "Deinterlace: %s"
|
||||||
|
|
||||||
// property values
|
// property values
|
||||||
#define MSGTR_Enabled "bekapcsolva"
|
#define MSGTR_Enabled "bekapcsolva"
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// Updated by: Roberto Togni <see AUTHORS for email address>
|
// Updated by: Roberto Togni <see AUTHORS for email address>
|
||||||
// Updated by: PaulTT <see AUTHORS for email address>
|
// Updated by: PaulTT <see AUTHORS for email address>
|
||||||
|
|
||||||
// Updated to help_mp-en.h r29742
|
// Updated to help_mp-en.h r29912
|
||||||
|
|
||||||
|
|
||||||
// ========================= MPlayer help ===========================
|
// ========================= MPlayer help ===========================
|
||||||
@ -209,6 +209,7 @@ static const char help_text[]=
|
|||||||
#define MSGTR_OSDosd "OSD: %so"
|
#define MSGTR_OSDosd "OSD: %so"
|
||||||
#define MSGTR_OSDChapter "Capitolo: (%d) %s"
|
#define MSGTR_OSDChapter "Capitolo: (%d) %s"
|
||||||
#define MSGTR_OSDAngle "Angolazione: %d/%d"
|
#define MSGTR_OSDAngle "Angolazione: %d/%d"
|
||||||
|
#define MSGTR_OSDDeinterlace "Deinterlacciamento: %s"
|
||||||
|
|
||||||
// property values
|
// property values
|
||||||
#define MSGTR_Enabled "abilitat"
|
#define MSGTR_Enabled "abilitat"
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// Synced with help_mp-en.h r29549 (MSGTR_LIBVO_SUB_VIDIX_CantStartPlayback)
|
// Synced with help_mp-en.h r29912 (MSGTR_UsingNINI)
|
||||||
// Reminder of hard terms which need better/final solution later:
|
// Reminder of hard terms which need better/final solution later:
|
||||||
// (file links to be updated later if available!);
|
// (file links to be updated later if available!);
|
||||||
// NAV; section/subsection; XScreenSaver; keycolor;
|
// NAV; section/subsection; XScreenSaver; keycolor;
|
||||||
@ -208,6 +208,7 @@ static const char help_text[]=
|
|||||||
#define MSGTR_OSDosd "OSD:%s"
|
#define MSGTR_OSDosd "OSD:%s"
|
||||||
#define MSGTR_OSDChapter "章节:(%d)%s"
|
#define MSGTR_OSDChapter "章节:(%d)%s"
|
||||||
#define MSGTR_OSDAngle "视角:%d/%d"
|
#define MSGTR_OSDAngle "视角:%d/%d"
|
||||||
|
#define MSGTR_OSDDeinterlace "解除隔行扫描:%s"
|
||||||
|
|
||||||
// property values
|
// property values
|
||||||
#define MSGTR_Enabled "已启用"
|
#define MSGTR_Enabled "已启用"
|
||||||
@ -1102,189 +1103,189 @@ static const char help_text[]=
|
|||||||
#define MSGTR_VO_YUV4MPEG_ProgressiveMode "使用(默认的)逐行扫描帧模式。"
|
#define MSGTR_VO_YUV4MPEG_ProgressiveMode "使用(默认的)逐行扫描帧模式。"
|
||||||
|
|
||||||
// vobsub_vidix.c
|
// vobsub_vidix.c
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_CantStartPlayback "[VO_SUB_VIDIX] 不能开始播放: %s\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_CantStartPlayback "[VO_SUB_VIDIX] 无法开始播放:%s\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_CantStopPlayback "[VO_SUB_VIDIX] 不能停止播放: %s\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_CantStopPlayback "[VO_SUB_VIDIX] 无法停止播放:%s\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_InterleavedUvForYuv410pNotSupported "[VO_SUB_VIDIX] YUV410P 不支持交错的 UV。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_InterleavedUvForYuv410pNotSupported "[VO_SUB_VIDIX] 不支持 YUV410P 下的交错 UV 模式。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_DummyVidixdrawsliceWasCalled "[VO_SUB_VIDIX] 调用 dummy vidix_draw_slice()。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_DummyVidixdrawsliceWasCalled "[VO_SUB_VIDIX] 调用伪 vidix_draw_slice()。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_DummyVidixdrawframeWasCalled "[VO_SUB_VIDIX] 调用 dummy vidix_draw_frame()。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_DummyVidixdrawframeWasCalled "[VO_SUB_VIDIX] 调用伪 vidix_draw_frame()。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_UnsupportedFourccForThisVidixDriver "[VO_SUB_VIDIX] 此 VIDIX 驱动不支持 FourCC: %x (%s)。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_UnsupportedFourccForThisVidixDriver "[VO_SUB_VIDIX] 该 VIDIX 驱动不支持的 FourCC 代码:%x (%s)。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_VideoServerHasUnsupportedResolution "[VO_SUB_VIDIX] 视频服务器不支持分辨率 (%dx%d), 支持的分辨率: %dx%d-%dx%d。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_VideoServerHasUnsupportedResolution "[VO_SUB_VIDIX] 视频服务器使用了不支持分辨率(%dx%d),支持的分辨率:%dx%d-%dx%d。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_VideoServerHasUnsupportedColorDepth "[VO_SUB_VIDIX] VIDIX 不支持视频服务器的色深 (%d)。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_VideoServerHasUnsupportedColorDepth "[VO_SUB_VIDIX] 视频服务器使用了 VIDIX 不支持的色彩深度(%d)。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_DriverCantUpscaleImage "[VO_SUB_VIDIX] VIDIX 驱动不能放大图像 (%d%d -> %d%d)。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_DriverCantUpscaleImage "[VO_SUB_VIDIX] VIDIX 驱动无法放大图像(%d%d -> %d%d)。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_DriverCantDownscaleImage "[VO_SUB_VIDIX] VIDIX 驱动不能缩小图像 (%d%d -> %d%d)。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_DriverCantDownscaleImage "[VO_SUB_VIDIX] VIDIX 驱动无法缩小图像(%d%d -> %d%d)。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_CantConfigurePlayback "[VO_SUB_VIDIX] 不能配置回放: %s。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_CantConfigurePlayback "[VO_SUB_VIDIX] 无法配置播放功能:%s。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_YouHaveWrongVersionOfVidixLibrary "[VO_SUB_VIDIX] VIDIX 库版本错误。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_YouHaveWrongVersionOfVidixLibrary "[VO_SUB_VIDIX] VIDIX 库版本错误。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_CouldntFindWorkingVidixDriver "[VO_SUB_VIDIX] 无法找到能工作的 VIDIX 驱动。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_CouldntFindWorkingVidixDriver "[VO_SUB_VIDIX] 无法找到可用的 VIDIX 驱动。\n"
|
||||||
#define MSGTR_LIBVO_SUB_VIDIX_CouldntGetCapability "[VO_SUB_VIDIX] 无法获得兼容性: %s。\n"
|
#define MSGTR_LIBVO_SUB_VIDIX_CouldntGetCapability "[VO_SUB_VIDIX] 无法获得性能信息:%s。\n"
|
||||||
|
|
||||||
// x11_common.c
|
// x11_common.c
|
||||||
#define MSGTR_EwmhFullscreenStateFailed "\nX11: 不能发送 EWMH 全屏事件!\n"
|
#define MSGTR_EwmhFullscreenStateFailed "\nX11:无法发送 EWMH 全屏事件消息!\n"
|
||||||
#define MSGTR_CouldNotFindXScreenSaver "xscreensaver_disable: 找不到屏保(XScreenSaver)窗口。\n"
|
#define MSGTR_CouldNotFindXScreenSaver "xscreensaver_disable:无法找到 XScreenSaver 窗口。\n"
|
||||||
#define MSGTR_SelectedVideoMode "XF86VM: 已选视频模式 %dx%d (图像大小 %dx%d)。\n"
|
#define MSGTR_SelectedVideoMode "XF86VM:已选择视频模式 %dx%d(图像大小 %dx%d)。\n"
|
||||||
|
|
||||||
#define MSGTR_InsertingAfVolume "[混音器] 没有硬件混音, 插入音量过滤器。\n"
|
#define MSGTR_InsertingAfVolume "[混音器] 没有硬件混音支持,插入音量过滤器。\n"
|
||||||
#define MSGTR_NoVolume "[混音器] 没有可用的音量控制。\n"
|
#define MSGTR_NoVolume "[混音器] 没有可用的音量控制器。\n"
|
||||||
#define MSGTR_NoBalance "[混音器] 没有可用的均衡控制。\n"
|
#define MSGTR_NoBalance "[混音器] 没有可用的均衡控制器。\n"
|
||||||
|
|
||||||
// old vo drivers that have been replaced
|
// old vo drivers that have been replaced
|
||||||
#define MSGTR_VO_PGM_HasBeenReplaced "PGM 视频输出驱动已经被 -vo pnm:pgmyuv 代替。\n"
|
#define MSGTR_VO_PGM_HasBeenReplaced "PGM 视频输出驱动已换为 -vo pnm:pgmyuv。\n"
|
||||||
#define MSGTR_VO_MD5_HasBeenReplaced "MD5 视频输出驱动已经被 -vo md5sum 代替。\n"
|
#define MSGTR_VO_MD5_HasBeenReplaced "MD5 视频输出驱动已换为 -vo md5sum。\n"
|
||||||
|
|
||||||
|
|
||||||
// ======================= audio output drivers ========================
|
// ======================= audio output drivers ========================
|
||||||
|
|
||||||
// audio_out.c
|
// audio_out.c
|
||||||
#define MSGTR_AO_ALSA9_1x_Removed "音频输出: alsa9 和 alsa1x 模块已被删除, 请用 -ao alsa 代替。\n"
|
#define MSGTR_AO_ALSA9_1x_Removed "音频输出:alsa9 和 alsa1x 模块已不支持,请用 -ao alsa 代替。\n"
|
||||||
#define MSGTR_AO_TryingPreferredAudioDriver "尝试使用偏好的音频驱动‘%.*s’,选项设为‘%s’\n"
|
#define MSGTR_AO_TryingPreferredAudioDriver "尝试使用偏好的音频驱动‘%.*s’,选项设为‘%s’\n"
|
||||||
#define MSGTR_AO_NoSuchDriver "无此音频驱动‘%.*s’\n"
|
#define MSGTR_AO_NoSuchDriver "无此音频驱动‘%.*s’\n"
|
||||||
#define MSGTR_AO_FailedInit "初始化音频驱动失败‘%s’\n"
|
#define MSGTR_AO_FailedInit "初始化音频驱动失败‘%s’\n"
|
||||||
#define MSGTR_AO_TryingEveryKnown "尝试每个已知的音频驱动...\n"
|
#define MSGTR_AO_TryingEveryKnown "尝试每个已知的音频驱动...\n"
|
||||||
|
|
||||||
// ao_oss.c
|
// ao_oss.c
|
||||||
#define MSGTR_AO_OSS_CantOpenMixer "[AO OSS] 音频设置: 无法打开混音器设备 %s: %s\n"
|
#define MSGTR_AO_OSS_CantOpenMixer "[AO OSS] audio_setup:无法打开混音设备 %s:%s\n"
|
||||||
#define MSGTR_AO_OSS_ChanNotFound "[AO OSS] 音频设置: 声卡混音器没有'%s', 使用默认通道。\n"
|
#define MSGTR_AO_OSS_ChanNotFound "[AO OSS] audio_setup:声卡混音器没有‘%s’声道,使用默认声道。\n"
|
||||||
#define MSGTR_AO_OSS_CantOpenDev "[AO OSS] 音频设置: 无法打开音频设备 %s: %s\n"
|
#define MSGTR_AO_OSS_CantOpenDev "[AO OSS] audio_setup:无法打开音频设备 %s:%s\n"
|
||||||
#define MSGTR_AO_OSS_CantMakeFd "[AO OSS] 音频设置: 无法建立文件描述块: %s\n"
|
#define MSGTR_AO_OSS_CantMakeFd "[AO OSS] audio_setup:无法禁止对于文件描述符的访问:%s\n"
|
||||||
#define MSGTR_AO_OSS_CantSet "[AO OSS] 无法设定音频设备 %s 到 %s 的输出, 试着使用 %s...\n"
|
#define MSGTR_AO_OSS_CantSet "[AO OSS] 无法设定音频设备 %s 至 %s 的输出,尝试使用 %s...\n"
|
||||||
#define MSGTR_AO_OSS_CantSetChans "[AO OSS] 音频设置: 设定音频设备到 %d 通道失败。\n"
|
#define MSGTR_AO_OSS_CantSetChans "[AO OSS] audio_setup:设置音频设备为 %d 声道失败。\n"
|
||||||
#define MSGTR_AO_OSS_CantUseGetospace "[AO OSS] 音频设置: 驱动不支持 SNDCTL_DSP_GETOSPACE :-(\n"
|
#define MSGTR_AO_OSS_CantUseGetospace "[AO OSS] audio_setup:驱动不支持 SNDCTL_DSP_GETOSPACE :-(\n"
|
||||||
#define MSGTR_AO_OSS_CantUseSelect "[AO OSS]\n *** 你的音频驱动不支持 select() ***\n 请用 config.h 中的 #undef HAVE_AUDIO_SELECT 重新编译 MPlayer!\n\n"
|
#define MSGTR_AO_OSS_CantUseSelect "[AO OSS]\n *** 你的音频驱动不支持 select() ***\n 需在 config.h 中配置 #undef HAVE_AUDIO_SELECT 后重新编译 MPlayer!\n\n"
|
||||||
#define MSGTR_AO_OSS_CantReopen "[AO OSS]\n致命错误: *** 无法重新打开或重设音频设备 *** %s\n"
|
#define MSGTR_AO_OSS_CantReopen "[AO OSS]\n致命错误:*** 无法重新打开或重新启动音频设备 *** %s\n"
|
||||||
#define MSGTR_AO_OSS_UnknownUnsupportedFormat "[AO OSS] 未知/不支持的 OSS 格式: %x。\n"
|
#define MSGTR_AO_OSS_UnknownUnsupportedFormat "[AO OSS] 未知/不支持的 OSS 格式:%x。\n"
|
||||||
|
|
||||||
// ao_arts.c
|
// ao_arts.c
|
||||||
#define MSGTR_AO_ARTS_CantInit "[AO ARTS] %s\n"
|
#define MSGTR_AO_ARTS_CantInit "[AO ARTS] %s\n"
|
||||||
#define MSGTR_AO_ARTS_ServerConnect "[AO ARTS] 已连接到声音设备。\n"
|
#define MSGTR_AO_ARTS_ServerConnect "[AO ARTS] 已连接到声音服务设备。\n"
|
||||||
#define MSGTR_AO_ARTS_CantOpenStream "[AO ARTS] 无法打开一个流。\n"
|
#define MSGTR_AO_ARTS_CantOpenStream "[AO ARTS] 无法打开音频流。\n"
|
||||||
#define MSGTR_AO_ARTS_StreamOpen "[AO ARTS] 流已经打开。\n"
|
#define MSGTR_AO_ARTS_StreamOpen "[AO ARTS] 音频流已打开。\n"
|
||||||
#define MSGTR_AO_ARTS_BufferSize "[AO ARTS] 缓冲大小: %d\n"
|
#define MSGTR_AO_ARTS_BufferSize "[AO ARTS] 缓冲大小:%d\n"
|
||||||
|
|
||||||
// ao_dxr2.c
|
// ao_dxr2.c
|
||||||
#define MSGTR_AO_DXR2_SetVolFailed "[AO DXR2] 设定音量为 %d 失败。\n"
|
#define MSGTR_AO_DXR2_SetVolFailed "[AO DXR2] 设定音量为 %d 失败。\n"
|
||||||
#define MSGTR_AO_DXR2_UnsupSamplerate "[AO DXR2] 不支持 %d Hz, 试试重采样。\n"
|
#define MSGTR_AO_DXR2_UnsupSamplerate "[AO DXR2] 不支持 %d Hz,尝试重新采样音频。\n"
|
||||||
|
|
||||||
// ao_esd.c
|
// ao_esd.c
|
||||||
#define MSGTR_AO_ESD_CantOpenSound "[AO ESD] esd_open_sound 失败: %s\n"
|
#define MSGTR_AO_ESD_CantOpenSound "[AO ESD] esd_open_sound 失败:%s\n"
|
||||||
#define MSGTR_AO_ESD_LatencyInfo "[AO ESD] 延迟: [服务器: %0.2fs, 网络: %0.2fs] (调整 %0.2fs)\n"
|
#define MSGTR_AO_ESD_LatencyInfo "[AO ESD] 延迟:[服务器:%0.2fs,网络:%0.2fs](调整值 %0.2fs)\n"
|
||||||
#define MSGTR_AO_ESD_CantOpenPBStream "[AO ESD] 打开 ESD 播放流失败: %s\n"
|
#define MSGTR_AO_ESD_CantOpenPBStream "[AO ESD] 打开 ESD 播放流失败:%s\n"
|
||||||
|
|
||||||
// ao_mpegpes.c
|
// ao_mpegpes.c
|
||||||
#define MSGTR_AO_MPEGPES_CantSetMixer "[AO MPEGPES] DVB 音频设置混音器错误: %s。\n"
|
#define MSGTR_AO_MPEGPES_CantSetMixer "[AO MPEGPES] DVB 音频组件混音器错误:%s。\n"
|
||||||
#define MSGTR_AO_MPEGPES_UnsupSamplerate "[AO MPEGPES] 不支持 %d Hz, 试试重采样。\n"
|
#define MSGTR_AO_MPEGPES_UnsupSamplerate "[AO MPEGPES] 不支持 %d Hz,尝试重新采样音频。\n"
|
||||||
|
|
||||||
// ao_pcm.c
|
// ao_pcm.c
|
||||||
#define MSGTR_AO_PCM_FileInfo "[AO PCM] 文件: %s (%s)\nPCM: 采样率: %iHz 通道: %s 格式 %s\n"
|
#define MSGTR_AO_PCM_FileInfo "[AO PCM] 文件: %s (%s)\nPCM:采样率:%iHz 声道:%s 格式 %s\n"
|
||||||
#define MSGTR_AO_PCM_HintInfo "[AO PCM] 信息: 用 -vc null -vo null 可以更快速的转储\n[AO PCM] 信息: 如果要写 WAVE 文件, 使用 -ao pcm:waveheader (默认)。\n"
|
#define MSGTR_AO_PCM_HintInfo "[AO PCM] 信息:使用 -vc null -vo null -ao pcm:fast 可以更快地转储数据\n[AO PCM] 信息:要写入 WAVE 文件,使用 -ao pcm:waveheader(默认模式)。\n"
|
||||||
#define MSGTR_AO_PCM_CantOpenOutputFile "[AO PCM] 打开写 %s 失败!\n"
|
#define MSGTR_AO_PCM_CantOpenOutputFile "[AO PCM] 打开并写入 %s 失败!\n"
|
||||||
|
|
||||||
// ao_sdl.c
|
// ao_sdl.c
|
||||||
#define MSGTR_AO_SDL_INFO "[AO SDL] 采样率: %iHz 通道: %s 格式 %s\n"
|
#define MSGTR_AO_SDL_INFO "[AO SDL] 采样率:%iHz 声道:%s 格式 %s\n"
|
||||||
#define MSGTR_AO_SDL_DriverInfo "[AO SDL] 使用 %s 音频驱动。\n"
|
#define MSGTR_AO_SDL_DriverInfo "[AO SDL] 使用 %s 音频驱动。\n"
|
||||||
#define MSGTR_AO_SDL_UnsupportedAudioFmt "[AO SDL] 不支持的音频格式: 0x%x。\n"
|
#define MSGTR_AO_SDL_UnsupportedAudioFmt "[AO SDL] 不支持的音频格式:0x%x。\n"
|
||||||
#define MSGTR_AO_SDL_CantInit "[AO SDL] SDL 音频初始化失败: %s\n"
|
#define MSGTR_AO_SDL_CantInit "[AO SDL] SDL 音频初始化失败:%s\n"
|
||||||
#define MSGTR_AO_SDL_CantOpenAudio "[AO SDL] 无法打开音频: %s\n"
|
#define MSGTR_AO_SDL_CantOpenAudio "[AO SDL] 无法打开音频:%s\n"
|
||||||
|
|
||||||
// ao_sgi.c
|
// ao_sgi.c
|
||||||
#define MSGTR_AO_SGI_INFO "[AO SGI] 控制。\n"
|
#define MSGTR_AO_SGI_INFO "[AO SGI] 控制。\n"
|
||||||
#define MSGTR_AO_SGI_InitInfo "[AO SGI] 初始: 采样率: %iHz 通道: %s 格式 %s\n"
|
#define MSGTR_AO_SGI_InitInfo "[AO SGI] 初始化:采样率:%iHz 声道:%s 格式 %s\n"
|
||||||
#define MSGTR_AO_SGI_InvalidDevice "[AO SGI] 播放: 无效的设备。\n"
|
#define MSGTR_AO_SGI_InvalidDevice "[AO SGI] 播放:无效的设备。\n"
|
||||||
#define MSGTR_AO_SGI_CantSetParms_Samplerate "[AO SGI] 初始: 设定参数失败: %s\n不能设定需要的采样率。\n"
|
#define MSGTR_AO_SGI_CantSetParms_Samplerate "[AO SGI] 初始化:setparams 失败:%s\n无法设置为所需的采样率。\n"
|
||||||
#define MSGTR_AO_SGI_CantSetAlRate "[AO SGI] 初始: AL_RATE 在给定的源上不能用。\n"
|
#define MSGTR_AO_SGI_CantSetAlRate "[AO SGI] 初始化:AL_RATE 不适用于给定的音频来源。\n"
|
||||||
#define MSGTR_AO_SGI_CantGetParms "[AO SGI] 初始: 获取参数失败: %s\n"
|
#define MSGTR_AO_SGI_CantGetParms "[AO SGI] 初始化:getparams 失败:%s\n"
|
||||||
#define MSGTR_AO_SGI_SampleRateInfo "[AO SGI] 初始: 当前的采样率为 %lf (需要的速率是 %lf)\n"
|
#define MSGTR_AO_SGI_SampleRateInfo "[AO SGI] 初始化:当前的采样率为 %lf(所需的速率为 %lf)\n"
|
||||||
#define MSGTR_AO_SGI_InitConfigError "[AO SGI] 初始: %s\n"
|
#define MSGTR_AO_SGI_InitConfigError "[AO SGI] 初始化:%s\n"
|
||||||
#define MSGTR_AO_SGI_InitOpenAudioFailed "[AO SGI] 初始: 无法打开音频通道: %s\n"
|
#define MSGTR_AO_SGI_InitOpenAudioFailed "[AO SGI] 初始化:无法打开音频声道:%s\n"
|
||||||
#define MSGTR_AO_SGI_Uninit "[AO SGI] 反初始: ...\n"
|
#define MSGTR_AO_SGI_Uninit "[AO SGI] 解除初始化:...\n"
|
||||||
#define MSGTR_AO_SGI_Reset "[AO SGI] 重置: ...\n"
|
#define MSGTR_AO_SGI_Reset "[AO SGI] 重启:...\n"
|
||||||
#define MSGTR_AO_SGI_PauseInfo "[AO SGI] 音频暂停: ...\n"
|
#define MSGTR_AO_SGI_PauseInfo "[AO SGI] audio_pause:...\n"
|
||||||
#define MSGTR_AO_SGI_ResumeInfo "[AO SGI] 音频恢复: ...\n"
|
#define MSGTR_AO_SGI_ResumeInfo "[AO SGI] audio_resume:...\n"
|
||||||
|
|
||||||
// ao_sun.c
|
// ao_sun.c
|
||||||
#define MSGTR_AO_SUN_RtscSetinfoFailed "[AO SUN] rtsc: SETINFO 失败。\n"
|
#define MSGTR_AO_SUN_RtscSetinfoFailed "[AO SUN] rtsc:SETINFO 失败。\n"
|
||||||
#define MSGTR_AO_SUN_RtscWriteFailed "[AO SUN] rtsc: 写失败。\n"
|
#define MSGTR_AO_SUN_RtscWriteFailed "[AO SUN] rtsc:写入失败。\n"
|
||||||
#define MSGTR_AO_SUN_CantOpenAudioDev "[AO SUN] 无法打开音频设备 %s, %s -> 没声音。\n"
|
#define MSGTR_AO_SUN_CantOpenAudioDev "[AO SUN] 无法打开音频设备 %s,%s -> nosound。\n"
|
||||||
#define MSGTR_AO_SUN_UnsupSampleRate "[AO SUN] 音频设置: 你的声卡不支持 %d 通道, %s, %d Hz 采样率。\n"
|
#define MSGTR_AO_SUN_UnsupSampleRate "[AO SUN] 音频设置:你的声卡不支持 %d 声道,%s,%d Hz 采样率。\n"
|
||||||
#define MSGTR_AO_SUN_CantUseSelect "[AO SUN]\n *** 你的音频驱动不支持 select() ***\n用 config.h 中的 #undef HAVE_AUDIO_SELECT 重新编译 MPlayer!\n\n"
|
#define MSGTR_AO_SUN_CantUseSelect "[AO SUN]\n *** 你的音频驱动不支持 select() ***\n需要在 config.h 中设置 #undef HAVE_AUDIO_SELECT 并重新编译 MPlayer!\n\n"
|
||||||
#define MSGTR_AO_SUN_CantReopenReset "[AO SUN]\n致命错误: *** 无法重新打开或重设音频设备 (%s) ***\n"
|
#define MSGTR_AO_SUN_CantReopenReset "[AO SUN]\n致命错误:*** 无法重新打开/重启音频设备(%s)***\n"
|
||||||
|
|
||||||
// ao_alsa5.c
|
// ao_alsa5.c
|
||||||
#define MSGTR_AO_ALSA5_InitInfo "[AO ALSA5] alsa-初始: 请求的格式: %d Hz, %d 通道, %s\n"
|
#define MSGTR_AO_ALSA5_InitInfo "[AO ALSA5] alsa-init:所请求格式:%d Hz,%d 声道,%s\n"
|
||||||
#define MSGTR_AO_ALSA5_SoundCardNotFound "[AO ALSA5] alsa-初始: 找不到声卡。\n"
|
#define MSGTR_AO_ALSA5_SoundCardNotFound "[AO ALSA5] alsa-init:未找到声卡。\n"
|
||||||
#define MSGTR_AO_ALSA5_InvalidFormatReq "[AO ALSA5] alsa-初始: 请求无效的格式 (%s) - 停用输出。\n"
|
#define MSGTR_AO_ALSA5_InvalidFormatReq "[AO ALSA5] alsa-init:所请求格式无效(%s)- 禁用音频输出。\n"
|
||||||
#define MSGTR_AO_ALSA5_PlayBackError "[AO ALSA5] alsa-初始: 回放打开错误: %s\n"
|
#define MSGTR_AO_ALSA5_PlayBackError "[AO ALSA5] alsa-init:打开播放模式错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_PcmInfoError "[AO ALSA5] alsa-初始: PCM 信息错误: %s\n"
|
#define MSGTR_AO_ALSA5_PcmInfoError "[AO ALSA5] alsa-init:PCM 信息错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_SoundcardsFound "[AO ALSA5] alsa-初始: 找到 %d 声卡, 使用: %s\n"
|
#define MSGTR_AO_ALSA5_SoundcardsFound "[AO ALSA5] alsa-init:找到声卡 %d,使用:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_PcmChanInfoError "[AO ALSA5] alsa-初始: PCM 通道信息错误: %s\n"
|
#define MSGTR_AO_ALSA5_PcmChanInfoError "[AO ALSA5] alsa-init:PCM 声道信息错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_CantSetParms "[AO ALSA5] alsa-初始: 设定参数错误: %s\n"
|
#define MSGTR_AO_ALSA5_CantSetParms "[AO ALSA5] alsa-init:设定参数错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_CantSetChan "[AO ALSA5] alsa-初始: 设定通道错误: %s\n"
|
#define MSGTR_AO_ALSA5_CantSetChan "[AO ALSA5] alsa-init:设定声道错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_ChanPrepareError "[AO ALSA5] alsa-初始: 通道准备错误: %s\n"
|
#define MSGTR_AO_ALSA5_ChanPrepareError "[AO ALSA5] alsa-init:准备声道错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_DrainError "[AO ALSA5] alsa-反初始: 回放排出(drain)错误: %s\n"
|
#define MSGTR_AO_ALSA5_DrainError "[AO ALSA5] alsa-uninit:播放数据清空错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_FlushError "[AO ALSA5] alsa-反初始: 回放清空(flush)错误: %s\n"
|
#define MSGTR_AO_ALSA5_FlushError "[AO ALSA5] alsa-uninit:播放数据刷新错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_PcmCloseError "[AO ALSA5] alsa-反初始: PCM 关闭错误: %s\n"
|
#define MSGTR_AO_ALSA5_PcmCloseError "[AO ALSA5] alsa-uninit:PCM 关闭错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_ResetDrainError "[AO ALSA5] alsa-重置: 回放排出(drain)错误: %s\n"
|
#define MSGTR_AO_ALSA5_ResetDrainError "[AO ALSA5] alsa-reset:播放数据清空错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_ResetFlushError "[AO ALSA5] alsa-重置: 回放清空(flush)错误: %s\n"
|
#define MSGTR_AO_ALSA5_ResetFlushError "[AO ALSA5] alsa-reset:播放数据刷新错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_ResetChanPrepareError "[AO ALSA5] alsa-重置: 通道准备错误: %s\n"
|
#define MSGTR_AO_ALSA5_ResetChanPrepareError "[AO ALSA5] alsa-reset:准备声道错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_PauseDrainError "[AO ALSA5] alsa-暂停: 回放排出(drain)错误: %s\n"
|
#define MSGTR_AO_ALSA5_PauseDrainError "[AO ALSA5] alsa-pause:播放数据刷新错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_PauseFlushError "[AO ALSA5] alsa-暂停: 回放清空(flush)错误: %s\n"
|
#define MSGTR_AO_ALSA5_PauseFlushError "[AO ALSA5] alsa-pause:播放数据刷新错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_ResumePrepareError "[AO ALSA5] alsa-恢复: 通道准备错误: %s\n"
|
#define MSGTR_AO_ALSA5_ResumePrepareError "[AO ALSA5] alsa-resume:准备声道错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_Underrun "[AO ALSA5] alsa-play: alsa 未运行, 重新启动流。\n"
|
#define MSGTR_AO_ALSA5_Underrun "[AO ALSA5] alsa-play:alsa 输出滞后,重新设置音频流。\n"
|
||||||
#define MSGTR_AO_ALSA5_PlaybackPrepareError "[AO ALSA5] alsa-播放: 回放准备错误: %s\n"
|
#define MSGTR_AO_ALSA5_PlaybackPrepareError "[AO ALSA5] alsa-play:准备播放错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA5_WriteErrorAfterReset "[AO ALSA5] alsa-播放: 重启后写错误: %s - 放弃。\n"
|
#define MSGTR_AO_ALSA5_WriteErrorAfterReset "[AO ALSA5] alsa-play:重启后写入错误:%s - 放弃。\n"
|
||||||
#define MSGTR_AO_ALSA5_OutPutError "[AO ALSA5] alsa-播放: 输出错误: %s\n"
|
#define MSGTR_AO_ALSA5_OutPutError "[AO ALSA5] alsa-play:输出错误:%s\n"
|
||||||
|
|
||||||
// ao_alsa.c
|
// ao_alsa.c
|
||||||
#define MSGTR_AO_ALSA_InvalidMixerIndexDefaultingToZero "[AO_ALSA] 无效的混音索引。取默认值 0。\n"
|
#define MSGTR_AO_ALSA_InvalidMixerIndexDefaultingToZero "[AO_ALSA] 无效的混音器索引号。取默认值 0。\n"
|
||||||
#define MSGTR_AO_ALSA_MixerOpenError "[AO_ALSA] 混音打开错误: %s\n"
|
#define MSGTR_AO_ALSA_MixerOpenError "[AO_ALSA] 打开混音器错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_MixerAttachError "[AO_ALSA] 混音接上 %s 错误: %s\n"
|
#define MSGTR_AO_ALSA_MixerAttachError "[AO_ALSA] 混音器接入 %s 错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_MixerRegisterError "[AO_ALSA] 混音注册错误: %s\n"
|
#define MSGTR_AO_ALSA_MixerRegisterError "[AO_ALSA] 混音器登记错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_MixerLoadError "[AO_ALSA] 混音装载错误: %s\n"
|
#define MSGTR_AO_ALSA_MixerLoadError "[AO_ALSA] 混音器装载错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToFindSimpleControl "[AO_ALSA] 无法找到控制 '%s',%i。\n"
|
#define MSGTR_AO_ALSA_UnableToFindSimpleControl "[AO_ALSA] 无法找到简单控制器‘%s’,%i。\n"
|
||||||
#define MSGTR_AO_ALSA_ErrorSettingLeftChannel "[AO_ALSA] 错误设置左声道, %s\n"
|
#define MSGTR_AO_ALSA_ErrorSettingLeftChannel "[AO_ALSA] 设置左声道错误,%s\n"
|
||||||
#define MSGTR_AO_ALSA_ErrorSettingRightChannel "[AO_ALSA] 错误设置右声道, %s\n"
|
#define MSGTR_AO_ALSA_ErrorSettingRightChannel "[AO_ALSA] 设置右声道错误,%s\n"
|
||||||
#define MSGTR_AO_ALSA_CommandlineHelp "\n[AO_ALSA] -ao alsa 命令行帮助:\n"\
|
#define MSGTR_AO_ALSA_CommandlineHelp "\n[AO_ALSA] -ao alsa 命令行帮助:\n"\
|
||||||
"[AO_ALSA] 示例: mplayer -ao alsa:device=hw=0.3\n"\
|
"[AO_ALSA] 示例:mplayer -ao alsa:device=hw=0.3\n"\
|
||||||
"[AO_ALSA] 设置第一卡第四硬件设备。\n\n"\
|
"[AO_ALSA] 设置第一块声卡为第四硬件设备。\n\n"\
|
||||||
"[AO_ALSA] 选项:\n"\
|
"[AO_ALSA] 选项:\n"\
|
||||||
"[AO_ALSA] noblock\n"\
|
"[AO_ALSA] noblock\n"\
|
||||||
"[AO_ALSA] 以 non-blocking 模式打开设备。\n"\
|
"[AO_ALSA] 以非阻塞模式打开设备。\n"\
|
||||||
"[AO_ALSA] device=<device-name>\n"\
|
"[AO_ALSA] device=<设备名>\n"\
|
||||||
"[AO_ALSA] 设置设备 (change , to . and : to =)\n"
|
"[AO_ALSA] 设置设备(将字符中的‘,’替换为‘.’而‘:’替换为‘=’)\n"
|
||||||
#define MSGTR_AO_ALSA_ChannelsNotSupported "[AO_ALSA] %d 声道不被支持。\n"
|
#define MSGTR_AO_ALSA_ChannelsNotSupported "[AO_ALSA] 不支持 %d 声道。\n"
|
||||||
#define MSGTR_AO_ALSA_OpenInNonblockModeFailed "[AO_ALSA] 打开 nonblock-模式 失败, 试着打开 block-模式。\n"
|
#define MSGTR_AO_ALSA_OpenInNonblockModeFailed "[AO_ALSA] 以非阻塞模式打开失败,尝试以阻塞模式打开。\n"
|
||||||
#define MSGTR_AO_ALSA_PlaybackOpenError "[AO_ALSA] 回放打开错误: %s\n"
|
#define MSGTR_AO_ALSA_PlaybackOpenError "[AO_ALSA] 打开播放模式错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_ErrorSetBlockMode "[AL_ALSA] 错误设置 block-模式 %s。\n"
|
#define MSGTR_AO_ALSA_ErrorSetBlockMode "[AL_ALSA] 设置阻塞模式 %s 错误。\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToGetInitialParameters "[AO_ALSA] 无法得到初始参数: %s\n"
|
#define MSGTR_AO_ALSA_UnableToGetInitialParameters "[AO_ALSA] 无法得到初始参数:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetAccessType "[AO_ALSA] 无法设置访问类型: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetAccessType "[AO_ALSA] 无法设置访问类型:%s\n"
|
||||||
#define MSGTR_AO_ALSA_FormatNotSupportedByHardware "[AO_ALSA] 格式 %s 不被硬件支持, 试试默认的。\n"
|
#define MSGTR_AO_ALSA_FormatNotSupportedByHardware "[AO_ALSA] 硬件不支持的格式 %s,尝试默认格式。\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetFormat "[AO_ALSA] 无法设置格式: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetFormat "[AO_ALSA] 无法设置格式:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetChannels "[AO_ALSA] 无法设置声道: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetChannels "[AO_ALSA] 无法设置声道:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToDisableResampling "[AO_ALSA] 无法停用再抽样: %s\n"
|
#define MSGTR_AO_ALSA_UnableToDisableResampling "[AO_ALSA] 无法禁用重抽样模式:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetSamplerate2 "[AO_ALSA] 无法设置 采样率-2: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetSamplerate2 "[AO_ALSA] 无法设置采样率-2:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[AO_ALSA] 无法设置缓冲时间约: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[AO_ALSA] 无法设置缓冲时间为约:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToGetPeriodSize "[AO ALSA] 无法取得区段大小: %s\n"
|
#define MSGTR_AO_ALSA_UnableToGetPeriodSize "[AO ALSA] 无法获得周期大小:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetPeriods "[AO_ALSA] 无法设置区段: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetPeriods "[AO_ALSA] 无法设置周期:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetHwParameters "[AO_ALSA] 无法设置 hw-parameters: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetHwParameters "[AO_ALSA] 无法设置 hw-parameters:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToGetBufferSize "[AO_ALSA] 无法取得缓冲大小: %s\n"
|
#define MSGTR_AO_ALSA_UnableToGetBufferSize "[AO_ALSA] 无法获得缓冲大小:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToGetSwParameters "[AO_ALSA] 无法取得 sw-parameters: %s\n"
|
#define MSGTR_AO_ALSA_UnableToGetSwParameters "[AO_ALSA] 无法获得 sw-parameters:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetSwParameters "[AO_ALSA] 无法设置 sw-parameters: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetSwParameters "[AO_ALSA] 无法设置 sw-parameters:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToGetBoundary "[AO_ALSA] 无法取得边界: %s\n"
|
#define MSGTR_AO_ALSA_UnableToGetBoundary "[AO_ALSA] 无法获得边界信息:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetStartThreshold "[AO_ALSA] 无法设置开始点: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetStartThreshold "[AO_ALSA] 无法设置开始阈值:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetStopThreshold "[AO_ALSA] 无法设置停止点: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetStopThreshold "[AO_ALSA] 无法设置停止阈值:%s\n"
|
||||||
#define MSGTR_AO_ALSA_UnableToSetSilenceSize "[AO_ALSA] 无法设置安静大小: %s\n"
|
#define MSGTR_AO_ALSA_UnableToSetSilenceSize "[AO_ALSA] 无法设置静音大小:%s\n"
|
||||||
#define MSGTR_AO_ALSA_PcmCloseError "[AO_ALSA] pcm 关闭错误: %s\n"
|
#define MSGTR_AO_ALSA_PcmCloseError "[AO_ALSA] pcm 关闭错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_NoHandlerDefined "[AO_ALSA] 没定义处理器!\n"
|
#define MSGTR_AO_ALSA_NoHandlerDefined "[AO_ALSA] 未定义处理设备!\n"
|
||||||
#define MSGTR_AO_ALSA_PcmPrepareError "[AO_ALSA] pcm 准备错误: %s\n"
|
#define MSGTR_AO_ALSA_PcmPrepareError "[AO_ALSA] pcm 准备错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_PcmPauseError "[AO_ALSA] pcm 暂停错误: %s\n"
|
#define MSGTR_AO_ALSA_PcmPauseError "[AO_ALSA] pcm 暂停错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_PcmDropError "[AO_ALSA] pcm 丢弃错误: %s\n"
|
#define MSGTR_AO_ALSA_PcmDropError "[AO_ALSA] pcm 丢弃错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_PcmResumeError "[AO_ALSA] pcm 恢复错误: %s\n"
|
#define MSGTR_AO_ALSA_PcmResumeError "[AO_ALSA] pcm 继续错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_DeviceConfigurationError "[AO_ALSA] 设备配置错误。"
|
#define MSGTR_AO_ALSA_DeviceConfigurationError "[AO_ALSA] 设备配置错误。"
|
||||||
#define MSGTR_AO_ALSA_PcmInSuspendModeTryingResume "[AO_ALSA] Pcm 在挂机模式, 试着恢复。\n"
|
#define MSGTR_AO_ALSA_PcmInSuspendModeTryingResume "[AO_ALSA] Pcm 处于挂起模式,尝试继续播放。\n"
|
||||||
#define MSGTR_AO_ALSA_WriteError "[AO_ALSA] 写错误: %s\n"
|
#define MSGTR_AO_ALSA_WriteError "[AO_ALSA] 写入错误:%s\n"
|
||||||
#define MSGTR_AO_ALSA_TryingToResetSoundcard "[AO_ALSA] 试着重置声卡。\n"
|
#define MSGTR_AO_ALSA_TryingToResetSoundcard "[AO_ALSA] 试着重启声卡。\n"
|
||||||
#define MSGTR_AO_ALSA_CannotGetPcmStatus "[AO_ALSA] 不能取得 pcm 状态: %s\n"
|
#define MSGTR_AO_ALSA_CannotGetPcmStatus "[AO_ALSA] 无法获得 pcm 状态:%s\n"
|
||||||
|
|
||||||
// ao_plugin.c
|
// ao_plugin.c
|
||||||
#define MSGTR_AO_PLUGIN_InvalidPlugin "[AO PLUGIN] 无效插件: %s\n"
|
#define MSGTR_AO_PLUGIN_InvalidPlugin "[AO PLUGIN] 无效插件:%s\n"
|
||||||
|
|
||||||
// ======================= audio filters ================================
|
// ======================= audio filters ================================
|
||||||
|
|
||||||
@ -1293,19 +1294,19 @@ static const char help_text[]=
|
|||||||
|
|
||||||
// af_ladspa.c
|
// af_ladspa.c
|
||||||
#define MSGTR_AF_LADSPA_AvailableLabels "可用的标签"
|
#define MSGTR_AF_LADSPA_AvailableLabels "可用的标签"
|
||||||
#define MSGTR_AF_LADSPA_WarnNoInputs "警告! 此 LADSPA 插件没有音频输入。\n 以后的音频信号将会丢失。"
|
#define MSGTR_AF_LADSPA_WarnNoInputs "警告!该 LADSPA 插件没有音频入口。\n 输入的音频信号将会丢失。"
|
||||||
#define MSGTR_AF_LADSPA_ErrMultiChannel "现在还不支持多通道(>2)插件。\n 只能使用单声道或立体声道插件。"
|
#define MSGTR_AF_LADSPA_ErrMultiChannel "尚未支持多声道(>2)插件。\n 只使用单声道或立体声插件。"
|
||||||
#define MSGTR_AF_LADSPA_ErrNoOutputs "此 LADSPA 插件没有音频输出。"
|
#define MSGTR_AF_LADSPA_ErrNoOutputs "该 LADSPA 插件没有音频出口。"
|
||||||
#define MSGTR_AF_LADSPA_ErrInOutDiff "LADSPA 插件的音频输入和音频输出的数目不相等。"
|
#define MSGTR_AF_LADSPA_ErrInOutDiff "LADSPA 插件的音频入口和音频出口的数目不相等。"
|
||||||
#define MSGTR_AF_LADSPA_ErrFailedToLoad "装载失败"
|
#define MSGTR_AF_LADSPA_ErrFailedToLoad "装载失败"
|
||||||
#define MSGTR_AF_LADSPA_ErrNoDescriptor "在指定的库文件里找不到 ladspa_descriptor() 函数。"
|
#define MSGTR_AF_LADSPA_ErrNoDescriptor "指定的库文件中未能找到 ladspa_descriptor() 函数。"
|
||||||
#define MSGTR_AF_LADSPA_ErrLabelNotFound "在插件库里找不到标签。"
|
#define MSGTR_AF_LADSPA_ErrLabelNotFound "未能在插件库里找到标签。"
|
||||||
#define MSGTR_AF_LADSPA_ErrNoSuboptions "没有指定子选项标签。"
|
#define MSGTR_AF_LADSPA_ErrNoSuboptions "未指定子选项。"
|
||||||
#define MSGTR_AF_LADSPA_ErrNoLibFile "没有指定库文件。"
|
#define MSGTR_AF_LADSPA_ErrNoLibFile "未指定库文件。"
|
||||||
#define MSGTR_AF_LADSPA_ErrNoLabel "没有指定过滤器标签。"
|
#define MSGTR_AF_LADSPA_ErrNoLabel "未指定过滤器标签。"
|
||||||
#define MSGTR_AF_LADSPA_ErrNotEnoughControls "命令行指定的控制项不够。"
|
#define MSGTR_AF_LADSPA_ErrNotEnoughControls "命令行中指定的控件不足。"
|
||||||
#define MSGTR_AF_LADSPA_ErrControlBelow "%s: 输入控制 #%d 低于下限 %0.4f。\n"
|
#define MSGTR_AF_LADSPA_ErrControlBelow "%s:输入控件 #%d 低于下限 %0.4f。\n"
|
||||||
#define MSGTR_AF_LADSPA_ErrControlAbove "%s: 输入控制 #%d 高于上限 %0.4f。\n"
|
#define MSGTR_AF_LADSPA_ErrControlAbove "%s:输入控件 #%d 高于上限 %0.4f。\n"
|
||||||
|
|
||||||
// format.c
|
// format.c
|
||||||
#define MSGTR_AF_FORMAT_UnknownFormat "未知格式"
|
#define MSGTR_AF_FORMAT_UnknownFormat "未知格式"
|
||||||
@ -1315,11 +1316,11 @@ static const char help_text[]=
|
|||||||
|
|
||||||
// joystick.c
|
// joystick.c
|
||||||
#define MSGTR_INPUT_JOYSTICK_Opening "打开操纵杆设备 %s\n"
|
#define MSGTR_INPUT_JOYSTICK_Opening "打开操纵杆设备 %s\n"
|
||||||
#define MSGTR_INPUT_JOYSTICK_CantOpen "打不开操纵杆设备 %s: %s\n"
|
#define MSGTR_INPUT_JOYSTICK_CantOpen "无法打开操纵杆设备 %s:%s\n"
|
||||||
#define MSGTR_INPUT_JOYSTICK_ErrReading "读操纵杆设备时发生错误: %s\n"
|
#define MSGTR_INPUT_JOYSTICK_ErrReading "读取操纵杆设备时出错:%s\n"
|
||||||
#define MSGTR_INPUT_JOYSTICK_LoosingBytes "操纵杆: 丢失了 %d 字节的数据\n"
|
#define MSGTR_INPUT_JOYSTICK_LoosingBytes "操纵杆:丢失了 %d 字节的数据\n"
|
||||||
#define MSGTR_INPUT_JOYSTICK_WarnLostSync "操纵杆: 警告初始事件, 失去了和驱动的同步。\n"
|
#define MSGTR_INPUT_JOYSTICK_WarnLostSync "操纵杆:初始化警告事件,与驱动程序失去同步。\n"
|
||||||
#define MSGTR_INPUT_JOYSTICK_WarnUnknownEvent "操作杆警告未知事件类型%d\n"
|
#define MSGTR_INPUT_JOYSTICK_WarnUnknownEvent "操作杆未知警告事件类型 %d\n"
|
||||||
|
|
||||||
// appleir.c
|
// appleir.c
|
||||||
#define MSGTR_INPUT_APPLE_IR_Init "在设备 %s 上初始化 Apple IR\n"
|
#define MSGTR_INPUT_APPLE_IR_Init "在设备 %s 上初始化 Apple IR\n"
|
||||||
@ -1327,83 +1328,83 @@ static const char help_text[]=
|
|||||||
#define MSGTR_INPUT_APPLE_IR_CantOpen "无法打开 Apple IR 设备:%s\n"
|
#define MSGTR_INPUT_APPLE_IR_CantOpen "无法打开 Apple IR 设备:%s\n"
|
||||||
|
|
||||||
// input.c
|
// input.c
|
||||||
#define MSGTR_INPUT_INPUT_ErrCantRegister2ManyCmdFds "命令文件描述符太多, 不能注册文件描述符 %d。\n"
|
#define MSGTR_INPUT_INPUT_ErrCantRegister2ManyCmdFds "命令文件描述符太多,无法注册文件描述符 %d。\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrCantRegister2ManyKeyFds "键文件描述符太多, 无法注册文件描述符 %d。\n"
|
#define MSGTR_INPUT_INPUT_ErrCantRegister2ManyKeyFds "按键文件描述符太多,无法注册文件描述符 %d。\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrArgMustBeInt "命令 %s: 参数 %d 不是整数。\n"
|
#define MSGTR_INPUT_INPUT_ErrArgMustBeInt "命令 %s:参数 %d 不是整数。\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrArgMustBeFloat "命令 %s: 参数 %d 不是浮点数。\n"
|
#define MSGTR_INPUT_INPUT_ErrArgMustBeFloat "命令 %s:参数 %d 不是浮点数。\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrUnterminatedArg "命令 %s: 参数 %d 无结束符。\n"
|
#define MSGTR_INPUT_INPUT_ErrUnterminatedArg "命令 %s:参数 %d 无结束符。\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrUnknownArg "未知参数 %d\n"
|
#define MSGTR_INPUT_INPUT_ErrUnknownArg "未知参数 %d\n"
|
||||||
#define MSGTR_INPUT_INPUT_Err2FewArgs "命令 %s 需要至少 %d 个参数, 然而只发现了 %d 个。\n"
|
#define MSGTR_INPUT_INPUT_Err2FewArgs "命令 %s 需要至少 %d 个参数,然而只发现了 %d 个。\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrReadingCmdFd "读取命令文件描述符 %d 时发生错误: %s\n"
|
#define MSGTR_INPUT_INPUT_ErrReadingCmdFd "读取命令文件描述符 %d 时发生错误:%s\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrCmdBufferFullDroppingContent "文件描述符 %d 的命令缓存已满: 正在丢失内容。\n"
|
#define MSGTR_INPUT_INPUT_ErrCmdBufferFullDroppingContent "文件描述符 %d 的命令缓冲已满:丢弃文件内容。\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrInvalidCommandForKey "绑定键 %s 的命令无效"
|
#define MSGTR_INPUT_INPUT_ErrInvalidCommandForKey "绑定按键 %s 的命令无效"
|
||||||
#define MSGTR_INPUT_INPUT_ErrSelect "选定错误: %s\n"
|
#define MSGTR_INPUT_INPUT_ErrSelect "选定错误:%s\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrOnKeyInFd "键输入文件描述符 %d 发生错误\n"
|
#define MSGTR_INPUT_INPUT_ErrOnKeyInFd "按键输入文件描述符 %d 错误\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrDeadKeyOnFd "键输入文件描述符 %d 得到死键\n"
|
#define MSGTR_INPUT_INPUT_ErrDeadKeyOnFd "按键输入文件描述符 %d 出现无效按键\n"
|
||||||
#define MSGTR_INPUT_INPUT_Err2ManyKeyDowns "同时有太多的按键事件发生\n"
|
#define MSGTR_INPUT_INPUT_Err2ManyKeyDowns "同时有过多的按键事件发生\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrOnCmdFd "命令文件描述符 %d 发生错误\n"
|
#define MSGTR_INPUT_INPUT_ErrOnCmdFd "命令文件描述符 %d 错误\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrReadingInputConfig "当读取输入配置文件 %s 时发生错误: %s\n"
|
#define MSGTR_INPUT_INPUT_ErrReadingInputConfig "读取输入配置文件 %s 时发生错误: %s\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrUnknownKey "未知键 '%s'\n"
|
#define MSGTR_INPUT_INPUT_ErrUnknownKey "未知键‘%s’\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrUnfinishedBinding "未完成的绑定 %s\n"
|
#define MSGTR_INPUT_INPUT_ErrUnfinishedBinding "未完成的绑定 %s\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrBuffer2SmallForKeyName "此键名的缓存太小: %s\n"
|
#define MSGTR_INPUT_INPUT_ErrBuffer2SmallForKeyName "此按键名的缓冲太小:%s\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrNoCmdForKey "找不到键 %s 的命令"
|
#define MSGTR_INPUT_INPUT_ErrNoCmdForKey "找不到按键 %s 的命令"
|
||||||
#define MSGTR_INPUT_INPUT_ErrBuffer2SmallForCmd "此命令的缓存太小: %s\n"
|
#define MSGTR_INPUT_INPUT_ErrBuffer2SmallForCmd "命令 %s 的缓冲过小\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrWhyHere "怎么会运行到这里了?\n"
|
#define MSGTR_INPUT_INPUT_ErrWhyHere "怎么会执行到这里了?\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrCantInitJoystick "不能初始华输入法操纵杆\n"
|
#define MSGTR_INPUT_INPUT_ErrCantInitJoystick "无法初始化输入操纵杆\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrCantStatFile "不能统计(stat) %s: %s\n"
|
#define MSGTR_INPUT_INPUT_ErrCantStatFile "无法统计 %s:%s\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrCantOpenFile "打不开 %s: %s\n"
|
#define MSGTR_INPUT_INPUT_ErrCantOpenFile "无法打开 %s:%s\n"
|
||||||
#define MSGTR_INPUT_INPUT_ErrCantInitAppleRemote "不能初始化 Apple Remote 遥控器。\n"
|
#define MSGTR_INPUT_INPUT_ErrCantInitAppleRemote "无法初始化 Apple Remote 遥控器。\n"
|
||||||
|
|
||||||
// lirc.c
|
// lirc.c
|
||||||
#define MSGTR_SettingUpLIRC "设置 LIRC 支持\n"
|
#define MSGTR_SettingUpLIRC "设置 LIRC 支持\n"
|
||||||
#define MSGTR_LIRCopenfailed "开启 LIRC 支持失败。你将无法使用你的遥控器。\n"
|
#define MSGTR_LIRCopenfailed "启用 LIRC 支持失败。将无法使用你的遥控器。\n"
|
||||||
#define MSGTR_LIRCcfgerr "读取 LIRC 配置文件 %s 失败。\n"
|
#define MSGTR_LIRCcfgerr "读取 LIRC 配置文件 %s 失败。\n"
|
||||||
|
|
||||||
|
|
||||||
// ========================== LIBMPDEMUX ===================================
|
// ========================== LIBMPDEMUX ===================================
|
||||||
|
|
||||||
// muxer.c, muxer_*.c
|
// muxer.c, muxer_*.c
|
||||||
#define MSGTR_TooManyStreams "流太多!"
|
#define MSGTR_TooManyStreams "媒体流太多!"
|
||||||
#define MSGTR_RawMuxerOnlyOneStream "Rawaudio 合路器只支持一个音频流!\n"
|
#define MSGTR_RawMuxerOnlyOneStream "原生音频流合并器只支持一个音频流!\n"
|
||||||
#define MSGTR_IgnoringVideoStream "忽略视频流!\n"
|
#define MSGTR_IgnoringVideoStream "忽略视频流!\n"
|
||||||
#define MSGTR_UnknownStreamType "警告, 未知的流类型: %d\n"
|
#define MSGTR_UnknownStreamType "警告,未知的媒体流类型:%d\n"
|
||||||
#define MSGTR_WarningLenIsntDivisible "警告, 长度不能被采样率整除!\n"
|
#define MSGTR_WarningLenIsntDivisible "警告,音频长度无法被采样率整除!\n"
|
||||||
#define MSGTR_MuxbufMallocErr "合路器帧缓冲无法分配内存!\n"
|
#define MSGTR_MuxbufMallocErr "流合并器帧缓冲无法分配内存!\n"
|
||||||
#define MSGTR_MuxbufReallocErr "合路器帧缓冲无法重新分配内存!\n"
|
#define MSGTR_MuxbufReallocErr "合路器帧缓冲无法重新分配内存!\n"
|
||||||
#define MSGTR_MuxbufSending "合路器帧缓冲正在发送 %d 帧到合路器。\n"
|
#define MSGTR_MuxbufSending "流合并器帧缓冲发送 %d 帧到流合并器。\n"
|
||||||
#define MSGTR_WritingHeader "正在写帧头...\n"
|
#define MSGTR_WritingHeader "正在写入帧头...\n"
|
||||||
#define MSGTR_WritingTrailer "正在写索引...\n"
|
#define MSGTR_WritingTrailer "正在写入索引...\n"
|
||||||
|
|
||||||
// demuxer.c, demux_*.c
|
// demuxer.c, demux_*.c
|
||||||
#define MSGTR_AudioStreamRedefined "警告: 音频流头部 %d 被重新定义。\n"
|
#define MSGTR_AudioStreamRedefined "警告:重复定义音频流头部 %d。\n"
|
||||||
#define MSGTR_VideoStreamRedefined "警告: 视频流头部 %d 被重新定义。\n"
|
#define MSGTR_VideoStreamRedefined "警告: 重复定义视频流头部 %d。\n"
|
||||||
#define MSGTR_TooManyAudioInBuffer "\n缓冲中音频包太多(%d in %d 字节)。\n"
|
#define MSGTR_TooManyAudioInBuffer "\n缓冲中音频包太多(%d 个包存在于 %d 字节中)。\n"
|
||||||
#define MSGTR_TooManyVideoInBuffer "\n缓冲中视频包太多(%d in %d 字节)。\n"
|
#define MSGTR_TooManyVideoInBuffer "\n缓冲中视频包太多(%d 个包存在于 %d 字节中)。\n"
|
||||||
#define MSGTR_MaybeNI "(也许你播放了一个非交错的流/文件或者是编解码失败)?\n" \
|
#define MSGTR_MaybeNI "可能播放了一个非交错合并的媒体流/文件,或者是编解码运行失败?\n" \
|
||||||
"对于 AVI 文件, 尝试用 -ni 选项锁定非交错模式。\n"
|
"对于 AVI 文件,可尝试用 -ni 选项强制使用非交错模式。\n"
|
||||||
#define MSGTR_WorkAroundBlockAlignHeaderBug "AVI: 绕过 CBR-MP3 nBlockAlign 头部错误!\n"
|
#define MSGTR_WorkAroundBlockAlignHeaderBug "AVI:避开 CBR-MP3 nBlockAlign 头部缺陷!\n"
|
||||||
#define MSGTR_SwitchToNi "\n检测到糟糕的交错格式的 AVI 文件 - 切换到 -ni 模式...\n"
|
#define MSGTR_SwitchToNi "\n检测到未正确交错合并的 AVI 文件 - 切换到 -ni 模式...\n"
|
||||||
#define MSGTR_InvalidAudioStreamNosound "AVI: 无效的音频流 ID: %d - 忽略 (nosound)\n"
|
#define MSGTR_InvalidAudioStreamNosound "AVI:无效的音频流 ID: %d - 忽略 (nosound)\n"
|
||||||
#define MSGTR_InvalidAudioStreamUsingDefault "AVI: 无效的视频流 ID: %d - 忽略 (使用默认值)\n"
|
#define MSGTR_InvalidAudioStreamUsingDefault "AVI: 无效的视频流 ID:%d - 忽略(使用默认值)\n"
|
||||||
#define MSGTR_ON2AviFormat "ON2 AVI 格式"
|
#define MSGTR_ON2AviFormat "ON2 AVI 格式"
|
||||||
#define MSGTR_Detected_XXX_FileFormat "检测到 %s 文件格式。\n"
|
#define MSGTR_Detected_XXX_FileFormat "检测到文件格式 %s。\n"
|
||||||
#define MSGTR_DetectedAudiofile "检测到音频文件。\n"
|
#define MSGTR_DetectedAudiofile "检测到音频文件。\n"
|
||||||
#define MSGTR_NotSystemStream "非 MPEG 系统的流格式... (可能是输送流?)\n"
|
#define MSGTR_NotSystemStream "非 MPEG 系统的媒体流格式...(可能是网络传输的媒体流?)\n"
|
||||||
#define MSGTR_InvalidMPEGES "MPEG-ES 流无效??? 请联系作者, 这可能是个错误:(\n"
|
#define MSGTR_InvalidMPEGES "无法的 MPEG-ES 媒体流???请联系开发者,这可能是软件的缺陷 :(\n"
|
||||||
#define MSGTR_FormatNotRecognized "============= 抱歉, 此文件格式无法辨认或支持 ===============\n"\
|
#define MSGTR_FormatNotRecognized "============= 抱歉, 此文件格式无法辨认或支持 ===============\n"\
|
||||||
"=== 如果此文件是一个 AVI, ASF 或 MPEG 流, 请联系作者! ===\n"
|
"=== 如果此文件是 AVI、ASF 或 MPEG 媒体流,请联系开发者! ===\n"
|
||||||
#define MSGTR_SettingProcessPriority "设置进程优先级: %s\n"
|
#define MSGTR_SettingProcessPriority "设置进程优先级:%s\n"
|
||||||
#define MSGTR_FilefmtFourccSizeFpsFtime "[V] 文件格式:%d fourcc:0x%X 大小:%dx%d 帧速:%5.3f 帧时间:=%6.4f\n"
|
#define MSGTR_FilefmtFourccSizeFpsFtime "[V] 文件格式:%d fourcc代码:0x%X 大小:%dx%d 帧速:%5.3f 每帧时长:=%6.4f\n"
|
||||||
#define MSGTR_CannotInitializeMuxer "不能初始化muxer。"
|
#define MSGTR_CannotInitializeMuxer "不能初始化流合并器。"
|
||||||
#define MSGTR_MissingVideoStream "未找到视频流。\n"
|
#define MSGTR_MissingVideoStream "未找到视频流。\n"
|
||||||
#define MSGTR_MissingAudioStream "未找到音频流... -> 没声音。\n"
|
#define MSGTR_MissingAudioStream "未找到音频流... -> 没有声音。\n"
|
||||||
#define MSGTR_MissingVideoStreamBug "没有视频流!? 请联系作者, 这可能是个错误:(\n"
|
#define MSGTR_MissingVideoStreamBug "没有视频流!?请联系开发者,这可能是软件的缺陷 :(\n"
|
||||||
|
|
||||||
#define MSGTR_DoesntContainSelectedStream "分路: 文件中没有所选择的音频或视频流。\n"
|
#define MSGTR_DoesntContainSelectedStream "流分离:文件中没有所选择的音频或视频流。\n"
|
||||||
|
|
||||||
#define MSGTR_NI_Forced "锁定为"
|
#define MSGTR_NI_Forced "强制使用"
|
||||||
#define MSGTR_NI_Detected "检测到"
|
#define MSGTR_NI_Detected "检测到"
|
||||||
#define MSGTR_NI_Message "%s 非交错 AVI 文件模式!\n"
|
#define MSGTR_NI_Message "%s 非交错合并的 AVI 文件模式!\n"
|
||||||
|
|
||||||
#define MSGTR_UsingNINI "使用非交错的损坏的 AVI 文件格式。\n"
|
#define MSGTR_UsingNINI "使用非交错的损坏的 AVI 文件格式。\n"
|
||||||
#define MSGTR_CouldntDetFNo "无法决定帧数(用于绝对搜索)。\n"
|
#define MSGTR_CouldntDetFNo "无法决定帧数(用于绝对搜索)。\n"
|
||||||
|
@ -163,15 +163,19 @@ static int decode_audio(sh_audio_t *sh_audio,unsigned char *buf,int minlen,int m
|
|||||||
unsigned char *start=NULL;
|
unsigned char *start=NULL;
|
||||||
int y,len=-1;
|
int y,len=-1;
|
||||||
while(len<minlen){
|
while(len<minlen){
|
||||||
|
AVPacket pkt;
|
||||||
int len2=maxlen;
|
int len2=maxlen;
|
||||||
double pts;
|
double pts;
|
||||||
int x=ds_get_packet_pts(sh_audio->ds,&start, &pts);
|
int x=ds_get_packet_pts(sh_audio->ds,&start, &pts);
|
||||||
if(x<=0) break; // error
|
if(x<=0) break; // error
|
||||||
|
av_init_packet(&pkt);
|
||||||
|
pkt.data = start;
|
||||||
|
pkt.size = x;
|
||||||
if (pts != MP_NOPTS_VALUE) {
|
if (pts != MP_NOPTS_VALUE) {
|
||||||
sh_audio->pts = pts;
|
sh_audio->pts = pts;
|
||||||
sh_audio->pts_bytes = 0;
|
sh_audio->pts_bytes = 0;
|
||||||
}
|
}
|
||||||
y=avcodec_decode_audio2(sh_audio->context,(int16_t*)buf,&len2,start,x);
|
y=avcodec_decode_audio3(sh_audio->context,(int16_t*)buf,&len2,&pkt);
|
||||||
//printf("return:%d samples_out:%d bitstream_in:%d sample_sum:%d\n", y, len2, x, len); fflush(stdout);
|
//printf("return:%d samples_out:%d bitstream_in:%d sample_sum:%d\n", y, len2, x, len); fflush(stdout);
|
||||||
if(y<0){ mp_msg(MSGT_DECAUDIO,MSGL_V,"lavc_audio: error\n");break; }
|
if(y<0){ mp_msg(MSGT_DECAUDIO,MSGL_V,"lavc_audio: error\n");break; }
|
||||||
if(y<x) sh_audio->ds->buffer_pos+=y-x; // put back data (HACK!)
|
if(y<x) sh_audio->ds->buffer_pos+=y-x; // put back data (HACK!)
|
||||||
|
@ -34,11 +34,13 @@
|
|||||||
#define IMGFMT_BGRA (IMGFMT_RGB32|64)
|
#define IMGFMT_BGRA (IMGFMT_RGB32|64)
|
||||||
#define IMGFMT_ARGB IMGFMT_BGR32
|
#define IMGFMT_ARGB IMGFMT_BGR32
|
||||||
#define IMGFMT_RGBA (IMGFMT_BGR32|64)
|
#define IMGFMT_RGBA (IMGFMT_BGR32|64)
|
||||||
|
#define IMGFMT_RGB48NE IMGFMT_RGB48BE
|
||||||
#else
|
#else
|
||||||
#define IMGFMT_ABGR (IMGFMT_BGR32|64)
|
#define IMGFMT_ABGR (IMGFMT_BGR32|64)
|
||||||
#define IMGFMT_BGRA IMGFMT_BGR32
|
#define IMGFMT_BGRA IMGFMT_BGR32
|
||||||
#define IMGFMT_ARGB (IMGFMT_RGB32|64)
|
#define IMGFMT_ARGB (IMGFMT_RGB32|64)
|
||||||
#define IMGFMT_RGBA IMGFMT_RGB32
|
#define IMGFMT_RGBA IMGFMT_RGB32
|
||||||
|
#define IMGFMT_RGB48NE IMGFMT_RGB48LE
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* old names for compatibility */
|
/* old names for compatibility */
|
||||||
|
@ -476,10 +476,8 @@ static int get_buffer(AVCodecContext *avctx, AVFrame *pic){
|
|||||||
int type= MP_IMGTYPE_IPB;
|
int type= MP_IMGTYPE_IPB;
|
||||||
int width= avctx->width;
|
int width= avctx->width;
|
||||||
int height= avctx->height;
|
int height= avctx->height;
|
||||||
int align=15;
|
avcodec_align_dimensions(avctx, &width, &height);
|
||||||
//printf("get_buffer %d %d %d\n", pic->reference, ctx->ip_count, ctx->b_count);
|
//printf("get_buffer %d %d %d\n", pic->reference, ctx->ip_count, ctx->b_count);
|
||||||
if(avctx->pix_fmt == PIX_FMT_YUV410P)
|
|
||||||
align=63; //yes seriously, its really needed (16x16 chroma blocks in SVQ1 -> 64x64)
|
|
||||||
|
|
||||||
if (pic->buffer_hints) {
|
if (pic->buffer_hints) {
|
||||||
mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "Buffer hints: %u\n", pic->buffer_hints);
|
mp_msg(MSGT_DECVIDEO, MSGL_DBG2, "Buffer hints: %u\n", pic->buffer_hints);
|
||||||
@ -535,8 +533,7 @@ static int get_buffer(AVCodecContext *avctx, AVFrame *pic){
|
|||||||
mp_msg(MSGT_DECVIDEO, MSGL_DBG2, type== MP_IMGTYPE_IPB ? "using IPB\n" : "using IP\n");
|
mp_msg(MSGT_DECVIDEO, MSGL_DBG2, type== MP_IMGTYPE_IPB ? "using IPB\n" : "using IP\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
mpi= mpcodecs_get_image(sh, type, flags,
|
mpi= mpcodecs_get_image(sh, type, flags, width, height);
|
||||||
(width+align)&(~align), (height+align)&(~align));
|
|
||||||
if (!mpi) return -1;
|
if (!mpi) return -1;
|
||||||
|
|
||||||
// ok, let's see what did we get:
|
// ok, let's see what did we get:
|
||||||
|
@ -143,19 +143,6 @@ static int open(vf_instance_t *vf, char* args){
|
|||||||
vf->start_slice=start_slice;
|
vf->start_slice=start_slice;
|
||||||
vf->draw_slice=draw_slice;
|
vf->draw_slice=draw_slice;
|
||||||
vf->default_reqs=VFCAP_ACCEPT_STRIDE;
|
vf->default_reqs=VFCAP_ACCEPT_STRIDE;
|
||||||
if(!vf->priv) {
|
|
||||||
vf->priv=malloc(sizeof(struct vf_priv_s));
|
|
||||||
// TODO: parse args ->
|
|
||||||
vf->priv->crop_x=
|
|
||||||
vf->priv->crop_y=
|
|
||||||
vf->priv->crop_w=
|
|
||||||
vf->priv->crop_h=-1;
|
|
||||||
} //if(!vf->priv)
|
|
||||||
if(args) sscanf(args, "%d:%d:%d:%d",
|
|
||||||
&vf->priv->crop_w,
|
|
||||||
&vf->priv->crop_h,
|
|
||||||
&vf->priv->crop_x,
|
|
||||||
&vf->priv->crop_y);
|
|
||||||
mp_msg(MSGT_VFILTER, MSGL_INFO, "Crop: %d x %d, %d ; %d\n",
|
mp_msg(MSGT_VFILTER, MSGL_INFO, "Crop: %d x %d, %d ; %d\n",
|
||||||
vf->priv->crop_w,
|
vf->priv->crop_w,
|
||||||
vf->priv->crop_h,
|
vf->priv->crop_h,
|
||||||
|
@ -197,27 +197,11 @@ static const unsigned int fmt_list[]={
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int open(vf_instance_t *vf, char* args){
|
static int open(vf_instance_t *vf, char* args){
|
||||||
int res;
|
|
||||||
|
|
||||||
vf->config=config;
|
vf->config=config;
|
||||||
vf->put_image=put_image;
|
vf->put_image=put_image;
|
||||||
vf->get_image=get_image;
|
vf->get_image=get_image;
|
||||||
vf->query_format=query_format;
|
vf->query_format=query_format;
|
||||||
vf->uninit=uninit;
|
vf->uninit=uninit;
|
||||||
if (!vf->priv)
|
|
||||||
{
|
|
||||||
vf->priv=malloc(sizeof(struct vf_priv_s));
|
|
||||||
memset(vf->priv, 0, sizeof(struct vf_priv_s));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args) res = sscanf(args, "%d:%d:%d:%d:%d",
|
|
||||||
&vf->priv->xoff, &vf->priv->yoff,
|
|
||||||
&vf->priv->lw, &vf->priv->lh,
|
|
||||||
&vf->priv->band);
|
|
||||||
if (args && (res != 5)) {
|
|
||||||
uninit(vf);
|
|
||||||
return 0; // bad syntax
|
|
||||||
}
|
|
||||||
|
|
||||||
mp_msg(MSGT_VFILTER, MSGL_V, "delogo: %d x %d, %d x %d, band = %d\n",
|
mp_msg(MSGT_VFILTER, MSGL_V, "delogo: %d x %d, %d x %d, band = %d\n",
|
||||||
vf->priv->xoff, vf->priv->yoff,
|
vf->priv->xoff, vf->priv->yoff,
|
||||||
|
@ -208,12 +208,6 @@ static int open(vf_instance_t *vf, char* args)
|
|||||||
vf->put_image=put_image;
|
vf->put_image=put_image;
|
||||||
vf->uninit=uninit;
|
vf->uninit=uninit;
|
||||||
|
|
||||||
if(!vf->priv) {
|
|
||||||
vf->priv = malloc(sizeof(struct vf_priv_s));
|
|
||||||
memset(vf->priv, 0, sizeof(struct vf_priv_s));
|
|
||||||
}
|
|
||||||
if (args) sscanf(args, "%d:%d", &vf->priv->brightness, &vf->priv->contrast);
|
|
||||||
|
|
||||||
process = process_C;
|
process = process_C;
|
||||||
#if HAVE_MMX
|
#if HAVE_MMX
|
||||||
if(gCpuCaps.hasMMX) process = process_MMX;
|
if(gCpuCaps.hasMMX) process = process_MMX;
|
||||||
|
@ -43,6 +43,8 @@ static struct vf_priv_s {
|
|||||||
int first_slice;
|
int first_slice;
|
||||||
struct osd_state *osd;
|
struct osd_state *osd;
|
||||||
} const vf_priv_dflt = {
|
} const vf_priv_dflt = {
|
||||||
|
-1,-1,
|
||||||
|
-1,-1,
|
||||||
-1,-1,
|
-1,-1,
|
||||||
-1,-1,
|
-1,-1,
|
||||||
0,
|
0,
|
||||||
|
@ -31,45 +31,6 @@ static int query_format(struct vf_instance* vf, unsigned int fmt){
|
|||||||
static int open(vf_instance_t *vf, char* args){
|
static int open(vf_instance_t *vf, char* args){
|
||||||
vf->query_format=query_format;
|
vf->query_format=query_format;
|
||||||
vf->default_caps=0;
|
vf->default_caps=0;
|
||||||
if(!vf->priv) {
|
|
||||||
vf->priv=malloc(sizeof(struct vf_priv_s));
|
|
||||||
vf->priv->fmt=IMGFMT_YUY2;
|
|
||||||
}
|
|
||||||
if(args){
|
|
||||||
if(!strcasecmp(args,"444p")) vf->priv->fmt=IMGFMT_444P; else
|
|
||||||
if(!strcasecmp(args,"422p")) vf->priv->fmt=IMGFMT_422P; else
|
|
||||||
if(!strcasecmp(args,"411p")) vf->priv->fmt=IMGFMT_411P; else
|
|
||||||
if(!strcasecmp(args,"yuy2")) vf->priv->fmt=IMGFMT_YUY2; else
|
|
||||||
if(!strcasecmp(args,"yv12")) vf->priv->fmt=IMGFMT_YV12; else
|
|
||||||
if(!strcasecmp(args,"i420")) vf->priv->fmt=IMGFMT_I420; else
|
|
||||||
if(!strcasecmp(args,"yvu9")) vf->priv->fmt=IMGFMT_YVU9; else
|
|
||||||
if(!strcasecmp(args,"if09")) vf->priv->fmt=IMGFMT_IF09; else
|
|
||||||
if(!strcasecmp(args,"iyuv")) vf->priv->fmt=IMGFMT_IYUV; else
|
|
||||||
if(!strcasecmp(args,"uyvy")) vf->priv->fmt=IMGFMT_UYVY; else
|
|
||||||
if(!strcasecmp(args,"bgr24")) vf->priv->fmt=IMGFMT_BGR24; else
|
|
||||||
if(!strcasecmp(args,"bgr32")) vf->priv->fmt=IMGFMT_BGR32; else
|
|
||||||
if(!strcasecmp(args,"bgr16")) vf->priv->fmt=IMGFMT_BGR16; else
|
|
||||||
if(!strcasecmp(args,"bgr15")) vf->priv->fmt=IMGFMT_BGR15; else
|
|
||||||
if(!strcasecmp(args,"bgr8")) vf->priv->fmt=IMGFMT_BGR8; else
|
|
||||||
if(!strcasecmp(args,"bgr4")) vf->priv->fmt=IMGFMT_BGR4; else
|
|
||||||
if(!strcasecmp(args,"bg4b")) vf->priv->fmt=IMGFMT_BG4B; else
|
|
||||||
if(!strcasecmp(args,"bgr1")) vf->priv->fmt=IMGFMT_BGR1; else
|
|
||||||
if(!strcasecmp(args,"rgb24")) vf->priv->fmt=IMGFMT_RGB24; else
|
|
||||||
if(!strcasecmp(args,"rgb32")) vf->priv->fmt=IMGFMT_RGB32; else
|
|
||||||
if(!strcasecmp(args,"rgb16")) vf->priv->fmt=IMGFMT_RGB16; else
|
|
||||||
if(!strcasecmp(args,"rgb15")) vf->priv->fmt=IMGFMT_RGB15; else
|
|
||||||
if(!strcasecmp(args,"rgb8")) vf->priv->fmt=IMGFMT_RGB8; else
|
|
||||||
if(!strcasecmp(args,"rgb4")) vf->priv->fmt=IMGFMT_RGB4; else
|
|
||||||
if(!strcasecmp(args,"rg4b")) vf->priv->fmt=IMGFMT_RG4B; else
|
|
||||||
if(!strcasecmp(args,"rgb1")) vf->priv->fmt=IMGFMT_RGB1; else
|
|
||||||
if(!strcasecmp(args,"rgba")) vf->priv->fmt=IMGFMT_RGBA; else
|
|
||||||
if(!strcasecmp(args,"argb")) vf->priv->fmt=IMGFMT_ARGB; else
|
|
||||||
if(!strcasecmp(args,"bgra")) vf->priv->fmt=IMGFMT_BGRA; else
|
|
||||||
if(!strcasecmp(args,"abgr")) vf->priv->fmt=IMGFMT_ABGR; else
|
|
||||||
{ mp_tmsg(MSGT_VFILTER, MSGL_WARN, "[VF_FORMAT] Unknown format name: '%s'.\n", args);return 0;}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,11 +152,6 @@ static int open(vf_instance_t *vf, char* args)
|
|||||||
vf->put_image=put_image;
|
vf->put_image=put_image;
|
||||||
vf->uninit=uninit;
|
vf->uninit=uninit;
|
||||||
|
|
||||||
if(!vf->priv) {
|
|
||||||
vf->priv = malloc(sizeof(struct vf_priv_s));
|
|
||||||
memset(vf->priv, 0, sizeof(struct vf_priv_s));
|
|
||||||
}
|
|
||||||
if (args) sscanf(args, "%f:%f", &vf->priv->hue, &vf->priv->saturation);
|
|
||||||
vf->priv->hue *= M_PI / 180.0;
|
vf->priv->hue *= M_PI / 180.0;
|
||||||
|
|
||||||
process = process_C;
|
process = process_C;
|
||||||
|
@ -31,45 +31,6 @@ static int query_format(struct vf_instance* vf, unsigned int fmt){
|
|||||||
static int open(vf_instance_t *vf, char* args){
|
static int open(vf_instance_t *vf, char* args){
|
||||||
vf->query_format=query_format;
|
vf->query_format=query_format;
|
||||||
vf->default_caps=0;
|
vf->default_caps=0;
|
||||||
if(!vf->priv) {
|
|
||||||
vf->priv=malloc(sizeof(struct vf_priv_s));
|
|
||||||
vf->priv->fmt=IMGFMT_YV12;
|
|
||||||
}
|
|
||||||
if(args){
|
|
||||||
if(!strcasecmp(args,"444p")) vf->priv->fmt=IMGFMT_444P; else
|
|
||||||
if(!strcasecmp(args,"422p")) vf->priv->fmt=IMGFMT_422P; else
|
|
||||||
if(!strcasecmp(args,"411p")) vf->priv->fmt=IMGFMT_411P; else
|
|
||||||
if(!strcasecmp(args,"yuy2")) vf->priv->fmt=IMGFMT_YUY2; else
|
|
||||||
if(!strcasecmp(args,"yv12")) vf->priv->fmt=IMGFMT_YV12; else
|
|
||||||
if(!strcasecmp(args,"i420")) vf->priv->fmt=IMGFMT_I420; else
|
|
||||||
if(!strcasecmp(args,"yvu9")) vf->priv->fmt=IMGFMT_YVU9; else
|
|
||||||
if(!strcasecmp(args,"if09")) vf->priv->fmt=IMGFMT_IF09; else
|
|
||||||
if(!strcasecmp(args,"iyuv")) vf->priv->fmt=IMGFMT_IYUV; else
|
|
||||||
if(!strcasecmp(args,"uyvy")) vf->priv->fmt=IMGFMT_UYVY; else
|
|
||||||
if(!strcasecmp(args,"bgr24")) vf->priv->fmt=IMGFMT_BGR24; else
|
|
||||||
if(!strcasecmp(args,"bgr32")) vf->priv->fmt=IMGFMT_BGR32; else
|
|
||||||
if(!strcasecmp(args,"bgr16")) vf->priv->fmt=IMGFMT_BGR16; else
|
|
||||||
if(!strcasecmp(args,"bgr15")) vf->priv->fmt=IMGFMT_BGR15; else
|
|
||||||
if(!strcasecmp(args,"bgr8")) vf->priv->fmt=IMGFMT_BGR8; else
|
|
||||||
if(!strcasecmp(args,"bgr4")) vf->priv->fmt=IMGFMT_BGR4; else
|
|
||||||
if(!strcasecmp(args,"bg4b")) vf->priv->fmt=IMGFMT_BG4B; else
|
|
||||||
if(!strcasecmp(args,"bgr1")) vf->priv->fmt=IMGFMT_BGR1; else
|
|
||||||
if(!strcasecmp(args,"rgb24")) vf->priv->fmt=IMGFMT_RGB24; else
|
|
||||||
if(!strcasecmp(args,"rgb32")) vf->priv->fmt=IMGFMT_RGB32; else
|
|
||||||
if(!strcasecmp(args,"rgb16")) vf->priv->fmt=IMGFMT_RGB16; else
|
|
||||||
if(!strcasecmp(args,"rgb15")) vf->priv->fmt=IMGFMT_RGB15; else
|
|
||||||
if(!strcasecmp(args,"rgb8")) vf->priv->fmt=IMGFMT_RGB8; else
|
|
||||||
if(!strcasecmp(args,"rgb4")) vf->priv->fmt=IMGFMT_RGB4; else
|
|
||||||
if(!strcasecmp(args,"rg4b")) vf->priv->fmt=IMGFMT_RG4B; else
|
|
||||||
if(!strcasecmp(args,"rgb1")) vf->priv->fmt=IMGFMT_RGB1; else
|
|
||||||
if(!strcasecmp(args,"rgba")) vf->priv->fmt=IMGFMT_RGBA; else
|
|
||||||
if(!strcasecmp(args,"argb")) vf->priv->fmt=IMGFMT_ARGB; else
|
|
||||||
if(!strcasecmp(args,"bgra")) vf->priv->fmt=IMGFMT_BGRA; else
|
|
||||||
if(!strcasecmp(args,"abgr")) vf->priv->fmt=IMGFMT_ABGR; else
|
|
||||||
{ mp_tmsg(MSGT_VFILTER, MSGL_WARN, "[VF_FORMAT] Unknown format name: '%s'.\n", args);return 0;}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -65,6 +65,8 @@ static const unsigned int outfmt_list[]={
|
|||||||
IMGFMT_RGB32,
|
IMGFMT_RGB32,
|
||||||
IMGFMT_BGR24,
|
IMGFMT_BGR24,
|
||||||
IMGFMT_RGB24,
|
IMGFMT_RGB24,
|
||||||
|
IMGFMT_RGB48LE,
|
||||||
|
IMGFMT_RGB48BE,
|
||||||
IMGFMT_BGR16,
|
IMGFMT_BGR16,
|
||||||
IMGFMT_RGB16,
|
IMGFMT_RGB16,
|
||||||
IMGFMT_BGR15,
|
IMGFMT_BGR15,
|
||||||
@ -505,25 +507,6 @@ static int open(vf_instance_t *vf, char* args){
|
|||||||
vf->query_format=query_format;
|
vf->query_format=query_format;
|
||||||
vf->control= control;
|
vf->control= control;
|
||||||
vf->uninit=uninit;
|
vf->uninit=uninit;
|
||||||
if(!vf->priv) {
|
|
||||||
vf->priv=malloc(sizeof(struct vf_priv_s));
|
|
||||||
// TODO: parse args ->
|
|
||||||
vf->priv->ctx=NULL;
|
|
||||||
vf->priv->ctx2=NULL;
|
|
||||||
vf->priv->w=
|
|
||||||
vf->priv->h=-1;
|
|
||||||
vf->priv->v_chr_drop=0;
|
|
||||||
vf->priv->accurate_rnd=0;
|
|
||||||
vf->priv->param[0]=
|
|
||||||
vf->priv->param[1]=SWS_PARAM_DEFAULT;
|
|
||||||
vf->priv->palette=NULL;
|
|
||||||
} // if(!vf->priv)
|
|
||||||
if(args) sscanf(args, "%d:%d:%d:%lf:%lf",
|
|
||||||
&vf->priv->w,
|
|
||||||
&vf->priv->h,
|
|
||||||
&vf->priv->v_chr_drop,
|
|
||||||
&vf->priv->param[0],
|
|
||||||
&vf->priv->param[1]);
|
|
||||||
mp_msg(MSGT_VFILTER,MSGL_V,"SwScale params: %d x %d (-1=no scaling)\n",
|
mp_msg(MSGT_VFILTER,MSGL_V,"SwScale params: %d x %d (-1=no scaling)\n",
|
||||||
vf->priv->w,
|
vf->priv->w,
|
||||||
vf->priv->h);
|
vf->priv->h);
|
||||||
|
@ -367,6 +367,7 @@ typedef struct {
|
|||||||
avisuperindex_chunk *suidx;
|
avisuperindex_chunk *suidx;
|
||||||
int suidx_size;
|
int suidx_size;
|
||||||
int isodml;
|
int isodml;
|
||||||
|
int warned_unaligned;
|
||||||
} avi_priv_t;
|
} avi_priv_t;
|
||||||
|
|
||||||
#define AVI_PRIV ((avi_priv_t*)(demuxer->priv))
|
#define AVI_PRIV ((avi_priv_t*)(demuxer->priv))
|
||||||
|
@ -346,7 +346,7 @@ static int demux_audio_open(demuxer_t* demuxer) {
|
|||||||
sh_audio->i_bps = sh_audio->wf->nAvgBytesPerSec;
|
sh_audio->i_bps = sh_audio->wf->nAvgBytesPerSec;
|
||||||
free(mp3_found);
|
free(mp3_found);
|
||||||
mp3_found = NULL;
|
mp3_found = NULL;
|
||||||
if(s->end_pos && (s->flags & STREAM_SEEK) == STREAM_SEEK) {
|
if(s->end_pos && (s->flags & MP_STREAM_SEEK) == MP_STREAM_SEEK) {
|
||||||
char tag[4];
|
char tag[4];
|
||||||
stream_seek(s,s->end_pos-128);
|
stream_seek(s,s->end_pos-128);
|
||||||
stream_read(s,tag,3);
|
stream_read(s,tag,3);
|
||||||
|
@ -108,6 +108,12 @@ static int valid_fourcc(unsigned int id){
|
|||||||
strchr(valid, fcc[2]) && strchr(valid, fcc[3]);
|
strchr(valid, fcc[2]) && strchr(valid, fcc[3]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int valid_stream_id(unsigned int id) {
|
||||||
|
unsigned char* fcc=(unsigned char*)(&id);
|
||||||
|
return fcc[0] >= '0' && fcc[0] <= '9' && fcc[1] >= '0' && fcc[1] <= '9' &&
|
||||||
|
((fcc[2] == 'w' && fcc[3] == 'b') || (fcc[2] == 'd' && fcc[3] == 'c'));
|
||||||
|
}
|
||||||
|
|
||||||
static int choose_chunk_len(unsigned int len1,unsigned int len2){
|
static int choose_chunk_len(unsigned int len1,unsigned int len2){
|
||||||
// len1 has a bit more priority than len2. len1!=len2
|
// len1 has a bit more priority than len2. len1!=len2
|
||||||
// Note: this is a first-idea-logic, may be wrong. comments welcomed.
|
// Note: this is a first-idea-logic, may be wrong. comments welcomed.
|
||||||
@ -220,8 +226,12 @@ do{
|
|||||||
idx=&((AVIINDEXENTRY *)priv->idx)[priv->idx_pos++];
|
idx=&((AVIINDEXENTRY *)priv->idx)[priv->idx_pos++];
|
||||||
|
|
||||||
if(idx->dwFlags&AVIIF_LIST){
|
if(idx->dwFlags&AVIIF_LIST){
|
||||||
|
if (!valid_stream_id(idx->ckid))
|
||||||
// LIST
|
// LIST
|
||||||
continue;
|
continue;
|
||||||
|
if (!priv->warned_unaligned)
|
||||||
|
mp_msg(MSGT_DEMUX, MSGL_WARN, "Looks like unaligned chunk in index, broken AVI file!\n");
|
||||||
|
priv->warned_unaligned = 1;
|
||||||
}
|
}
|
||||||
if(!demux_avi_select_stream(demux,idx->ckid)){
|
if(!demux_avi_select_stream(demux,idx->ckid)){
|
||||||
mp_dbg(MSGT_DEMUX,MSGL_DBG3,"Skip chunk %.4s (0x%X) \n",(char *)&idx->ckid,(unsigned int)idx->ckid);
|
mp_dbg(MSGT_DEMUX,MSGL_DBG3,"Skip chunk %.4s (0x%X) \n",(char *)&idx->ckid,(unsigned int)idx->ckid);
|
||||||
@ -229,7 +239,7 @@ do{
|
|||||||
}
|
}
|
||||||
|
|
||||||
pos = (off_t)priv->idx_offset+AVI_IDX_OFFSET(idx);
|
pos = (off_t)priv->idx_offset+AVI_IDX_OFFSET(idx);
|
||||||
if((pos<demux->movi_start || pos>=demux->movi_end) && (demux->movi_end>demux->movi_start) && (demux->stream->flags & STREAM_SEEK)){
|
if((pos<demux->movi_start || pos>=demux->movi_end) && (demux->movi_end>demux->movi_start) && (demux->stream->flags & MP_STREAM_SEEK)){
|
||||||
mp_msg(MSGT_DEMUX,MSGL_V,"ChunkOffset out of range! idx=0x%"PRIX64" \n",(int64_t)pos);
|
mp_msg(MSGT_DEMUX,MSGL_V,"ChunkOffset out of range! idx=0x%"PRIX64" \n",(int64_t)pos);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -254,7 +264,7 @@ do{
|
|||||||
if(!(idx->dwFlags&AVIIF_KEYFRAME)) flags=0;
|
if(!(idx->dwFlags&AVIIF_KEYFRAME)) flags=0;
|
||||||
} else {
|
} else {
|
||||||
demux->filepos=stream_tell(demux->stream);
|
demux->filepos=stream_tell(demux->stream);
|
||||||
if(demux->filepos>=demux->movi_end && demux->movi_end>demux->movi_start && (demux->stream->flags & STREAM_SEEK)){
|
if(demux->filepos>=demux->movi_end && demux->movi_end>demux->movi_start && (demux->stream->flags & MP_STREAM_SEEK)){
|
||||||
demux->stream->eof=1;
|
demux->stream->eof=1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -319,8 +329,12 @@ do{
|
|||||||
idx=&((AVIINDEXENTRY *)priv->idx)[idx_pos];
|
idx=&((AVIINDEXENTRY *)priv->idx)[idx_pos];
|
||||||
|
|
||||||
if(idx->dwFlags&AVIIF_LIST){
|
if(idx->dwFlags&AVIIF_LIST){
|
||||||
|
if (!valid_stream_id(idx->ckid))
|
||||||
// LIST
|
// LIST
|
||||||
continue;
|
continue;
|
||||||
|
if (!priv->warned_unaligned)
|
||||||
|
mp_msg(MSGT_DEMUX, MSGL_WARN, "Looks like unaligned chunk in index, broken AVI file!\n");
|
||||||
|
priv->warned_unaligned = 1;
|
||||||
}
|
}
|
||||||
if(ds && demux_avi_select_stream(demux,idx->ckid)!=ds){
|
if(ds && demux_avi_select_stream(demux,idx->ckid)!=ds){
|
||||||
mp_dbg(MSGT_DEMUX,MSGL_DBG3,"Skip chunk %.4s (0x%X) \n",(char *)&idx->ckid,(unsigned int)idx->ckid);
|
mp_dbg(MSGT_DEMUX,MSGL_DBG3,"Skip chunk %.4s (0x%X) \n",(char *)&idx->ckid,(unsigned int)idx->ckid);
|
||||||
@ -425,25 +439,12 @@ static demuxer_t* demux_open_avi(demuxer_t* demuxer){
|
|||||||
demux_stream_t *d_video=demuxer->video;
|
demux_stream_t *d_video=demuxer->video;
|
||||||
sh_audio_t *sh_audio=NULL;
|
sh_audio_t *sh_audio=NULL;
|
||||||
sh_video_t *sh_video=NULL;
|
sh_video_t *sh_video=NULL;
|
||||||
avi_priv_t* priv=malloc(sizeof(avi_priv_t));
|
avi_priv_t* priv=calloc(1, sizeof(avi_priv_t));
|
||||||
|
|
||||||
// priv struct:
|
|
||||||
priv->avi_audio_pts=priv->avi_video_pts=0.0f;
|
|
||||||
priv->pts_correction=0.0f;
|
|
||||||
priv->skip_video_frames=0;
|
|
||||||
priv->pts_corr_bytes=0;
|
|
||||||
priv->pts_has_video=priv->pts_corrected=0;
|
|
||||||
priv->video_pack_no=0;
|
|
||||||
priv->audio_block_no=0;
|
|
||||||
priv->audio_block_size=0;
|
|
||||||
priv->isodml = 0;
|
|
||||||
priv->suidx_size = 0;
|
|
||||||
priv->suidx = NULL;
|
|
||||||
|
|
||||||
demuxer->priv=(void*)priv;
|
demuxer->priv=(void*)priv;
|
||||||
|
|
||||||
//---- AVI header:
|
//---- AVI header:
|
||||||
read_avi_header(demuxer,(demuxer->stream->flags & STREAM_SEEK_BW)?index_mode:-2);
|
read_avi_header(demuxer,(demuxer->stream->flags & MP_STREAM_SEEK_BW)?index_mode:-2);
|
||||||
|
|
||||||
if(demuxer->audio->id>=0 && !demuxer->a_streams[demuxer->audio->id]){
|
if(demuxer->audio->id>=0 && !demuxer->a_streams[demuxer->audio->id]){
|
||||||
mp_tmsg(MSGT_DEMUX,MSGL_WARN,"AVI: invalid audio stream ID: %d - ignoring (nosound)\n",demuxer->audio->id);
|
mp_tmsg(MSGT_DEMUX,MSGL_WARN,"AVI: invalid audio stream ID: %d - ignoring (nosound)\n",demuxer->audio->id);
|
||||||
@ -456,22 +457,15 @@ static demuxer_t* demux_open_avi(demuxer_t* demuxer){
|
|||||||
|
|
||||||
stream_reset(demuxer->stream);
|
stream_reset(demuxer->stream);
|
||||||
stream_seek(demuxer->stream,demuxer->movi_start);
|
stream_seek(demuxer->stream,demuxer->movi_start);
|
||||||
priv->idx_pos=0;
|
|
||||||
priv->idx_pos_a=0;
|
|
||||||
priv->idx_pos_v=0;
|
|
||||||
if(priv->idx_size>1){
|
if(priv->idx_size>1){
|
||||||
// decide index format:
|
// decide index format:
|
||||||
#if 1
|
#if 1
|
||||||
if((AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[0])<demuxer->movi_start ||
|
if((AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[0])<demuxer->movi_start ||
|
||||||
AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[1])<demuxer->movi_start )&& !priv->isodml)
|
AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[1])<demuxer->movi_start )&& !priv->isodml)
|
||||||
priv->idx_offset=demuxer->movi_start-4;
|
priv->idx_offset=demuxer->movi_start-4;
|
||||||
else
|
|
||||||
priv->idx_offset=0;
|
|
||||||
#else
|
#else
|
||||||
if(AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[0])<demuxer->movi_start)
|
if(AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[0])<demuxer->movi_start)
|
||||||
priv->idx_offset=demuxer->movi_start-4;
|
priv->idx_offset=demuxer->movi_start-4;
|
||||||
else
|
|
||||||
priv->idx_offset=0;
|
|
||||||
#endif
|
#endif
|
||||||
mp_msg(MSGT_DEMUX,MSGL_V,"AVI index offset: 0x%X (movi=0x%X idx0=0x%X idx1=0x%X)\n",
|
mp_msg(MSGT_DEMUX,MSGL_V,"AVI index offset: 0x%X (movi=0x%X idx0=0x%X idx1=0x%X)\n",
|
||||||
(int)priv->idx_offset,(int)demuxer->movi_start,
|
(int)priv->idx_offset,(int)demuxer->movi_start,
|
||||||
|
@ -66,7 +66,7 @@ typedef struct lavf_priv_t{
|
|||||||
AVInputFormat *avif;
|
AVInputFormat *avif;
|
||||||
AVFormatContext *avfc;
|
AVFormatContext *avfc;
|
||||||
ByteIOContext *pb;
|
ByteIOContext *pb;
|
||||||
uint8_t buffer[BIO_BUFFER_SIZE];
|
uint8_t buffer[FFMAX(BIO_BUFFER_SIZE, PROBE_BUF_SIZE)];
|
||||||
int audio_streams;
|
int audio_streams;
|
||||||
int video_streams;
|
int video_streams;
|
||||||
int sub_streams;
|
int sub_streams;
|
||||||
@ -130,7 +130,6 @@ static void list_formats(void) {
|
|||||||
|
|
||||||
static int lavf_check_file(demuxer_t *demuxer){
|
static int lavf_check_file(demuxer_t *demuxer){
|
||||||
AVProbeData avpd;
|
AVProbeData avpd;
|
||||||
uint8_t buf[PROBE_BUF_SIZE];
|
|
||||||
lavf_priv_t *priv;
|
lavf_priv_t *priv;
|
||||||
int probe_data_size;
|
int probe_data_size;
|
||||||
|
|
||||||
@ -154,11 +153,11 @@ static int lavf_check_file(demuxer_t *demuxer){
|
|||||||
return DEMUXER_TYPE_LAVF;
|
return DEMUXER_TYPE_LAVF;
|
||||||
}
|
}
|
||||||
|
|
||||||
probe_data_size = stream_read(demuxer->stream, buf, PROBE_BUF_SIZE);
|
probe_data_size = stream_read(demuxer->stream, priv->buffer, PROBE_BUF_SIZE);
|
||||||
if(probe_data_size <= 0)
|
if(probe_data_size <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
avpd.filename= demuxer->stream->url;
|
avpd.filename= demuxer->stream->url;
|
||||||
avpd.buf= buf;
|
avpd.buf= priv->buffer;
|
||||||
avpd.buf_size= probe_data_size;
|
avpd.buf_size= probe_data_size;
|
||||||
|
|
||||||
priv->avif= av_probe_input_format(&avpd, 1);
|
priv->avif= av_probe_input_format(&avpd, 1);
|
||||||
@ -433,7 +432,7 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){
|
|||||||
|
|
||||||
stream_seek(demuxer->stream, 0);
|
stream_seek(demuxer->stream, 0);
|
||||||
|
|
||||||
avfc = av_alloc_format_context();
|
avfc = avformat_alloc_context();
|
||||||
|
|
||||||
if (opt_cryptokey)
|
if (opt_cryptokey)
|
||||||
parse_cryptokey(avfc, opt_cryptokey);
|
parse_cryptokey(avfc, opt_cryptokey);
|
||||||
@ -466,7 +465,7 @@ static demuxer_t* demux_open_lavf(demuxer_t *demuxer){
|
|||||||
|
|
||||||
priv->pb = av_alloc_put_byte(priv->buffer, BIO_BUFFER_SIZE, 0,
|
priv->pb = av_alloc_put_byte(priv->buffer, BIO_BUFFER_SIZE, 0,
|
||||||
demuxer->stream, mp_read, NULL, mp_seek);
|
demuxer->stream, mp_read, NULL, mp_seek);
|
||||||
priv->pb->is_streamed = !demuxer->stream->end_pos || (demuxer->stream->flags & STREAM_SEEK) != STREAM_SEEK;
|
priv->pb->is_streamed = !demuxer->stream->end_pos || (demuxer->stream->flags & MP_STREAM_SEEK) != MP_STREAM_SEEK;
|
||||||
|
|
||||||
if(av_open_input_stream(&avfc, priv->pb, mp_filename, priv->avif, &ap)<0){
|
if(av_open_input_stream(&avfc, priv->pb, mp_filename, priv->avif, &ap)<0){
|
||||||
mp_msg(MSGT_HEADER,MSGL_ERR,"LAVF_header: av_open_input_stream() failed\n");
|
mp_msg(MSGT_HEADER,MSGL_ERR,"LAVF_header: av_open_input_stream() failed\n");
|
||||||
|
@ -190,8 +190,7 @@ static demuxer_t* demux_open_rawdv(demuxer_t* demuxer)
|
|||||||
sh_video->frametime = 1.0/sh_video->fps;
|
sh_video->frametime = 1.0/sh_video->fps;
|
||||||
|
|
||||||
// emulate BITMAPINFOHEADER for win32 decoders:
|
// emulate BITMAPINFOHEADER for win32 decoders:
|
||||||
sh_video->bih=malloc(sizeof(BITMAPINFOHEADER));
|
sh_video->bih=calloc(1, sizeof(BITMAPINFOHEADER));
|
||||||
memset(sh_video->bih,0,sizeof(BITMAPINFOHEADER));
|
|
||||||
sh_video->bih->biSize=40;
|
sh_video->bih->biSize=40;
|
||||||
sh_video->bih->biWidth = dv_decoder->width;
|
sh_video->bih->biWidth = dv_decoder->width;
|
||||||
sh_video->bih->biHeight = dv_decoder->height;
|
sh_video->bih->biHeight = dv_decoder->height;
|
||||||
|
@ -191,9 +191,9 @@ void rtpCodecInitialize_video(demuxer_t* demuxer,
|
|||||||
while (pos+8 < endpos) {
|
while (pos+8 < endpos) {
|
||||||
unsigned atomLength = pos[0]<<24 | pos[1]<<16 | pos[2]<<8 | pos[3];
|
unsigned atomLength = pos[0]<<24 | pos[1]<<16 | pos[2]<<8 | pos[3];
|
||||||
if (atomLength == 0 || atomLength > endpos-pos) break;
|
if (atomLength == 0 || atomLength > endpos-pos) break;
|
||||||
if ((!memcmp(pos+4, "avcC", 4) && fourcc==mmioFOURCC('a','v','c','1') ||
|
if (((!memcmp(pos+4, "avcC", 4) && fourcc==mmioFOURCC('a','v','c','1')) ||
|
||||||
!memcmp(pos+4, "esds", 4) ||
|
!memcmp(pos+4, "esds", 4) ||
|
||||||
!memcmp(pos+4, "SMI ", 4) && fourcc==mmioFOURCC('S','V','Q','3')) &&
|
(!memcmp(pos+4, "SMI ", 4) && fourcc==mmioFOURCC('S','V','Q','3'))) &&
|
||||||
atomLength > 8) {
|
atomLength > 8) {
|
||||||
sh_video->bih = bih =
|
sh_video->bih = bih =
|
||||||
insertVideoExtradata(bih, pos+8, atomLength-8);
|
insertVideoExtradata(bih, pos+8, atomLength-8);
|
||||||
|
@ -86,6 +86,7 @@ typedef struct
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
int whichChunk;
|
int whichChunk;
|
||||||
|
unsigned char chunk[ CHUNKSIZE ];
|
||||||
|
|
||||||
unsigned char lastAudio[ MAX_AUDIO_BUFFER ];
|
unsigned char lastAudio[ MAX_AUDIO_BUFFER ];
|
||||||
int lastAudioEnd;
|
int lastAudioEnd;
|
||||||
@ -338,7 +339,6 @@ static int demux_ty_fill_buffer( demuxer_t *demux, demux_stream_t *dsds )
|
|||||||
int errorHeader = 0;
|
int errorHeader = 0;
|
||||||
int recordsDecoded = 0;
|
int recordsDecoded = 0;
|
||||||
|
|
||||||
unsigned char chunk[ CHUNKSIZE ];
|
|
||||||
int readSize;
|
int readSize;
|
||||||
|
|
||||||
int numberRecs;
|
int numberRecs;
|
||||||
@ -350,6 +350,7 @@ static int demux_ty_fill_buffer( demuxer_t *demux, demux_stream_t *dsds )
|
|||||||
int aid;
|
int aid;
|
||||||
|
|
||||||
TiVoInfo *tivo = demux->priv;
|
TiVoInfo *tivo = demux->priv;
|
||||||
|
unsigned char *chunk = tivo->chunk;
|
||||||
|
|
||||||
if ( demux->stream->type == STREAMTYPE_DVD )
|
if ( demux->stream->type == STREAMTYPE_DVD )
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -391,7 +391,7 @@ int muxer_init_muxer_lavf(muxer_t *muxer)
|
|||||||
}
|
}
|
||||||
|
|
||||||
priv->oc->pb = av_alloc_put_byte(priv->buffer, BIO_BUFFER_SIZE, 1, muxer, NULL, mp_write, mp_seek);
|
priv->oc->pb = av_alloc_put_byte(priv->buffer, BIO_BUFFER_SIZE, 1, muxer, NULL, mp_write, mp_seek);
|
||||||
if ((muxer->stream->flags & STREAM_SEEK) != STREAM_SEEK)
|
if ((muxer->stream->flags & MP_STREAM_SEEK) != MP_STREAM_SEEK)
|
||||||
priv->oc->pb->is_streamed = 1;
|
priv->oc->pb->is_streamed = 1;
|
||||||
|
|
||||||
muxer->priv = (void *) priv;
|
muxer->priv = (void *) priv;
|
||||||
|
@ -235,6 +235,8 @@ switch(video_codec){
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
h264_parse_sps(&picture, &(videobuffer[pos]), videobuf_len - pos);
|
h264_parse_sps(&picture, &(videobuffer[pos]), videobuf_len - pos);
|
||||||
|
sh_video->disp_w=picture.display_picture_width;
|
||||||
|
sh_video->disp_h=picture.display_picture_height;
|
||||||
mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for picture parameter set... ");
|
mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for picture parameter set... ");
|
||||||
while(1){
|
while(1){
|
||||||
int i=sync_video_packet(d_video);
|
int i=sync_video_packet(d_video);
|
||||||
|
@ -197,6 +197,10 @@ int glFindFormat(uint32_t fmt, int *bpp, GLint *gl_texfmt,
|
|||||||
*bpp = IMGFMT_IS_BGR(fmt)?IMGFMT_BGR_DEPTH(fmt):IMGFMT_RGB_DEPTH(fmt);
|
*bpp = IMGFMT_IS_BGR(fmt)?IMGFMT_BGR_DEPTH(fmt):IMGFMT_RGB_DEPTH(fmt);
|
||||||
*gl_texfmt = 3;
|
*gl_texfmt = 3;
|
||||||
switch (fmt) {
|
switch (fmt) {
|
||||||
|
case IMGFMT_RGB48NE:
|
||||||
|
*gl_format = GL_RGB;
|
||||||
|
*gl_type = GL_UNSIGNED_SHORT;
|
||||||
|
break;
|
||||||
case IMGFMT_RGB24:
|
case IMGFMT_RGB24:
|
||||||
*gl_format = GL_RGB;
|
*gl_format = GL_RGB;
|
||||||
*gl_type = GL_UNSIGNED_BYTE;
|
*gl_type = GL_UNSIGNED_BYTE;
|
||||||
@ -336,7 +340,7 @@ static void getFunctions(void *(*getProcAddress)(const GLubyte *),
|
|||||||
strcpy(allexts, extensions);
|
strcpy(allexts, extensions);
|
||||||
strcat(allexts, " ");
|
strcat(allexts, " ");
|
||||||
strcat(allexts, ext2);
|
strcat(allexts, ext2);
|
||||||
mp_msg(MSGT_VO, MSGL_V, "OpenGL extensions string:\n%s\n", allexts);
|
mp_msg(MSGT_VO, MSGL_DBG2, "OpenGL extensions string:\n%s\n", allexts);
|
||||||
if (!getProcAddress)
|
if (!getProcAddress)
|
||||||
getProcAddress = setNull;
|
getProcAddress = setNull;
|
||||||
for (dsc = extfuncs; dsc->funcptr; dsc++) {
|
for (dsc = extfuncs; dsc->funcptr; dsc++) {
|
||||||
@ -696,7 +700,7 @@ static void store_weights(float x, GLfloat *dst) {
|
|||||||
* \param unit texture unit to attach texture to
|
* \param unit texture unit to attach texture to
|
||||||
*/
|
*/
|
||||||
static void gen_spline_lookup_tex(GLenum unit) {
|
static void gen_spline_lookup_tex(GLenum unit) {
|
||||||
GLfloat tex[4 * LOOKUP_BSPLINE_RES];
|
GLfloat *tex = calloc(4 * LOOKUP_BSPLINE_RES, sizeof(*tex));
|
||||||
GLfloat *tp = tex;
|
GLfloat *tp = tex;
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < LOOKUP_BSPLINE_RES; i++) {
|
for (i = 0; i < LOOKUP_BSPLINE_RES; i++) {
|
||||||
@ -713,6 +717,7 @@ static void gen_spline_lookup_tex(GLenum unit) {
|
|||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||||
ActiveTexture(GL_TEXTURE0);
|
ActiveTexture(GL_TEXTURE0);
|
||||||
|
free(tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char *bilin_filt_template =
|
static const char *bilin_filt_template =
|
||||||
@ -1162,7 +1167,7 @@ int loadGPUProgram(GLenum target, char *prog) {
|
|||||||
glGetString(GL_PROGRAM_ERROR_STRING), &prog[err]);
|
glGetString(GL_PROGRAM_ERROR_STRING), &prog[err]);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
if (!GetProgramiv || !mp_msg_test(MSGT_VO, MSGL_V))
|
if (!GetProgramiv || !mp_msg_test(MSGT_VO, MSGL_DBG2))
|
||||||
return 1;
|
return 1;
|
||||||
mp_msg(MSGT_VO, MSGL_V, "[gl] Program statistics:\n");
|
mp_msg(MSGT_VO, MSGL_V, "[gl] Program statistics:\n");
|
||||||
for (i = 0; progstats[i].name; i++) {
|
for (i = 0; progstats[i].name; i++) {
|
||||||
@ -1258,7 +1263,7 @@ static void glSetupYUVFragprog(gl_conversion_params_t *params) {
|
|||||||
mp_msg(MSGT_VO, MSGL_ERR, "[gl] unknown conversion type %i\n", YUV_CONVERSION(type));
|
mp_msg(MSGT_VO, MSGL_ERR, "[gl] unknown conversion type %i\n", YUV_CONVERSION(type));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
mp_msg(MSGT_VO, MSGL_V, "[gl] generated fragment program:\n%s\n", yuv_prog);
|
mp_msg(MSGT_VO, MSGL_DBG2, "[gl] generated fragment program:\n%s\n", yuv_prog);
|
||||||
loadGPUProgram(GL_FRAGMENT_PROGRAM, yuv_prog);
|
loadGPUProgram(GL_FRAGMENT_PROGRAM, yuv_prog);
|
||||||
free(yuv_prog);
|
free(yuv_prog);
|
||||||
}
|
}
|
||||||
@ -1457,7 +1462,7 @@ static void *w32gpa(const GLubyte *procName) {
|
|||||||
int setGlWindow(int *vinfo, HGLRC *context, HWND win)
|
int setGlWindow(int *vinfo, HGLRC *context, HWND win)
|
||||||
{
|
{
|
||||||
int new_vinfo;
|
int new_vinfo;
|
||||||
HDC windc = GetDC(win);
|
HDC windc = vo_w32_get_dc(win);
|
||||||
HGLRC new_context = 0;
|
HGLRC new_context = 0;
|
||||||
int keep_context = 0;
|
int keep_context = 0;
|
||||||
int res = SET_WINDOW_FAILED;
|
int res = SET_WINDOW_FAILED;
|
||||||
@ -1510,7 +1515,7 @@ int setGlWindow(int *vinfo, HGLRC *context, HWND win)
|
|||||||
res = SET_WINDOW_OK;
|
res = SET_WINDOW_OK;
|
||||||
|
|
||||||
out:
|
out:
|
||||||
ReleaseDC(win, windc);
|
vo_w32_release_dc(win, windc);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1524,9 +1529,9 @@ void releaseGlContext(int *vinfo, HGLRC *context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void swapGlBuffers(void) {
|
void swapGlBuffers(void) {
|
||||||
HDC vo_hdc = GetDC(vo_w32_window);
|
HDC vo_hdc = vo_w32_get_dc(vo_w32_window);
|
||||||
SwapBuffers(vo_hdc);
|
SwapBuffers(vo_hdc);
|
||||||
ReleaseDC(vo_w32_window, vo_hdc);
|
vo_w32_release_dc(vo_w32_window, vo_hdc);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#ifdef HAVE_LIBDL
|
#ifdef HAVE_LIBDL
|
||||||
|
@ -547,6 +547,7 @@ config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uin
|
|||||||
mp_msg(MSGT_VO, MSGL_ERR, "[gl] no GLX support present\n");
|
mp_msg(MSGT_VO, MSGL_ERR, "[gl] no GLX support present\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
mp_msg(MSGT_VO, MSGL_V, "[gl] GLX chose visual with ID 0x%x\n", (int)vinfo->visualid);
|
||||||
|
|
||||||
vo_x11_create_vo_window(vinfo, vo_dx, vo_dy, d_width, d_height, flags,
|
vo_x11_create_vo_window(vinfo, vo_dx, vo_dy, d_width, d_height, flags,
|
||||||
XCreateColormap(mDisplay, mRootWin, vinfo->visual, AllocNone),
|
XCreateColormap(mDisplay, mRootWin, vinfo->visual, AllocNone),
|
||||||
|
@ -114,7 +114,7 @@ static GLint getInternalFormat(void)
|
|||||||
{
|
{
|
||||||
#ifdef GL_WIN32
|
#ifdef GL_WIN32
|
||||||
PIXELFORMATDESCRIPTOR pfd;
|
PIXELFORMATDESCRIPTOR pfd;
|
||||||
HDC vo_hdc = GetDC(vo_w32_window);
|
HDC vo_hdc = vo_w32_get_dc(vo_w32_window);
|
||||||
int pf = GetPixelFormat(vo_hdc);
|
int pf = GetPixelFormat(vo_hdc);
|
||||||
if (!DescribePixelFormat(vo_hdc, pf, sizeof pfd, &pfd)) {
|
if (!DescribePixelFormat(vo_hdc, pf, sizeof pfd, &pfd)) {
|
||||||
r_sz = g_sz = b_sz = a_sz = 0;
|
r_sz = g_sz = b_sz = a_sz = 0;
|
||||||
@ -124,7 +124,7 @@ static GLint getInternalFormat(void)
|
|||||||
b_sz = pfd.cBlueBits;
|
b_sz = pfd.cBlueBits;
|
||||||
a_sz = pfd.cAlphaBits;
|
a_sz = pfd.cAlphaBits;
|
||||||
}
|
}
|
||||||
ReleaseDC(vo_w32_window, vo_hdc);
|
vo_w32_release_dc(vo_w32_window, vo_hdc);
|
||||||
#else
|
#else
|
||||||
if (glXGetConfig(mDisplay, gl_vinfo, GLX_RED_SIZE, &r_sz) != 0) r_sz = 0;
|
if (glXGetConfig(mDisplay, gl_vinfo, GLX_RED_SIZE, &r_sz) != 0) r_sz = 0;
|
||||||
if (glXGetConfig(mDisplay, gl_vinfo, GLX_GREEN_SIZE, &g_sz) != 0) g_sz = 0;
|
if (glXGetConfig(mDisplay, gl_vinfo, GLX_GREEN_SIZE, &g_sz) != 0) g_sz = 0;
|
||||||
|
@ -54,6 +54,8 @@ static uint32_t o_dheight;
|
|||||||
static HINSTANCE hInstance;
|
static HINSTANCE hInstance;
|
||||||
#define vo_window vo_w32_window
|
#define vo_window vo_w32_window
|
||||||
HWND vo_window = 0;
|
HWND vo_window = 0;
|
||||||
|
/** HDC used when rendering to a device instead of window */
|
||||||
|
static HDC dev_hdc;
|
||||||
static int event_flags;
|
static int event_flags;
|
||||||
static int mon_cnt;
|
static int mon_cnt;
|
||||||
|
|
||||||
@ -331,7 +333,7 @@ static void resetMode(void) {
|
|||||||
static int createRenderingContext(void) {
|
static int createRenderingContext(void) {
|
||||||
HWND layer = HWND_NOTOPMOST;
|
HWND layer = HWND_NOTOPMOST;
|
||||||
PIXELFORMATDESCRIPTOR pfd;
|
PIXELFORMATDESCRIPTOR pfd;
|
||||||
HDC vo_hdc = GetDC(vo_window);
|
HDC vo_hdc = vo_w32_get_dc(vo_window);
|
||||||
RECT r;
|
RECT r;
|
||||||
int pf;
|
int pf;
|
||||||
if (WinID < 0) {
|
if (WinID < 0) {
|
||||||
@ -398,7 +400,7 @@ static int createRenderingContext(void) {
|
|||||||
|
|
||||||
mp_msg(MSGT_VO, MSGL_V, "vo: win32: running at %dx%d with depth %d\n", vo_screenwidth, vo_screenheight, depthonscreen);
|
mp_msg(MSGT_VO, MSGL_V, "vo: win32: running at %dx%d with depth %d\n", vo_screenwidth, vo_screenheight, depthonscreen);
|
||||||
|
|
||||||
ReleaseDC(vo_window, vo_hdc);
|
vo_w32_release_dc(vo_window, vo_hdc);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -432,6 +434,18 @@ int vo_w32_config(uint32_t width, uint32_t height, uint32_t flags) {
|
|||||||
return createRenderingContext();
|
return createRenderingContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief return the name of the selected device if it is indepedant
|
||||||
|
*/
|
||||||
|
static char *get_display_name(void) {
|
||||||
|
DISPLAY_DEVICE disp;
|
||||||
|
disp.cb = sizeof(disp);
|
||||||
|
EnumDisplayDevices(NULL, vo_adapter_num, &disp, 0);
|
||||||
|
if (disp.StateFlags & DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
|
||||||
|
return NULL;
|
||||||
|
return disp.DeviceName;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Initialize w32_common framework.
|
* \brief Initialize w32_common framework.
|
||||||
*
|
*
|
||||||
@ -453,6 +467,7 @@ int vo_w32_init(void) {
|
|||||||
HICON mplayerIcon = 0;
|
HICON mplayerIcon = 0;
|
||||||
char exedir[MAX_PATH];
|
char exedir[MAX_PATH];
|
||||||
HINSTANCE user32;
|
HINSTANCE user32;
|
||||||
|
char *dev;
|
||||||
|
|
||||||
if (vo_window)
|
if (vo_window)
|
||||||
return 1;
|
return 1;
|
||||||
@ -500,6 +515,9 @@ int vo_w32_init(void) {
|
|||||||
myGetMonitorInfo = GetProcAddress(user32, "GetMonitorInfoA");
|
myGetMonitorInfo = GetProcAddress(user32, "GetMonitorInfoA");
|
||||||
myEnumDisplayMonitors = GetProcAddress(user32, "EnumDisplayMonitors");
|
myEnumDisplayMonitors = GetProcAddress(user32, "EnumDisplayMonitors");
|
||||||
}
|
}
|
||||||
|
dev_hdc = 0;
|
||||||
|
dev = get_display_name();
|
||||||
|
if (dev) dev_hdc = CreateDC(dev, NULL, NULL, NULL);
|
||||||
updateScreenProperties();
|
updateScreenProperties();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
@ -567,7 +585,29 @@ void vo_w32_uninit(void) {
|
|||||||
resetMode();
|
resetMode();
|
||||||
ShowCursor(1);
|
ShowCursor(1);
|
||||||
depthonscreen = 0;
|
depthonscreen = 0;
|
||||||
|
if (dev_hdc) DeleteDC(dev_hdc);
|
||||||
|
dev_hdc = 0;
|
||||||
DestroyWindow(vo_window);
|
DestroyWindow(vo_window);
|
||||||
vo_window = 0;
|
vo_window = 0;
|
||||||
UnregisterClass(classname, 0);
|
UnregisterClass(classname, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief get a device context to draw in
|
||||||
|
*
|
||||||
|
* \param wnd window the DC should belong to if it makes sense
|
||||||
|
*/
|
||||||
|
HDC vo_w32_get_dc(HWND wnd) {
|
||||||
|
if (dev_hdc) return dev_hdc;
|
||||||
|
return GetDC(wnd);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief release a device context
|
||||||
|
*
|
||||||
|
* \param wnd window the DC probably belongs to
|
||||||
|
*/
|
||||||
|
void vo_w32_release_dc(HWND wnd, HDC dc) {
|
||||||
|
if (dev_hdc) return;
|
||||||
|
ReleaseDC(wnd, dc);
|
||||||
|
}
|
||||||
|
@ -34,5 +34,7 @@ int vo_w32_check_events(void);
|
|||||||
int vo_w32_config(uint32_t, uint32_t, uint32_t);
|
int vo_w32_config(uint32_t, uint32_t, uint32_t);
|
||||||
void destroyRenderingContext(void);
|
void destroyRenderingContext(void);
|
||||||
void w32_update_xinerama_info(void);
|
void w32_update_xinerama_info(void);
|
||||||
|
HDC vo_w32_get_dc(HWND wnd);
|
||||||
|
void vo_w32_release_dc(HWND wnd, HDC dc);
|
||||||
|
|
||||||
#endif /* MPLAYER_W32_COMMON_H */
|
#endif /* MPLAYER_W32_COMMON_H */
|
||||||
|
@ -1048,6 +1048,9 @@ static struct {
|
|||||||
{"bgr4", IMGFMT_BGR4},
|
{"bgr4", IMGFMT_BGR4},
|
||||||
{"bg4b", IMGFMT_BG4B},
|
{"bg4b", IMGFMT_BG4B},
|
||||||
{"bgr1", IMGFMT_BGR1},
|
{"bgr1", IMGFMT_BGR1},
|
||||||
|
{"rgb48be", IMGFMT_RGB48BE},
|
||||||
|
{"rgb48le", IMGFMT_RGB48LE},
|
||||||
|
{"rgb48ne", IMGFMT_RGB48NE},
|
||||||
{"rgb24", IMGFMT_RGB24},
|
{"rgb24", IMGFMT_RGB24},
|
||||||
{"rgb32", IMGFMT_RGB32},
|
{"rgb32", IMGFMT_RGB32},
|
||||||
{"rgb16", IMGFMT_RGB16},
|
{"rgb16", IMGFMT_RGB16},
|
||||||
|
@ -3460,10 +3460,6 @@ if(stream_dump_type==5){
|
|||||||
int len;
|
int len;
|
||||||
FILE *f;
|
FILE *f;
|
||||||
current_module="dumpstream";
|
current_module="dumpstream";
|
||||||
if(mpctx->stream->type==STREAMTYPE_STREAM && mpctx->stream->fd<0){
|
|
||||||
mp_tmsg(MSGT_CPLAYER,MSGL_FATAL,"Cannot dump this stream - no file descriptor available.\n");
|
|
||||||
exit_player(mpctx, EXIT_ERROR);
|
|
||||||
}
|
|
||||||
stream_reset(mpctx->stream);
|
stream_reset(mpctx->stream);
|
||||||
stream_seek(mpctx->stream,mpctx->stream->start_pos);
|
stream_seek(mpctx->stream,mpctx->stream->start_pos);
|
||||||
f=fopen(stream_dump_name,"wb");
|
f=fopen(stream_dump_name,"wb");
|
||||||
|
@ -307,8 +307,7 @@ int stream_enable_cache(stream_t *stream,int size,int min,int seek_limit){
|
|||||||
int ss = stream->sector_size ? stream->sector_size : STREAM_BUFFER_SIZE;
|
int ss = stream->sector_size ? stream->sector_size : STREAM_BUFFER_SIZE;
|
||||||
cache_vars_t* s;
|
cache_vars_t* s;
|
||||||
|
|
||||||
if (stream->type==STREAMTYPE_STREAM && stream->fd < 0) {
|
if (stream->flags & STREAM_NON_CACHEABLE) {
|
||||||
// The stream has no 'fd' behind it, so is non-cacheable
|
|
||||||
mp_msg(MSGT_CACHE,MSGL_STATUS,"\rThis stream is non-cacheable\n");
|
mp_msg(MSGT_CACHE,MSGL_STATUS,"\rThis stream is non-cacheable\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -891,7 +891,7 @@ static int fixup_open(stream_t *stream,int seekable) {
|
|||||||
stream->type = STREAMTYPE_STREAM;
|
stream->type = STREAMTYPE_STREAM;
|
||||||
if(!is_icy && !is_ultravox && seekable)
|
if(!is_icy && !is_ultravox && seekable)
|
||||||
{
|
{
|
||||||
stream->flags |= STREAM_SEEK;
|
stream->flags |= MP_STREAM_SEEK;
|
||||||
stream->seek = http_seek;
|
stream->seek = http_seek;
|
||||||
}
|
}
|
||||||
stream->streaming_ctrl->bandwidth = network_bandwidth;
|
stream->streaming_ctrl->bandwidth = network_bandwidth;
|
||||||
|
@ -60,6 +60,7 @@ extern const stream_info_t stream_info_rtsp_sip;
|
|||||||
extern const stream_info_t stream_info_cue;
|
extern const stream_info_t stream_info_cue;
|
||||||
extern const stream_info_t stream_info_null;
|
extern const stream_info_t stream_info_null;
|
||||||
extern const stream_info_t stream_info_mf;
|
extern const stream_info_t stream_info_mf;
|
||||||
|
extern const stream_info_t stream_info_ffmpeg;
|
||||||
extern const stream_info_t stream_info_file;
|
extern const stream_info_t stream_info_file;
|
||||||
extern const stream_info_t stream_info_ifo;
|
extern const stream_info_t stream_info_ifo;
|
||||||
extern const stream_info_t stream_info_dvd;
|
extern const stream_info_t stream_info_dvd;
|
||||||
@ -114,6 +115,9 @@ static const stream_info_t* const auto_open_streams[] = {
|
|||||||
#ifdef CONFIG_DVDNAV
|
#ifdef CONFIG_DVDNAV
|
||||||
&stream_info_dvdnav,
|
&stream_info_dvdnav,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_LIBAVFORMAT
|
||||||
|
&stream_info_ffmpeg,
|
||||||
|
#endif
|
||||||
|
|
||||||
&stream_info_null,
|
&stream_info_null,
|
||||||
&stream_info_mf,
|
&stream_info_mf,
|
||||||
@ -165,10 +169,10 @@ static stream_t *open_stream_plugin(const stream_info_t *sinfo, char *filename,
|
|||||||
}
|
}
|
||||||
if(s->type <= -2)
|
if(s->type <= -2)
|
||||||
mp_msg(MSGT_OPEN,MSGL_WARN, "Warning streams need a type !!!!\n");
|
mp_msg(MSGT_OPEN,MSGL_WARN, "Warning streams need a type !!!!\n");
|
||||||
if(s->flags & STREAM_SEEK && !s->seek)
|
if(s->flags & MP_STREAM_SEEK && !s->seek)
|
||||||
s->flags &= ~STREAM_SEEK;
|
s->flags &= ~MP_STREAM_SEEK;
|
||||||
if(s->seek && !(s->flags & STREAM_SEEK))
|
if(s->seek && !(s->flags & MP_STREAM_SEEK))
|
||||||
s->flags |= STREAM_SEEK;
|
s->flags |= MP_STREAM_SEEK;
|
||||||
|
|
||||||
s->mode = mode;
|
s->mode = mode;
|
||||||
|
|
||||||
@ -248,6 +252,9 @@ int stream_fill_buffer(stream_t *s){
|
|||||||
len=s->streaming_ctrl->streaming_read(s->fd,s->buffer,STREAM_BUFFER_SIZE, s->streaming_ctrl);
|
len=s->streaming_ctrl->streaming_read(s->fd,s->buffer,STREAM_BUFFER_SIZE, s->streaming_ctrl);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
if (s->fill_buffer)
|
||||||
|
len = s->fill_buffer(s, s->buffer, STREAM_BUFFER_SIZE);
|
||||||
|
else
|
||||||
len=read(s->fd,s->buffer,STREAM_BUFFER_SIZE);
|
len=read(s->fd,s->buffer,STREAM_BUFFER_SIZE);
|
||||||
break;
|
break;
|
||||||
case STREAMTYPE_DS:
|
case STREAMTYPE_DS:
|
||||||
@ -322,8 +329,9 @@ if(newpos==0 || newpos!=s->pos){
|
|||||||
mp_msg(MSGT_STREAM,MSGL_INFO,"Stream not seekable!\n");
|
mp_msg(MSGT_STREAM,MSGL_INFO,"Stream not seekable!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
#else
|
#endif
|
||||||
if(newpos<s->pos){
|
if(newpos<s->pos){
|
||||||
mp_msg(MSGT_STREAM,MSGL_INFO,"Cannot seek backward in linear streams!\n");
|
mp_msg(MSGT_STREAM,MSGL_INFO,"Cannot seek backward in linear streams!\n");
|
||||||
return 1;
|
return 1;
|
||||||
@ -331,7 +339,6 @@ if(newpos==0 || newpos!=s->pos){
|
|||||||
while(s->pos<newpos){
|
while(s->pos<newpos){
|
||||||
if(stream_fill_buffer(s)<=0) break; // EOF
|
if(stream_fill_buffer(s)<=0) break; // EOF
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
// This should at the beginning as soon as all streams are converted
|
// This should at the beginning as soon as all streams are converted
|
||||||
@ -387,8 +394,7 @@ stream_t* new_memory_stream(unsigned char* data,int len){
|
|||||||
|
|
||||||
if(len < 0)
|
if(len < 0)
|
||||||
return NULL;
|
return NULL;
|
||||||
s=malloc(sizeof(stream_t)+len);
|
s=calloc(1, sizeof(stream_t)+len);
|
||||||
memset(s,0,sizeof(stream_t));
|
|
||||||
s->fd=-1;
|
s->fd=-1;
|
||||||
s->type=STREAMTYPE_MEMORY;
|
s->type=STREAMTYPE_MEMORY;
|
||||||
s->buf_pos=0; s->buf_len=len;
|
s->buf_pos=0; s->buf_len=len;
|
||||||
@ -400,9 +406,8 @@ stream_t* new_memory_stream(unsigned char* data,int len){
|
|||||||
}
|
}
|
||||||
|
|
||||||
stream_t* new_stream(int fd,int type){
|
stream_t* new_stream(int fd,int type){
|
||||||
stream_t *s=malloc(sizeof(stream_t));
|
stream_t *s=calloc(1, sizeof(stream_t));
|
||||||
if(s==NULL) return NULL;
|
if(s==NULL) return NULL;
|
||||||
memset(s,0,sizeof(stream_t));
|
|
||||||
|
|
||||||
#if HAVE_WINSOCK2_H
|
#if HAVE_WINSOCK2_H
|
||||||
{
|
{
|
||||||
|
@ -37,10 +37,14 @@
|
|||||||
#define STREAM_READ 0
|
#define STREAM_READ 0
|
||||||
#define STREAM_WRITE 1
|
#define STREAM_WRITE 1
|
||||||
/// Seek flags, if not mannualy set and s->seek isn't NULL
|
/// Seek flags, if not mannualy set and s->seek isn't NULL
|
||||||
/// STREAM_SEEK is automaticly set
|
/// MP_STREAM_SEEK is automaticly set
|
||||||
#define STREAM_SEEK_BW 2
|
#define MP_STREAM_SEEK_BW 2
|
||||||
#define STREAM_SEEK_FW 4
|
#define MP_STREAM_SEEK_FW 4
|
||||||
#define STREAM_SEEK (STREAM_SEEK_BW|STREAM_SEEK_FW)
|
#define MP_STREAM_SEEK (MP_STREAM_SEEK_BW|MP_STREAM_SEEK_FW)
|
||||||
|
/** This is a HACK for live555 that does not respect the
|
||||||
|
separation between stream an demuxer and thus is not
|
||||||
|
actually a stream cache can not be used */
|
||||||
|
#define STREAM_NON_CACHEABLE 8
|
||||||
|
|
||||||
//////////// Open return code
|
//////////// Open return code
|
||||||
#define STREAM_REDIRECTED -2
|
#define STREAM_REDIRECTED -2
|
||||||
@ -273,7 +277,7 @@ inline static int stream_seek(stream_t *s,off_t pos){
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline static int stream_skip(stream_t *s,off_t len){
|
inline static int stream_skip(stream_t *s,off_t len){
|
||||||
if( (len<0 && (s->flags & STREAM_SEEK_BW)) || (len>2*STREAM_BUFFER_SIZE && (s->flags & STREAM_SEEK_FW)) ) {
|
if( (len<0 && (s->flags & MP_STREAM_SEEK_BW)) || (len>2*STREAM_BUFFER_SIZE && (s->flags & MP_STREAM_SEEK_FW)) ) {
|
||||||
// negative or big skip!
|
// negative or big skip!
|
||||||
return stream_seek(s,stream_tell(s)+len);
|
return stream_seek(s,stream_tell(s)+len);
|
||||||
}
|
}
|
||||||
|
@ -578,7 +578,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
|
|||||||
stream->fd = f;
|
stream->fd = f;
|
||||||
stream->type = STREAMTYPE_VCDBINCUE;
|
stream->type = STREAMTYPE_VCDBINCUE;
|
||||||
stream->sector_size = VCD_SECTOR_DATA;
|
stream->sector_size = VCD_SECTOR_DATA;
|
||||||
stream->flags = STREAM_READ | STREAM_SEEK_FW;
|
stream->flags = STREAM_READ | MP_STREAM_SEEK_FW;
|
||||||
stream->start_pos = ret;
|
stream->start_pos = ret;
|
||||||
stream->end_pos = ret2;
|
stream->end_pos = ret2;
|
||||||
stream->fill_buffer = cue_vcd_read;
|
stream->fill_buffer = cue_vcd_read;
|
||||||
|
@ -978,7 +978,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
|
|||||||
// return NULL;
|
// return NULL;
|
||||||
stream->type = STREAMTYPE_DVD;
|
stream->type = STREAMTYPE_DVD;
|
||||||
stream->sector_size = 2048;
|
stream->sector_size = 2048;
|
||||||
stream->flags = STREAM_READ | STREAM_SEEK;
|
stream->flags = STREAM_READ | MP_STREAM_SEEK;
|
||||||
stream->fill_buffer = fill_buffer;
|
stream->fill_buffer = fill_buffer;
|
||||||
stream->seek = seek;
|
stream->seek = seek;
|
||||||
stream->control = control;
|
stream->control = control;
|
||||||
|
@ -596,7 +596,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
|
|||||||
dvdnav_angle_change(priv->dvdnav, dvd_angle);
|
dvdnav_angle_change(priv->dvdnav, dvd_angle);
|
||||||
|
|
||||||
stream->sector_size = 2048;
|
stream->sector_size = 2048;
|
||||||
stream->flags = STREAM_READ | STREAM_SEEK;
|
stream->flags = STREAM_READ | MP_STREAM_SEEK;
|
||||||
stream->fill_buffer = fill_buffer;
|
stream->fill_buffer = fill_buffer;
|
||||||
stream->seek = seek;
|
stream->seek = seek;
|
||||||
stream->control = control;
|
stream->control = control;
|
||||||
|
140
stream/stream_ffmpeg.c
Normal file
140
stream/stream_ffmpeg.c
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include "libavformat/avformat.h"
|
||||||
|
#include "libavformat/avio.h"
|
||||||
|
#include "mp_msg.h"
|
||||||
|
#include "stream.h"
|
||||||
|
#include "m_option.h"
|
||||||
|
#include "m_struct.h"
|
||||||
|
|
||||||
|
static struct stream_priv_s {
|
||||||
|
char *filename;
|
||||||
|
char *filename2;
|
||||||
|
} stream_priv_dflts = {
|
||||||
|
NULL, NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
#define ST_OFF(f) M_ST_OFF(struct stream_priv_s,f)
|
||||||
|
/// URL definition
|
||||||
|
static const m_option_t stream_opts_fields[] = {
|
||||||
|
{"string", ST_OFF(filename), CONF_TYPE_STRING, 0, 0 ,0, NULL},
|
||||||
|
{"filename", ST_OFF(filename2), CONF_TYPE_STRING, 0, 0 ,0, NULL},
|
||||||
|
{NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct m_struct_st stream_opts = {
|
||||||
|
"ffmpeg",
|
||||||
|
sizeof(struct stream_priv_s),
|
||||||
|
&stream_priv_dflts,
|
||||||
|
stream_opts_fields
|
||||||
|
};
|
||||||
|
|
||||||
|
static int fill_buffer(stream_t *s, char *buffer, int max_len)
|
||||||
|
{
|
||||||
|
int r = url_read_complete(s->priv, buffer, max_len);
|
||||||
|
return (r <= 0) ? -1 : r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int write_buffer(stream_t *s, char *buffer, int len)
|
||||||
|
{
|
||||||
|
int r = url_write(s->priv, buffer, len);
|
||||||
|
return (r <= 0) ? -1 : r;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int seek(stream_t *s, off_t newpos)
|
||||||
|
{
|
||||||
|
s->pos = newpos;
|
||||||
|
if (url_seek(s->priv, s->pos, SEEK_SET) < 0) {
|
||||||
|
s->eof = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int control(stream_t *s, int cmd, void *arg)
|
||||||
|
{
|
||||||
|
int64_t size;
|
||||||
|
switch(cmd) {
|
||||||
|
case STREAM_CTRL_GET_SIZE:
|
||||||
|
size = url_filesize(s->priv);
|
||||||
|
if(size >= 0) {
|
||||||
|
*(off_t *)arg = size;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return STREAM_UNSUPPORTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void close_f(stream_t *stream)
|
||||||
|
{
|
||||||
|
url_close(stream->priv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char prefix[] = "ffmpeg://";
|
||||||
|
|
||||||
|
static int open_f(stream_t *stream, int mode, void *opts, int *file_format)
|
||||||
|
{
|
||||||
|
int flags = 0;
|
||||||
|
const char *filename;
|
||||||
|
struct stream_priv_s *p = opts;
|
||||||
|
URLContext *ctx = NULL;
|
||||||
|
int res = STREAM_ERROR;
|
||||||
|
int64_t size;
|
||||||
|
|
||||||
|
av_register_all();
|
||||||
|
if (mode == STREAM_READ)
|
||||||
|
flags = URL_RDONLY;
|
||||||
|
else if (mode == STREAM_WRITE)
|
||||||
|
flags = URL_WRONLY;
|
||||||
|
else {
|
||||||
|
mp_msg(MSGT_OPEN, MSGL_ERR, "[ffmpeg] Unknown open mode %d\n", mode);
|
||||||
|
res = STREAM_UNSUPPORTED;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p->filename)
|
||||||
|
filename = p->filename;
|
||||||
|
else if (p->filename2)
|
||||||
|
filename = p->filename2;
|
||||||
|
else {
|
||||||
|
mp_msg(MSGT_OPEN, MSGL_ERR, "[ffmpeg] No URL\n");
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
if (!strncmp(filename, prefix, strlen(prefix)))
|
||||||
|
filename += strlen(prefix);
|
||||||
|
mp_msg(MSGT_OPEN, MSGL_V, "[ffmpeg] Opening %s\n", filename);
|
||||||
|
|
||||||
|
if (url_open(&ctx, filename, flags) < 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
stream->priv = ctx;
|
||||||
|
size = url_filesize(ctx);
|
||||||
|
if (size >= 0)
|
||||||
|
stream->end_pos = size;
|
||||||
|
stream->type = STREAMTYPE_FILE;
|
||||||
|
stream->seek = seek;
|
||||||
|
if (ctx->is_streamed) {
|
||||||
|
stream->type = STREAMTYPE_STREAM;
|
||||||
|
stream->seek = NULL;
|
||||||
|
}
|
||||||
|
stream->fill_buffer = fill_buffer;
|
||||||
|
stream->write_buffer = write_buffer;
|
||||||
|
stream->control = control;
|
||||||
|
stream->close = close_f;
|
||||||
|
res = STREAM_OK;
|
||||||
|
|
||||||
|
out:
|
||||||
|
m_struct_free(&stream_opts,opts);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
const stream_info_t stream_info_ffmpeg = {
|
||||||
|
"FFmpeg",
|
||||||
|
"ffmpeg",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
open_f,
|
||||||
|
{ "ffmpeg", NULL },
|
||||||
|
&stream_opts,
|
||||||
|
1 // Urls are an option string
|
||||||
|
};
|
@ -159,7 +159,7 @@ static int open_f(stream_t *stream,int mode, void* opts, int* file_format) {
|
|||||||
#endif
|
#endif
|
||||||
if(mode == STREAM_READ) stream->seek = seek_forward;
|
if(mode == STREAM_READ) stream->seek = seek_forward;
|
||||||
stream->type = STREAMTYPE_STREAM; // Must be move to STREAMTYPE_FILE
|
stream->type = STREAMTYPE_STREAM; // Must be move to STREAMTYPE_FILE
|
||||||
stream->flags |= STREAM_SEEK_FW;
|
stream->flags |= MP_STREAM_SEEK_FW;
|
||||||
} else if(len >= 0) {
|
} else if(len >= 0) {
|
||||||
stream->seek = seek;
|
stream->seek = seek;
|
||||||
stream->end_pos = len;
|
stream->end_pos = len;
|
||||||
|
@ -44,6 +44,7 @@ static int open_live_rtsp_sip(stream_t *stream,int mode, void* opts, int* file_f
|
|||||||
|
|
||||||
*file_format = DEMUXER_TYPE_RTP;
|
*file_format = DEMUXER_TYPE_RTP;
|
||||||
stream->type = STREAMTYPE_STREAM;
|
stream->type = STREAMTYPE_STREAM;
|
||||||
|
stream->flags = STREAM_NON_CACHEABLE;
|
||||||
return STREAM_OK;
|
return STREAM_OK;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
@ -279,7 +279,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
|
|||||||
|
|
||||||
stream->fill_buffer = fill_buffer;
|
stream->fill_buffer = fill_buffer;
|
||||||
stream->control = control;
|
stream->control = control;
|
||||||
if(stream->flags & STREAM_SEEK)
|
if(stream->flags & MP_STREAM_SEEK)
|
||||||
stream->seek = seek;
|
stream->seek = seek;
|
||||||
stream->close = close_s;
|
stream->close = close_s;
|
||||||
|
|
||||||
|
@ -138,7 +138,7 @@ static int open_f (stream_t *stream, int mode, void *opts, int* file_format) {
|
|||||||
smbc_lseek (fd, 0, SEEK_SET);
|
smbc_lseek (fd, 0, SEEK_SET);
|
||||||
}
|
}
|
||||||
if(len > 0 || mode == STREAM_WRITE) {
|
if(len > 0 || mode == STREAM_WRITE) {
|
||||||
stream->flags |= STREAM_SEEK;
|
stream->flags |= MP_STREAM_SEEK;
|
||||||
stream->seek = seek;
|
stream->seek = seek;
|
||||||
if(mode == STREAM_READ) stream->end_pos = len;
|
if(mode == STREAM_READ) stream->end_pos = len;
|
||||||
}
|
}
|
||||||
|
30
subreader.c
30
subreader.c
@ -19,6 +19,7 @@
|
|||||||
#include "mp_msg.h"
|
#include "mp_msg.h"
|
||||||
#include "subreader.h"
|
#include "subreader.h"
|
||||||
#include "stream/stream.h"
|
#include "stream/stream.h"
|
||||||
|
#include "libavutil/common.h"
|
||||||
|
|
||||||
#ifdef CONFIG_ENCA
|
#ifdef CONFIG_ENCA
|
||||||
#include <enca.h>
|
#include <enca.h>
|
||||||
@ -1084,7 +1085,7 @@ void subcp_open (stream_t *st)
|
|||||||
char enca_lang[3], enca_fallback[100];
|
char enca_lang[3], enca_fallback[100];
|
||||||
if (sscanf(sub_cp, "enca:%2s:%99s", enca_lang, enca_fallback) == 2
|
if (sscanf(sub_cp, "enca:%2s:%99s", enca_lang, enca_fallback) == 2
|
||||||
|| sscanf(sub_cp, "ENCA:%2s:%99s", enca_lang, enca_fallback) == 2) {
|
|| sscanf(sub_cp, "ENCA:%2s:%99s", enca_lang, enca_fallback) == 2) {
|
||||||
if (st && st->flags & STREAM_SEEK ) {
|
if (st && st->flags & MP_STREAM_SEEK ) {
|
||||||
cp_tmp = guess_cp(st, enca_lang, enca_fallback);
|
cp_tmp = guess_cp(st, enca_lang, enca_fallback);
|
||||||
} else {
|
} else {
|
||||||
cp_tmp = enca_fallback;
|
cp_tmp = enca_fallback;
|
||||||
@ -1147,10 +1148,13 @@ subtitle* subcp_recode (subtitle *sub)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_FRIBIDI
|
#ifdef CONFIG_FRIBIDI
|
||||||
#ifndef max
|
/**
|
||||||
#define max(a,b) (((a)>(b))?(a):(b))
|
* Do conversion necessary for right-to-left language support via fribidi.
|
||||||
#endif
|
* @param sub subtitle to convert
|
||||||
static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
* @param sub_utf8 whether the subtitle is encoded in UTF-8
|
||||||
|
* @param from first new subtitle, all lines before this are assumed to be already converted
|
||||||
|
*/
|
||||||
|
static subtitle* sub_fribidi (subtitle *sub, int sub_utf8, int from)
|
||||||
{
|
{
|
||||||
FriBidiChar logical[LINE_LEN+1], visual[LINE_LEN+1]; // Hopefully these two won't smash the stack
|
FriBidiChar logical[LINE_LEN+1], visual[LINE_LEN+1]; // Hopefully these two won't smash the stack
|
||||||
char *ip = NULL, *op = NULL;
|
char *ip = NULL, *op = NULL;
|
||||||
@ -1159,7 +1163,8 @@ static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
|||||||
int l=sub->lines;
|
int l=sub->lines;
|
||||||
int char_set_num;
|
int char_set_num;
|
||||||
fribidi_boolean log2vis;
|
fribidi_boolean log2vis;
|
||||||
if(flip_hebrew) { // Please fix the indentation someday
|
if (!flip_hebrew)
|
||||||
|
return sub;
|
||||||
fribidi_set_mirroring(1);
|
fribidi_set_mirroring(1);
|
||||||
fribidi_set_reorder_nsm(0);
|
fribidi_set_reorder_nsm(0);
|
||||||
|
|
||||||
@ -1168,7 +1173,7 @@ static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
|||||||
}else {
|
}else {
|
||||||
char_set_num = fribidi_parse_charset ("UTF-8");
|
char_set_num = fribidi_parse_charset ("UTF-8");
|
||||||
}
|
}
|
||||||
while (l) {
|
while (l > from) {
|
||||||
ip = sub->text[--l];
|
ip = sub->text[--l];
|
||||||
orig_len = len = strlen( ip ); // We assume that we don't use full unicode, only UTF-8 or ISO8859-x
|
orig_len = len = strlen( ip ); // We assume that we don't use full unicode, only UTF-8 or ISO8859-x
|
||||||
if(len > LINE_LEN) {
|
if(len > LINE_LEN) {
|
||||||
@ -1184,7 +1189,7 @@ static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
|||||||
if(log2vis) {
|
if(log2vis) {
|
||||||
len = fribidi_remove_bidi_marks (visual, len, NULL, NULL,
|
len = fribidi_remove_bidi_marks (visual, len, NULL, NULL,
|
||||||
NULL);
|
NULL);
|
||||||
if((op = malloc((max(2*orig_len,2*len) + 1))) == NULL) {
|
if((op = malloc((FFMAX(2*orig_len,2*len) + 1))) == NULL) {
|
||||||
mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error allocating mem.\n");
|
mp_msg(MSGT_SUBREADER,MSGL_WARN,"SUB: error allocating mem.\n");
|
||||||
l++;
|
l++;
|
||||||
break;
|
break;
|
||||||
@ -1194,12 +1199,11 @@ static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
|||||||
sub->text[l] = op;
|
sub->text[l] = op;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (l){
|
if (!from && l){
|
||||||
for (l = sub->lines; l;)
|
for (l = sub->lines; l;)
|
||||||
free (sub->text[--l]);
|
free (sub->text[--l]);
|
||||||
return ERR;
|
return ERR;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return sub;
|
return sub;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1417,7 +1421,7 @@ sub_data* sub_read_file (char *filename, float fps) {
|
|||||||
if ((sub!=ERR) && (sub_utf8 & 2)) sub=subcp_recode(sub);
|
if ((sub!=ERR) && (sub_utf8 & 2)) sub=subcp_recode(sub);
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_FRIBIDI
|
#ifdef CONFIG_FRIBIDI
|
||||||
if (sub!=ERR) sub=sub_fribidi(sub,sub_utf8);
|
if (sub!=ERR) sub=sub_fribidi(sub,sub_utf8,0);
|
||||||
#endif
|
#endif
|
||||||
if ( sub == ERR )
|
if ( sub == ERR )
|
||||||
{
|
{
|
||||||
@ -2271,6 +2275,7 @@ void sub_add_text(subtitle *sub, const char *txt, int len, double endpts) {
|
|||||||
int double_newline = 1; // ignore newlines at the beginning
|
int double_newline = 1; // ignore newlines at the beginning
|
||||||
int i, pos;
|
int i, pos;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
int orig_lines = sub->lines;
|
||||||
if (sub->lines >= SUB_MAX_TEXT) return;
|
if (sub->lines >= SUB_MAX_TEXT) return;
|
||||||
pos = 0;
|
pos = 0;
|
||||||
buf = malloc(MAX_SUBLINE + 1);
|
buf = malloc(MAX_SUBLINE + 1);
|
||||||
@ -2315,6 +2320,9 @@ void sub_add_text(subtitle *sub, const char *txt, int len, double endpts) {
|
|||||||
if (sub->lines < SUB_MAX_TEXT &&
|
if (sub->lines < SUB_MAX_TEXT &&
|
||||||
strlen(sub->text[sub->lines]))
|
strlen(sub->text[sub->lines]))
|
||||||
sub->lines++;
|
sub->lines++;
|
||||||
|
#ifdef CONFIG_FRIBIDI
|
||||||
|
sub = sub_fribidi(sub, sub_utf8, orig_lines);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MP_NOPTS_VALUE (-1LL<<63)
|
#define MP_NOPTS_VALUE (-1LL<<63)
|
||||||
|
Loading…
Reference in New Issue
Block a user