Merge branch 'mplayer1_changes'

This commit is contained in:
Uoti Urpala 2011-05-02 00:46:03 +03:00
commit 7e65428712
30 changed files with 518 additions and 199 deletions

View File

@ -2408,6 +2408,24 @@ Deaktiviert das automatische Laden von Untertiteln.
Setzt die Anzeigedauer der OSD-Meldungen in ms (Standard: 1000).
.
.TP
.B \-osd\-fractions <0\-2>
Setzt die Art der Anzeige von Nachkommastellen des aktuellen Zeitstempels im
OSD:
.PD 0
.RSs
.IPs 0
Keine Anzeige der Nachkommastellen (Standard).
.IPs 1
Zeige die ersten beiden Nachkommastellen.
.IPs 2
Zeige genäherte Framezahl an.
Die angezeigte Framezahl ist nicht exakt, sondern nur genähert.
Für variable FPS ist die Näherung weit von der tatsächlichen Framezahl
entfernt.
.RE
.PD 1
.
.TP
.B \-osdlevel <0\-3> (nur bei MPlayer)
Gibt den Modus an, in dem das OSD startet:
.PD 0

View File

@ -1474,6 +1474,35 @@ Can be slow especially when seeking backwards since it has to rewind
to the beginning to find an exact frame position.
.
.TP
.B \-http-header-fields <field1,field2>
Set custom HTTP fields when accessing HTTP stream.
.sp 1
.I EXAMPLE:
.PD 0
.RSs
.IPs
mplayer \-http\-header\-fields 'Field1: value1','Field2: value2' http://localhost:1234
.br
Will generate HTTP request:
.RSss
.br
GET / HTTP/1.0
.br
Host: localhost:1234
.br
User-Agent: MPlayer
.br
Icy-MetaData: 1
.br
Field1: value1
.br
Field2: value2
.br
Connection: close
.REss
.RE
.
.TP
.B \-idx (also see \-forceidx)
Rebuilds index of files if no index was found, allowing seeking.
Useful with broken/\:incomplete downloads, or badly created files.
@ -2324,6 +2353,23 @@ Turns off automatic subtitle file loading.
Set the duration of the OSD messages in ms (default: 1000).
.
.TP
.B \-osd\-fractions <0\-2>
Set how fractions of seconds of the current timestamp are printed on the OSD:
.PD 0
.RSs
.IPs 0
Do not display fractions (default).
.IPs 1
Show the first two decimals.
.IPs 2
Show approximate frame count within current second.
This frame count is not accurate but only an approximation.
For variable fps, the approximation is known to be far off the correct frame
count.
.RE
.PD 1
.
.TP
.B \-osdlevel <0\-3>
Specifies which mode the OSD should start in.
.PD 0
@ -3110,6 +3156,11 @@ Fixes fullscreen switching on OpenBox 1.x.
.PD 1
.
.TP
.B \-gamma <\-100\-100>
Adjust the gamma of the video signal (default: 0).
Not supported by all video output drivers.
.
.TP
.B \-geometry x[%][:y[%]] or [WxH][+-x+-y]
Adjust where the output is on the screen initially.
The x and y specifications are in pixels measured from the top-left of the

View File

@ -442,6 +442,7 @@ const m_option_t common_opts[] = {
{"user", &network_username, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"passwd", &network_password, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"bandwidth", &network_bandwidth, CONF_TYPE_INT, CONF_MIN, 0, 0, NULL},
{"http-header-fields", &network_http_header_fields, CONF_TYPE_STRING_LIST, 0, 0, 0, NULL},
{"user-agent", &network_useragent, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"referrer", &network_referrer, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"cookies", &network_cookies_enabled, CONF_TYPE_FLAG, 0, 0, 1, NULL},
@ -868,6 +869,7 @@ const m_option_t mplayer_opts[]={
OPT_INTRANGE("saturation", vo_gamma_saturation, 0, -100, 100),
OPT_INTRANGE("contrast", vo_gamma_contrast, 0, -100, 100),
OPT_INTRANGE("hue", vo_gamma_hue, 0, -100, 100),
OPT_INTRANGE("gamma", vo_gamma_gamma, 0, -100, 100),
{"keepaspect", &vo_keepaspect, CONF_TYPE_FLAG, 0, 0, 1, NULL},
{"nokeepaspect", &vo_keepaspect, CONF_TYPE_FLAG, 0, 1, 0, NULL},
@ -895,6 +897,7 @@ const m_option_t mplayer_opts[]={
#endif
OPT_INTRANGE("osdlevel", osd_level, 0, 0, 3),
OPT_INTRANGE("osd-duration", osd_duration, 0, 0, 3600000),
OPT_INTRANGE("osd-fractions", osd_fractions, 0, 0, 2),
#ifdef CONFIG_MENU
{"menu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 0, 1, NULL},
{"nomenu", &use_menu, CONF_TYPE_FLAG, CONF_GLOBAL, 1, 0, NULL},
@ -955,7 +958,9 @@ const m_option_t mplayer_opts[]={
OPT_FLAG_CONSTANTS("noloop", loop_times, 0, 0, -1),
OPT_INTRANGE("loop", loop_times, 0, -1, 10000),
{"playlist", NULL, CONF_TYPE_STRING, 0, 0, 0, NULL},
{"playlist", NULL, CONF_TYPE_STRING, CONF_NOCFG, 0, 0, NULL},
{"shuffle", NULL, CONF_TYPE_FLAG, CONF_NOCFG, 0, 0, NULL},
{"noshuffle", NULL, CONF_TYPE_FLAG, CONF_NOCFG, 0, 0, NULL},
OPT_MAKE_FLAGS("ordered-chapters", ordered_chapters, 0),
OPT_INTRANGE("chapter-merge-threshold", chapter_merge_threshold, 0, 0, 10000),

View File

@ -605,6 +605,8 @@ static int mp_property_angle(m_option_t *prop, int action, void *arg,
angle += step;
if (angle < 1) //cycle
angle = angles;
else if (angle > angles)
angle = 1;
break;
}
default:

20
configure vendored
View File

@ -296,7 +296,6 @@ Installation directories:
Optional features:
--disable-mplayer disable MPlayer compilation [enable]
--disable-largefiles disable support for files > 2GB [enable]
--enable-termcap use termcap database for key codes [autodetect]
--enable-termios use termios database for key codes [autodetect]
--disable-iconv disable iconv for encoding conversion [autodetect]
@ -670,7 +669,6 @@ _xvr100=auto
_tga=yes
_directfb=auto
_bl=no
_largefiles=yes
#language=en
_shm=auto
_translation=no
@ -1076,8 +1074,6 @@ for ac_option do
--disable-bl) _bl=no ;;
--enable-mtrr) _mtrr=yes ;;
--disable-mtrr) _mtrr=no ;;
--enable-largefiles) _largefiles=yes ;;
--disable-largefiles) _largefiles=no ;;
--enable-shm) _shm=yes ;;
--disable-shm) _shm=no ;;
--enable-select) _select=yes ;;
@ -2615,7 +2611,7 @@ if arm ; then
_armv6t2=no
inline_asm_check '"movt r0, #0"' && _armv6t2=yes
fi
echores "$_armv6"
echores "$_armv6t2"
echocheck "ARM VFP"
if test $_armvfp = "auto" ; then
@ -5284,11 +5280,9 @@ fi
if test "$_dvdread_internal" = yes; then
def_dvdread='#define CONFIG_DVDREAD 1'
inputmodules="dvdread(internal) $inputmodules"
_largefiles=yes
res_comment="internal"
elif test "$_dvdread" = yes; then
def_dvdread='#define CONFIG_DVDREAD 1'
_largefiles=yes
extra_ldflags="$extra_ldflags -ldvdread"
inputmodules="dvdread(external) $inputmodules"
res_comment="external"
@ -5324,7 +5318,6 @@ if test "$_libdvdcss_internal" = yes ; then
cflags_libdvdcss_dvdread="-Ilibdvdcss"
def_dvdcss="#define HAVE_DVDCSS_DVDCSS_H 1"
inputmodules="libdvdcss(internal) $inputmodules"
_largefiles=yes
else
noinputmodules="libdvdcss(internal) $noinputmodules"
fi
@ -6600,14 +6593,8 @@ if os2 ; then
fi
#############################################################################
# 64 bit file offsets?
if test "$_largefiles" = yes || freebsd ; then
CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64"
if test "$_dvdread" = yes || test "$_libdvdcss_internal" = yes ; then
# dvdread support requires this (for off64_t)
CFLAGS="$CFLAGS -D_LARGEFILE64_SOURCE"
fi
fi
CFLAGS="$CFLAGS -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE"
CXXFLAGS=" $CFLAGS -D__STDC_CONSTANT_MACROS -D__STDC_LIMIT_MACROS"
@ -6637,7 +6624,6 @@ if test "$_dvdnav" = auto ; then
statement_check_broken stdint.h dvdnav/dvdnav.h 'dvdnav_t *dvd = 0' $_dvdnavdir $_dvdnavlibs $_ld_dl $_ld_pthread && _dvdnav=yes
fi
if test "$_dvdnav" = yes ; then
_largefiles=yes
def_dvdnav='#define CONFIG_DVDNAV 1'
if test "$dvdnav_internal" = yes ; then
cflags_libdvdnav="-Ilibdvdnav"

