mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
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
This commit is contained in:
parent
7af636d44a
commit
d84707377f
@ -145,8 +145,10 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
|
|||||||
int size, i;
|
int size, i;
|
||||||
int64_t gsize;
|
int64_t gsize;
|
||||||
AVRational dar[128];
|
AVRational dar[128];
|
||||||
|
uint32_t bitrate[128];
|
||||||
|
|
||||||
memset(dar, 0, sizeof(dar));
|
memset(dar, 0, sizeof(dar));
|
||||||
|
memset(bitrate, 0, sizeof(bitrate));
|
||||||
|
|
||||||
get_guid(pb, &g);
|
get_guid(pb, &g);
|
||||||
if (memcmp(&g, &asf_header, sizeof(GUID)))
|
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))) {
|
} else if (!memcmp(&g, &ext_stream_header, sizeof(GUID))) {
|
||||||
int ext_len, payload_ext_ct, stream_ct;
|
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;
|
int64_t pos_ex_st;
|
||||||
pos_ex_st = url_ftell(pb);
|
pos_ex_st = url_ftell(pb);
|
||||||
|
|
||||||
get_le64(pb); // starttime
|
get_le64(pb); // starttime
|
||||||
get_le64(pb); // endtime
|
get_le64(pb); // endtime
|
||||||
get_le32(pb); // leak-datarate
|
leak_rate = get_le32(pb); // leak-datarate
|
||||||
get_le32(pb); // bucket-datasize
|
get_le32(pb); // bucket-datasize
|
||||||
get_le32(pb); // init-bucket-fullness
|
get_le32(pb); // init-bucket-fullness
|
||||||
get_le32(pb); // alt-leak-datarate
|
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); // alt-init-bucket-fullness
|
||||||
get_le32(pb); // max-object-size
|
get_le32(pb); // max-object-size
|
||||||
get_le32(pb); // flags (reliable,seekable,no_cleanpoints?,resend-live-cleanpoints, rest of bits reserved)
|
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_le16(pb); // stream-language-id-index
|
||||||
get_le64(pb); // avg frametime in 100ns units
|
get_le64(pb); // avg frametime in 100ns units
|
||||||
stream_ct = get_le16(pb); //stream-name-count
|
stream_ct = get_le16(pb); //stream-name-count
|
||||||
payload_ext_ct = get_le16(pb); //payload-extension-system-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++){
|
for (i=0; i<stream_ct; i++){
|
||||||
get_le16(pb);
|
get_le16(pb);
|
||||||
ext_len = 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++){
|
for(i=0; i<128; i++){
|
||||||
int stream_num= asf->asfid2avid[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;
|
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,
|
av_reduce(&codec->sample_aspect_ratio.num,
|
||||||
&codec->sample_aspect_ratio.den,
|
&codec->sample_aspect_ratio.den,
|
||||||
dar[i].num, dar[i].den, INT_MAX);
|
dar[i].num, dar[i].den, INT_MAX);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user