OSDN Git Service

Factorize duplicate table reading code.
authorVitor Sessak <vitor1001@gmail.com>
Sun, 5 Oct 2008 14:36:10 +0000 (14:36 +0000)
committerVitor Sessak <vitor1001@gmail.com>
Sun, 5 Oct 2008 14:36:10 +0000 (14:36 +0000)
Originally committed as revision 15564 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/mace.c

index 00aaf1f..126ab2e 100644 (file)
@@ -162,10 +162,8 @@ static inline int16_t mace_broken_clip_int16(int n)
         return n;
 }
 
-static void chomp3(ChannelData *chd, int16_t *output, uint8_t val,
-                   const int16_t tab1[],
-                   const int16_t *tab2, int tab2_stride,
-                   uint32_t numChannels)
+static int16_t read_table(ChannelData *chd, uint8_t val, const int16_t tab1[],
+                       const int16_t *tab2, int tab2_stride)
 {
     int16_t current;
 
@@ -174,12 +172,24 @@ static void chomp3(ChannelData *chd, int16_t *output, uint8_t val,
     else
         current = - 1 - tab2[((chd->index & 0x7f0) >> 4)*tab2_stride + 2*tab2_stride-val-1];
 
+    if (( chd->index += tab1[val]-(chd->index >> 5) ) < 0)
+      chd->index = 0;
+
+    return current;
+}
+
+static void chomp3(ChannelData *chd, int16_t *output, uint8_t val,
+                   const int16_t tab1[],
+                   const int16_t *tab2, int tab2_stride,
+                   uint32_t numChannels)
+{
+
+    int16_t current = read_table(chd, val, tab1, tab2, tab2_stride);
+
     current = mace_broken_clip_int16(current + chd->level);
 
     chd->level = current - (current >> 3);
     *output = QT_8S_2_16S(current);
-    if (( chd->index += tab1[val]-(chd->index >> 5) ) < 0)
-        chd->index = 0;
 }
 
 static void chomp6(ChannelData *chd, int16_t *output, uint8_t val,
@@ -187,12 +197,7 @@ static void chomp6(ChannelData *chd, int16_t *output, uint8_t val,
                    const int16_t *tab2, int tab2_stride,
                    uint32_t numChannels)
 {
-    int16_t current;
-
-    if (val < tab2_stride)
-        current = tab2[((chd->index & 0x7f0) >> 4)*tab2_stride + val];
-    else
-        current =  - 1 - tab2[((chd->index & 0x7f0) >> 4)*tab2_stride + 2*tab2_stride-val-1];
+    int16_t current = read_table(chd, val, tab1, tab2, tab2_stride);
 
     if ((chd->previous ^ current) >= 0) {
         chd->factor = FFMIN(chd->factor + 506, 32767);
@@ -214,9 +219,6 @@ static void chomp6(ChannelData *chd, int16_t *output, uint8_t val,
                                       ((chd->prev2-current) >> 2));
     chd->prev2 = chd->previous;
     chd->previous = current;
-
-    if ((chd->index += tab1[val] - (chd->index >> 5)) < 0)
-        chd->index = 0;
 }
 
 static av_cold int mace_decode_init(AVCodecContext * avctx)