From b1bf48aa91ede6ff5c899bd9f808851de097d986 Mon Sep 17 00:00:00 2001
From: Michael Niedermayer <michaelni@gmx.at>
Date: Tue, 10 Oct 2006 23:45:12 +0000
Subject: [PATCH] factorize (untested)

Originally committed as revision 6633 to svn://svn.ffmpeg.org/ffmpeg/trunk
---
 libavformat/amr.c | 85 ++++++++++++++++-------------------------------
 1 file changed, 28 insertions(+), 57 deletions(-)

diff --git a/libavformat/amr.c b/libavformat/amr.c
index 6faad121bac..5ccef995b5f 100644
--- a/libavformat/amr.c
+++ b/libavformat/amr.c
@@ -134,78 +134,49 @@ static int amr_read_packet(AVFormatContext *s,
                           AVPacket *pkt)
 {
     AVCodecContext *enc = s->streams[0]->codec;
+    int read, size, toc, mode;
 
-    if (enc->codec_id == CODEC_ID_AMR_NB)
+    if (url_feof(&s->pb))
     {
-        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;
+        return AVERROR_IO;
+    }
 
-        size=packed_size[ft];
+    toc=get_byte(&s->pb);
+    mode = (toc >> 3) & 0x0F;
 
-        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 (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};
 
-        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;
 }
 
-- 
GitLab