# HG changeset patch # User bcoudurier # Date 1259618481 0 # Node ID af65f63f20635e094b60b07acd65711e587e1111 # Parent 896dbdababcb43b7de2dfc83eda4583784eb5ef4 decode qcelp in aiff, implement #1524, patch by Vitor diff -r 896dbdababcb -r af65f63f2063 aiff.h --- a/aiff.h Sun Nov 29 18:26:51 2009 +0000 +++ b/aiff.h Mon Nov 30 22:01:21 2009 +0000 @@ -46,6 +46,7 @@ { 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 -r 896dbdababcb -r af65f63f2063 aiffdec.c --- a/aiffdec.c Sun Nov 29 18:26:51 2009 +0000 +++ b/aiffdec.c Mon Nov 30 22:01:21 2009 +0000 @@ -127,6 +127,10 @@ 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 @@ 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 @@ 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;