Skip to content

Commit

Permalink
Remove unpack() function, read the bitstream as needed
Browse files Browse the repository at this point in the history
Originally committed as revision 14040 to svn://svn.ffmpeg.org/ffmpeg/trunk
  • Loading branch information
Vitor Sessak committed Jun 30, 2008
1 parent 285ea3e commit 6091357
Showing 1 changed file with 8 additions and 21 deletions.
29 changes: 8 additions & 21 deletions libavcodec/ra288.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,8 @@ typedef struct {
float lhist[10];
} Real288_internal;

/* initial decode */
static void unpack(unsigned short *tgt, const unsigned char *src,
unsigned int len)
{
int i = 0;
GetBitContext gb;

init_get_bits(&gb, src, len * 8);

while (get_bits_count(&gb) + 9 + (i&1) <= len*8) {
tgt[i] = get_bits(&gb, 9 + (i&1));
i++;
}
}

/* Decode and produce output */
static void decode(Real288_internal *glob, unsigned int input)
static void decode(Real288_internal *glob, int amp_coef, int cb_coef)
{
unsigned int x, y;
float f;
Expand All @@ -72,8 +57,8 @@ static void decode(Real288_internal *glob, unsigned int input)
glob->sb[x] = sum;
}

f = amptable[input & 7];
table = codetable + (input >> 3) * 5;
f = amptable[amp_coef];
table = codetable + cb_coef * 5;

/* convert log and do rms */
for (sum=32, x=10; x--; sum -= glob->pr2[x] * glob->lhist[x]);
Expand Down Expand Up @@ -225,13 +210,15 @@ static void * decode_block(AVCodecContext * avctx, const unsigned char *in,
{
int x, y;
Real288_internal *glob = avctx->priv_data;
unsigned short int buffer[len];
GetBitContext gb;

unpack(buffer, in, len);
init_get_bits(&gb, in, len * 8);

for (x=0; x < 32; x++) {
int amp_coef = get_bits(&gb, 3);
int cb_coef = get_bits(&gb, 6 + (x&1));
glob->phasep = (glob->phase = x & 7) * 5;
decode(glob, buffer[x]);
decode(glob, amp_coef, cb_coef);

for (y=0; y<5; *(out++) = 8 * glob->output[glob->phasep+(y++)]);

Expand Down

0 comments on commit 6091357

Please sign in to comment.