diff options
author | Zuxy Meng <zuxy.meng@gmail.com> | 2007-04-30 15:56:11 +0000 |
---|---|---|
committer | Benoit Fouet <benoit.fouet@free.fr> | 2007-04-30 15:56:11 +0000 |
commit | d84707377f00b4c6b221918293c582b380903ccd (patch) | |
tree | 2c365b87b74186847bd7c015778aac7b264e01e9 /libavformat/asf.c | |
parent | 7af636d44ae549cf6848da9f5656f88b7303eb90 (diff) | |
download | ffmpeg-d84707377f00b4c6b221918293c582b380903ccd.tar.gz |
use asf stream information to set bitrate
patch by Zuxy Meng zuxy dot meng chez gmail tod com
reference thread: [Ffmpeg-devel] Third Try: Set bit_rate for asf format
Originally committed as revision 8861 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat/asf.c')
-rw-r--r-- | libavformat/asf.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/libavformat/asf.c b/libavformat/asf.c index 009dd7a94c..360bab3f6c 100644 --- a/libavformat/asf.c +++ b/libavformat/asf.c @@ -145,8 +145,10 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) int size, i; int64_t gsize; AVRational dar[128]; + uint32_t bitrate[128]; memset(dar, 0, sizeof(dar)); + memset(bitrate, 0, sizeof(bitrate)); get_guid(pb, &g); if (memcmp(&g, &asf_header, sizeof(GUID))) @@ -421,13 +423,13 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) } } else if (!memcmp(&g, &ext_stream_header, sizeof(GUID))) { int ext_len, payload_ext_ct, stream_ct; - uint32_t ext_d; + uint32_t ext_d, leak_rate, stream_num; int64_t pos_ex_st; pos_ex_st = url_ftell(pb); get_le64(pb); // starttime get_le64(pb); // endtime - get_le32(pb); // leak-datarate + leak_rate = get_le32(pb); // leak-datarate get_le32(pb); // bucket-datasize get_le32(pb); // init-bucket-fullness get_le32(pb); // alt-leak-datarate @@ -435,12 +437,15 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) get_le32(pb); // alt-init-bucket-fullness get_le32(pb); // max-object-size get_le32(pb); // flags (reliable,seekable,no_cleanpoints?,resend-live-cleanpoints, rest of bits reserved) - get_le16(pb); // stream-num + stream_num = get_le16(pb); // stream-num get_le16(pb); // stream-language-id-index get_le64(pb); // avg frametime in 100ns units stream_ct = get_le16(pb); //stream-name-count payload_ext_ct = get_le16(pb); //payload-extension-system-count + if (stream_num < 128) + bitrate[stream_num] = leak_rate; + for (i=0; i<stream_ct; i++){ get_le16(pb); ext_len = get_le16(pb); @@ -504,8 +509,11 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap) for(i=0; i<128; i++){ int stream_num= asf->asfid2avid[i]; - if(stream_num>=0 && dar[i].num>0 && dar[i].den>0){ + if(stream_num>=0){ AVCodecContext *codec= s->streams[stream_num]->codec; + if (!codec->bit_rate) + codec->bit_rate = bitrate[i]; + if (dar[i].num > 0 && dar[i].den > 0) av_reduce(&codec->sample_aspect_ratio.num, &codec->sample_aspect_ratio.den, dar[i].num, dar[i].den, INT_MAX); |