View File

@ -3,12 +3,20 @@
; Before editing this file, please read DOCS/tech/codecs.conf.txt !
;=============================================================================
release 20101127
release 20110311
;=============================================================================
; VIDEO CODECS
;=============================================================================
videocodec ffanm
info "FFmpeg Deluxe Paint Animation"
status working
fourcc "ANM " ; internal MPlayer FourCC
driver ffmpeg
dll anm
out BGR8
videocodec ffbinkvideo
info "FFmpeg Bink Video"
status working
@ -184,15 +192,13 @@ videocodec ffmpeg2
format 0x10000002 ; MPEG-2
fourcc mpg2,MPG2
fourcc "DVR "
fourcc hdv1
fourcc hdv2
fourcc MPEG
fourcc hdv3 ; HDV 1080i50
fourcc hdv5 ; HDV 720p25
fourcc mx5p ; MPEG IMX 625/50 (50 Mb/s)
fourcc MMES,mmes ; matrox mpeg2 in avi
fourcc M701 ; matrox mpeg2 intra-only
fourcc hdv6,hdv7,hdv8
fourcc hdv1,hdv2,hdv3
fourcc hdv4,hdv5,hdv6
fourcc hdv7,hdv8,hdv9
fourcc xdv1,xdv2,xdv3
fourcc xdv4,xdv5,xdv6
fourcc xdv7,xdv8,xdv9
@ -200,7 +206,7 @@ videocodec ffmpeg2
fourcc xdvd,xdve,xdvf
fourcc xd5a,xd5b,xd5c
fourcc xd5d,xd5e,xd5f
fourcc xd59,xd54
fourcc xd59,xd54,xd55
fourcc mx5n,mx4n,mx4p
fourcc mx3n,mx3p
fourcc AVmp
@ -226,15 +232,13 @@ videocodec ffmpeg12
fourcc PIM2 ; Pinnacle hardware-MPEG-2
fourcc VCR2
fourcc "DVR "
fourcc hdv2
fourcc MPEG
fourcc hdv1
fourcc hdv3 ; HDV 1080i50
fourcc hdv5 ; HDV 720p25
fourcc mx5p ; MPEG IMX 625/50 (50 Mb/s)
fourcc MMES,mmes ; matrox mpeg2 in avi
fourcc M701 ; matrox mpeg2 intra-only
fourcc hdv6,hdv7,hdv8
fourcc hdv1,hdv2,hdv3
fourcc hdv4,hdv5,hdv6
fourcc hdv7,hdv8,hdv9
fourcc xdv1,xdv2,xdv3
fourcc xdv4,xdv5,xdv6
fourcc xdv7,xdv8,xdv9
@ -242,7 +246,7 @@ videocodec ffmpeg12
fourcc xdvd,xdve,xdvf
fourcc xd5a,xd5b,xd5c
fourcc xd5d,xd5e,xd5f
fourcc xd59,xd54
fourcc xd59,xd54,xd55
fourcc mx5n,mx4n,mx4p
fourcc mx3n,mx3p
fourcc AVmp
@ -250,6 +254,7 @@ videocodec ffmpeg12
fourcc m2v1,m1v1
fourcc LMP2 ; Lead mpeg2 in avi
fourcc slif ; SoftLab MPEG-2 I-frames Codec
fourcc EM2V ; Etymonix MPEG-2 I-frame Video Codec
driver ffmpeg
dll "mpegvideo"
out YV12,I420,IYUV
@ -262,17 +267,15 @@ videocodec ffmpeg12mc
format 0x10000002 ; MPEG-2
fourcc mpg1,mpg2,MPG2
fourcc "DVR "
fourcc hdv1
fourcc hdv2
fourcc PIM1 ; Pinnacle hardware-MPEG-1
fourcc PIM2 ; Pinnacle hardware-MPEG-2
fourcc VCR2
fourcc MPEG
fourcc hdv3 ; HDV 1080i50
fourcc hdv5 ; HDV 720p25
fourcc mx5p ; MPEG IMX 625/50 (50 Mb/s)
fourcc MMES,mmes ; matrox mpeg2 in avi
fourcc hdv6,hdv7,hdv8
fourcc hdv1,hdv2,hdv3
fourcc hdv4,hdv5,hdv6
fourcc hdv7,hdv8,hdv9
fourcc xdv1,xdv2,xdv3
fourcc xdv4,xdv5,xdv6
fourcc xdv7,xdv8,xdv9
@ -280,7 +283,7 @@ videocodec ffmpeg12mc
fourcc xdvd,xdve,xdvf
fourcc xd5a,xd5b,xd5c
fourcc xd5d,xd5e,xd5f
fourcc xd59,xd54
fourcc xd59,xd54,xd55
fourcc mx5n,mx4n,mx4p
fourcc mx3n,mx3p
fourcc AVmp
@ -313,9 +316,6 @@ videocodec ffmpeg12vdpau
fourcc xdv7,xdv8,xdv9
fourcc xdva,xdvb,xdvc
fourcc xdvd,xdve,xdvf
fourcc xd5a,xd5b,xd5c
fourcc xd5d,xd5e,xd5f
fourcc xd59,xd54
fourcc mx5n,mx4n,mx4p
fourcc mx3n,mx3p
fourcc AVmp
@ -327,6 +327,40 @@ videocodec ffmpeg12vdpau
out VDPAU_MPEG1
out VDPAU_MPEG2
videocodec ffmpeg2crystalhd
info "FFmpeg MPEG-2 (CrystalHD)"
status working
format 0x10000002 ; MPEG-2
fourcc mpg2,MPG2
fourcc "DVR "
fourcc MPEG
fourcc mx5p ; MPEG IMX 625/50 (50 Mb/s)
fourcc MMES,mmes ; matrox mpeg2 in avi
fourcc M701 ; matrox mpeg2 intra-only
fourcc hdv1,hdv2,hdv3
fourcc hdv4,hdv5,hdv6
fourcc hdv7,hdv8,hdv9
fourcc xdv1,xdv2,xdv3
fourcc xdv4,xdv5,xdv6
fourcc xdv7,xdv8,xdv9
fourcc xdva,xdvb,xdvc
fourcc xdvd,xdve,xdvf
fourcc xd5a,xd5b,xd5c
fourcc xd5d,xd5e,xd5f
fourcc xd59,xd54
fourcc mx5n,mx4n,mx4p
fourcc mx3n,mx3p
fourcc AVmp
fourcc VCR2
fourcc mp2v,mpgv
fourcc m2v1
fourcc PIM2
fourcc LMP2 ; Lead mpeg2 in avi
fourcc slif ; SoftLab MPEG-2 I-frames Codec
driver ffmpeg
dll mpeg2_crystalhd
out YUY2
videocodec mpegpes
info "MPEG-PES output (.mpg or DXR3/IVTV/DVB/V4L2 card)"
comment "for hardware decoding"
@ -336,8 +370,8 @@ videocodec mpegpes
fourcc mpg1,MPG1,mpg2,MPG2
fourcc MPEG
fourcc hdv1,hdv2,hdv3
fourcc hdv5
fourcc hdv6,hdv7,hdv8
fourcc hdv4,hdv5,hdv6
fourcc hdv7,hdv8,hdv9
fourcc xdv1,xdv2,xdv3
fourcc xdv4,xdv5,xdv6
fourcc xdv7,xdv8,xdv9
@ -345,7 +379,7 @@ videocodec mpegpes
fourcc xdvd,xdve,xdvf
fourcc xd5a,xd5b,xd5c
fourcc xd5d,xd5e,xd5f
fourcc xd59,xd54
fourcc xd59,xd54,xd55
fourcc mx5n,mx4n,mx4p
fourcc mx3n,mx3p
fourcc AVmp
@ -861,6 +895,23 @@ videocodec ffdivx
dll msmpeg4
out YV12,I420,IYUV
videocodec ffdivxcrystalhd
info "FFmpeg DivX ;-) (MSMPEG-4 v3) (CrystalHD)"
status buggy
fourcc MPG3,mpg3 div3
fourcc MP43,mp43 div3 ; MSMPEG-4 v3 (fourcc mapping to div3)
fourcc DIV5,div5 div3 ; DivX 3.20
fourcc DIV6,div6 div4 ; -||-
fourcc DIV3,div3,DIV4,div4
fourcc DIVF,divf ; divx4.12
fourcc AP41 div3 ; AngelPotion stuff
fourcc COL1,col1,COL0,col0 ; Cool codec (based on mpg4ds32.ax)
fourcc 3IVD,3ivd ; divxdoctored files (3ivx.com)
fourcc DVX3
driver ffmpeg
dll msmpeg4_crystalhd
out YUY2
videocodec ffmp42
info "FFmpeg MSMPEG-4 v2"
status working
@ -921,6 +972,14 @@ videocodec ffwmv3vdpau
dll wmv3_vdpau
out VDPAU_WMV3
videocodec ffwmv3crystalhd
info "FFmpeg WMV3/WMV9 (CrystalHD)"
status buggy
fourcc WMV3,wmv3
driver ffmpeg
dll wmv3_crystalhd
out YUY2
videocodec ffvc1
info "FFmpeg WVC1"
status buggy
@ -939,6 +998,15 @@ videocodec ffvc1vdpau
dll vc1_vdpau
out VDPAU_VC1
videocodec ffvc1crystalhd
info "FFmpeg WVC1 (CrystalHD)"
status buggy
fourcc WVC1,wvc1,WMVA
fourcc vc-1,VC-1
driver ffmpeg
dll vc1_crystalhd
out YUY2
videocodec ffh264
info "FFmpeg H.264"
status working
@ -948,6 +1016,8 @@ videocodec ffh264
fourcc davc,DAVC
fourcc vvvc ; only one sample using this fourcc
fourcc ai55,ai15 ; flip4mac avc intra
fourcc ai1q,ai5q ; flip4mac avc intra
fourcc ai12 ;AVC Intra 100 / 1080
format 0x10000005
driver ffmpeg
dll h264
@ -961,11 +1031,27 @@ videocodec ffh264vdpau
fourcc avc1,AVC1
fourcc davc,DAVC
fourcc ai55,ai15 ; flip4mac avc intra
fourcc ai1q,ai5q ; flip4mac avc intra
format 0x10000005
driver ffmpeg
dll h264_vdpau
out VDPAU_H264
videocodec ffh264crystalhd
info "FFmpeg H.264 (CrystalHD)"
status working
fourcc H264,h264
fourcc X264,x264
fourcc avc1,AVC1
fourcc davc,DAVC
fourcc vvvc ; only one sample using this fourcc
fourcc ai55,ai15 ; flip4mac avc intra
fourcc ai1q,ai5q ; flip4mac avc intra
format 0x10000005
driver ffmpeg
dll h264_crystalhd
out YUY2
videocodec coreavcwindows
info "CoreAVC H.264 for x86 - http://corecodec.org/"
comment "this codec will only work after purchasing it"
@ -976,6 +1062,7 @@ videocodec coreavcwindows
fourcc davc,DAVC
fourcc VSSH
fourcc ai55,ai15 ; flip4mac avc intra
fourcc ai1q,ai5q ; flip4mac avc intra
format 0x10000005
driver dshow
dll "CoreAVCDecoder.ax"
@ -1057,6 +1144,39 @@ videocodec ffodivxvdpau
dll mpeg4_vdpau
out VDPAU_MPEG4
videocodec ffodivxcrystalhd
info "FFmpeg MPEG-4,DIVX-4/5 (CrystalHD)"
status working
fourcc FMP4,fmp4
fourcc DIVX,divx
fourcc DIV1,div1 divx
fourcc MP4S,mp4s ; ISO MPEG-4 Video V1
fourcc M4S2,m4s2
fourcc xvid,XVID,XviD,XVIX
fourcc DX50,dx50,BLZ0 DX50
fourcc mp4v,MP4V
format 0x4
fourcc UMP4
fourcc RMP4
fourcc 3IV2,3iv2 ; 3ivx Delta 4
fourcc DXGM
fourcc SEDG ; diskless camcorder Samsung Miniket VP-M110
fourcc SMP4,smp4 ; Samsung SMP4 video codec
fourcc VIDM ; vidm 4.01 codec
format 0x10000004 ; mpeg 4 es
fourcc m4cc,M4CC
fourcc hdx4,HDX4
fourcc FVFW,fvfw
fourcc FFDS
fourcc DCOD,MVXM,EM4A,PM4V
fourcc M4T3,DMK2,DIGI,INMC
fourcc EPHV,SN40,WAWV
fourcc uldx,ULDX,VSPX
fourcc SIPP ; Samsung SHR-6040
driver ffmpeg
dll mpeg4_crystalhd
out YUY2
videocodec ffwv1f
info "WV1F MPEG-4"
status working
@ -1742,6 +1862,7 @@ videocodec ffdv
status working
fourcc CDVC,cdvc
fourcc CDVH,cdvh ; Canopus DVCPRO HD
fourcc CDV5 ; Canopus SD50
fourcc DVSD,dvsd ; PAL
fourcc DVCS,dvcs ; NTSC ?
fourcc "dvcp" ; PAL DV in .mov
@ -2494,6 +2615,14 @@ videocodec webtrain
dll "wtvc.dll"
out BGR16 flip
videocodec ffkega
info "FFmpeg Kega Video"
status working
fourcc KGV1
driver ffmpeg
dll kgv1
out BGR15
videocodec kegavideo
info "Kega Video"
comment "requires MSVCR80.DLL on windows"
@ -3008,6 +3137,14 @@ videocodec fffraps
dll "fraps"
out BGR24,YV12,I420
videocodec ffjv
info "FFmpeg Bitmap Brothers JV"
status working
fourcc FFJV ; internal MPlayer FourCC
driver ffmpeg
dll "jv"
out BGR8
videocodec fftiertexseq
info "FFmpeg Tiertex SEQ"
status working
@ -3554,45 +3691,45 @@ audiocodec wma9spdshow
audiocodec ffqdm2
info "FFmpeg QDM2 audio"
status working
format 0x324D4451 ; "QDM2"
fourcc QDM2
driver ffmpeg
dll "qdm2"
audiocodec qdmc
info "QuickTime QDMC/QDM2 audio"
status working
format 0x324D4451 ; "QDM2"
format 0x434D4451 ; "QDMC"
fourcc QDM2
fourcc QDMC
driver qtaudio
dll "QuickTime.qts"
audiocodec ffqclp
info "FFmpeg QCLP audio"
status working
format 0x706C6351 ; "Qclp"
format 0x70637173 ; "sqcp"
format 0x716C6351 ; "Qclq"
fourcc Qclp
fourcc sqcp
fourcc Qclq
driver ffmpeg
dll "qcelp"
audiocodec qclp
info "QuickTime QCLP audio"
status working
format 0x706C6351 ; "Qclp"
fourcc Qclp
driver qtaudio
dll "QuickTime.qts"
audiocodec qtmace3
info "QuickTime MACE3 audio"
status working
format 0x3343414D ; "MAC3"
fourcc MAC3
driver qtaudio
dll "QuickTime.qts"
audiocodec qtmace6
info "QuickTime MACE6 audio"
status working
format 0x3643414D ; "MAC6"
fourcc MAC6
driver qtaudio
dll "QuickTime.qts"
@ -3606,29 +3743,29 @@ audiocodec zygoaudio
audiocodec ffra144
info "FFmpeg RealAudio 1.0"
status working
format 0x345F3431 ; "14_4"
format 0x4A63706C ; "lpcJ"
fourcc 14_4
fourcc lpcJ
driver ffmpeg
dll "real_144"
audiocodec ffra288
info "FFmpeg RealAudio 2.0"
status working
format 0x385F3832 ; "28_8"
fourcc 28_8
driver ffmpeg
dll "real_288"
audiocodec ffcook
info "FFmpeg COOK audio"
status working
format 0x6B6F6F63 ; "cook"
fourcc cook
driver ffmpeg
dll "cook"
audiocodec ffatrc
info "FFmpeg Atrac 3 audio"
status working
format 0x63727461 ; "atrc"
fourcc atrc
format 0x270 ; atrac3 in wav
driver ffmpeg
dll "atrac3"
@ -3636,7 +3773,7 @@ audiocodec ffatrc
audiocodec ffsipr
info "FFmpeg Sipr/Acelp.net audio"
status working
format 0x72706973 ; "sipr"
fourcc sipr
format 0x130 ; acelp.net
driver ffmpeg
dll "sipr"
@ -3644,42 +3781,42 @@ audiocodec ffsipr
audiocodec ra144
info "RealAudio 1.0"
status working
format 0x345F3431 ; "14_4"
fourcc 14_4
driver realaud
dll "14_4.so.6.0"
audiocodec ra144win
info "Win32 RealAudio 1.0"
status working
format 0x345F3431 ; "14_4"
fourcc 14_4
driver realaud
dll "14_43260.dll"
audiocodec ra144mac
info "Mac OS X RealAudio 1.0"
status working
format 0x345F3431 ; "14_4"
fourcc 14_4
driver realaud
dll "14_4.shlb"
audiocodec ra288
info "RealAudio 2.0"
status working
format 0x385F3832 ; "28_8"
fourcc 28_8
driver realaud
dll "28_8.so.6.0"
audiocodec ra288win
info "Win32 RealAudio 2.0"
status working
format 0x385F3832 ; "28_8"
fourcc 28_8
driver realaud
dll "28_83260.dll"
audiocodec ra288mac
info "Mac OS X RealAudio 2.0"
status working
format 0x385F3832 ; "28_8"
fourcc 28_8
driver realaud
dll "28_8.shlb"
@ -3687,14 +3824,14 @@ audiocodec ra10cook
info "RealPlayer 10 COOK audio"
comment "supports cook 5.1"
status working
format 0x6B6F6F63 ; "cook"
fourcc cook
driver realaud
dll "cook.so"
audiocodec racook
info "RealAudio COOK"
status working
format 0x6B6F6F63 ; "cook"
fourcc cook
driver realaud
dll "cook.so.6.0"
@ -3702,91 +3839,91 @@ audiocodec ra10cookwin
info "Win32 RealAudio 10 COOK"
comment "supports cook 5.1"
status working
format 0x6B6F6F63 ; "cook"
fourcc cook
driver realaud
dll "cook.dll"
audiocodec racookwin
info "Win32 RealAudio COOK"
status working
format 0x6B6F6F63 ; "cook"
fourcc cook
driver realaud
dll "cook3260.dll"
audiocodec racookmac
info "Mac OS X RealAudio COOK"
status working
format 0x6B6F6F63 ; "cook"
fourcc cook
driver realaud
dll "cook.bundle/Contents/MacOS/cook"
audiocodec rasipr
info "RealAudio Sipro"
status working
format 0x72706973 ; "sipr"
fourcc sipr
driver realaud
dll "sipr.so.6.0"
audiocodec ra10sipr
info "RealPlayer 10 RealAudio Sipro"
status working
format 0x72706973 ; "sipr"
fourcc sipr
driver realaud
dll "sipr.so"
audiocodec ra10siprwin
info "Win32 RealAudio 10 Sipro"
status working
format 0x72706973 ; "sipr"
fourcc sipr
driver realaud
dll "sipr.dll"
audiocodec rasiprwin
info "Win32 RealAudio Sipro"
status working
format 0x72706973 ; "sipr"
fourcc sipr
driver realaud
dll "sipr3260.dll"
audiocodec rasiprmac
info "Mac OS X RealAudio Sipro"
status working
format 0x72706973 ; "sipr"
fourcc sipr
driver realaud
dll "sipr.bundle/Contents/MacOS/sipr"
audiocodec raatrc
info "RealAudio ATRAC3"
status working
format 0x63727461 ; "atrc"
fourcc atrc
driver realaud
dll "atrc.so.6.0"
audiocodec ra10atrc
info "RealPlayer 10 RealAudio ATRAC3"
status working
format 0x63727461 ; "atrc"
fourcc atrc
driver realaud
dll "atrc.so"
audiocodec ra10atrcwin
info "Win32 RealAudio 10 ATRAC3"
status working
format 0x63727461 ; "atrc"
fourcc atrc
driver realaud
dll "atrc.dll"
audiocodec raatrcwin
info "Win32 RealAudio ATRAC3"
status working
format 0x63727461 ; "atrc"
fourcc atrc
driver realaud
dll "atrc3260.dll"
audiocodec raatrcmac
info "Mac OS X RealAudio ATRAC3"
status working
format 0x63727461 ; "atrc"
fourcc atrc
driver realaud
dll "atrc.bundle/Contents/MacOS/atrc"
@ -3807,7 +3944,7 @@ audiocodec ffadpcmimaamv
audiocodec ffadpcmimaqt
info "FFmpeg QT IMA ADPCM audio"
status working
format 0x34616d69 ; "ima4" (MOV files)
fourcc ima4 ; (MOV files)
driver ffmpeg
dll adpcm_ima_qt
@ -3824,7 +3961,7 @@ audiocodec imaadpcm
info "IMA ADPCM"
status working
format 0x11
format 0x34616d69 ; "ima4" (MOV files)
fourcc ima4 ; (MOV files)
format 0x1100736d ; "ms\x00\x11" (MOV files)
driver imaadpcm
@ -3959,9 +4096,10 @@ audiocodec ffadpcmxa
audiocodec ffxandpcm
info "FFmpeg XAN DPCM audio"
comment "only works with libavformat demuxer"
comment "Wing Commander 4 files only work with libavformat demuxer"
status working
fourcc Axan
format 0x594A
driver ffmpeg
dll xan_dpcm
@ -4119,18 +4257,20 @@ audiocodec pcm
format 0x1
format 0x3 ; IEEE float
format 0xfffe ; Extended
format 0x20776172 ; "raw " (MOV files)
format 0x736f7774 ; "twos" (MOV files)
format 0x74776f73 ; "sowt" (MOV files)
format 0x32336c66 ; "fl32" (MOV files)
format 0x666c3332 ; "23lf" (MOV files)
; format 0x34366c66 ; "fl64" (MOV files)
; format 0x666c3634 ; "46lf" (MOV files)
format 0x454e4f4e ; "NONE" (MOV files from Kodak CX6320)
format 0x34326e69 ; "in24" (MOV files)
format 0x696e3234 ; "42ni" (MOV files)
format 0x32336e69 ; "in32" (MOV files)
format 0x696e3332 ; "23ni" (MOV files)
fourcc "raw " ; (MOV files)
fourcc twos ; (MOV files)
fourcc sowt ; (MOV files)
fourcc fl32 ; (MOV files)
fourcc 23lf ; (MOV files)
; fourcc fl64 ; (MOV files)
; fourcc 46lf ; (MOV files)
fourcc NONE ; (MOV files from Kodak CX6320)
fourcc in24 ; (MOV files)
fourcc 42ni ; (MOV files)
fourcc in32 ; (MOV files)
fourcc 23ni ; (MOV files)
fourcc lpcm ; (MOV files)
fourcc FL32 ; (aiff files)
;;;; these are for hardware support only: (alaw,ulaw,ima-adpcm,mpeg,ac3)
; format 0x6
; format 0x7
@ -4347,7 +4487,7 @@ audiocodec imaadpcmacm
audiocodec ffgsm
info "FFmpeg GSM 06.10"
status working
format 0x204D5347
fourcc "GSM "
format 0x1500
fourcc agsm
driver ffmpeg
@ -4364,7 +4504,7 @@ audiocodec ffgsmms
audiocodec libgsm
info "libgsm GSM 06.10"
status working
format 0x204D5347
fourcc "GSM "
format 0x1500
driver ffmpeg
dll "libgsm"
@ -4397,14 +4537,14 @@ audiocodec alaw
info "aLaw"
status working
format 0x6
format 0x77616C61 ; 'alaw', .mov files
fourcc alaw ; (MOV files)
driver alaw
audiocodec ulaw
info "uLaw"
status working
format 0x7
format 0x77616c75 ; "ulaw" (MOV files)
fourcc ulaw ; (MOV files)
format 0x6c75
driver alaw
@ -4421,14 +4561,21 @@ audiocodec fflpcm
driver ffmpeg
dll pcm_bluray
audiocodec ffpcmlxf
info "Leitch/Harris PCM"
status working
fourcc PLXF ; internal MPlayer FourCC
driver ffmpeg
dll pcm_lxf
; add every new fourcc also to allocate_parser()
; in libmpdemux/demuxer.c
audiocodec ffac3
info "FFmpeg AC-3"
status working
format 0x2000
format 0x332D6361 ; ac-3 in mp4
format 0x332D4341
fourcc ac-3 ; ac-3 in mp4
fourcc AC-3
format 0x20736D ; "ms\20" older ac3 fcc (MOV files)
fourcc dnet
fourcc sac3
@ -4448,8 +4595,11 @@ audiocodec a52
info "AC3-liba52"
status working
format 0x2000
; format 0x332D6361 ; ac-3 in mp4 -- not working
fourcc ac-3 ; ac-3 in mp4
fourcc AC-3
format 0x20736D ; "ms\20" older ac3 fcc (MOV files)
fourcc dnet
fourcc sac3
driver liba52
dll "liba52"

