Factorize broken clipping in its own function and document it.
authorVitor Sessak <vitor1001@gmail.com>
Sun, 7 Sep 2008 13:42:34 +0000 (13:42 +0000)
committerVitor Sessak <vitor1001@gmail.com>
Sun, 7 Sep 2008 13:42:34 +0000 (13:42 +0000)
Originally committed as revision 15247 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/mace.c

index be5f094..79e9b30 100644 (file)
@@ -244,6 +244,20 @@ typedef struct MACEContext {
     ChannelData chd[2];
 } MACEContext;
 
+/**
+ * MACE version of av_clip_int16(). We have to do this to keep binary
+ * identical output to the binary decoder.
+ */
+static inline int16_t mace_broken_clip_int16(int n)
+{
+    if (n > 32767)
+        return 32767;
+    else if (n < -32768)
+        return -32767;
+    else
+        return n;
+}
+
 static void chomp3(ChannelData *ctx, int16_t *output, uint8_t val,
                    const uint16_t tab1[],
                    const uint16_t tab2[][8], uint32_t numChannels)
@@ -252,12 +266,7 @@ static void chomp3(ChannelData *ctx, int16_t *output, uint8_t val,
 
     current = (short) tab2[(ctx->index & 0x7f0) >> 4][val];
 
-    if (current + ctx->lev > 32767)
-        current = 32767;
-    else if (current + ctx->lev < -32768)
-        current = -32767;
-    else
-        current += ctx->lev;
+    current = mace_broken_clip_int16(current + ctx->lev);
 
     ctx->lev = current - (current >> 3);
     //*ctx->outPtr++=current >> 8;
@@ -286,12 +295,7 @@ static void chomp6(ChannelData *ctx, int16_t *output, uint8_t val,
             ctx->factor -= 314;
     }
 
-    if (current + ctx->level > 32767)
-        current = 32767;
-    else if (current + ctx->level < -32768)
-        current = -32767;
-    else
-        current += ctx->level;
+    current = mace_broken_clip_int16(current + ctx->level);
 
     ctx->level = ((current*ctx->factor) >> 15);
     current >>= 1;