diff options
author | Vitor Sessak <vitor1001@gmail.com> | 2009-11-30 22:01:21 +0000 |
---|---|---|
committer | Baptiste Coudurier <baptiste.coudurier@gmail.com> | 2009-11-30 22:01:21 +0000 |
commit | cea65433e087f1a6e3fafb41d99f930d78f9380a (patch) | |
tree | 54e3683c9e6db5dfac9f8227ba19a66bea674535 /libavformat | |
parent | 0a04566120548cdcb6695dedffc55cf967e422d3 (diff) | |
download | ffmpeg-cea65433e087f1a6e3fafb41d99f930d78f9380a.tar.gz |
decode qcelp in aiff, implement #1524, patch by Vitor
Originally committed as revision 20674 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/aiff.h | 1 | ||||
-rw-r--r-- | libavformat/aiffdec.c | 14 |
2 files changed, 12 insertions, 3 deletions
diff --git a/libavformat/aiff.h b/libavformat/aiff.h index e8d4cce5e2..48fecbe8b0 100644 --- a/libavformat/aiff.h +++ b/libavformat/aiff.h @@ -46,6 +46,7 @@ static const AVCodecTag ff_codec_aiff_tags[] = { { CODEC_ID_PCM_S16LE, MKTAG('s','o','w','t') }, { CODEC_ID_ADPCM_IMA_QT, MKTAG('i','m','a','4') }, { CODEC_ID_QDM2, MKTAG('Q','D','M','2') }, + { CODEC_ID_QCELP, MKTAG('Q','c','l','p') }, { CODEC_ID_NONE, 0 }, }; diff --git a/libavformat/aiffdec.c b/libavformat/aiffdec.c index 6cc91d4c19..60c44ea5e8 100644 --- a/libavformat/aiffdec.c +++ b/libavformat/aiffdec.c @@ -127,6 +127,10 @@ static unsigned int get_aiff_header(ByteIOContext *pb, AVCodecContext *codec, codec->block_align = 33; codec->frame_size = 160; break; + case CODEC_ID_QCELP: + codec->block_align = 35; + codec->frame_size= 160; + break; default: break; } @@ -284,7 +288,7 @@ static int aiff_read_packet(AVFormatContext *s, AVStream *st = s->streams[0]; AIFFInputContext *aiff = s->priv_data; int64_t max_size; - int res; + int res, size; /* calculate size of remaining data */ max_size = aiff->data_end - url_ftell(s->pb); @@ -292,8 +296,12 @@ static int aiff_read_packet(AVFormatContext *s, return AVERROR_EOF; /* Now for that packet */ - max_size = FFMIN(max_size, (MAX_SIZE / st->codec->block_align) * st->codec->block_align); - res = av_get_packet(s->pb, pkt, max_size); + if (st->codec->block_align >= 33) // GSM, QCLP, IMA4 + size = st->codec->block_align; + else + size = (MAX_SIZE / st->codec->block_align) * st->codec->block_align; + size = FFMIN(max_size, size); + res = av_get_packet(s->pb, pkt, size); if (res < 0) return res; |