From ca482ce4204fe198b2df1b41f3d15e883f3f1f0d Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Sat, 29 Oct 2011 19:24:55 -0400 Subject: vqf: do not set bits_per_coded_sample for TwinVQ. It is a lossy codec with varying quantization, so bits_per_coded_sample is not applicable. --- libavformat/vqf.c | 1 - 1 file changed, 1 deletion(-) (limited to 'libavformat/vqf.c') diff --git a/libavformat/vqf.c b/libavformat/vqf.c index 71dc1ae73d..4650a0b500 100644 --- a/libavformat/vqf.c +++ b/libavformat/vqf.c @@ -106,7 +106,6 @@ static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap) avio_skip(s->pb, len-12); st->codec->bit_rate = read_bitrate*1000; - st->codec->bits_per_coded_sample = 16; break; case MKTAG('N','A','M','E'): add_metadata(s, "title" , len, header_size); -- cgit v1.2.3 From 7b966566da24598a636a433a75a7842e272b18f6 Mon Sep 17 00:00:00 2001 From: Justin Ruggles Date: Sun, 30 Oct 2011 00:46:16 -0400 Subject: vqf/twinvq: pass vqf COMM chunk info in extradata This is needed because the twinvq decoder cannot rely on bit_rate to be set. The API documentation says that bit_rate is set by libavcodec, not by the user. --- libavformat/vqf.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'libavformat/vqf.c') diff --git a/libavformat/vqf.c b/libavformat/vqf.c index 4650a0b500..f2c1d8f146 100644 --- a/libavformat/vqf.c +++ b/libavformat/vqf.c @@ -70,6 +70,7 @@ static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap) int header_size; int read_bitrate = 0; int size; + uint8_t comm_chunk[12]; if (!st) return AVERROR(ENOMEM); @@ -100,9 +101,10 @@ static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap) switch(chunk_tag){ case MKTAG('C','O','M','M'): - st->codec->channels = avio_rb32(s->pb) + 1; - read_bitrate = avio_rb32(s->pb); - rate_flag = avio_rb32(s->pb); + avio_read(s->pb, comm_chunk, 12); + st->codec->channels = AV_RB32(comm_chunk ) + 1; + read_bitrate = AV_RB32(comm_chunk + 4); + rate_flag = AV_RB32(comm_chunk + 8); avio_skip(s->pb, len-12); st->codec->bit_rate = read_bitrate*1000; @@ -192,6 +194,12 @@ static int vqf_read_header(AVFormatContext *s, AVFormatParameters *ap) c->frame_bit_len = st->codec->bit_rate*size/st->codec->sample_rate; av_set_pts_info(st, 64, 1, st->codec->sample_rate); + /* put first 12 bytes of COMM chunk in extradata */ + if (!(st->codec->extradata = av_malloc(12 + FF_INPUT_BUFFER_PADDING_SIZE))) + return AVERROR(ENOMEM); + st->codec->extradata_size = 12; + memcpy(st->codec->extradata, comm_chunk, 12); + return 0; } -- cgit v1.2.3