mirror of
https://github.com/mpv-player/mpv
synced 2024-12-24 07:33:46 +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>
|
||||
* mplayer -endpos option
|
||||
* -name, -title and -use-filename-title options
|
||||
* Italian man page and console messages translations
|
||||
* Italian documentation translation
|
||||
|
||||
|
20
Changelog
20
Changelog
@ -5,23 +5,39 @@ MPlayer (1.0)
|
||||
* YUY2 Lossless Codec (YLC0) via binary DLL
|
||||
* Truemotion RT codec (TR20) via binary DLL
|
||||
* Nogantech Codec (NTN1 and NTN2) via binary DLL
|
||||
* add new FourCCs (m1v1)
|
||||
TwoCCs (0xA106,0x6c75,0xAAC0)
|
||||
* add new FourCCs (m1v1,yuvs,VYUY,Y42B,V422,YUNV,UYNV,UYNY,uyv1,2Vu1,P422,HDYC,
|
||||
IJLV,MVJP)
|
||||
TwoCCs (0xA106,0x6c75,0xAAC0,0x55005354)
|
||||
to existing decoders.
|
||||
* AMR now handled via opencore decoder
|
||||
* updated Windoes Media Screen Codec (MSS1,MSS2) via binary DLL
|
||||
* h264 decoder (CoreAVC) on Windows only via binary DLL
|
||||
* Kega Game video codec (KGV1) via binary DLL
|
||||
* SoftLab-NSK Forward MPEG2 I-frames (SLIF) via binary DLL
|
||||
|
||||
Demuxers:
|
||||
* support for TrueHD in BluRay streams in libmpdemux
|
||||
* more BluRay codec support with lavf
|
||||
* fix length in asf/wmv files
|
||||
* support ISDB-Tb dvb streams
|
||||
|
||||
Other:
|
||||
* -nosub option for disabling auto-selected subtitles
|
||||
* support for displaying subs in the term (FIXME)
|
||||
* support for subtitles with audio only files
|
||||
* support for right-to-left languages with embedded subtitles
|
||||
* 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
|
||||
Decoders:
|
||||
|
@ -1,4 +1,4 @@
|
||||
.\" Synced with r29661
|
||||
.\" Synced with r29905
|
||||
.\" MPlayer (C) 2000-2009 MPlayer Team
|
||||
.\" Ezt a man oldalt Gabucino, Diego Biurrun és Jonas Jermann készíti/készítette
|
||||
.\" Karbantartó: Gabrov
|
||||
@ -33,7 +33,7 @@
|
||||
.\" Név
|
||||
.\" --------------------------------------------------------------------------
|
||||
.
|
||||
.TH MPlayer 1 "2009. 09. 11." "MPlayer Project" "A film lejátszó"
|
||||
.TH MPlayer 1 "2009. 11. 16." "MPlayer Project" "A film lejátszó"
|
||||
.
|
||||
.SH NÉV
|
||||
mplayer \- film lejátszó
|
||||
@ -184,7 +184,11 @@ nagy
|
||||
RGB/\:YUV átalakítás) és így tovább.
|
||||
.PP
|
||||
.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
|
||||
A gyors kezdéshez példákat ezen man oldal végén találhatsz.
|
||||
.PP
|
||||
@ -427,7 +431,8 @@ V
|
||||
.RS
|
||||
.
|
||||
(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
|
||||
.PP
|
||||
.PD 0
|
||||
@ -527,8 +532,9 @@ lej
|
||||
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
|
||||
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
|
||||
fájlokat. Ezért az MPlayer először megpróbálja betölteni az mplayer.conf-ot az
|
||||
Ráadásul a \-use\-filedir\-conf opció engedélyezi a könyvtár specifikus
|
||||
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
|
||||
specifikus konfigurációt.
|
||||
.PP
|
||||
@ -1330,6 +1336,8 @@ sztere
|
||||
térhatás
|
||||
.IPs 6
|
||||
teljes 5.1
|
||||
.IPs 8
|
||||
teljes 7.1
|
||||
.RE
|
||||
.PD 1
|
||||
.
|
||||
@ -1829,7 +1837,7 @@ faktorral. Nem biztos, hogy j
|
||||
.
|
||||
.TP
|
||||
.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).
|
||||
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
|
||||
@ -2352,6 +2360,11 @@ Ha a feliratok valamelyik
|
||||
\-vobsubid kapcsolót.
|
||||
.
|
||||
.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)
|
||||
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.
|
||||
@ -2794,8 +2807,8 @@ Hasznos, ha bizonyos kapcsolatokat automatikusan akarsz fel
|
||||
.IPs (no)estimate
|
||||
Megbecsüli az audió késleltetést, a szándékok szerint folyamatosabbá
|
||||
teszi a videó lejátszást (alapértelmezett: engedélyezve).
|
||||
.IPs (no)autostart (alapértelmezett: letiltva)
|
||||
Automatikusan elindítja a jackd-t, ha szükséges.
|
||||
.IPs (no)autostart
|
||||
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.
|
||||
.RE
|
||||
.PD 1
|
||||
@ -3110,7 +3123,7 @@ A _WIN_LAYER hint-et haszn
|
||||
.IPs netwm
|
||||
NETWM stílus kényszerítése.
|
||||
.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
|
||||
A _NETWM_STATE_STAYS_ON_TOP hint-et használja, ha elérhető.
|
||||
.REss
|
||||
@ -3205,6 +3218,10 @@ Az 1 n
|
||||
(megfelelő a (legtöbb?) LCD képernyőn).
|
||||
.
|
||||
.TP
|
||||
.B \-name (csak X11)
|
||||
Beállítja az ablak osztály nevét.
|
||||
.
|
||||
.TP
|
||||
.B \-nodouble
|
||||
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
|
||||
@ -3285,6 +3302,16 @@ Ha a k
|
||||
használd inkább a \-heartbeat\-cmd kapcsolót.
|
||||
.
|
||||
.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 \ \ \ "
|
||||
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.
|
||||
@ -3419,7 +3446,8 @@ lej
|
||||
Ha nem tudsz harver specifikus vezérlőt használni, valószínűleg ez a
|
||||
legjobb opció.
|
||||
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
|
||||
.RSs
|
||||
.IPs adaptor=<szám>
|
||||
@ -3467,7 +3495,8 @@ Vez
|
||||
.PD 1
|
||||
.
|
||||
.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.
|
||||
Támogatja a szoftveresen dekódolt videó megjelenítését is.
|
||||
.PD 0
|
||||
@ -3482,17 +3511,17 @@ Kiv
|
||||
Minden mód > 0 figyelembe veszi a \-field\-dominance kapcsolót.
|
||||
.RSss
|
||||
.IPs 0
|
||||
Nincs deinterlace.
|
||||
nincs deinterlace
|
||||
.IPs 1
|
||||
Csak az első mezőt mutatja, hasonló a \-vf field kapcsolóhoz.
|
||||
.IPs 2
|
||||
Bob deinterlace, hasonló a \-vf tfields=1 kapcsolóhoz.
|
||||
.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.
|
||||
Ez az alapértelmezett, ha a "D" gombbal engedélyezhető a deinterlacing.
|
||||
.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á.
|
||||
.RE
|
||||
.IPs chroma\-deint
|
||||
@ -3502,6 +3531,36 @@ szeretn
|
||||
Hasznos lassú videó memóriánál.
|
||||
.IPs pullup
|
||||
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
|
||||
.PD 1
|
||||
.
|
||||
@ -3552,7 +3611,7 @@ opci
|
||||
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
|
||||
\-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
|
||||
.RSs
|
||||
.IPs driver=<vezérlő>
|
||||
@ -3637,7 +3696,7 @@ K
|
||||
.IPs dive
|
||||
Kényszeríti a DIVE módot.
|
||||
.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.
|
||||
.RE
|
||||
.PD 1
|
||||
@ -5101,7 +5160,7 @@ Az
|
||||
.PD 1
|
||||
.
|
||||
.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.
|
||||
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
|
||||
@ -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.
|
||||
.IPs profile=<érték>
|
||||
Több profil is elérhető a kényelmesebb használatért:
|
||||
.PD 0
|
||||
.RSs
|
||||
default: ez lesz használva, ha nincs más megadva (fcut=700, feed=45);
|
||||
.br
|
||||
cmoy: Chu Moy körkörös implementáció (fcut=700, feed=60);
|
||||
.br
|
||||
jmeier: Jan Meier körkörös implementáció (fcut=650, feed=95).
|
||||
.REss
|
||||
.PD 1
|
||||
.IPs default
|
||||
ez lesz használva, ha nincs más megadva (fcut=700, feed=45);
|
||||
.IPs "cmoy\ "
|
||||
Chu Moy körkörös implementáció (fcut=700, feed=60);
|
||||
.IPs jmeier
|
||||
Jan Meier körkörös implementáció (fcut=650, feed=95).
|
||||
.RE
|
||||
.RE
|
||||
.sp 1
|
||||
.RS
|
||||
@ -5207,11 +5267,11 @@ csatorn
|
||||
.PD 0
|
||||
.RSs
|
||||
.IPs <nch>
|
||||
kimeneti csatornák száma (1\-6)
|
||||
kimeneti csatornák száma (1\-8)
|
||||
.IPs "<nr>\ "
|
||||
útvonalak száma (1\-6)
|
||||
útvonalak száma (1\-8)
|
||||
.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
|
||||
.sp 1
|
||||
.RS
|
||||
@ -5313,7 +5373,7 @@ csatorn
|
||||
.PD 0
|
||||
.RSs
|
||||
.IPs "<n>\ \ "
|
||||
a kimeneti csatornák száma (1\-6)
|
||||
a kimeneti csatornák száma (1\-8)
|
||||
.IPs <Lij>
|
||||
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
|
||||
@ -5355,7 +5415,7 @@ A legjobb eredm
|
||||
állítani. Ez növeli a sztereó és térhatású hangélményt.
|
||||
.IPs "<ch>\ "
|
||||
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,
|
||||
ha szükséges.
|
||||
.RE
|
||||
@ -5380,7 +5440,7 @@ felezi a csatorn
|
||||
.RSs
|
||||
.IPs "<ch>\ "
|
||||
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,
|
||||
ha szükséges.
|
||||
.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.
|
||||
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.
|
||||
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
|
||||
.
|
||||
.TP
|
||||
@ -10350,7 +10414,6 @@ trellis (trellis kell hozz
|
||||
.RE
|
||||
.PD 1
|
||||
.
|
||||
.
|
||||
.TP
|
||||
.B deadzone_inter=<0\-32>
|
||||
Beállítja az inter luma kvantálás holtterét a nem-rácsos kvantáláshoz
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- synced with r28615 -->
|
||||
<!-- synced with r29902 -->
|
||||
<appendix id="bugreports">
|
||||
<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_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-$(LIBDCA) += libmpcodecs/ad_libdca.c
|
||||
SRCS_COMMON-$(LIBDV) += libmpcodecs/ad_libdv.c \
|
||||
|
@ -3,7 +3,7 @@
|
||||
//... Okay enough of the hw, now send the other two!
|
||||
//
|
||||
// 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 ===========================
|
||||
@ -210,6 +210,7 @@ static const char help_text[]=
|
||||
#define MSGTR_OSDosd "OSD: %s"
|
||||
#define MSGTR_OSDChapter "Fejezet: (%d) %s"
|
||||
#define MSGTR_OSDAngle "Szög: %d/%d"
|
||||
#define MSGTR_OSDDeinterlace "Deinterlace: %s"
|
||||
|
||||
// property values
|
||||
#define MSGTR_Enabled "bekapcsolva"
|
||||
|
@ -2,7 +2,7 @@
|
||||
// Updated by: Roberto Togni <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 ===========================
|
||||
@ -209,6 +209,7 @@ static const char help_text[]=
|
||||
#define MSGTR_OSDosd "OSD: %so"
|
||||
#define MSGTR_OSDChapter "Capitolo: (%d) %s"
|
||||
#define MSGTR_OSDAngle "Angolazione: %d/%d"
|
||||
#define MSGTR_OSDDeinterlace "Deinterlacciamento: %s"
|
||||
|
||||
// property values
|
||||
#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:
|
||||
// (file links to be updated later if available!);
|
||||
// NAV; section/subsection; XScreenSaver; keycolor;
|
||||
@ -208,6 +208,7 @@ static const char help_text[]=
|
||||
#define MSGTR_OSDosd "OSD:%s"
|
||||
#define MSGTR_OSDChapter "章节:(%d)%s"
|
||||
#define MSGTR_OSDAngle "视角:%d/%d"
|
||||
#define MSGTR_OSDDeinterlace "解除隔行扫描:%s"
|
||||
|
||||
// property values
|
||||
#define MSGTR_Enabled "已启用"
|
||||
@ -1102,189 +1103,189 @@ static const char help_text[]=
|
||||
#define MSGTR_VO_YUV4MPEG_ProgressiveMode "使用(默认的)逐行扫描帧模式。"
|
||||
|
||||
// vobsub_vidix.c
|
||||
#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_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_DummyVidixdrawframeWasCalled "[VO_SUB_VIDIX] 调用 dummy vidix_draw_frame()。\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_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_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_CantStartPlayback "[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_DummyVidixdrawsliceWasCalled "[VO_SUB_VIDIX] 调用伪 vidix_draw_slice()。\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_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_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_CantConfigurePlayback "[VO_SUB_VIDIX] 无法配置播放功能:%s。\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_CouldntGetCapability "[VO_SUB_VIDIX] 无法获得兼容性: %s。\n"
|
||||
#define MSGTR_LIBVO_SUB_VIDIX_CouldntFindWorkingVidixDriver "[VO_SUB_VIDIX] 无法找到可用的 VIDIX 驱动。\n"
|
||||
#define MSGTR_LIBVO_SUB_VIDIX_CouldntGetCapability "[VO_SUB_VIDIX] 无法获得性能信息:%s。\n"
|
||||
|
||||
// x11_common.c
|
||||
#define MSGTR_EwmhFullscreenStateFailed "\nX11: 不能发送 EWMH 全屏事件!\n"
|
||||
#define MSGTR_CouldNotFindXScreenSaver "xscreensaver_disable: 找不到屏保(XScreenSaver)窗口。\n"
|
||||
#define MSGTR_SelectedVideoMode "XF86VM: 已选视频模式 %dx%d (图像大小 %dx%d)。\n"
|
||||
#define MSGTR_EwmhFullscreenStateFailed "\nX11:无法发送 EWMH 全屏事件消息!\n"
|
||||
#define MSGTR_CouldNotFindXScreenSaver "xscreensaver_disable:无法找到 XScreenSaver 窗口。\n"
|
||||
#define MSGTR_SelectedVideoMode "XF86VM:已选择视频模式 %dx%d(图像大小 %dx%d)。\n"
|
||||
|
||||
#define MSGTR_InsertingAfVolume "[混音器] 没有硬件混音, 插入音量过滤器。\n"
|
||||
#define MSGTR_NoVolume "[混音器] 没有可用的音量控制。\n"
|
||||
#define MSGTR_NoBalance "[混音器] 没有可用的均衡控制。\n"
|
||||
#define MSGTR_InsertingAfVolume "[混音器] 没有硬件混音支持,插入音量过滤器。\n"
|
||||
#define MSGTR_NoVolume "[混音器] 没有可用的音量控制器。\n"
|
||||
#define MSGTR_NoBalance "[混音器] 没有可用的均衡控制器。\n"
|
||||
|
||||
// old vo drivers that have been replaced
|
||||
#define MSGTR_VO_PGM_HasBeenReplaced "PGM 视频输出驱动已经被 -vo pnm:pgmyuv 代替。\n"
|
||||
#define MSGTR_VO_MD5_HasBeenReplaced "MD5 视频输出驱动已经被 -vo md5sum 代替。\n"
|
||||
#define MSGTR_VO_PGM_HasBeenReplaced "PGM 视频输出驱动已换为 -vo pnm:pgmyuv。\n"
|
||||
#define MSGTR_VO_MD5_HasBeenReplaced "MD5 视频输出驱动已换为 -vo md5sum。\n"
|
||||
|
||||
|
||||
// ======================= audio output drivers ========================
|
||||
|
||||
// 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_NoSuchDriver "无此音频驱动‘%.*s’\n"
|
||||
#define MSGTR_AO_FailedInit "初始化音频驱动失败‘%s’\n"
|
||||
#define MSGTR_AO_TryingEveryKnown "尝试每个已知的音频驱动...\n"
|
||||
|
||||
// ao_oss.c
|
||||
#define MSGTR_AO_OSS_CantOpenMixer "[AO OSS] 音频设置: 无法打开混音器设备 %s: %s\n"
|
||||
#define MSGTR_AO_OSS_ChanNotFound "[AO OSS] 音频设置: 声卡混音器没有'%s', 使用默认通道。\n"
|
||||
#define MSGTR_AO_OSS_CantOpenDev "[AO OSS] 音频设置: 无法打开音频设备 %s: %s\n"
|
||||
#define MSGTR_AO_OSS_CantMakeFd "[AO OSS] 音频设置: 无法建立文件描述块: %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_CantUseGetospace "[AO OSS] 音频设置: 驱动不支持 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_CantReopen "[AO OSS]\n致命错误: *** 无法重新打开或重设音频设备 *** %s\n"
|
||||
#define MSGTR_AO_OSS_UnknownUnsupportedFormat "[AO OSS] 未知/不支持的 OSS 格式: %x。\n"
|
||||
#define MSGTR_AO_OSS_CantOpenMixer "[AO OSS] audio_setup:无法打开混音设备 %s:%s\n"
|
||||
#define MSGTR_AO_OSS_ChanNotFound "[AO OSS] audio_setup:声卡混音器没有‘%s’声道,使用默认声道。\n"
|
||||
#define MSGTR_AO_OSS_CantOpenDev "[AO OSS] audio_setup:无法打开音频设备 %s:%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_CantSetChans "[AO OSS] audio_setup:设置音频设备为 %d 声道失败。\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_CantReopen "[AO OSS]\n致命错误:*** 无法重新打开或重新启动音频设备 *** %s\n"
|
||||
#define MSGTR_AO_OSS_UnknownUnsupportedFormat "[AO OSS] 未知/不支持的 OSS 格式:%x。\n"
|
||||
|
||||
// ao_arts.c
|
||||
#define MSGTR_AO_ARTS_CantInit "[AO ARTS] %s\n"
|
||||
#define MSGTR_AO_ARTS_ServerConnect "[AO ARTS] 已连接到声音设备。\n"
|
||||
#define MSGTR_AO_ARTS_CantOpenStream "[AO ARTS] 无法打开一个流。\n"
|
||||
#define MSGTR_AO_ARTS_StreamOpen "[AO ARTS] 流已经打开。\n"
|
||||
#define MSGTR_AO_ARTS_BufferSize "[AO ARTS] 缓冲大小: %d\n"
|
||||
#define MSGTR_AO_ARTS_ServerConnect "[AO ARTS] 已连接到声音服务设备。\n"
|
||||
#define MSGTR_AO_ARTS_CantOpenStream "[AO ARTS] 无法打开音频流。\n"
|
||||
#define MSGTR_AO_ARTS_StreamOpen "[AO ARTS] 音频流已打开。\n"
|
||||
#define MSGTR_AO_ARTS_BufferSize "[AO ARTS] 缓冲大小:%d\n"
|
||||
|
||||
// ao_dxr2.c
|
||||
#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
|
||||
#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_CantOpenPBStream "[AO ESD] 打开 ESD 播放流失败: %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_CantOpenPBStream "[AO ESD] 打开 ESD 播放流失败:%s\n"
|
||||
|
||||
// ao_mpegpes.c
|
||||
#define MSGTR_AO_MPEGPES_CantSetMixer "[AO MPEGPES] DVB 音频设置混音器错误: %s。\n"
|
||||
#define MSGTR_AO_MPEGPES_UnsupSamplerate "[AO MPEGPES] 不支持 %d Hz, 试试重采样。\n"
|
||||
#define MSGTR_AO_MPEGPES_CantSetMixer "[AO MPEGPES] DVB 音频组件混音器错误:%s。\n"
|
||||
#define MSGTR_AO_MPEGPES_UnsupSamplerate "[AO MPEGPES] 不支持 %d Hz,尝试重新采样音频。\n"
|
||||
|
||||
// ao_pcm.c
|
||||
#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_CantOpenOutputFile "[AO PCM] 打开写 %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 -ao pcm:fast 可以更快地转储数据\n[AO PCM] 信息:要写入 WAVE 文件,使用 -ao pcm:waveheader(默认模式)。\n"
|
||||
#define MSGTR_AO_PCM_CantOpenOutputFile "[AO PCM] 打开并写入 %s 失败!\n"
|
||||
|
||||
// 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_UnsupportedAudioFmt "[AO SDL] 不支持的音频格式: 0x%x。\n"
|
||||
#define MSGTR_AO_SDL_CantInit "[AO SDL] SDL 音频初始化失败: %s\n"
|
||||
#define MSGTR_AO_SDL_CantOpenAudio "[AO SDL] 无法打开音频: %s\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_CantOpenAudio "[AO SDL] 无法打开音频:%s\n"
|
||||
|
||||
// ao_sgi.c
|
||||
#define MSGTR_AO_SGI_INFO "[AO SGI] 控制。\n"
|
||||
#define MSGTR_AO_SGI_InitInfo "[AO SGI] 初始: 采样率: %iHz 通道: %s 格式 %s\n"
|
||||
#define MSGTR_AO_SGI_InvalidDevice "[AO SGI] 播放: 无效的设备。\n"
|
||||
#define MSGTR_AO_SGI_CantSetParms_Samplerate "[AO SGI] 初始: 设定参数失败: %s\n不能设定需要的采样率。\n"
|
||||
#define MSGTR_AO_SGI_CantSetAlRate "[AO SGI] 初始: AL_RATE 在给定的源上不能用。\n"
|
||||
#define MSGTR_AO_SGI_CantGetParms "[AO SGI] 初始: 获取参数失败: %s\n"
|
||||
#define MSGTR_AO_SGI_SampleRateInfo "[AO SGI] 初始: 当前的采样率为 %lf (需要的速率是 %lf)\n"
|
||||
#define MSGTR_AO_SGI_InitConfigError "[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_Reset "[AO SGI] 重置: ...\n"
|
||||
#define MSGTR_AO_SGI_PauseInfo "[AO SGI] 音频暂停: ...\n"
|
||||
#define MSGTR_AO_SGI_ResumeInfo "[AO SGI] 音频恢复: ...\n"
|
||||
#define MSGTR_AO_SGI_InitInfo "[AO SGI] 初始化:采样率:%iHz 声道:%s 格式 %s\n"
|
||||
#define MSGTR_AO_SGI_InvalidDevice "[AO SGI] 播放:无效的设备。\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_CantGetParms "[AO SGI] 初始化:getparams 失败:%s\n"
|
||||
#define MSGTR_AO_SGI_SampleRateInfo "[AO SGI] 初始化:当前的采样率为 %lf(所需的速率为 %lf)\n"
|
||||
#define MSGTR_AO_SGI_InitConfigError "[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_Reset "[AO SGI] 重启:...\n"
|
||||
#define MSGTR_AO_SGI_PauseInfo "[AO SGI] audio_pause:...\n"
|
||||
#define MSGTR_AO_SGI_ResumeInfo "[AO SGI] audio_resume:...\n"
|
||||
|
||||
// ao_sun.c
|
||||
#define MSGTR_AO_SUN_RtscSetinfoFailed "[AO SUN] rtsc: SETINFO 失败。\n"
|
||||
#define MSGTR_AO_SUN_RtscWriteFailed "[AO SUN] rtsc: 写失败。\n"
|
||||
#define MSGTR_AO_SUN_CantOpenAudioDev "[AO SUN] 无法打开音频设备 %s, %s -> 没声音。\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_CantReopenReset "[AO SUN]\n致命错误: *** 无法重新打开或重设音频设备 (%s) ***\n"
|
||||
#define MSGTR_AO_SUN_RtscSetinfoFailed "[AO SUN] rtsc:SETINFO 失败。\n"
|
||||
#define MSGTR_AO_SUN_RtscWriteFailed "[AO SUN] rtsc:写入失败。\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_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"
|
||||
|
||||
// ao_alsa5.c
|
||||
#define MSGTR_AO_ALSA5_InitInfo "[AO ALSA5] alsa-初始: 请求的格式: %d Hz, %d 通道, %s\n"
|
||||
#define MSGTR_AO_ALSA5_SoundCardNotFound "[AO ALSA5] alsa-初始: 找不到声卡。\n"
|
||||
#define MSGTR_AO_ALSA5_InvalidFormatReq "[AO ALSA5] alsa-初始: 请求无效的格式 (%s) - 停用输出。\n"
|
||||
#define MSGTR_AO_ALSA5_PlayBackError "[AO ALSA5] alsa-初始: 回放打开错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_PcmInfoError "[AO ALSA5] alsa-初始: PCM 信息错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_SoundcardsFound "[AO ALSA5] alsa-初始: 找到 %d 声卡, 使用: %s\n"
|
||||
#define MSGTR_AO_ALSA5_PcmChanInfoError "[AO ALSA5] alsa-初始: PCM 通道信息错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_CantSetParms "[AO ALSA5] alsa-初始: 设定参数错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_CantSetChan "[AO ALSA5] alsa-初始: 设定通道错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_ChanPrepareError "[AO ALSA5] alsa-初始: 通道准备错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_DrainError "[AO ALSA5] alsa-反初始: 回放排出(drain)错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_FlushError "[AO ALSA5] alsa-反初始: 回放清空(flush)错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_PcmCloseError "[AO ALSA5] alsa-反初始: PCM 关闭错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_ResetDrainError "[AO ALSA5] alsa-重置: 回放排出(drain)错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_ResetFlushError "[AO ALSA5] alsa-重置: 回放清空(flush)错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_ResetChanPrepareError "[AO ALSA5] alsa-重置: 通道准备错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_PauseDrainError "[AO ALSA5] alsa-暂停: 回放排出(drain)错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_PauseFlushError "[AO ALSA5] alsa-暂停: 回放清空(flush)错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_ResumePrepareError "[AO ALSA5] alsa-恢复: 通道准备错误: %s\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_WriteErrorAfterReset "[AO ALSA5] alsa-播放: 重启后写错误: %s - 放弃。\n"
|
||||
#define MSGTR_AO_ALSA5_OutPutError "[AO ALSA5] alsa-播放: 输出错误: %s\n"
|
||||
#define MSGTR_AO_ALSA5_InitInfo "[AO ALSA5] alsa-init:所请求格式:%d Hz,%d 声道,%s\n"
|
||||
#define MSGTR_AO_ALSA5_SoundCardNotFound "[AO ALSA5] alsa-init:未找到声卡。\n"
|
||||
#define MSGTR_AO_ALSA5_InvalidFormatReq "[AO ALSA5] alsa-init:所请求格式无效(%s)- 禁用音频输出。\n"
|
||||
#define MSGTR_AO_ALSA5_PlayBackError "[AO ALSA5] alsa-init:打开播放模式错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_PcmInfoError "[AO ALSA5] alsa-init:PCM 信息错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_SoundcardsFound "[AO ALSA5] alsa-init:找到声卡 %d,使用:%s\n"
|
||||
#define MSGTR_AO_ALSA5_PcmChanInfoError "[AO ALSA5] alsa-init:PCM 声道信息错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_CantSetParms "[AO ALSA5] alsa-init:设定参数错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_CantSetChan "[AO ALSA5] alsa-init:设定声道错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_ChanPrepareError "[AO ALSA5] alsa-init:准备声道错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_DrainError "[AO ALSA5] alsa-uninit:播放数据清空错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_FlushError "[AO ALSA5] alsa-uninit:播放数据刷新错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_PcmCloseError "[AO ALSA5] alsa-uninit:PCM 关闭错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_ResetDrainError "[AO ALSA5] alsa-reset:播放数据清空错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_ResetFlushError "[AO ALSA5] alsa-reset:播放数据刷新错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_ResetChanPrepareError "[AO ALSA5] alsa-reset:准备声道错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_PauseDrainError "[AO ALSA5] alsa-pause:播放数据刷新错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_PauseFlushError "[AO ALSA5] alsa-pause:播放数据刷新错误:%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_PlaybackPrepareError "[AO ALSA5] alsa-play:准备播放错误:%s\n"
|
||||
#define MSGTR_AO_ALSA5_WriteErrorAfterReset "[AO ALSA5] alsa-play:重启后写入错误:%s - 放弃。\n"
|
||||
#define MSGTR_AO_ALSA5_OutPutError "[AO ALSA5] alsa-play:输出错误:%s\n"
|
||||
|
||||
// ao_alsa.c
|
||||
#define MSGTR_AO_ALSA_InvalidMixerIndexDefaultingToZero "[AO_ALSA] 无效的混音索引。取默认值 0。\n"
|
||||
#define MSGTR_AO_ALSA_MixerOpenError "[AO_ALSA] 混音打开错误: %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_MixerLoadError "[AO_ALSA] 混音装载错误: %s\n"
|
||||
#define MSGTR_AO_ALSA_UnableToFindSimpleControl "[AO_ALSA] 无法找到控制 '%s',%i。\n"
|
||||
#define MSGTR_AO_ALSA_ErrorSettingLeftChannel "[AO_ALSA] 错误设置左声道, %s\n"
|
||||
#define MSGTR_AO_ALSA_ErrorSettingRightChannel "[AO_ALSA] 错误设置右声道, %s\n"
|
||||
#define MSGTR_AO_ALSA_CommandlineHelp "\n[AO_ALSA] -ao alsa 命令行帮助:\n"\
|
||||
"[AO_ALSA] 示例: mplayer -ao alsa:device=hw=0.3\n"\
|
||||
"[AO_ALSA] 设置第一卡第四硬件设备。\n\n"\
|
||||
"[AO_ALSA] 选项:\n"\
|
||||
#define MSGTR_AO_ALSA_InvalidMixerIndexDefaultingToZero "[AO_ALSA] 无效的混音器索引号。取默认值 0。\n"
|
||||
#define MSGTR_AO_ALSA_MixerOpenError "[AO_ALSA] 打开混音器错误:%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_MixerLoadError "[AO_ALSA] 混音器装载错误:%s\n"
|
||||
#define MSGTR_AO_ALSA_UnableToFindSimpleControl "[AO_ALSA] 无法找到简单控制器‘%s’,%i。\n"
|
||||
#define MSGTR_AO_ALSA_ErrorSettingLeftChannel "[AO_ALSA] 设置左声道错误,%s\n"
|
||||
#define MSGTR_AO_ALSA_ErrorSettingRightChannel "[AO_ALSA] 设置右声道错误,%s\n"
|
||||
#define MSGTR_AO_ALSA_CommandlineHelp "\n[AO_ALSA] -ao alsa 命令行帮助:\n"\
|
||||
"[AO_ALSA] 示例:mplayer -ao alsa:device=hw=0.3\n"\
|
||||
"[AO_ALSA] 设置第一块声卡为第四硬件设备。\n\n"\
|
||||
"[AO_ALSA] 选项:\n"\
|
||||
"[AO_ALSA] noblock\n"\
|
||||
"[AO_ALSA] 以 non-blocking 模式打开设备。\n"\
|
||||
"[AO_ALSA] device=<device-name>\n"\
|
||||
"[AO_ALSA] 设置设备 (change , to . and : to =)\n"
|
||||
#define MSGTR_AO_ALSA_ChannelsNotSupported "[AO_ALSA] %d 声道不被支持。\n"
|
||||
#define MSGTR_AO_ALSA_OpenInNonblockModeFailed "[AO_ALSA] 打开 nonblock-模式 失败, 试着打开 block-模式。\n"
|
||||
#define MSGTR_AO_ALSA_PlaybackOpenError "[AO_ALSA] 回放打开错误: %s\n"
|
||||
#define MSGTR_AO_ALSA_ErrorSetBlockMode "[AL_ALSA] 错误设置 block-模式 %s。\n"
|
||||
#define MSGTR_AO_ALSA_UnableToGetInitialParameters "[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_UnableToSetFormat "[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_UnableToSetSamplerate2 "[AO_ALSA] 无法设置 采样率-2: %s\n"
|
||||
#define MSGTR_AO_ALSA_UnableToSetBufferTimeNear "[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_UnableToSetHwParameters "[AO_ALSA] 无法设置 hw-parameters: %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_UnableToSetSwParameters "[AO_ALSA] 无法设置 sw-parameters: %s\n"
|
||||
#define MSGTR_AO_ALSA_UnableToGetBoundary "[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_UnableToSetSilenceSize "[AO_ALSA] 无法设置安静大小: %s\n"
|
||||
#define MSGTR_AO_ALSA_PcmCloseError "[AO_ALSA] pcm 关闭错误: %s\n"
|
||||
#define MSGTR_AO_ALSA_NoHandlerDefined "[AO_ALSA] 没定义处理器!\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_PcmDropError "[AO_ALSA] pcm 丢弃错误: %s\n"
|
||||
#define MSGTR_AO_ALSA_PcmResumeError "[AO_ALSA] pcm 恢复错误: %s\n"
|
||||
"[AO_ALSA] 以非阻塞模式打开设备。\n"\
|
||||
"[AO_ALSA] device=<设备名>\n"\
|
||||
"[AO_ALSA] 设置设备(将字符中的‘,’替换为‘.’而‘:’替换为‘=’)\n"
|
||||
#define MSGTR_AO_ALSA_ChannelsNotSupported "[AO_ALSA] 不支持 %d 声道。\n"
|
||||
#define MSGTR_AO_ALSA_OpenInNonblockModeFailed "[AO_ALSA] 以非阻塞模式打开失败,尝试以阻塞模式打开。\n"
|
||||
#define MSGTR_AO_ALSA_PlaybackOpenError "[AO_ALSA] 打开播放模式错误:%s\n"
|
||||
#define MSGTR_AO_ALSA_ErrorSetBlockMode "[AL_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_FormatNotSupportedByHardware "[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_UnableToDisableResampling "[AO_ALSA] 无法禁用重抽样模式:%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_UnableToGetPeriodSize "[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_UnableToGetBufferSize "[AO_ALSA] 无法获得缓冲大小:%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_UnableToGetBoundary "[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_UnableToSetSilenceSize "[AO_ALSA] 无法设置静音大小:%s\n"
|
||||
#define MSGTR_AO_ALSA_PcmCloseError "[AO_ALSA] pcm 关闭错误:%s\n"
|
||||
#define MSGTR_AO_ALSA_NoHandlerDefined "[AO_ALSA] 未定义处理设备!\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_PcmDropError "[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_PcmInSuspendModeTryingResume "[AO_ALSA] Pcm 在挂机模式, 试着恢复。\n"
|
||||
#define MSGTR_AO_ALSA_WriteError "[AO_ALSA] 写错误: %s\n"
|
||||
#define MSGTR_AO_ALSA_TryingToResetSoundcard "[AO_ALSA] 试着重置声卡。\n"
|
||||
#define MSGTR_AO_ALSA_CannotGetPcmStatus "[AO_ALSA] 不能取得 pcm 状态: %s\n"
|
||||
#define MSGTR_AO_ALSA_PcmInSuspendModeTryingResume "[AO_ALSA] Pcm 处于挂起模式,尝试继续播放。\n"
|
||||
#define MSGTR_AO_ALSA_WriteError "[AO_ALSA] 写入错误:%s\n"
|
||||
#define MSGTR_AO_ALSA_TryingToResetSoundcard "[AO_ALSA] 试着重启声卡。\n"
|
||||
#define MSGTR_AO_ALSA_CannotGetPcmStatus "[AO_ALSA] 无法获得 pcm 状态:%s\n"
|
||||
|
||||
// ao_plugin.c
|
||||
#define MSGTR_AO_PLUGIN_InvalidPlugin "[AO PLUGIN] 无效插件: %s\n"
|
||||
#define MSGTR_AO_PLUGIN_InvalidPlugin "[AO PLUGIN] 无效插件:%s\n"
|
||||
|
||||
// ======================= audio filters ================================
|
||||
|
||||
@ -1293,19 +1294,19 @@ static const char help_text[]=
|
||||
|
||||
// af_ladspa.c
|
||||
#define MSGTR_AF_LADSPA_AvailableLabels "可用的标签"
|
||||
#define MSGTR_AF_LADSPA_WarnNoInputs "警告! 此 LADSPA 插件没有音频输入。\n 以后的音频信号将会丢失。"
|
||||
#define MSGTR_AF_LADSPA_ErrMultiChannel "现在还不支持多通道(>2)插件。\n 只能使用单声道或立体声道插件。"
|
||||
#define MSGTR_AF_LADSPA_ErrNoOutputs "此 LADSPA 插件没有音频输出。"
|
||||
#define MSGTR_AF_LADSPA_ErrInOutDiff "LADSPA 插件的音频输入和音频输出的数目不相等。"
|
||||
#define MSGTR_AF_LADSPA_WarnNoInputs "警告!该 LADSPA 插件没有音频入口。\n 输入的音频信号将会丢失。"
|
||||
#define MSGTR_AF_LADSPA_ErrMultiChannel "尚未支持多声道(>2)插件。\n 只使用单声道或立体声插件。"
|
||||
#define MSGTR_AF_LADSPA_ErrNoOutputs "该 LADSPA 插件没有音频出口。"
|
||||
#define MSGTR_AF_LADSPA_ErrInOutDiff "LADSPA 插件的音频入口和音频出口的数目不相等。"
|
||||
#define MSGTR_AF_LADSPA_ErrFailedToLoad "装载失败"
|
||||
#define MSGTR_AF_LADSPA_ErrNoDescriptor "在指定的库文件里找不到 ladspa_descriptor() 函数。"
|
||||
#define MSGTR_AF_LADSPA_ErrLabelNotFound "在插件库里找不到标签。"
|
||||
#define MSGTR_AF_LADSPA_ErrNoSuboptions "没有指定子选项标签。"
|
||||
#define MSGTR_AF_LADSPA_ErrNoLibFile "没有指定库文件。"
|
||||
#define MSGTR_AF_LADSPA_ErrNoLabel "没有指定过滤器标签。"
|
||||
#define MSGTR_AF_LADSPA_ErrNotEnoughControls "命令行指定的控制项不够。"
|
||||
#define MSGTR_AF_LADSPA_ErrControlBelow "%s: 输入控制 #%d 低于下限 %0.4f。\n"
|
||||
#define MSGTR_AF_LADSPA_ErrControlAbove "%s: 输入控制 #%d 高于上限 %0.4f。\n"
|
||||
#define MSGTR_AF_LADSPA_ErrNoDescriptor "指定的库文件中未能找到 ladspa_descriptor() 函数。"
|
||||
#define MSGTR_AF_LADSPA_ErrLabelNotFound "未能在插件库里找到标签。"
|
||||
#define MSGTR_AF_LADSPA_ErrNoSuboptions "未指定子选项。"
|
||||
#define MSGTR_AF_LADSPA_ErrNoLibFile "未指定库文件。"
|
||||
#define MSGTR_AF_LADSPA_ErrNoLabel "未指定过滤器标签。"
|
||||
#define MSGTR_AF_LADSPA_ErrNotEnoughControls "命令行中指定的控件不足。"
|
||||
#define MSGTR_AF_LADSPA_ErrControlBelow "%s:输入控件 #%d 低于下限 %0.4f。\n"
|
||||
#define MSGTR_AF_LADSPA_ErrControlAbove "%s:输入控件 #%d 高于上限 %0.4f。\n"
|
||||
|
||||
// format.c
|
||||
#define MSGTR_AF_FORMAT_UnknownFormat "未知格式"
|
||||
@ -1315,11 +1316,11 @@ static const char help_text[]=
|
||||
|
||||
// joystick.c
|
||||
#define MSGTR_INPUT_JOYSTICK_Opening "打开操纵杆设备 %s\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_CantOpen "打不开操纵杆设备 %s: %s\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_ErrReading "读操纵杆设备时发生错误: %s\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_LoosingBytes "操纵杆: 丢失了 %d 字节的数据\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_WarnLostSync "操纵杆: 警告初始事件, 失去了和驱动的同步。\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_WarnUnknownEvent "操作杆警告未知事件类型%d\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_CantOpen "无法打开操纵杆设备 %s:%s\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_ErrReading "读取操纵杆设备时出错:%s\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_LoosingBytes "操纵杆:丢失了 %d 字节的数据\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_WarnLostSync "操纵杆:初始化警告事件,与驱动程序失去同步。\n"
|
||||
#define MSGTR_INPUT_JOYSTICK_WarnUnknownEvent "操作杆未知警告事件类型 %d\n"
|
||||
|
||||
// appleir.c
|
||||
#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"
|
||||
|
||||
// input.c
|
||||
#define MSGTR_INPUT_INPUT_ErrCantRegister2ManyCmdFds "命令文件描述符太多, 不能注册文件描述符 %d。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantRegister2ManyKeyFds "键文件描述符太多, 无法注册文件描述符 %d。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrArgMustBeInt "命令 %s: 参数 %d 不是整数。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrArgMustBeFloat "命令 %s: 参数 %d 不是浮点数。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrUnterminatedArg "命令 %s: 参数 %d 无结束符。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantRegister2ManyCmdFds "命令文件描述符太多,无法注册文件描述符 %d。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantRegister2ManyKeyFds "按键文件描述符太多,无法注册文件描述符 %d。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrArgMustBeInt "命令 %s:参数 %d 不是整数。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrArgMustBeFloat "命令 %s:参数 %d 不是浮点数。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrUnterminatedArg "命令 %s:参数 %d 无结束符。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrUnknownArg "未知参数 %d\n"
|
||||
#define MSGTR_INPUT_INPUT_Err2FewArgs "命令 %s 需要至少 %d 个参数, 然而只发现了 %d 个。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrReadingCmdFd "读取命令文件描述符 %d 时发生错误: %s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCmdBufferFullDroppingContent "文件描述符 %d 的命令缓存已满: 正在丢失内容。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrInvalidCommandForKey "绑定键 %s 的命令无效"
|
||||
#define MSGTR_INPUT_INPUT_ErrSelect "选定错误: %s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrOnKeyInFd "键输入文件描述符 %d 发生错误\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrDeadKeyOnFd "键输入文件描述符 %d 得到死键\n"
|
||||
#define MSGTR_INPUT_INPUT_Err2ManyKeyDowns "同时有太多的按键事件发生\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrOnCmdFd "命令文件描述符 %d 发生错误\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrReadingInputConfig "当读取输入配置文件 %s 时发生错误: %s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrUnknownKey "未知键 '%s'\n"
|
||||
#define MSGTR_INPUT_INPUT_Err2FewArgs "命令 %s 需要至少 %d 个参数,然而只发现了 %d 个。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrReadingCmdFd "读取命令文件描述符 %d 时发生错误:%s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCmdBufferFullDroppingContent "文件描述符 %d 的命令缓冲已满:丢弃文件内容。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrInvalidCommandForKey "绑定按键 %s 的命令无效"
|
||||
#define MSGTR_INPUT_INPUT_ErrSelect "选定错误:%s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrOnKeyInFd "按键输入文件描述符 %d 错误\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrDeadKeyOnFd "按键输入文件描述符 %d 出现无效按键\n"
|
||||
#define MSGTR_INPUT_INPUT_Err2ManyKeyDowns "同时有过多的按键事件发生\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrOnCmdFd "命令文件描述符 %d 错误\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrReadingInputConfig "读取输入配置文件 %s 时发生错误: %s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrUnknownKey "未知键‘%s’\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrUnfinishedBinding "未完成的绑定 %s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrBuffer2SmallForKeyName "此键名的缓存太小: %s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrNoCmdForKey "找不到键 %s 的命令"
|
||||
#define MSGTR_INPUT_INPUT_ErrBuffer2SmallForCmd "此命令的缓存太小: %s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrWhyHere "怎么会运行到这里了?\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantInitJoystick "不能初始华输入法操纵杆\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantStatFile "不能统计(stat) %s: %s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantOpenFile "打不开 %s: %s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantInitAppleRemote "不能初始化 Apple Remote 遥控器。\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrBuffer2SmallForKeyName "此按键名的缓冲太小:%s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrNoCmdForKey "找不到按键 %s 的命令"
|
||||
#define MSGTR_INPUT_INPUT_ErrBuffer2SmallForCmd "命令 %s 的缓冲过小\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrWhyHere "怎么会执行到这里了?\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantInitJoystick "无法初始化输入操纵杆\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantStatFile "无法统计 %s:%s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantOpenFile "无法打开 %s:%s\n"
|
||||
#define MSGTR_INPUT_INPUT_ErrCantInitAppleRemote "无法初始化 Apple Remote 遥控器。\n"
|
||||
|
||||
// lirc.c
|
||||
#define MSGTR_SettingUpLIRC "设置 LIRC 支持\n"
|
||||
#define MSGTR_LIRCopenfailed "开启 LIRC 支持失败。你将无法使用你的遥控器。\n"
|
||||
#define MSGTR_LIRCopenfailed "启用 LIRC 支持失败。将无法使用你的遥控器。\n"
|
||||
#define MSGTR_LIRCcfgerr "读取 LIRC 配置文件 %s 失败。\n"
|
||||
|
||||
|
||||
// ========================== LIBMPDEMUX ===================================
|
||||
|
||||
// muxer.c, muxer_*.c
|
||||
#define MSGTR_TooManyStreams "流太多!"
|
||||
#define MSGTR_RawMuxerOnlyOneStream "Rawaudio 合路器只支持一个音频流!\n"
|
||||
#define MSGTR_IgnoringVideoStream "忽略视频流!\n"
|
||||
#define MSGTR_UnknownStreamType "警告, 未知的流类型: %d\n"
|
||||
#define MSGTR_WarningLenIsntDivisible "警告, 长度不能被采样率整除!\n"
|
||||
#define MSGTR_MuxbufMallocErr "合路器帧缓冲无法分配内存!\n"
|
||||
#define MSGTR_MuxbufReallocErr "合路器帧缓冲无法重新分配内存!\n"
|
||||
#define MSGTR_MuxbufSending "合路器帧缓冲正在发送 %d 帧到合路器。\n"
|
||||
#define MSGTR_WritingHeader "正在写帧头...\n"
|
||||
#define MSGTR_WritingTrailer "正在写索引...\n"
|
||||
#define MSGTR_TooManyStreams "媒体流太多!"
|
||||
#define MSGTR_RawMuxerOnlyOneStream "原生音频流合并器只支持一个音频流!\n"
|
||||
#define MSGTR_IgnoringVideoStream "忽略视频流!\n"
|
||||
#define MSGTR_UnknownStreamType "警告,未知的媒体流类型:%d\n"
|
||||
#define MSGTR_WarningLenIsntDivisible "警告,音频长度无法被采样率整除!\n"
|
||||
#define MSGTR_MuxbufMallocErr "流合并器帧缓冲无法分配内存!\n"
|
||||
#define MSGTR_MuxbufReallocErr "合路器帧缓冲无法重新分配内存!\n"
|
||||
#define MSGTR_MuxbufSending "流合并器帧缓冲发送 %d 帧到流合并器。\n"
|
||||
#define MSGTR_WritingHeader "正在写入帧头...\n"
|
||||
#define MSGTR_WritingTrailer "正在写入索引...\n"
|
||||
|
||||
// demuxer.c, demux_*.c
|
||||
#define MSGTR_AudioStreamRedefined "警告: 音频流头部 %d 被重新定义。\n"
|
||||
#define MSGTR_VideoStreamRedefined "警告: 视频流头部 %d 被重新定义。\n"
|
||||
#define MSGTR_TooManyAudioInBuffer "\n缓冲中音频包太多(%d in %d 字节)。\n"
|
||||
#define MSGTR_TooManyVideoInBuffer "\n缓冲中视频包太多(%d in %d 字节)。\n"
|
||||
#define MSGTR_MaybeNI "(也许你播放了一个非交错的流/文件或者是编解码失败)?\n" \
|
||||
"对于 AVI 文件, 尝试用 -ni 选项锁定非交错模式。\n"
|
||||
#define MSGTR_WorkAroundBlockAlignHeaderBug "AVI: 绕过 CBR-MP3 nBlockAlign 头部错误!\n"
|
||||
#define MSGTR_SwitchToNi "\n检测到糟糕的交错格式的 AVI 文件 - 切换到 -ni 模式...\n"
|
||||
#define MSGTR_InvalidAudioStreamNosound "AVI: 无效的音频流 ID: %d - 忽略 (nosound)\n"
|
||||
#define MSGTR_InvalidAudioStreamUsingDefault "AVI: 无效的视频流 ID: %d - 忽略 (使用默认值)\n"
|
||||
#define MSGTR_AudioStreamRedefined "警告:重复定义音频流头部 %d。\n"
|
||||
#define MSGTR_VideoStreamRedefined "警告: 重复定义视频流头部 %d。\n"
|
||||
#define MSGTR_TooManyAudioInBuffer "\n缓冲中音频包太多(%d 个包存在于 %d 字节中)。\n"
|
||||
#define MSGTR_TooManyVideoInBuffer "\n缓冲中视频包太多(%d 个包存在于 %d 字节中)。\n"
|
||||
#define MSGTR_MaybeNI "可能播放了一个非交错合并的媒体流/文件,或者是编解码运行失败?\n" \
|
||||
"对于 AVI 文件,可尝试用 -ni 选项强制使用非交错模式。\n"
|
||||
#define MSGTR_WorkAroundBlockAlignHeaderBug "AVI:避开 CBR-MP3 nBlockAlign 头部缺陷!\n"
|
||||
#define MSGTR_SwitchToNi "\n检测到未正确交错合并的 AVI 文件 - 切换到 -ni 模式...\n"
|
||||
#define MSGTR_InvalidAudioStreamNosound "AVI:无效的音频流 ID: %d - 忽略 (nosound)\n"
|
||||
#define MSGTR_InvalidAudioStreamUsingDefault "AVI: 无效的视频流 ID:%d - 忽略(使用默认值)\n"
|
||||
#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_NotSystemStream "非 MPEG 系统的流格式... (可能是输送流?)\n"
|
||||
#define MSGTR_InvalidMPEGES "MPEG-ES 流无效??? 请联系作者, 这可能是个错误:(\n"
|
||||
#define MSGTR_NotSystemStream "非 MPEG 系统的媒体流格式...(可能是网络传输的媒体流?)\n"
|
||||
#define MSGTR_InvalidMPEGES "无法的 MPEG-ES 媒体流???请联系开发者,这可能是软件的缺陷 :(\n"
|
||||
#define MSGTR_FormatNotRecognized "============= 抱歉, 此文件格式无法辨认或支持 ===============\n"\
|
||||
"=== 如果此文件是一个 AVI, ASF 或 MPEG 流, 请联系作者! ===\n"
|
||||
#define MSGTR_SettingProcessPriority "设置进程优先级: %s\n"
|
||||
#define MSGTR_FilefmtFourccSizeFpsFtime "[V] 文件格式:%d fourcc:0x%X 大小:%dx%d 帧速:%5.3f 帧时间:=%6.4f\n"
|
||||
#define MSGTR_CannotInitializeMuxer "不能初始化muxer。"
|
||||
"=== 如果此文件是 AVI、ASF 或 MPEG 媒体流,请联系开发者! ===\n"
|
||||
#define MSGTR_SettingProcessPriority "设置进程优先级:%s\n"
|
||||
#define MSGTR_FilefmtFourccSizeFpsFtime "[V] 文件格式:%d fourcc代码:0x%X 大小:%dx%d 帧速:%5.3f 每帧时长:=%6.4f\n"
|
||||
#define MSGTR_CannotInitializeMuxer "不能初始化流合并器。"
|
||||
#define MSGTR_MissingVideoStream "未找到视频流。\n"
|
||||
#define MSGTR_MissingAudioStream "未找到音频流... -> 没声音。\n"
|
||||
#define MSGTR_MissingVideoStreamBug "没有视频流!? 请联系作者, 这可能是个错误:(\n"
|
||||
#define MSGTR_MissingAudioStream "未找到音频流... -> 没有声音。\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_Message "%s 非交错 AVI 文件模式!\n"
|
||||
#define MSGTR_NI_Message "%s 非交错合并的 AVI 文件模式!\n"
|
||||
|
||||
#define MSGTR_UsingNINI "使用非交错的损坏的 AVI 文件格式。\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;
|
||||
int y,len=-1;
|
||||
while(len<minlen){
|
||||
AVPacket pkt;
|
||||
int len2=maxlen;
|
||||
double pts;
|
||||
int x=ds_get_packet_pts(sh_audio->ds,&start, &pts);
|
||||
if(x<=0) break; // error
|
||||
av_init_packet(&pkt);
|
||||
pkt.data = start;
|
||||
pkt.size = x;
|
||||
if (pts != MP_NOPTS_VALUE) {
|
||||
sh_audio->pts = pts;
|
||||
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);
|
||||
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!)
|
||||
|
@ -34,11 +34,13 @@
|
||||
#define IMGFMT_BGRA (IMGFMT_RGB32|64)
|
||||
#define IMGFMT_ARGB IMGFMT_BGR32
|
||||
#define IMGFMT_RGBA (IMGFMT_BGR32|64)
|
||||
#define IMGFMT_RGB48NE IMGFMT_RGB48BE
|
||||
#else
|
||||
#define IMGFMT_ABGR (IMGFMT_BGR32|64)
|
||||
#define IMGFMT_BGRA IMGFMT_BGR32
|
||||
#define IMGFMT_ARGB (IMGFMT_RGB32|64)
|
||||
#define IMGFMT_RGBA IMGFMT_RGB32
|
||||
#define IMGFMT_RGB48NE IMGFMT_RGB48LE
|
||||
#endif
|
||||
|
||||
/* old names for compatibility */
|
||||
|
@ -476,10 +476,8 @@ static int get_buffer(AVCodecContext *avctx, AVFrame *pic){
|
||||
int type= MP_IMGTYPE_IPB;
|
||||
int width= avctx->width;
|
||||
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);
|
||||
if(avctx->pix_fmt == PIX_FMT_YUV410P)
|
||||
align=63; //yes seriously, its really needed (16x16 chroma blocks in SVQ1 -> 64x64)
|
||||
|
||||
if (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");
|
||||
}
|
||||
|
||||
mpi= mpcodecs_get_image(sh, type, flags,
|
||||
(width+align)&(~align), (height+align)&(~align));
|
||||
mpi= mpcodecs_get_image(sh, type, flags, width, height);
|
||||
if (!mpi) return -1;
|
||||
|
||||
// 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->draw_slice=draw_slice;
|
||||
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",
|
||||
vf->priv->crop_w,
|
||||
vf->priv->crop_h,
|
||||
|
@ -197,27 +197,11 @@ static const unsigned int fmt_list[]={
|
||||
};
|
||||
|
||||
static int open(vf_instance_t *vf, char* args){
|
||||
int res;
|
||||
|
||||
vf->config=config;
|
||||
vf->put_image=put_image;
|
||||
vf->get_image=get_image;
|
||||
vf->query_format=query_format;
|
||||
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",
|
||||
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->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;
|
||||
#if HAVE_MMX
|
||||
if(gCpuCaps.hasMMX) process = process_MMX;
|
||||
|
@ -43,6 +43,8 @@ static struct vf_priv_s {
|
||||
int first_slice;
|
||||
struct osd_state *osd;
|
||||
} const vf_priv_dflt = {
|
||||
-1,-1,
|
||||
-1,-1,
|
||||
-1,-1,
|
||||
-1,-1,
|
||||
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){
|
||||
vf->query_format=query_format;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -152,11 +152,6 @@ static int open(vf_instance_t *vf, char* args)
|
||||
vf->put_image=put_image;
|
||||
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;
|
||||
|
||||
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){
|
||||
vf->query_format=query_format;
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -65,6 +65,8 @@ static const unsigned int outfmt_list[]={
|
||||
IMGFMT_RGB32,
|
||||
IMGFMT_BGR24,
|
||||
IMGFMT_RGB24,
|
||||
IMGFMT_RGB48LE,
|
||||
IMGFMT_RGB48BE,
|
||||
IMGFMT_BGR16,
|
||||
IMGFMT_RGB16,
|
||||
IMGFMT_BGR15,
|
||||
@ -505,25 +507,6 @@ static int open(vf_instance_t *vf, char* args){
|
||||
vf->query_format=query_format;
|
||||
vf->control= control;
|
||||
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",
|
||||
vf->priv->w,
|
||||
vf->priv->h);
|
||||
|
@ -367,6 +367,7 @@ typedef struct {
|
||||
avisuperindex_chunk *suidx;
|
||||
int suidx_size;
|
||||
int isodml;
|
||||
int warned_unaligned;
|
||||
} avi_priv_t;
|
||||
|
||||
#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;
|
||||
free(mp3_found);
|
||||
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];
|
||||
stream_seek(s,s->end_pos-128);
|
||||
stream_read(s,tag,3);
|
||||
|
@ -108,6 +108,12 @@ static int valid_fourcc(unsigned int id){
|
||||
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){
|
||||
// len1 has a bit more priority than len2. len1!=len2
|
||||
// Note: this is a first-idea-logic, may be wrong. comments welcomed.
|
||||
@ -220,8 +226,12 @@ do{
|
||||
idx=&((AVIINDEXENTRY *)priv->idx)[priv->idx_pos++];
|
||||
|
||||
if(idx->dwFlags&AVIIF_LIST){
|
||||
if (!valid_stream_id(idx->ckid))
|
||||
// LIST
|
||||
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)){
|
||||
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);
|
||||
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);
|
||||
continue;
|
||||
}
|
||||
@ -254,7 +264,7 @@ do{
|
||||
if(!(idx->dwFlags&AVIIF_KEYFRAME)) flags=0;
|
||||
} else {
|
||||
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;
|
||||
return 0;
|
||||
}
|
||||
@ -319,8 +329,12 @@ do{
|
||||
idx=&((AVIINDEXENTRY *)priv->idx)[idx_pos];
|
||||
|
||||
if(idx->dwFlags&AVIIF_LIST){
|
||||
if (!valid_stream_id(idx->ckid))
|
||||
// LIST
|
||||
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){
|
||||
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;
|
||||
sh_audio_t *sh_audio=NULL;
|
||||
sh_video_t *sh_video=NULL;
|
||||
avi_priv_t* priv=malloc(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;
|
||||
avi_priv_t* priv=calloc(1, sizeof(avi_priv_t));
|
||||
|
||||
demuxer->priv=(void*)priv;
|
||||
|
||||
//---- 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]){
|
||||
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_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){
|
||||
// decide index format:
|
||||
#if 1
|
||||
if((AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[0])<demuxer->movi_start ||
|
||||
AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[1])<demuxer->movi_start )&& !priv->isodml)
|
||||
priv->idx_offset=demuxer->movi_start-4;
|
||||
else
|
||||
priv->idx_offset=0;
|
||||
#else
|
||||
if(AVI_IDX_OFFSET(&((AVIINDEXENTRY *)priv->idx)[0])<demuxer->movi_start)
|
||||
priv->idx_offset=demuxer->movi_start-4;
|
||||
else
|
||||
priv->idx_offset=0;
|
||||
#endif
|
||||
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,
|
||||
|
@ -66,7 +66,7 @@ typedef struct lavf_priv_t{
|
||||
AVInputFormat *avif;
|
||||
AVFormatContext *avfc;
|
||||
ByteIOContext *pb;
|
||||
uint8_t buffer[BIO_BUFFER_SIZE];
|
||||
uint8_t buffer[FFMAX(BIO_BUFFER_SIZE, PROBE_BUF_SIZE)];
|
||||
int audio_streams;
|
||||
int video_streams;
|
||||
int sub_streams;
|
||||
@ -130,7 +130,6 @@ static void list_formats(void) {
|
||||
|
||||
static int lavf_check_file(demuxer_t *demuxer){
|
||||
AVProbeData avpd;
|
||||
uint8_t buf[PROBE_BUF_SIZE];
|
||||
lavf_priv_t *priv;
|
||||
int probe_data_size;
|
||||
|
||||
@ -154,11 +153,11 @@ static int lavf_check_file(demuxer_t *demuxer){
|
||||
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)
|
||||
return 0;
|
||||
avpd.filename= demuxer->stream->url;
|
||||
avpd.buf= buf;
|
||||
avpd.buf= priv->buffer;
|
||||
avpd.buf_size= probe_data_size;
|
||||
|
||||
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);
|
||||
|
||||
avfc = av_alloc_format_context();
|
||||
avfc = avformat_alloc_context();
|
||||
|
||||
if (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,
|
||||
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){
|
||||
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;
|
||||
|
||||
// emulate BITMAPINFOHEADER for win32 decoders:
|
||||
sh_video->bih=malloc(sizeof(BITMAPINFOHEADER));
|
||||
memset(sh_video->bih,0,sizeof(BITMAPINFOHEADER));
|
||||
sh_video->bih=calloc(1, sizeof(BITMAPINFOHEADER));
|
||||
sh_video->bih->biSize=40;
|
||||
sh_video->bih->biWidth = dv_decoder->width;
|
||||
sh_video->bih->biHeight = dv_decoder->height;
|
||||
|
@ -191,9 +191,9 @@ void rtpCodecInitialize_video(demuxer_t* demuxer,
|
||||
while (pos+8 < endpos) {
|
||||
unsigned atomLength = pos[0]<<24 | pos[1]<<16 | pos[2]<<8 | pos[3];
|
||||
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, "SMI ", 4) && fourcc==mmioFOURCC('S','V','Q','3')) &&
|
||||
(!memcmp(pos+4, "SMI ", 4) && fourcc==mmioFOURCC('S','V','Q','3'))) &&
|
||||
atomLength > 8) {
|
||||
sh_video->bih = bih =
|
||||
insertVideoExtradata(bih, pos+8, atomLength-8);
|
||||
|
@ -86,6 +86,7 @@ typedef struct
|
||||
typedef struct
|
||||
{
|
||||
int whichChunk;
|
||||
unsigned char chunk[ CHUNKSIZE ];
|
||||
|
||||
unsigned char lastAudio[ MAX_AUDIO_BUFFER ];
|
||||
int lastAudioEnd;
|
||||
@ -338,7 +339,6 @@ static int demux_ty_fill_buffer( demuxer_t *demux, demux_stream_t *dsds )
|
||||
int errorHeader = 0;
|
||||
int recordsDecoded = 0;
|
||||
|
||||
unsigned char chunk[ CHUNKSIZE ];
|
||||
int readSize;
|
||||
|
||||
int numberRecs;
|
||||
@ -350,6 +350,7 @@ static int demux_ty_fill_buffer( demuxer_t *demux, demux_stream_t *dsds )
|
||||
int aid;
|
||||
|
||||
TiVoInfo *tivo = demux->priv;
|
||||
unsigned char *chunk = tivo->chunk;
|
||||
|
||||
if ( demux->stream->type == STREAMTYPE_DVD )
|
||||
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);
|
||||
if ((muxer->stream->flags & STREAM_SEEK) != STREAM_SEEK)
|
||||
if ((muxer->stream->flags & MP_STREAM_SEEK) != MP_STREAM_SEEK)
|
||||
priv->oc->pb->is_streamed = 1;
|
||||
|
||||
muxer->priv = (void *) priv;
|
||||
|
@ -235,6 +235,8 @@ switch(video_codec){
|
||||
return 0;
|
||||
}
|
||||
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... ");
|
||||
while(1){
|
||||
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);
|
||||
*gl_texfmt = 3;
|
||||
switch (fmt) {
|
||||
case IMGFMT_RGB48NE:
|
||||
*gl_format = GL_RGB;
|
||||
*gl_type = GL_UNSIGNED_SHORT;
|
||||
break;
|
||||
case IMGFMT_RGB24:
|
||||
*gl_format = GL_RGB;
|
||||
*gl_type = GL_UNSIGNED_BYTE;
|
||||
@ -336,7 +340,7 @@ static void getFunctions(void *(*getProcAddress)(const GLubyte *),
|
||||
strcpy(allexts, extensions);
|
||||
strcat(allexts, " ");
|
||||
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)
|
||||
getProcAddress = setNull;
|
||||
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
|
||||
*/
|
||||
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;
|
||||
int 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_WRAP_S, GL_REPEAT);
|
||||
ActiveTexture(GL_TEXTURE0);
|
||||
free(tex);
|
||||
}
|
||||
|
||||
static const char *bilin_filt_template =
|
||||
@ -1162,7 +1167,7 @@ int loadGPUProgram(GLenum target, char *prog) {
|
||||
glGetString(GL_PROGRAM_ERROR_STRING), &prog[err]);
|
||||
return 0;
|
||||
}
|
||||
if (!GetProgramiv || !mp_msg_test(MSGT_VO, MSGL_V))
|
||||
if (!GetProgramiv || !mp_msg_test(MSGT_VO, MSGL_DBG2))
|
||||
return 1;
|
||||
mp_msg(MSGT_VO, MSGL_V, "[gl] Program statistics:\n");
|
||||
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));
|
||||
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);
|
||||
free(yuv_prog);
|
||||
}
|
||||
@ -1457,7 +1462,7 @@ static void *w32gpa(const GLubyte *procName) {
|
||||
int setGlWindow(int *vinfo, HGLRC *context, HWND win)
|
||||
{
|
||||
int new_vinfo;
|
||||
HDC windc = GetDC(win);
|
||||
HDC windc = vo_w32_get_dc(win);
|
||||
HGLRC new_context = 0;
|
||||
int keep_context = 0;
|
||||
int res = SET_WINDOW_FAILED;
|
||||
@ -1510,7 +1515,7 @@ int setGlWindow(int *vinfo, HGLRC *context, HWND win)
|
||||
res = SET_WINDOW_OK;
|
||||
|
||||
out:
|
||||
ReleaseDC(win, windc);
|
||||
vo_w32_release_dc(win, windc);
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -1524,9 +1529,9 @@ void releaseGlContext(int *vinfo, HGLRC *context) {
|
||||
}
|
||||
|
||||
void swapGlBuffers(void) {
|
||||
HDC vo_hdc = GetDC(vo_w32_window);
|
||||
HDC vo_hdc = vo_w32_get_dc(vo_w32_window);
|
||||
SwapBuffers(vo_hdc);
|
||||
ReleaseDC(vo_w32_window, vo_hdc);
|
||||
vo_w32_release_dc(vo_w32_window, vo_hdc);
|
||||
}
|
||||
#else
|
||||
#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");
|
||||
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,
|
||||
XCreateColormap(mDisplay, mRootWin, vinfo->visual, AllocNone),
|
||||
|
@ -114,7 +114,7 @@ static GLint getInternalFormat(void)
|
||||
{
|
||||
#ifdef GL_WIN32
|
||||
PIXELFORMATDESCRIPTOR pfd;
|
||||
HDC vo_hdc = GetDC(vo_w32_window);
|
||||
HDC vo_hdc = vo_w32_get_dc(vo_w32_window);
|
||||
int pf = GetPixelFormat(vo_hdc);
|
||||
if (!DescribePixelFormat(vo_hdc, pf, sizeof pfd, &pfd)) {
|
||||
r_sz = g_sz = b_sz = a_sz = 0;
|
||||
@ -124,7 +124,7 @@ static GLint getInternalFormat(void)
|
||||
b_sz = pfd.cBlueBits;
|
||||
a_sz = pfd.cAlphaBits;
|
||||
}
|
||||
ReleaseDC(vo_w32_window, vo_hdc);
|
||||
vo_w32_release_dc(vo_w32_window, vo_hdc);
|
||||
#else
|
||||
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;
|
||||
|
@ -54,6 +54,8 @@ static uint32_t o_dheight;
|
||||
static HINSTANCE hInstance;
|
||||
#define vo_window vo_w32_window
|
||||
HWND vo_window = 0;
|
||||
/** HDC used when rendering to a device instead of window */
|
||||
static HDC dev_hdc;
|
||||
static int event_flags;
|
||||
static int mon_cnt;
|
||||
|
||||
@ -331,7 +333,7 @@ static void resetMode(void) {
|
||||
static int createRenderingContext(void) {
|
||||
HWND layer = HWND_NOTOPMOST;
|
||||
PIXELFORMATDESCRIPTOR pfd;
|
||||
HDC vo_hdc = GetDC(vo_window);
|
||||
HDC vo_hdc = vo_w32_get_dc(vo_window);
|
||||
RECT r;
|
||||
int pf;
|
||||
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);
|
||||
|
||||
ReleaseDC(vo_window, vo_hdc);
|
||||
vo_w32_release_dc(vo_window, vo_hdc);
|
||||
return 1;
|
||||
}
|
||||
|
||||
@ -432,6 +434,18 @@ int vo_w32_config(uint32_t width, uint32_t height, uint32_t flags) {
|
||||
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.
|
||||
*
|
||||
@ -453,6 +467,7 @@ int vo_w32_init(void) {
|
||||
HICON mplayerIcon = 0;
|
||||
char exedir[MAX_PATH];
|
||||
HINSTANCE user32;
|
||||
char *dev;
|
||||
|
||||
if (vo_window)
|
||||
return 1;
|
||||
@ -500,6 +515,9 @@ int vo_w32_init(void) {
|
||||
myGetMonitorInfo = GetProcAddress(user32, "GetMonitorInfoA");
|
||||
myEnumDisplayMonitors = GetProcAddress(user32, "EnumDisplayMonitors");
|
||||
}
|
||||
dev_hdc = 0;
|
||||
dev = get_display_name();
|
||||
if (dev) dev_hdc = CreateDC(dev, NULL, NULL, NULL);
|
||||
updateScreenProperties();
|
||||
|
||||
return 1;
|
||||
@ -567,7 +585,29 @@ void vo_w32_uninit(void) {
|
||||
resetMode();
|
||||
ShowCursor(1);
|
||||
depthonscreen = 0;
|
||||
if (dev_hdc) DeleteDC(dev_hdc);
|
||||
dev_hdc = 0;
|
||||
DestroyWindow(vo_window);
|
||||
vo_window = 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);
|
||||
void destroyRenderingContext(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 */
|
||||
|
@ -1048,6 +1048,9 @@ static struct {
|
||||
{"bgr4", IMGFMT_BGR4},
|
||||
{"bg4b", IMGFMT_BG4B},
|
||||
{"bgr1", IMGFMT_BGR1},
|
||||
{"rgb48be", IMGFMT_RGB48BE},
|
||||
{"rgb48le", IMGFMT_RGB48LE},
|
||||
{"rgb48ne", IMGFMT_RGB48NE},
|
||||
{"rgb24", IMGFMT_RGB24},
|
||||
{"rgb32", IMGFMT_RGB32},
|
||||
{"rgb16", IMGFMT_RGB16},
|
||||
|
@ -3460,10 +3460,6 @@ if(stream_dump_type==5){
|
||||
int len;
|
||||
FILE *f;
|
||||
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_seek(mpctx->stream,mpctx->stream->start_pos);
|
||||
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;
|
||||
cache_vars_t* s;
|
||||
|
||||
if (stream->type==STREAMTYPE_STREAM && stream->fd < 0) {
|
||||
// The stream has no 'fd' behind it, so is non-cacheable
|
||||
if (stream->flags & STREAM_NON_CACHEABLE) {
|
||||
mp_msg(MSGT_CACHE,MSGL_STATUS,"\rThis stream is non-cacheable\n");
|
||||
return 1;
|
||||
}
|
||||
|
@ -891,7 +891,7 @@ static int fixup_open(stream_t *stream,int seekable) {
|
||||
stream->type = STREAMTYPE_STREAM;
|
||||
if(!is_icy && !is_ultravox && seekable)
|
||||
{
|
||||
stream->flags |= STREAM_SEEK;
|
||||
stream->flags |= MP_STREAM_SEEK;
|
||||
stream->seek = http_seek;
|
||||
}
|
||||
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_null;
|
||||
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_ifo;
|
||||
extern const stream_info_t stream_info_dvd;
|
||||
@ -114,6 +115,9 @@ static const stream_info_t* const auto_open_streams[] = {
|
||||
#ifdef CONFIG_DVDNAV
|
||||
&stream_info_dvdnav,
|
||||
#endif
|
||||
#ifdef CONFIG_LIBAVFORMAT
|
||||
&stream_info_ffmpeg,
|
||||
#endif
|
||||
|
||||
&stream_info_null,
|
||||
&stream_info_mf,
|
||||
@ -165,10 +169,10 @@ static stream_t *open_stream_plugin(const stream_info_t *sinfo, char *filename,
|
||||
}
|
||||
if(s->type <= -2)
|
||||
mp_msg(MSGT_OPEN,MSGL_WARN, "Warning streams need a type !!!!\n");
|
||||
if(s->flags & STREAM_SEEK && !s->seek)
|
||||
s->flags &= ~STREAM_SEEK;
|
||||
if(s->seek && !(s->flags & STREAM_SEEK))
|
||||
s->flags |= STREAM_SEEK;
|
||||
if(s->flags & MP_STREAM_SEEK && !s->seek)
|
||||
s->flags &= ~MP_STREAM_SEEK;
|
||||
if(s->seek && !(s->flags & MP_STREAM_SEEK))
|
||||
s->flags |= MP_STREAM_SEEK;
|
||||
|
||||
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);
|
||||
} else
|
||||
#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);
|
||||
break;
|
||||
case STREAMTYPE_DS:
|
||||
@ -322,8 +329,9 @@ if(newpos==0 || newpos!=s->pos){
|
||||
mp_msg(MSGT_STREAM,MSGL_INFO,"Stream not seekable!\n");
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#else
|
||||
#endif
|
||||
if(newpos<s->pos){
|
||||
mp_msg(MSGT_STREAM,MSGL_INFO,"Cannot seek backward in linear streams!\n");
|
||||
return 1;
|
||||
@ -331,7 +339,6 @@ if(newpos==0 || newpos!=s->pos){
|
||||
while(s->pos<newpos){
|
||||
if(stream_fill_buffer(s)<=0) break; // EOF
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
default:
|
||||
// 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)
|
||||
return NULL;
|
||||
s=malloc(sizeof(stream_t)+len);
|
||||
memset(s,0,sizeof(stream_t));
|
||||
s=calloc(1, sizeof(stream_t)+len);
|
||||
s->fd=-1;
|
||||
s->type=STREAMTYPE_MEMORY;
|
||||
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 *s=malloc(sizeof(stream_t));
|
||||
stream_t *s=calloc(1, sizeof(stream_t));
|
||||
if(s==NULL) return NULL;
|
||||
memset(s,0,sizeof(stream_t));
|
||||
|
||||
#if HAVE_WINSOCK2_H
|
||||
{
|
||||
|
@ -37,10 +37,14 @@
|
||||
#define STREAM_READ 0
|
||||
#define STREAM_WRITE 1
|
||||
/// Seek flags, if not mannualy set and s->seek isn't NULL
|
||||
/// STREAM_SEEK is automaticly set
|
||||
#define STREAM_SEEK_BW 2
|
||||
#define STREAM_SEEK_FW 4
|
||||
#define STREAM_SEEK (STREAM_SEEK_BW|STREAM_SEEK_FW)
|
||||
/// MP_STREAM_SEEK is automaticly set
|
||||
#define MP_STREAM_SEEK_BW 2
|
||||
#define MP_STREAM_SEEK_FW 4
|
||||
#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
|
||||
#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){
|
||||
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!
|
||||
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->type = STREAMTYPE_VCDBINCUE;
|
||||
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->end_pos = ret2;
|
||||
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;
|
||||
stream->type = STREAMTYPE_DVD;
|
||||
stream->sector_size = 2048;
|
||||
stream->flags = STREAM_READ | STREAM_SEEK;
|
||||
stream->flags = STREAM_READ | MP_STREAM_SEEK;
|
||||
stream->fill_buffer = fill_buffer;
|
||||
stream->seek = seek;
|
||||
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);
|
||||
|
||||
stream->sector_size = 2048;
|
||||
stream->flags = STREAM_READ | STREAM_SEEK;
|
||||
stream->flags = STREAM_READ | MP_STREAM_SEEK;
|
||||
stream->fill_buffer = fill_buffer;
|
||||
stream->seek = seek;
|
||||
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
|
||||
if(mode == STREAM_READ) stream->seek = seek_forward;
|
||||
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) {
|
||||
stream->seek = seek;
|
||||
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;
|
||||
stream->type = STREAMTYPE_STREAM;
|
||||
stream->flags = STREAM_NON_CACHEABLE;
|
||||
return STREAM_OK;
|
||||
|
||||
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->control = control;
|
||||
if(stream->flags & STREAM_SEEK)
|
||||
if(stream->flags & MP_STREAM_SEEK)
|
||||
stream->seek = seek;
|
||||
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);
|
||||
}
|
||||
if(len > 0 || mode == STREAM_WRITE) {
|
||||
stream->flags |= STREAM_SEEK;
|
||||
stream->flags |= MP_STREAM_SEEK;
|
||||
stream->seek = seek;
|
||||
if(mode == STREAM_READ) stream->end_pos = len;
|
||||
}
|
||||
|
30
subreader.c
30
subreader.c
@ -19,6 +19,7 @@
|
||||
#include "mp_msg.h"
|
||||
#include "subreader.h"
|
||||
#include "stream/stream.h"
|
||||
#include "libavutil/common.h"
|
||||
|
||||
#ifdef CONFIG_ENCA
|
||||
#include <enca.h>
|
||||
@ -1084,7 +1085,7 @@ void subcp_open (stream_t *st)
|
||||
char enca_lang[3], enca_fallback[100];
|
||||
if (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);
|
||||
} else {
|
||||
cp_tmp = enca_fallback;
|
||||
@ -1147,10 +1148,13 @@ subtitle* subcp_recode (subtitle *sub)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_FRIBIDI
|
||||
#ifndef max
|
||||
#define max(a,b) (((a)>(b))?(a):(b))
|
||||
#endif
|
||||
static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
||||
/**
|
||||
* Do conversion necessary for right-to-left language support via fribidi.
|
||||
* @param sub subtitle to convert
|
||||
* @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
|
||||
char *ip = NULL, *op = NULL;
|
||||
@ -1159,7 +1163,8 @@ static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
||||
int l=sub->lines;
|
||||
int char_set_num;
|
||||
fribidi_boolean log2vis;
|
||||
if(flip_hebrew) { // Please fix the indentation someday
|
||||
if (!flip_hebrew)
|
||||
return sub;
|
||||
fribidi_set_mirroring(1);
|
||||
fribidi_set_reorder_nsm(0);
|
||||
|
||||
@ -1168,7 +1173,7 @@ static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
||||
}else {
|
||||
char_set_num = fribidi_parse_charset ("UTF-8");
|
||||
}
|
||||
while (l) {
|
||||
while (l > from) {
|
||||
ip = sub->text[--l];
|
||||
orig_len = len = strlen( ip ); // We assume that we don't use full unicode, only UTF-8 or ISO8859-x
|
||||
if(len > LINE_LEN) {
|
||||
@ -1184,7 +1189,7 @@ static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
||||
if(log2vis) {
|
||||
len = fribidi_remove_bidi_marks (visual, len, 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");
|
||||
l++;
|
||||
break;
|
||||
@ -1194,12 +1199,11 @@ static subtitle* sub_fribidi (subtitle *sub, int sub_utf8)
|
||||
sub->text[l] = op;
|
||||
}
|
||||
}
|
||||
if (l){
|
||||
if (!from && l){
|
||||
for (l = sub->lines; l;)
|
||||
free (sub->text[--l]);
|
||||
return ERR;
|
||||
}
|
||||
}
|
||||
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);
|
||||
#endif
|
||||
#ifdef CONFIG_FRIBIDI
|
||||
if (sub!=ERR) sub=sub_fribidi(sub,sub_utf8);
|
||||
if (sub!=ERR) sub=sub_fribidi(sub,sub_utf8,0);
|
||||
#endif
|
||||
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 i, pos;
|
||||
char *buf;
|
||||
int orig_lines = sub->lines;
|
||||
if (sub->lines >= SUB_MAX_TEXT) return;
|
||||
pos = 0;
|
||||
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 &&
|
||||
strlen(sub->text[sub->lines]))
|
||||
sub->lines++;
|
||||
#ifdef CONFIG_FRIBIDI
|
||||
sub = sub_fribidi(sub, sub_utf8, orig_lines);
|
||||
#endif
|
||||
}
|
||||
|
||||
#define MP_NOPTS_VALUE (-1LL<<63)
|
||||
|
Loading…
Reference in New Issue
Block a user