?? decode.c
字號:
if (bits_log) { for (j= 0; j < stereo; j++) for (i = 0; i < SBLIMIT; i++) { int alloc_bits = 0, alloc_id = bit_alloc[j][i]; if ((j == 0 || i < jsbound) && bit_alloc[j][i] > 0) alloc_bits = 12 * (alloc_id + 1); printf ("alloc_bi[ %d ][ %2d ]= %3d\n", j, i, alloc_bits); } }}void II_decode_bitalloc (Bit_stream *bs, frame_params *fr_ps, unsigned int bit_alloc[7][SBLIMIT], int bits_log){ int i,j,c,sbgr; int stereo = fr_ps->stereo; int sblimit = fr_ps->sblimit; int jsbound = fr_ps->jsbound; al_table *alloc = fr_ps->alloc; unsigned int actual_alloc[7][SBLIMIT]; for (i = 0; i < SBLIMIT; i++) for (j = 0; j < stereo; j++) actual_alloc[j][i] = 0; for (i=0; i<jsbound; i++) for (j=0;j<stereo;j++) actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits); for (i=jsbound; i<sblimit; i++) /* expand to 2 channels */ actual_alloc[0][i] = bit_alloc[0][i] = bit_alloc[1][i] = (char) getbits (bs, (*alloc)[i][0].bits); for (i=sblimit; i<SBLIMIT; i++) for (j=0; j<stereo; j++) bit_alloc[j][i] = 0; if (bits_log) { for (j= 0; j < stereo; j++) for (i = 0; i < SBLIMIT; i++) { int alloc_bits = 0, alloc_id = bit_alloc[j][i]; if (actual_alloc[j][i] > 0) alloc_bits = 12 * (*alloc)[i][alloc_id].bits * (*alloc)[i][alloc_id].group; printf ("alloc_bi[ %d ][ %2d ]= %3d\n", j, i, alloc_bits); } }}void II_decode_bitalloc_mc (Bit_stream *bs, frame_params *fr_ps, unsigned int bit_alloc[7][SBLIMIT], int *l, int *m, int bits_log){ layer *info = fr_ps->header; int i,j,c,sbgr; int sblimit = fr_ps->sblimit_mc; al_table *alloc = fr_ps->alloc_mc; unsigned int actual_alloc[7][SBLIMIT]; for (i = 0; i < SBLIMIT; i++) for (j = *l; j < *m; j++) actual_alloc[j][i] = 0; /* 10/31/95 Ralf Schwalbe LFE */ if (info->lfe) info->lfe_alloc = (char) getbits (bs, (*alloc)[0][0].bits); for (i=0; i<sblimit; i++) if (info->dyn_cross_on == 0) for (j=*l;j<*m;j++) { if ((fr_ps->header->center != 3) || (i < 12) || (j !=2)) actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits); else bit_alloc[j][i] = 0; } else /* dyn. cross mode */ { if (i == 0) sbgr = 0; else for (c = 1; c < 12; c++) { if ((sb_groups[c-1] < i) && (i <= sb_groups[c])) { sbgr = c; /* search the valid subband group */ break; } } /* 960816 FdB new setup for dyn. crosstalk modes */ if (info->dyn_cross_mode[sbgr] == 0) { for (j = *l; j < *m; j++) if (fr_ps->header->center == 3 && i >= 12 && j == 2) bit_alloc[j][i] = 0; else if (info->surround == 3 && info->dyn_second_stereo[sbgr] == 1) { if (info->center != 0 && j == 4) bit_alloc[j][i] = bit_alloc[3][i]; else if (info->center == 0 && j == 3) bit_alloc[j][i] = bit_alloc[2][i]; else actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits); } else actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits); } else if (fr_ps->dyn_cross_bits == 1) /* for channel mode 3/0 and 2/1 */ { /* DynX mode has to be 1 */ if ((info->center == 3) && (i >= 12)) /* 3/0 + phantom center */ bit_alloc[2][i] = 0; else if (info->tc_alloc[sbgr] == 1) bit_alloc[2][i] = bit_alloc[0][i]; else if (info->tc_alloc[sbgr] == 2) bit_alloc[2][i] = bit_alloc[1][i]; else if (info->dyn_cross_LR) bit_alloc[2][i] = bit_alloc[1][i]; else bit_alloc[2][i] = bit_alloc[0][i]; if (info->surround == 3) /* 3/0 + 2/0 */ { actual_alloc[3][i] = bit_alloc[3][i] = (char) getbits (bs, (*alloc)[i][0].bits); if (info->dyn_second_stereo[sbgr] == 1) bit_alloc[4][i] = bit_alloc[3][i]; else actual_alloc[4][i] = bit_alloc[4][i] = (char) getbits (bs, (*alloc)[i][0].bits); } } else if (fr_ps->dyn_cross_bits == 3) /* for channel mode 3/1 and 2/2 */ { if ((info->center == 3) && (i >= 12)) /* 3/1 + phantom center */ bit_alloc[2][i] = 0; else if ((info->dyn_cross_mode[sbgr] == 1) || (info->dyn_cross_mode[sbgr] == 4)) actual_alloc[2][i] = bit_alloc[2][i] = (char) getbits (bs, (*alloc)[i][0].bits); else { /* T2 not transmitted */ if (fr_ps->header->surround == 2 || /* 2/2 mode */ fr_ps->header->tc_alloc[sbgr] == 1 || /* 3/1 mode */ fr_ps->header->tc_alloc[sbgr] == 5 || /* 3/1 mode (matrix mode 2 only) */ fr_ps->header->tc_alloc[sbgr] != 2 && !fr_ps->header->dyn_cross_LR) bit_alloc[2][i] = bit_alloc[0][i]; /* C, L or Ls from L0 */ else bit_alloc[2][i] = bit_alloc[1][i]; /* C, R or Rs from RO */ } if (info->dyn_cross_mode[sbgr] == 2) actual_alloc[3][i] = bit_alloc[3][i] = (char) getbits (bs, (*alloc)[i][0].bits); else if (info->dyn_cross_mode[sbgr] == 4) bit_alloc[3][i] = bit_alloc[2][i]; else { /* T3 not transmitted */ if (fr_ps->header->surround == 2 || /* 2/2 mode */ fr_ps->header->tc_alloc[sbgr] == 4 || /* 3/1 mode */ fr_ps->header->tc_alloc[sbgr] == 5 || /* 3/1 mode (matrix mode 2 only) */ fr_ps->header->tc_alloc[sbgr] < 3 && fr_ps->header->dyn_cross_LR) bit_alloc[3][i] = bit_alloc[1][i]; /* S, R or Rs from R0 */ else bit_alloc[3][i] = bit_alloc[0][i]; /* S, L or Ls from LO */ } } else if (fr_ps->dyn_cross_bits == 4) /* for channel mode 3/2 */ { /* T2 */ if ((info->center == 3) && (i >= 12)) /* 3/2 + phantom center */ bit_alloc[2][i] = 0; else switch (info->dyn_cross_mode[sbgr]) { case 1 : /* T2 contains bitalloc info */ case 2 : case 4 : case 8 : case 9 : case 10: case 11: case 12: case 14: actual_alloc[2][i] = bit_alloc[2][i] = (char) getbits (bs, (*alloc)[i][0].bits); break; case 3 : /* T2 contains no bitalloc info */ case 5 : case 6 : case 7 : case 13: if ((info->tc_alloc[sbgr] == 1) || (info->tc_alloc[sbgr] == 7)) bit_alloc[2][i] = bit_alloc[0][i]; else if ((info->tc_alloc[sbgr] == 2) || (info->tc_alloc[sbgr] == 6)) bit_alloc[2][i] = bit_alloc[1][i]; else if (info->dyn_cross_LR) bit_alloc[2][i] = bit_alloc[1][i]; else bit_alloc[2][i] = bit_alloc[0][i]; break; } /* T3 */ switch (info->dyn_cross_mode[sbgr]) { case 1 : /* T3 contains bitalloc info */ case 3 : case 5 : case 8 : case 10: case 13: actual_alloc[3][i] = bit_alloc[3][i] = (char) getbits (bs, (*alloc)[i][0].bits); break; case 2 : /* T3 has to copy its bitalloc from T0 */ case 4 : case 6 : case 7 : case 12: bit_alloc[3][i] = bit_alloc[0][i]; break; case 9 : /* T3 has to copy its bitalloc from T2 */ case 11: case 14: bit_alloc[3][i] = bit_alloc[2][i]; break; } /* T4 */ switch (info->dyn_cross_mode[sbgr]) { case 2 : /* T4 contains bitalloc info */ case 3 : case 6 : case 9 : actual_alloc[4][i] = bit_alloc[4][i] = (char) getbits (bs, (*alloc)[i][0].bits); break; case 1 : /* T4 has to copy its bitalloc from T1 */ case 4 : case 5 : case 7 : case 11: bit_alloc[4][i] = bit_alloc[1][i]; break; case 10: /* T4 has to copy its bitalloc from T2 */ case 12: case 14: bit_alloc[4][i] = bit_alloc[2][i]; break; case 8 : /* T4 has to copy its bitalloc from T3 */ case 13: bit_alloc[4][i] = bit_alloc[3][i]; break; } } } for (i=sblimit; i<SBLIMIT; i++) for (j=*l; j<*m; j++) bit_alloc[j][i] = 0; if (bits_log) { for (j= *l; j < *m; j++) for (i = 0; i < SBLIMIT; i++) { int alloc_bits = 0, alloc_id = bit_alloc[j][i]; if (actual_alloc[j][i] > 0) alloc_bits = 12 * (*alloc)[i][alloc_id].bits * (*alloc)[i][alloc_id].group; printf ("alloc_bi[ %d ][ %2d ]= %3d\n", j, i, alloc_bits); } }}#ifdef Augmentation_7chvoid II_decode_bitalloc_aug (Bit_stream *bs, frame_params *fr_ps, unsigned int bit_alloc[7][SBLIMIT], int *l, int *m, int bits_log){ layer *info = fr_ps->header; int i,j,c,sbgr; /* int stereo = fr_ps->stereo; */ /* not used for mc - decoding */ int sblimit = fr_ps->sblimit_mc; al_table *alloc = fr_ps->alloc_mc; unsigned int actual_alloc[7][SBLIMIT]; for (i = 0; i < SBLIMIT; i++) for (j = *l; j < *m; j++) actual_alloc[j][i] = 0; for (i=0; i<sblimit; i++) if (info->aug_dyn_cross_on == 0) for (j=*l;j<*m;j++) actual_alloc[j][i] = bit_alloc[j][i] = (char) getbits (bs, (*alloc)[i][0].bits); else /* dyn. cross mode */ { int T5T0 = 0, T6T0 = 0, T6T1 = 1; if(i == 0) sbgr = 0; else for(c = 1; c < 12; c++) { if((sb_groups[c-1] < i) && (i <= sb_groups[c])) { sbgr = c; /* search the valid subband group */ break; } } if (info->tc_aug_alloc[sbgr] == 4 || info->tc_aug_alloc[sbgr] == 5) if (info->dyn_cross_LR == 0) T6T1 = 0; else T6T0 = 1; else if (info->tc_aug_alloc[sbgr] == 6 || info->tc_aug_alloc[sbgr] == 7) if (info->dyn_cross_LR) T5T0 = 1; /* read bitalloc info from bitstream */ switch (info->dyn_cross_aug_mode[sbgr]) { case 0: /* T5 and T6 contains bitalloc info */ actual_alloc[5][i] = bit_alloc[5][i] = (char) getbits (bs, (*alloc)[i][0].bits); actual_alloc[6][i] = bit_alloc[6][i] = (char) getbits (bs, (*alloc)[i][0].bits); break; case 1: /* T5 contains bitalloc info */ case 2: case 3: case 4: actual_alloc[5][i] = bit_alloc[5][i] = (char) getbits (bs, (*alloc)[i][0].bits); break; case 5: /* T6 contains bitalloc info */ case 10: case 14: actual_alloc[6][i] = bit_alloc[6][i] = (char) getbits (bs, (*alloc)[i][0].bits); break; } /* copy bitalloc info from other channels */ switch (info->dyn_cross_aug_mode[sbgr]) { case 1: /* copy T6 from T1 */ bit_alloc[6][i] = bit_alloc[T6T1][i]; break; case 2: /* copy T6 from T2 */ bit_alloc[6][i] = bit_alloc[2][i]; break; case 3: /* copy T6 from T4 */ bit_alloc[6][i] = bit_alloc[4][i]; break; case 4: /* copy T6 from T5 */ bit_alloc[6][i] = bit_alloc[5][i]; break; case 5: /* copy T5 from T0 */ bit_alloc[5][i] = bit_alloc[T5T0][i]; break; case 6: /* copy T5 from T0 and T6 from T1 */ bit_alloc[5][i] = bit_alloc[T5T0][i]; bit_alloc[6][i] = bit_alloc[T6T1][i]; break; case 7: /* copy T5 from T0 and T6 from T2 */ bit_alloc[5][i] = bit_alloc[T5T0][i]; bit_alloc[6][i] = bit_alloc[2][i]; break; case 8: /* copy T5 from T0 and T6 from T4 */ bit_alloc[5][i] = bit_alloc[T5T0][i]; bit_alloc[6][i] = bit_alloc[4][i]; break; case 9: /* copy T5 and T6 from T0 */ bit_alloc[5][i] = bit_alloc[T5T0][i]; bit_alloc[6][i] = bit_alloc[T6T0][i]; break; case 10: /* copy T5 from T2 */ bit_alloc[5][i] = bit_alloc[2][i]; break; case 11: /* copy T5 from T2 and T6 from T1 */ bit_alloc[5][i] = bit_alloc[2][i]; bit_alloc[6][i] = bit_alloc[T6T1][i]; break; case 12: /* copy T5 and T6 from T2 */ bit_alloc[5][i] = bit_alloc[6][i] = bit_alloc[2][i]; break; case 13: /* copy T5 from T2 and T6 from T4 */ bit_alloc[5][i] = bit_alloc[2][i]; bit_alloc[6][i] = bit_alloc[4][i];
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -