1
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:
Uoti Urpala 2009-11-23 01:56:21 +02:00
commit 5995bc175a
48 changed files with 637 additions and 482 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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] rtscSETINFO 失败。\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-initPCM 信息错误:%s\n"
#define MSGTR_AO_ALSA5_SoundcardsFound "[AO ALSA5] alsa-init找到声卡 %d使用%s\n"
#define MSGTR_AO_ALSA5_PcmChanInfoError "[AO ALSA5] alsa-initPCM 声道信息错误:%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-uninitPCM 关闭错误:%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-playalsa 输出滞后,重新设置音频流。\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"

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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