View File

@ -81,11 +81,11 @@ while(1){
if(c<0) return -1; /* EOF*/
sh_audio->a_in_buffer[sh_audio->a_in_buffer_len++]=c;
}
if(sh_audio->format!=0x2000) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8);
if(sh_audio->format==MKTAG('d','n','e','t')) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8);
length = a52_syncinfo (sh_audio->a_in_buffer, &flags, &sample_rate, &bit_rate);
if(length>=7 && length<=3840) break; /* we're done.*/
/* bad file => resync*/
if(sh_audio->format!=0x2000) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8);
if(sh_audio->format==MKTAG('d','n','e','t')) swab(sh_audio->a_in_buffer,sh_audio->a_in_buffer,8);
memmove(sh_audio->a_in_buffer,sh_audio->a_in_buffer+1,7);
--sh_audio->a_in_buffer_len;
}
@ -94,7 +94,7 @@ while(1){
sh_audio->i_bps=bit_rate/8;
sh_audio->samplesize=sh_audio->sample_format==AF_FORMAT_FLOAT_NE ? 4 : 2;
demux_read_data(sh_audio->ds,sh_audio->a_in_buffer+8,length-8);
if(sh_audio->format!=0x2000)
if(sh_audio->format==MKTAG('d','n','e','t'))
swab(sh_audio->a_in_buffer+8,sh_audio->a_in_buffer+8,length-8);
#ifdef CONFIG_LIBA52_INTERNAL

View File

@ -86,10 +86,12 @@ static int init(sh_audio_t * sh_audio)
sh_audio->sample_format = AF_FORMAT_S8;
break;
case 0x32336c66: // 'fl32', bigendian float32
case 0x32334C46: // 'FL32', bigendian float32 in aiff
sh_audio->sample_format = AF_FORMAT_FLOAT_BE;
sh_audio->samplesize = 4;
break;
case 0x666c3332: // '23lf', little endian float32, MPlayer internal fourCC
case 0x6D63706C: // 'lpcm'
sh_audio->sample_format = AF_FORMAT_FLOAT_LE;
sh_audio->samplesize = 4;
break;

View File

@ -279,7 +279,7 @@ static void uninit(sh_audio_t *sh){
unsigned long ConvertedFrames=0;
unsigned long ConvertedBytes=0;
#ifdef WIN32_LOADER
#if defined(WIN32_LOADER) && !defined(CONFIG_QUICKTIME)
Setup_FS_Segment();
#endif
@ -306,7 +306,7 @@ static int decode_audio(sh_audio_t *sh,unsigned char *buf,int minlen,int maxlen)
unsigned long ConvertedFrames=0;
unsigned long ConvertedBytes=0;
#ifdef WIN32_LOADER
#if defined(WIN32_LOADER) && !defined(CONFIG_QUICKTIME)
Setup_FS_Segment();
#endif

View File

@ -63,11 +63,8 @@ static int init(sh_audio_t *sh) {
const uint8_t *hdr = (const uint8_t *)(sh->wf + 1);
const SpeexMode *spx_mode;
const SpeexStereoState st_st = SPEEX_STEREO_STATE_INIT; // hack
if (!sh->wf || sh->wf->cbSize < 80) {
mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "Missing extradata!\n");
goto err_out;
}
ctx->hdr = speex_packet_to_header((char *)&sh->wf[1], sh->wf->cbSize);
if (sh->wf && sh->wf->cbSize >= 80)
ctx->hdr = speex_packet_to_header((char *)&sh->wf[1], sh->wf->cbSize);
if (!ctx->hdr && sh->wf->cbSize == 0x72 && hdr[0] == 1 && hdr[1] == 0) {
// speex.acm format: raw SpeexHeader dump
ctx->hdr = calloc(1, sizeof(*ctx->hdr));
@ -86,8 +83,18 @@ static int init(sh_audio_t *sh) {
ctx->hdr->frames_per_packet = read_le32(&hdr);
}
if (!ctx->hdr) {
mp_msg(MSGT_DECAUDIO, MSGL_FATAL, "Invalid extradata!\n");
goto err_out;
mp_msg(MSGT_DECAUDIO, MSGL_ERR, "Invalid or missing extradata! Assuming defaults.\n");
ctx->hdr = calloc(1, sizeof(*ctx->hdr));
ctx->hdr->frames_per_packet = 1;
ctx->hdr->mode = 0;
if (sh->wf) {
ctx->hdr->nb_channels = sh->wf->nChannels;
ctx->hdr->rate = sh->wf->nSamplesPerSec;
if (ctx->hdr->rate > 16000)
ctx->hdr->mode = 2;
else if (ctx->hdr->rate > 8000)
ctx->hdr->mode = 1;
}
}
if (ctx->hdr->nb_channels != 1 && ctx->hdr->nb_channels != 2) {
mp_msg(MSGT_DECAUDIO, MSGL_WARN, "Invalid number of channels (%i), "
@ -119,12 +126,6 @@ static int init(sh_audio_t *sh) {
sh->sample_format = AF_FORMAT_S16_NE;
sh->context = ctx;
return 1;
err_out:
if (ctx)
free(ctx->hdr);
free(ctx);
return 0;
}
static void uninit(sh_audio_t *sh) {

View File

@ -521,10 +521,13 @@ static int get_buffer(AVCodecContext *avctx, AVFrame *pic){
sh_video_t *sh = avctx->opaque;
vd_ffmpeg_ctx *ctx = sh->context;
mp_image_t *mpi=NULL;
int flags= MP_IMGFLAG_ACCEPT_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE;
int flags= MP_IMGFLAG_ACCEPT_ALIGNED_STRIDE | MP_IMGFLAG_PREFER_ALIGNED_STRIDE;
int type= MP_IMGTYPE_IPB;
int width= avctx->width;
int height= avctx->height;
// special case to handle reget_buffer without buffer hints
if (pic->opaque && pic->data[0] && !pic->buffer_hints)
return 0;
avcodec_align_dimensions(avctx, &width, &height);
//printf("get_buffer %d %d %d\n", pic->reference, ctx->ip_count, ctx->b_count);
@ -557,6 +560,9 @@ static int get_buffer(AVCodecContext *avctx, AVFrame *pic){
if(init_vo(sh, avctx->pix_fmt) < 0){
avctx->release_buffer= avcodec_default_release_buffer;
avctx->get_buffer= avcodec_default_get_buffer;
avctx->reget_buffer= avcodec_default_reget_buffer;
if (pic->data[0])
release_buffer(avctx, pic);
return avctx->get_buffer(avctx, pic);
}
@ -569,6 +575,9 @@ static int get_buffer(AVCodecContext *avctx, AVFrame *pic){
ctx->do_dr1=0; //FIXME
avctx->get_buffer= avcodec_default_get_buffer;
avctx->reget_buffer= avcodec_default_reget_buffer;
if (pic->data[0])
release_buffer(avctx, pic);
return avctx->get_buffer(avctx, pic);
}

View File

@ -901,7 +901,7 @@ static off_t ts_detect_streams(demuxer_t *demuxer, tsdemux_init_t *param)
audio_found = 0;
param->atype = UNKNOWN;
//WE DIDN'T MATCH ANY AUDIO STREAM, SO WE FORCE THE DEMUXER TO IGNORE AUDIO
mp_msg(MSGT_DEMUXER, MSGL_INFO, "NO AUDIO! ");
mp_msg(MSGT_DEMUXER, MSGL_INFO, "NO AUDIO! (try increasing -tsprobe)");
}
if(IS_SUB(param->stype))

View File

@ -516,10 +516,13 @@ static void allocate_parser(AVCodecContext **avctx, AVCodecParserContext **parse
case 0x332D6361:
case 0x332D4341:
case 0x20736D:
case MKTAG('d', 'n', 'e', 't'):
case MKTAG('s', 'a', 'c', '3'):
codec_id = CODEC_ID_AC3;
break;
case MKTAG('d', 'n', 'e', 't'):
// DNET/byte-swapped AC-3 - there is no parser for that yet
//codec_id = CODEC_ID_DNET;
break;
case MKTAG('E', 'A', 'C', '3'):
codec_id = CODEC_ID_EAC3;
break;

View File

@ -46,6 +46,9 @@ static const struct mp_AVCodecTag mp_wav_tags[] = {
{ CODEC_ID_MUSEPACK7, MKTAG('M', 'P', 'C', ' ')},
{ CODEC_ID_MUSEPACK8, MKTAG('M', 'P', 'C', '8')},
{ CODEC_ID_NELLYMOSER, MKTAG('N', 'E', 'L', 'L')},
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 92, 0)
{ CODEC_ID_PCM_LXF, MKTAG('P', 'L', 'X', 'F')},
#endif
{ CODEC_ID_QCELP, MKTAG('Q', 'c', 'l', 'p')},
{ CODEC_ID_QDM2, MKTAG('Q', 'D', 'M', '2')},
{ CODEC_ID_RA_144, MKTAG('1', '4', '_', '4')},
@ -71,6 +74,7 @@ static const struct mp_AVCodecTag mp_codecid_override_tags[] = {
{ CODEC_ID_AC3, 0x2000},
{ CODEC_ID_ADPCM_IMA_AMV, MKTAG('A', 'M', 'V', 'A')},
{ CODEC_ID_DTS, 0x2001},
{ CODEC_ID_DVVIDEO, MKTAG('d', 'v', 's', 'd')},
{ CODEC_ID_EAC3, MKTAG('E', 'A', 'C', '3')},
{ CODEC_ID_H264, MKTAG('H', '2', '6', '4')},
{ CODEC_ID_MPEG4, MKTAG('M', 'P', '4', 'V')},
@ -93,6 +97,8 @@ const struct mp_AVCodecTag * const mp_codecid_override_taglists[] = {mp_codecid_
static const struct mp_AVCodecTag mp_bmp_tags[] = {
{ CODEC_ID_AMV, MKTAG('A', 'M', 'V', 'V')},
{ CODEC_ID_ANM, MKTAG('A', 'N', 'M', ' ')},
{ CODEC_ID_AVS, MKTAG('A', 'V', 'S', ' ')},
{ CODEC_ID_BETHSOFTVID, MKTAG('B', 'E', 'T', 'H')},
{ CODEC_ID_BFI, MKTAG('B', 'F', 'I', 'V')},
{ CODEC_ID_C93, MKTAG('C', '9', '3', 'V')},
@ -103,6 +109,9 @@ static const struct mp_AVCodecTag mp_bmp_tags[] = {
{ CODEC_ID_FLIC, MKTAG('F', 'L', 'I', 'C')},
{ CODEC_ID_IDCIN, MKTAG('I', 'D', 'C', 'I')},
{ CODEC_ID_INTERPLAY_VIDEO, MKTAG('I', 'N', 'P', 'V')},
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 114, 0)
{ CODEC_ID_JV, MKTAG('F', 'F', 'J', 'V')},
#endif
{ CODEC_ID_MDEC, MKTAG('M', 'D', 'E', 'C')},
{ CODEC_ID_MOTIONPIXELS, MKTAG('M', 'V', 'I', '1')},
{ CODEC_ID_NUV, MKTAG('N', 'U', 'V', '1')},

View File

@ -102,7 +102,7 @@ typedef struct sh_video {
double i_pts; // PTS for the _next_ I/P frame
float next_frame_time;
double last_pts;
double buffered_pts[20];
double buffered_pts[32];
int num_buffered_pts;
double codec_reordered_pts;
double prev_codec_reordered_pts;

View File

@ -34,6 +34,7 @@
#include <sys/ioctl.h>
#include <sys/kd.h>
#include <linux/fb.h>
#include <libavutil/common.h>
#include "config.h"
#include "video_out.h"
@ -43,7 +44,6 @@
#include "geometry.h"
#include "aspect.h"
#include "mp_msg.h"
#include "libavutil/common.h"
static const vo_info_t info = {
"Framebuffer Device",
@ -480,7 +480,7 @@ static fb_mode_t *find_best_mode(int xres, int yres, range_t *hfreq,
return best;
}
static void set_bpp(struct fb_var_screeninfo *p, int bpp)
static void set_bpp(struct fb_var_screeninfo *p, int bpp, int rgb)
{
p->bits_per_pixel = FFALIGN(bpp, 2);
p->red.msb_right = p->green.msb_right = p->blue.msb_right = p->transp.msb_right = 0;
@ -519,15 +519,19 @@ static void set_bpp(struct fb_var_screeninfo *p, int bpp)
p->blue.length = 4;
break;
}
if (rgb) {
p->blue.offset = p->red.offset;
p->red.offset = 0;
}
}
static void fb_mode2fb_vinfo(fb_mode_t *m, struct fb_var_screeninfo *v)
static void fb_mode2fb_vinfo(fb_mode_t *m, struct fb_var_screeninfo *v, int rgb)
{
v->xres = m->xres;
v->yres = m->yres;
v->xres_virtual = m->vxres;
v->yres_virtual = m->vyres;
set_bpp(v, m->depth);
set_bpp(v, m->depth, rgb);
v->pixclock = m->pixclock;
v->left_margin = m->left;
v->right_margin = m->right;
@ -563,6 +567,7 @@ static struct fb_var_screeninfo fb_vinfo;
static unsigned short fb_ored[256], fb_ogreen[256], fb_oblue[256];
static struct fb_cmap fb_oldcmap = { 0, 256, fb_ored, fb_ogreen, fb_oblue };
static int fb_cmap_changed = 0;
static int fb_rgb;
static int fb_pixel_size; // 32: 4 24: 3 16: 2 15: 2
static int fb_bpp; // 32: 32 24: 24 16: 16 15: 15
static int fb_bpp_we_want; // 32: 32 24: 24 16: 16 15: 15
@ -687,6 +692,7 @@ static int fb_preinit(int reset)
mp_msg(MSGT_VO, MSGL_ERR, "notice: Can't open /dev/tty: %s\n", strerror(errno));
}
fb_rgb = !fb_vinfo.red.offset;
fb_bpp = fb_vinfo.bits_per_pixel;
if (fb_bpp == 16)
fb_bpp = fb_vinfo.red.length + fb_vinfo.green.length + fb_vinfo.blue.length;
@ -779,7 +785,7 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
mp_msg(MSGT_VO, MSGL_ERR, "can't find requested video mode\n");
return 1;
}
fb_mode2fb_vinfo(fb_mode, &fb_vinfo);
fb_mode2fb_vinfo(fb_mode, &fb_vinfo, fb_rgb);
} else if (vm) {
monitor_hfreq = str2range(monitor_hfreq_str);
monitor_vfreq = str2range(monitor_vfreq_str);
@ -796,10 +802,10 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
}
mp_msg(MSGT_VO, MSGL_V, "using mode %dx%d @ %.1fHz\n", fb_mode->xres,
fb_mode->yres, vsf(fb_mode));
fb_mode2fb_vinfo(fb_mode, &fb_vinfo);
fb_mode2fb_vinfo(fb_mode, &fb_vinfo, fb_rgb);
}
fb_bpp_we_want = fb_bpp;
set_bpp(&fb_vinfo, fb_bpp);
set_bpp(&fb_vinfo, fb_bpp, fb_rgb);
fb_vinfo.xres_virtual = fb_vinfo.xres;
fb_vinfo.yres_virtual = fb_vinfo.yres;
fb_page = 0;
@ -955,7 +961,7 @@ static int query_format(uint32_t format)
{
if (!fb_preinit(0))
return 0;
if ((format & IMGFMT_BGR_MASK) == IMGFMT_BGR) {
if ((format & IMGFMT_BGR_MASK) == (fb_rgb ? IMGFMT_RGB : IMGFMT_BGR)) {
int bpp = format & 0xff;
if (bpp == fb_bpp)

View File

@ -36,6 +36,8 @@
#include "fastmemcpy.h"
#include "sub/sub.h"
#include "mp_msg.h"
#include "aspect.h"
#include "libavutil/common.h"
static const vo_info_t info = {
"Framebuffer Device",
@ -108,8 +110,6 @@ static void (*draw_alpha_p)(int w, int h, unsigned char *src,
static uint8_t *next_frame = NULL; // for double buffering
static int in_width;
static int in_height;
static int out_width;
static int out_height;
static struct fb_cmap *make_directcolor_cmap(struct fb_var_screeninfo *var)
{
@ -122,42 +122,25 @@ static struct fb_cmap *make_directcolor_cmap(struct fb_var_screeninfo *var)
bcols = 1 << var->blue.length;
/* Make our palette the length of the deepest color */
cols = (rcols > gcols ? rcols : gcols);
cols = (cols > bcols ? cols : bcols);
cols = FFMAX3(rcols, gcols, bcols);
red = malloc(cols * sizeof(red[0]));
red = malloc(3 * cols * sizeof(red[0]));
if(!red) {
mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't allocate red palette with %d entries.\n", cols);
return NULL;
}
for(i=0; i< rcols; i++)
red[i] = (65535/(rcols-1)) * i;
green = malloc(cols * sizeof(green[0]));
if(!green) {
mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't allocate green palette with %d entries.\n", cols);
free(red);
return NULL;
}
for(i=0; i< gcols; i++)
green = red + cols;
blue = green + cols;
for (i = 0; i < cols; i++) {
red[i] = (65535/(rcols-1)) * i;
green[i] = (65535/(gcols-1)) * i;
blue = malloc(cols * sizeof(blue[0]));
if(!blue) {
mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't allocate blue palette with %d entries.\n", cols);
free(red);
free(green);
return NULL;
blue[i] = (65535/(bcols-1)) * i;
}
for(i=0; i< bcols; i++)
blue[i] = (65535/(bcols-1)) * i;
cmap = malloc(sizeof(struct fb_cmap));
if(!cmap) {
mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Can't allocate color map\n");
free(red);
free(green);
free(blue);
return NULL;
}
cmap->start = 0;
@ -232,20 +215,17 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
{
struct fb_cmap *cmap;
int fs = flags & VOFLAG_FULLSCREEN;
int x_offset = vo_dx + (d_width - width ) / 2;
int y_offset = vo_dy + (d_height - height) / 2;
x_offset = av_clip(x_offset, 0, fb_vinfo.xres - width);
y_offset = av_clip(y_offset, 0, fb_vinfo.yres - height);
out_width = width;
out_height = height;
in_width = width;
in_height = height;
if (fs) {
out_width = fb_vinfo.xres;
out_height = fb_vinfo.yres;
}
if (out_width < in_width || out_height < in_height) {
if (fb_vinfo.xres < in_width || fb_vinfo.yres < in_height) {
mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] Screensize is smaller than video size (%dx%d < %dx%d)\n",
out_width, out_height, in_width, in_height);
fb_vinfo.xres, fb_vinfo.yres, in_width, in_height);
return 1;
}
@ -282,12 +262,12 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
return 1;
if (ioctl(fb_dev_fd, FBIOPUTCMAP, cmap)) {
mp_msg(MSGT_VO, MSGL_ERR, "[fbdev2] can't put cmap: %s\n", strerror(errno));
free(cmap->red);
free(cmap);
return 1;
}
fb_cmap_changed = 1;
free(cmap->red);
free(cmap->green);
free(cmap->blue);
free(cmap);
break;
default:
@ -304,8 +284,8 @@ static int config(uint32_t width, uint32_t height, uint32_t d_width,
}
center = frame_buffer +
( (out_width - in_width) / 2 ) * fb_pixel_size +
( (out_height - in_height) / 2 ) * fb_line_len;
x_offset * fb_pixel_size +
y_offset * fb_line_len;
#ifndef USE_CONVERT2FB
if (!(next_frame = realloc(next_frame, in_width * in_height * fb_pixel_size))) {
@ -378,13 +358,8 @@ static int draw_slice(uint8_t *src[], int stride[], int w, int h, int x, int y)
uint8_t *dest = next_frame + (in_width * y + x) * fb_pixel_size;
int next = in_width * fb_pixel_size;
#endif
int i;
for (i = 0; i < h; i++) {
fast_memcpy(dest, in, w * fb_pixel_size);
dest += next;
in += stride[0];
}
memcpy_pic(dest, in, w * fb_pixel_size, h, next, stride[0]);
return 0;
}
@ -395,14 +370,11 @@ static void check_events(void)
static void flip_page(void)
{
#ifndef USE_CONVERT2FB
int i, out_offset = 0, in_offset = 0;
int out_offset = 0, in_offset = 0;
for (i = 0; i < in_height; i++) {
fast_memcpy(center + out_offset, next_frame + in_offset,
in_width * fb_pixel_size);
out_offset += fb_line_len;
in_offset += in_width * fb_pixel_size;
}
memcpy_pic(center + out_offset, next_frame + in_offset,
in_width * fb_pixel_size, in_height,
fb_line_len, in_width * fb_pixel_size);
#endif
}
@ -430,6 +402,11 @@ static int control(uint32_t request, void *data)
switch (request) {
case VOCTRL_QUERY_FORMAT:
return query_format(*((uint32_t*)data));
case VOCTRL_UPDATE_SCREENINFO:
vo_screenwidth = fb_vinfo.xres;
vo_screenheight = fb_vinfo.yres;
aspect_save_screenres(vo_screenwidth, vo_screenheight);
return VO_TRUE;
}
return VO_NOTIMPL;
}

View File

@ -1393,6 +1393,8 @@ static int control(uint32_t request, void *data)
if (!(eq_map[i].supportmask & (1 << use_yuv)))
break;
*eq_map[i].value = args->value;
if (strcmp(args->name, "gamma") == 0)
eq_rgamma = eq_ggamma = eq_bgamma = args->value;
update_yuvconv();
return VO_TRUE;
}

View File

@ -1632,7 +1632,9 @@ static void update_osd_msg(struct MPContext *mpctx)
int len = get_time_length(mpctx);
int percentage = -1;
char percentage_text[10];
int pts = get_current_time(mpctx);
char fractions_text[4];
double fpts = get_current_time(mpctx);
int pts = fpts;
if (mpctx->osd_show_percentage_until)
percentage = get_percent_pos(mpctx);
@ -1642,15 +1644,41 @@ static void update_osd_msg(struct MPContext *mpctx)
else
percentage_text[0] = 0;
if (opts->osd_fractions == 1) {
//print fractions as sub-second timestamp
snprintf(fractions_text, sizeof(fractions_text), ".%02d",
(int)((fpts - pts) * 100));
} else if (opts->osd_fractions == 2) {
/* Print fractions by estimating the frame count within the
* second.
*
* Rounding or cutting off numbers after the decimal point
* causes problems because of float's precision and movies
* whose first frame is not exactly at timestamp 0. Therefore,
* we add 0.2 and cut off at the decimal point, which proved
* to be good heuristic.
*/
double fps = mpctx->sh_video->fps;
if (fps <= 1 || fps > 99)
strcpy(fractions_text, ".??");
else
snprintf(fractions_text, sizeof(fractions_text), ".%02d",
(int) ( (fpts - pts) * fps + 0.2 ) );
} else {
//do not print fractions
fractions_text[0] = 0;
}
if (opts->osd_level == 3)
snprintf(osd_text_timer, 63,
"%c %02d:%02d:%02d / %02d:%02d:%02d%s",
"%c %02d:%02d:%02d%s / %02d:%02d:%02d%s",
mpctx->osd_function,pts/3600,(pts/60)%60,pts%60,
len/3600,(len/60)%60,len%60,percentage_text);
fractions_text, len/3600, (len/60)%60, len%60,
percentage_text);
else
snprintf(osd_text_timer, 63, "%c %02d:%02d:%02d%s",
snprintf(osd_text_timer, 63, "%c %02d:%02d:%02d%s%s",
mpctx->osd_function,pts/3600,(pts/60)%60,
pts%60,percentage_text);
pts%60, fractions_text, percentage_text);
} else
osd_text_timer[0]=0;

View File

@ -31,6 +31,7 @@ typedef struct MPOpts {
int osd_level;
int osd_duration;
int osd_fractions;
char *vobsub_name;
int auto_quality;
int benchmark;

View File

@ -124,7 +124,6 @@ mv DOCS/man/zh DOCS/man/zh_CN
--codecsdir=%{codecsdir} \
\
--enable-gui \
--enable-largefiles \
--disable-termcap \
--disable-bitmap-font \
--enable-lirc \
@ -167,7 +166,6 @@ mv -f mplayer gmplayer
--libdir=%{_libdir} \
--codecsdir=%{codecsdir} \
\
--enable-largefiles \
--disable-termcap \
--disable-bitmap-font \
--enable-lirc \

View File

@ -167,6 +167,7 @@ static int cache_fill(cache_vars_t *s)
int back,back2,newb,space,len,pos;
off_t read=s->read_filepos;
int read_chunk;
int wraparound_copy = 0;
if(read<s->min_filepos || read>s->max_filepos){
// seek...
@ -208,8 +209,16 @@ static int cache_fill(cache_vars_t *s)
// printf("### read=0x%X back=%d newb=%d space=%d pos=%d\n",read,back,newb,space,pos);
// reduce space if needed:
if(space>s->buffer_size-pos) space=s->buffer_size-pos;
// try to avoid wrap-around. If not possible due to sector size
// do an extra copy.
if(space>s->buffer_size-pos) {
if (s->buffer_size-pos >= s->sector_size) {
space=s->buffer_size-pos;
} else {
space = s->sector_size;
wraparound_copy = 1;
}
}
// limit one-time block size
read_chunk = s->stream->read_chunk;
@ -224,6 +233,13 @@ static int cache_fill(cache_vars_t *s)
s->min_filepos=read-back; // avoid seeking-back to temp area...
#endif
if (wraparound_copy) {
int to_copy;
len = stream_read_internal(s->stream, s->stream->buffer, space);
to_copy = FFMIN(len, s->buffer_size-pos);
memcpy(s->buffer + pos, s->stream->buffer, to_copy);
memcpy(s->buffer, s->stream->buffer + to_copy, len - to_copy);
} else
len = stream_read_internal(s->stream, &s->buffer[pos], space);
s->eof= !len;

View File

@ -58,6 +58,7 @@ int network_bandwidth=0;
int network_cookies_enabled = 0;
char *network_useragent=NULL;
char *network_referrer=NULL;
char **network_http_header_fields=NULL;
/* IPv6 options */
int network_ipv4_only_proxy = 0;
@ -250,6 +251,12 @@ http_send_request( URL_t *url, off_t pos ) {
if (network_cookies_enabled) cookies_set( http_hdr, server_url->hostname, server_url->url );
if (network_http_header_fields) {
int i=0;
while (network_http_header_fields[i])
http_set_field(http_hdr, network_http_header_fields[i++]);
}
http_set_field( http_hdr, "Connection: close");
if (proxy)
http_add_basic_proxy_authentication(http_hdr, url->username, url->password);

View File

@ -61,6 +61,8 @@ typedef struct {
extern const mime_struct_t mime_type_table[];
extern char **network_http_header_fields;
streaming_ctrl_t *streaming_ctrl_new(void);
int streaming_bufferize( streaming_ctrl_t *streaming_ctrl, char *buffer, int size);

View File

@ -28,6 +28,7 @@
#endif
#include <fcntl.h>
#include <strings.h>
#include <assert.h>
#include "talloc.h"
@ -279,6 +280,7 @@ void stream_capture_do(stream_t *s)
int stream_read_internal(stream_t *s, void *buf, int len)
{
int orig_len = len;
// we will retry even if we already reached EOF previously.
switch(s->type){
case STREAMTYPE_STREAM:
@ -300,7 +302,26 @@ int stream_read_internal(stream_t *s, void *buf, int len)
default:
len= s->fill_buffer ? s->fill_buffer(s, buf, len) : 0;
}
if(len<=0){ s->eof=1; return 0; }
if(len<=0){
// dvdnav has some horrible hacks to "suspend" reads,
// we need to skip this code or seeks will hang.
if (!s->eof && s->type != STREAMTYPE_DVDNAV) {
// just in case this is an error e.g. due to network
// timeout reset and retry
// Seeking is used as a hack to make network streams
// reopen the connection, ideally they would implement
// e.g. a STREAM_CTRL_RECONNECT to do this
off_t pos = s->pos;
s->eof=1;
stream_reset(s);
stream_seek_internal(s, pos);
// make sure EOF is set to ensure no endless loops
s->eof=1;
return stream_read_internal(s, buf, orig_len);
}
s->eof=1;
return 0;
}
// When reading succeeded we are obviously not at eof.
// This e.g. avoids issues with eof getting stuck when lavf seeks in MPEG-TS
s->eof=0;
@ -328,6 +349,7 @@ int stream_write_buffer(stream_t *s, unsigned char *buf, int len) {
if(rd < 0)
return -1;
s->pos += rd;
assert(rd == len && "stream_write_buffer(): unexpected short write");
return rd;
}

View File

@ -134,7 +134,7 @@ static dvdnav_priv_t * new_dvdnav_stream(char * filename) {
mp_msg(MSGT_OPEN,MSGL_ERR,"stream_dvdnav, failed to set PGC positioning\n");
/* report the title?! */
if (dvdnav_get_title_string(priv->dvdnav,&title_str)==DVDNAV_STATUS_OK) {
mp_msg(MSGT_IDENTIFY, MSGL_INFO,"Title: '%s'\n",title_str);
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_DVD_VOLUME_ID=%s\n", title_str);
}
//dvdnav_event_clear(priv);
@ -509,7 +509,9 @@ static void identify_chapters(dvdnav_t *nav, uint32_t title)
if(parts) {
t = duration / 90;
mp_msg(MSGT_IDENTIFY, MSGL_V, "ID_DVD_TITLE_%d_LENGTH=%d.%03d\n", title, t / 1000, t % 1000);
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_DVD_TITLE_%d_CHAPTERS=%d\n", title, n);
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "TITLE %u, CHAPTERS: ", title);
for(i=0; i<n; i++) {
t = parts[i] / 90000;
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "%02d:%02d:%02d,", t/3600, (t/60)%60, t%60);
@ -524,7 +526,7 @@ static void identify(dvdnav_priv_t *priv, struct stream_priv_s *p)
uint32_t titles=0, i;
if(p->track <= 0) {
dvdnav_get_number_of_titles(priv->dvdnav, &titles);
for(i=0; i<titles; i++)
for(i=1; i<=titles; i++)
identify_chapters(priv->dvdnav, i);
}
else
@ -600,6 +602,7 @@ static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
mp_msg(MSGT_OPEN,MSGL_FATAL,"dvdnav_stream, couldn't select title %d, error '%s'\n", p->track, dvdnav_err_to_string(priv->dvdnav));
return STREAM_UNSUPPORTED;
}
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_DVD_CURRENT_TITLE=%d\n", p->track);
} else if (p->track == 0) {
if(dvdnav_menu_call(priv->dvdnav, DVD_MENU_Root) != DVDNAV_STATUS_OK)
dvdnav_menu_call(priv->dvdnav, DVD_MENU_Title);

View File

@ -34,6 +34,7 @@ static int fill_buffer(stream_t *s, char *buffer, int max_len)
static int write_buffer(stream_t *s, char *buffer, int len)
{
/* url_write retries internally on short writes and EAGAIN */
int r = url_write(s->priv, buffer, len);
return (r <= 0) ? -1 : r;
}

View File

@ -56,8 +56,16 @@ static int fill_buffer(stream_t *s, char* buffer, int max_len){
}
static int write_buffer(stream_t *s, char* buffer, int len) {
int r = write(s->fd,buffer,len);
return (r <= 0) ? -1 : r;
int r;
int wr = 0;
while (wr < len) {
r = write(s->fd,buffer,len);
if (r <= 0)
return -1;
wr += r;
buffer += r;
}
return len;
}
static int seek(stream_t *s,off_t newpos) {

View File

@ -100,8 +100,16 @@ static int fill_buffer(stream_t *s, char* buffer, int max_len){
}
static int write_buffer(stream_t *s, char* buffer, int len) {
int r = smbc_write(s->fd,buffer,len);
return (r <= 0) ? -1 : r;
int r;
int wr = 0;
while (wr < len) {
r = smbc_write(s->fd,buffer,len);
if (r <= 0)
return -1;
wr += r;
buffer += r;
}
return len;
}
static void close_f(stream_t *s){

View File

@ -920,6 +920,10 @@ void spudec_draw_scaled(void *me, unsigned int dxs, unsigned int dys, void (*dra
}
if (spu->scaled_image) {
unsigned int x, y;
// needs to be 0-initialized because draw_alpha draws always a
// multiple of 8 pixels. TODO: optimize
if (spu->scaled_width & 7)
memset(spu->scaled_image, 0, 2 * spu->scaled_image_size);
if (spu->scaled_width <= 1 || spu->scaled_height <= 1) {
goto nothing_to_do;
}