Remove unpack() function, read the bitstream as needed

Originally committed as revision 14040 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
Vitor Sessak 2008-06-30 19:09:00 +00:00
parent 285ea3e30a
commit 6091357fc0
1 changed files with 8 additions and 21 deletions

View File

@ -37,23 +37,8 @@ typedef struct {
float lhist[10]; float lhist[10];
} Real288_internal; } 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 */ /* 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; unsigned int x, y;
float f; float f;
@ -72,8 +57,8 @@ static void decode(Real288_internal *glob, unsigned int input)
glob->sb[x] = sum; glob->sb[x] = sum;
} }
f = amptable[input & 7]; f = amptable[amp_coef];
table = codetable + (input >> 3) * 5; table = codetable + cb_coef * 5;
/* convert log and do rms */ /* convert log and do rms */
for (sum=32, x=10; x--; sum -= glob->pr2[x] * glob->lhist[x]); for (sum=32, x=10; x--; sum -= glob->pr2[x] * glob->lhist[x]);
@ -225,13 +210,15 @@ static void * decode_block(AVCodecContext * avctx, const unsigned char *in,
{ {
int x, y; int x, y;
Real288_internal *glob = avctx->priv_data; 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++) { 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; 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++)]); for (y=0; y<5; *(out++) = 8 * glob->output[glob->phasep+(y++)]);