[Ffmpeg-devel] Re: [PATCH] Second Try: Set bit_rate for asf format
Zuxy Meng
zuxy.meng
Thu Mar 29 04:51:59 CEST 2007
Hi
2007/3/29, Diego Biurrun <diego at biurrun.de>:
> On Wed, Mar 28, 2007 at 04:46:09PM +0200, Baptiste Coudurier wrote:
> > Ramiro Ribeiro Polla wrote:
> > > Baptiste Coudurier wrote:
> > >>
> > >> Zuxy Meng wrote:
> > >>
> > >>> Anyone willing to apply it?
> > >>
> > >> Yes, applied.
> > >
> > > It breaks regression tests with a bunch of "overflow in spectral RLE,
> > > ignoring".
> >
> > Humm, right, libavtest pass, but not fulltest:
> >
> > I revert the patch until this is stated, and will be more careful in the
> > future.
>
> Actually, I think this is Zuxy's fault, not yours, patches are expected
> not to break regression tests IMO.
Sure. And I've confirmed that the attached patch doesn't break fulltest.
--
Zuxy
Beauty is truth,
While truth is beauty.
PGP KeyID: E8555ED6
-------------- next part --------------
Index: libavformat/asf.c
===================================================================
--- libavformat/asf.c ?????? 8540??
+++ libavformat/asf.c ????????????
@@ -148,8 +148,10 @@
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)))
@@ -417,13 +419,13 @@
}
} 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
@@ -431,12 +433,15 @@
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);
@@ -500,11 +505,14 @@
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;
- av_reduce(&codec->sample_aspect_ratio.num,
- &codec->sample_aspect_ratio.den,
- dar[i].num, dar[i].den, INT_MAX);
+ if (codec->codec_type == CODEC_TYPE_VIDEO)
+ 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);
//av_log(NULL, AV_LOG_ERROR, "dar %d:%d sar=%d:%d\n", dar[i].num, dar[i].den, codec->sample_aspect_ratio.num, codec->sample_aspect_ratio.den);
}
}
More information about the ffmpeg-devel
mailing list