Commit 3c8e39f7 authored by François Revol's avatar François Revol

Stereo MACE fix by Burkhard Plaum <plaum AT ipf DOT uni-stuttgart DOT de>

Still doesn't work with our mov demuxer though...

Originally committed as revision 3919 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 8845e427
...@@ -242,7 +242,8 @@ typedef struct MACEContext { ...@@ -242,7 +242,8 @@ typedef struct MACEContext {
static void chomp3(MACEContext *ctx, static void chomp3(MACEContext *ctx,
uint8_t val, uint8_t val,
const uint16_t tab1[], const uint16_t tab1[],
const uint16_t tab2[][8]) const uint16_t tab2[][8],
uint32_t numChannels)
{ {
short current; short current;
...@@ -252,7 +253,8 @@ static void chomp3(MACEContext *ctx, ...@@ -252,7 +253,8 @@ static void chomp3(MACEContext *ctx,
else current+=ctx->lev; else current+=ctx->lev;
ctx->lev=current-(current >> 3); ctx->lev=current-(current >> 3);
// *ctx->outPtr++=current >> 8; // *ctx->outPtr++=current >> 8;
*ctx->outPtr++=current; *ctx->outPtr=current;
ctx->outPtr+=numChannels;
if ( ( ctx->index += tab1[val]-(ctx->index>>5) ) < 0 ) ctx->index = 0; if ( ( ctx->index += tab1[val]-(ctx->index>>5) ) < 0 ) ctx->index = 0;
} }
/* \\\ */ /* \\\ */
...@@ -281,13 +283,13 @@ static void Exp1to3(MACEContext *ctx, ...@@ -281,13 +283,13 @@ static void Exp1to3(MACEContext *ctx,
while (cnt>0) { while (cnt>0) {
pkt=inBuffer[0]; pkt=inBuffer[0];
chomp3(ctx, pkt & 7, MACEtab1, MACEtab2); chomp3(ctx, pkt & 7, MACEtab1, MACEtab2, numChannels);
chomp3(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4); chomp3(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4, numChannels);
chomp3(ctx, pkt >> 5 , MACEtab1, MACEtab2); chomp3(ctx, pkt >> 5 , MACEtab1, MACEtab2, numChannels);
pkt=inBuffer[1]; pkt=inBuffer[1];
chomp3(ctx, pkt & 7, MACEtab1, MACEtab2); chomp3(ctx, pkt & 7, MACEtab1, MACEtab2, numChannels);
chomp3(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4); chomp3(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4, numChannels);
chomp3(ctx, pkt >> 5 , MACEtab1, MACEtab2); chomp3(ctx, pkt >> 5 , MACEtab1, MACEtab2, numChannels);
inBuffer+=numChannels*2; inBuffer+=numChannels*2;
--cnt; --cnt;
...@@ -306,7 +308,8 @@ static void Exp1to3(MACEContext *ctx, ...@@ -306,7 +308,8 @@ static void Exp1to3(MACEContext *ctx,
static void chomp6(MACEContext *ctx, static void chomp6(MACEContext *ctx,
uint8_t val, uint8_t val,
const uint16_t tab1[], const uint16_t tab1[],
const uint16_t tab2[][8]) const uint16_t tab2[][8],
uint32_t numChannels)
{ {
short current; short current;
...@@ -329,9 +332,10 @@ static void chomp6(MACEContext *ctx, ...@@ -329,9 +332,10 @@ static void chomp6(MACEContext *ctx,
// *ctx->outPtr++=(ctx->previous+ctx->prev2-((ctx->prev2-current) >> 2)) >> 8; // *ctx->outPtr++=(ctx->previous+ctx->prev2-((ctx->prev2-current) >> 2)) >> 8;
// *ctx->outPtr++=(ctx->previous+current+((ctx->prev2-current) >> 2)) >> 8; // *ctx->outPtr++=(ctx->previous+current+((ctx->prev2-current) >> 2)) >> 8;
*ctx->outPtr++=(ctx->previous+ctx->prev2-((ctx->prev2-current) >> 2)); *ctx->outPtr=(ctx->previous+ctx->prev2-((ctx->prev2-current) >> 2));
*ctx->outPtr++=(ctx->previous+current+((ctx->prev2-current) >> 2)); ctx->outPtr+=numChannels;
*ctx->outPtr=(ctx->previous+current+((ctx->prev2-current) >> 2));
ctx->outPtr+=numChannels;
ctx->prev2=ctx->previous; ctx->prev2=ctx->previous;
ctx->previous=current; ctx->previous=current;
...@@ -366,9 +370,9 @@ static void Exp1to6(MACEContext *ctx, ...@@ -366,9 +370,9 @@ static void Exp1to6(MACEContext *ctx,
while (cnt>0) { while (cnt>0) {
pkt=*inBuffer; pkt=*inBuffer;
chomp6(ctx, pkt >> 5 , MACEtab1, MACEtab2); chomp6(ctx, pkt >> 5 , MACEtab1, MACEtab2, numChannels);
chomp6(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4); chomp6(ctx,(pkt >> 3) & 3, MACEtab3, MACEtab4, numChannels);
chomp6(ctx, pkt & 7, MACEtab1, MACEtab2); chomp6(ctx, pkt & 7, MACEtab1, MACEtab2, numChannels);
inBuffer+=numChannels; inBuffer+=numChannels;
--cnt; --cnt;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment