ffmpeg | branch: master | Matthieu Bouron <matthieu.bou...@gmail.com> | Fri Mar 17 13:31:03 2017 +0100| [e2adbcbd97de1595b26a116ca22475b6f9acdf07] | committer: Matthieu Bouron
Merge commit '0638b99cdba52554691fc668d9e477bc184c7a33' * commit '0638b99cdba52554691fc668d9e477bc184c7a33': aiff: Skip padding byte for odd-sized chunks Also removes to odd-size checks from get_aiff_header and get_meta to use the generic path introduced by the original commit. Merged-by: Matthieu Bouron <matthieu.bou...@gmail.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e2adbcbd97de1595b26a116ca22475b6f9acdf07 --- libavformat/aiffdec.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libavformat/aiffdec.c b/libavformat/aiffdec.c index 9e7a39c..3bbe4a0 100644 --- a/libavformat/aiffdec.c +++ b/libavformat/aiffdec.c @@ -330,10 +330,14 @@ static int aiff_read_header(AVFormatContext *s) if (offset > 0 && st->codecpar->block_align) // COMM && SSND goto got_sound; default: /* Jump */ - if (size & 1) /* Always even aligned */ - size++; avio_skip(pb, size); } + + /* Skip required padding byte for odd-sized chunks. */ + if (size & 1) { + filesize--; + avio_skip(pb, 1); + } } got_sound: ====================================================================== diff --cc libavformat/aiffdec.c index 9e7a39c,3c45c61..3bbe4a0 --- a/libavformat/aiffdec.c +++ b/libavformat/aiffdec.c @@@ -299,41 -260,21 +299,45 @@@ static int aiff_read_header(AVFormatCon case MKTAG('w', 'a', 'v', 'e'): if ((uint64_t)size > (1<<30)) return -1; - st->codecpar->extradata = av_mallocz(size + AV_INPUT_BUFFER_PADDING_SIZE); - if (!st->codecpar->extradata) + if (ff_get_extradata(s, st->codecpar, pb, size) < 0) return AVERROR(ENOMEM); - st->codecpar->extradata_size = size; - avio_read(pb, st->codecpar->extradata, size); + if ( (st->codecpar->codec_id == AV_CODEC_ID_QDMC || st->codecpar->codec_id == AV_CODEC_ID_QDM2) + && size>=12*4 && !st->codecpar->block_align) { + st->codecpar->block_align = AV_RB32(st->codecpar->extradata+11*4); + aiff->block_duration = AV_RB32(st->codecpar->extradata+9*4); + } else if (st->codecpar->codec_id == AV_CODEC_ID_QCELP) { + char rate = 0; + if (size >= 25) + rate = st->codecpar->extradata[24]; + switch (rate) { + case 'H': // RATE_HALF + st->codecpar->block_align = 17; + break; + case 'F': // RATE_FULL + default: + st->codecpar->block_align = 35; + } + aiff->block_duration = 160; + st->codecpar->bit_rate = (int64_t)st->codecpar->sample_rate * (st->codecpar->block_align << 3) / + aiff->block_duration; + } break; + case MKTAG('C','H','A','N'): + if(ff_mov_read_chan(s, pb, st, size) < 0) + return AVERROR_INVALIDDATA; + break; + case 0: + if (offset > 0 && st->codecpar->block_align) // COMM && SSND + goto got_sound; default: /* Jump */ - if (size & 1) /* Always even aligned */ - size++; avio_skip(pb, size); } + + /* Skip required padding byte for odd-sized chunks. */ + if (size & 1) { + filesize--; + avio_skip(pb, 1); + } } got_sound: _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog