diff aiffdec.c @ 5395:af65f63f2063 libavformat

decode qcelp in aiff, implement #1524, patch by Vitor
author bcoudurier
date Mon, 30 Nov 2009 22:01:21 +0000
parents 6b37260d470e
children 4211f91f69b1
line wrap: on
line diff
--- 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;