changeset 1366:31ab2ac4e173 libavformat

factorize (untested)
author michael
date Tue, 10 Oct 2006 23:45:12 +0000
parents 54d50e11dc57
children 8e0ee2faf4d5
files amr.c
diffstat 1 files changed, 28 insertions(+), 57 deletions(-) [+]
line wrap: on
line diff
--- a/amr.c	Tue Oct 10 23:28:27 2006 +0000
+++ b/amr.c	Tue Oct 10 23:45:12 2006 +0000
@@ -134,78 +134,49 @@
                           AVPacket *pkt)
 {
     AVCodecContext *enc = s->streams[0]->codec;
+    int read, size, toc, mode;
+
+    if (url_feof(&s->pb))
+    {
+        return AVERROR_IO;
+    }
+
+    toc=get_byte(&s->pb);
+    mode = (toc >> 3) & 0x0F;
 
     if (enc->codec_id == CODEC_ID_AMR_NB)
     {
         static const uint8_t packed_size[16] = {12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0};
-        uint8_t toc, q, ft;
-        int read;
-        int size;
 
-        if (url_feof(&s->pb))
-        {
-            return AVERROR_IO;
-        }
-
-        toc=get_byte(&s->pb);
-        q  = (toc >> 2) & 0x01;
-        ft = (toc >> 3) & 0x0F;
-
-        size=packed_size[ft];
-
-        if (av_new_packet(pkt, size+1))
-        {
-            return AVERROR_IO;
-        }
-        pkt->stream_index = 0;
-        pkt->pos= url_ftell(&s->pb);
-        pkt->data[0]=toc;
-
-        read = get_buffer(&s->pb, pkt->data+1, size);
-
-        if (read != size)
-        {
-            av_free_packet(pkt);
-            return AVERROR_IO;
-        }
+        size=packed_size[mode]+1;
     }
     else if(enc->codec_id == CODEC_ID_AMR_WB)
     {
         static uint8_t packed_size[16] = {18, 24, 33, 37, 41, 47, 51, 59, 61, 6, 6, 0, 0, 0, 1, 1};
-        uint8_t toc, mode;
-        int read;
-        int size;
 
-        if (url_feof(&s->pb))
-        {
-            return AVERROR_IO;
-        }
-
-        toc=get_byte(&s->pb);
-        mode = (uint8_t)((toc >> 3) & 0x0F);
-        size = packed_size[mode];
-
-        if ( (size==0) || av_new_packet(pkt, size))
-        {
-            return AVERROR_IO;
-        }
-
-        pkt->stream_index = 0;
-        pkt->pos= url_ftell(&s->pb);
-        pkt->data[0]=toc;
-
-        read = get_buffer(&s->pb, pkt->data+1, size-1);
-
-        if (read != (size-1))
-        {
-            av_free_packet(pkt);
-            return AVERROR_IO;
-        }
+        size=packed_size[mode];
     }
     else
     {
         assert(0);
     }
+
+    if ( (size==0) || av_new_packet(pkt, size))
+    {
+        return AVERROR_IO;
+    }
+
+    pkt->stream_index = 0;
+    pkt->pos= url_ftell(&s->pb);
+    pkt->data[0]=toc;
+    read = get_buffer(&s->pb, pkt->data+1, size-1);
+
+    if (read != size-1)
+    {
+        av_free_packet(pkt);
+        return AVERROR_IO;
+    }
+
     return 0;
 }