From e5113fdfec02eb93f0c05da4470081dd6fce3318 Mon Sep 17 00:00:00 2001 From: zuxy Date: Tue, 22 May 2007 13:55:14 +0000 Subject: Set i_bps for ASF video streams according to extended stream properties git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@23375 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/asf.h | 1 + libmpdemux/asfheader.c | 7 ++++++- libmpdemux/demux_asf.c | 1 - 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/libmpdemux/asf.h b/libmpdemux/asf.h index 6a8d774aff..7dbc900bca 100644 --- a/libmpdemux/asf.h +++ b/libmpdemux/asf.h @@ -241,6 +241,7 @@ struct asf_priv { int aud_ext_timing_index; int vid_ext_frame_index; int know_frame_time; + unsigned bps; }; #endif diff --git a/libmpdemux/asfheader.c b/libmpdemux/asfheader.c index c9a90df869..c8346cf1c2 100644 --- a/libmpdemux/asfheader.c +++ b/libmpdemux/asfheader.c @@ -198,6 +198,7 @@ static int get_ext_stream_properties(char *buf, int buf_len, int stream_num, str int pos=0; uint8_t *buffer = &buf[0]; uint64_t avg_ft; + unsigned bitrate; while ((pos = find_asf_guid(buf, asf_ext_stream_header, pos, buf_len)) >= 0) { int this_stream_num, stnamect, payct, i, objlen; @@ -213,7 +214,9 @@ static int get_ext_stream_properties(char *buf, int buf_len, int stream_num, str // max-object-size(4), // flags(4) (reliable,seekable,no_cleanpoints?,resend-live-cleanpoints, rest of bits reserved) - buffer +=8+8+4+4+4+4+4+4+4+4; + buffer += 8+8; + bitrate = AV_RL32(buffer); + buffer += 8*4; this_stream_num=AV_RL16(buffer);buffer+=2; if (this_stream_num == stream_num) { @@ -222,6 +225,7 @@ static int get_ext_stream_properties(char *buf, int buf_len, int stream_num, str buffer+=2; //skip stream-language-id-index avg_ft = AV_RL64(buffer); // provided in 100ns units buffer+=8; + asf->bps = bitrate / 8; // after this are values for stream-name-count and // payload-extension-system-count @@ -556,6 +560,7 @@ int read_asf_header(demuxer_t *demuxer,struct asf_priv* asf){ sh_video->aspect = asp_ratio * sh_video->bih->biWidth / sh_video->bih->biHeight; } + sh_video->i_bps = asf->bps; if( mp_msg_test(MSGT_DEMUX,MSGL_V) ) print_video_header(sh_video->bih, MSGL_V); //asf_video_id=streamh.stream_no & 0x7F; diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c index 2b7fd86488..c932e1031b 100644 --- a/libmpdemux/demux_asf.c +++ b/libmpdemux/demux_asf.c @@ -715,7 +715,6 @@ static demuxer_t* demux_open_asf(demuxer_t* demuxer) } else { sh_video=demuxer->video->sh;sh_video->ds=demuxer->video; sh_video->fps=1000.0f; sh_video->frametime=0.001f; - //sh_video->i_bps=10*asf->packetsize; // FIXME! if (asf->asf_is_dvr_ms) { sh_video->bih->biWidth = 0; -- cgit v1.2.3