[FFmpeg-cvslog] r15247 - trunk/libavcodec/mace.c
vitor
subversion
Sun Sep 7 15:42:34 CEST 2008
Author: vitor
Date: Sun Sep 7 15:42:34 2008
New Revision: 15247
Log:
Factorize broken clipping in its own function and document it.
Modified:
trunk/libavcodec/mace.c
Modified: trunk/libavcodec/mace.c
==============================================================================
--- trunk/libavcodec/mace.c (original)
+++ trunk/libavcodec/mace.c Sun Sep 7 15:42:34 2008
@@ -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, int
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, int
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;
More information about the ffmpeg-cvslog
mailing list