int mpeg3video_get_cbp(mpeg3_slice_t *slice) { int code; mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer; if((code = mpeg3slice_showbits9(slice_buffer)) >= 128) { code >>= 4; mpeg3slice_flushbits(slice_buffer, mpeg3_CBPtab0[code].len); return mpeg3_CBPtab0[code].val; }
int mpeg3video_get_macroblock_address(mpeg3_slice_t *slice) { int code, val = 0; mpeg3_slice_buffer_t *slice_buffer = slice->slice_buffer; while((code = mpeg3slice_showbits(slice_buffer, 11)) < 24) { /* Is not macroblock_stuffing */ if(code != 15) { /* Is macroblock_escape */ if(code == 8) { val += 33; } else { /* fprintf(stderr, "mpeg3video_get_macroblock_address: invalid macroblock_address_increment code\n"); */ slice->fault = 1; return 1; } } mpeg3slice_flushbits(slice_buffer, 11); } if(code >= 1024) { mpeg3slice_flushbit(slice_buffer); return val + 1; } if(code >= 128) { code >>= 6; mpeg3slice_flushbits(slice_buffer, mpeg3_MBAtab1[code].len); return val + mpeg3_MBAtab1[code].val; }