X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Flibzmpeg3%2Fvideo%2Fmacroblocks.C;fp=cinelerra-5.0%2Flibzmpeg3%2Fvideo%2Fmacroblocks.C;h=0000000000000000000000000000000000000000;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=5b3d0e4658a8c243161088359d7f9fcf7c32c821;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/libzmpeg3/video/macroblocks.C b/cinelerra-5.0/libzmpeg3/video/macroblocks.C deleted file mode 100644 index 5b3d0e46..00000000 --- a/cinelerra-5.0/libzmpeg3/video/macroblocks.C +++ /dev/null @@ -1,276 +0,0 @@ -#include "../libzmpeg3.h" - -int zslice_decoder_t:: -get_macroblock_address() -{ - int zcode, val = 0; - while( (zcode = slice_buffer->show_bits(11)) < 24 ) { - if( zcode != 15 ) { /* Is not macroblock_stuffing */ - if( zcode != 8 ) { /* Is not macroblock_escape */ -//zerrs("invalid macroblock_address_increment code %d\n",zcode); - fault = 1; - return 1; - } - val += 33; - } - slice_buffer->flush_bits(11); - } - - if( zcode >= 1024 ) { - slice_buffer->flush_bit(); - return val + 1; - } - - if( zcode >= 128 ) { - zcode >>= 6; - slice_buffer->flush_bits(MBAtab1[zcode].len); - return val + MBAtab1[zcode].val; - } - - zcode -= 24; - slice_buffer->flush_bits(MBAtab2[zcode].len); - - return val + MBAtab2[zcode].val; -} - -/* macroblock_type for pictures with spatial scalability */ -inline int zslice_decoder_t:: -getsp_imb_type() -{ - uint32_t zcode = slice_buffer->show_bits(4); - if( !zcode ) { -//zerrs("invalid macroblock_type code %d\n",zcode); - fault = 1; - return 0; - } - - slice_buffer->flush_bits(spIMBtab[zcode].len); - return spIMBtab[zcode].val; -} - -inline int zslice_decoder_t:: -getsp_pmb_type() -{ - int zcode = slice_buffer->show_bits(7); - if( zcode < 2 ) { -// zerrs("invalid macroblock_type code %d\n",zcode); - fault = 1; - return 0; - } - - if( zcode >= 16 ) { - zcode >>= 3; - slice_buffer->flush_bits(spPMBtab0[zcode].len); - - return spPMBtab0[zcode].val; - } - - slice_buffer->flush_bits(spPMBtab1[zcode].len); - return spPMBtab1[zcode].val; -} - -inline int zslice_decoder_t:: -getsp_bmb_type() -{ - VLCtab_t *p; - int zcode = slice_buffer->show_bits(9); - - if( zcode >= 64 ) - p = &spBMBtab0[(zcode >> 5) - 2]; - else if( zcode >= 16 ) - p = &spBMBtab1[(zcode >> 2) - 4]; - else if( zcode >= 8 ) - p = &spBMBtab2[zcode - 8]; - else { -//zerrs("invalid macroblock_type code %d\n",zcode); - fault = 1; - return 0; - } - - slice_buffer->flush_bits(p->len); - return p->val; -} - -inline int zslice_decoder_t:: -get_imb_type() -{ - if( slice_buffer->get_bit() ) return 1; - if( !slice_buffer->get_bit() ) { -//zerr("invalid macroblock_type code\n"); - fault = 1; - return 0; - } - - return 17; -} - -inline int zslice_decoder_t:: -get_pmb_type() -{ - int zcode; - if( (zcode = slice_buffer->show_bits(6)) >= 8 ) { - zcode >>= 3; - slice_buffer->flush_bits(PMBtab0[zcode].len); - return PMBtab0[zcode].val; - } - - if( zcode == 0 ) { -//zerrs("invalid macroblock_type code %d\n",zcode); - fault = 1; - return 0; - } - - slice_buffer->flush_bits(PMBtab1[zcode].len); - return PMBtab1[zcode].val; -} - -inline int zslice_decoder_t:: -get_bmb_type() -{ - int zcode; - if( (zcode = slice_buffer->show_bits(6)) >= 8 ) { - zcode >>= 2; - slice_buffer->flush_bits(BMBtab0[zcode].len); - return BMBtab0[zcode].val; - } - - if( zcode == 0 ) { -//zerrs("invalid macroblock_type code %d\n",zcode); - fault = 1; - return 0; - } - - slice_buffer->flush_bits(BMBtab1[zcode].len); - return BMBtab1[zcode].val; -} - -inline int zslice_decoder_t:: -get_dmb_type() -{ - if( !slice_buffer->get_bit() ) { -//zerr("invalid macroblock_type code\n"); - fault=1; - return 0; - } - - return 1; -} - - -inline int zslice_decoder_t:: -get_snrmb_type() -{ - int zcode = slice_buffer->show_bits(3); - if( zcode == 0 ) { -//zerrs("invalid macroblock_type code %d\n",zcode); - fault = 1; - return 0; - } - slice_buffer->flush_bits(SNRMBtab[zcode].len); - return SNRMBtab[zcode].val; -} - -int zslice_decoder_t:: -get_mb_type() -{ - if( video->scalable_mode == sc_SNR ) - return get_snrmb_type(); - switch(video->pict_type) { - case video_t::pic_type_I: - return video->pict_scal ? getsp_imb_type() : get_imb_type(); - case video_t::pic_type_P: - return video->pict_scal ? getsp_pmb_type() : get_pmb_type(); - case video_t::pic_type_B: - return video->pict_scal ? getsp_bmb_type() : get_bmb_type(); - case video_t::pic_type_D: - return get_dmb_type(); - default: /* MPEG-1 only, not implemented */ -//zerrs("unknown coding type %d\n",video->pict_type); - break; - } - - return 0; -} - -int zslice_decoder_t:: -macroblock_modes(int *pmb_type, int *pstwtype, int *pstwclass, int *pmotion_type, - int *pmv_count, int *pmv_format, int *pdmv, int *pmvscale, int *pdct_type) -{ - int mb_type; - int stwtype, stwcode, stwclass; - int motion_type, mv_count, mv_format, dmv, mvscale; - int dct_type; - static uint8_t stwc_table[3][4] = { {6,3,7,4}, {2,1,5,4}, {2,5,7,4} }; - static uint8_t stwclass_table[9] = {0, 1, 2, 1, 1, 2, 3, 3, 4}; - motion_type = 0; - - /* get macroblock_type */ - mb_type = get_mb_type(); - if( fault ) return 1; - - /* get spatial_temporal_weight_code */ - if( mb_type & mb_WEIGHT ) { - if( video->stwc_table_index == 0 ) - stwtype = 4; - else { - stwcode = slice_buffer->get_bits(2); - stwtype = stwc_table[video->stwc_table_index - 1][stwcode]; - } - } - else - stwtype = (mb_type & mb_CLASS4) ? 8 : 0; - - /* derive spatial_temporal_weight_class (Table 7-18) */ - stwclass = stwclass_table[stwtype]; - - /* get frame/field motion type */ - if( mb_type & (mb_FORWARD | mb_BACKWARD) ) { - if( video->pict_struct == video_t::pics_FRAME_PICTURE ) { - /* frame_motion_type */ - motion_type = video->frame_pred_dct ? - mc_FRAME : slice_buffer->get_bits(2); - } - else { - /* field_motion_type */ - motion_type = slice_buffer->get_bits(2); - } - } - else if( (mb_type & mb_INTRA) && video->conceal_mv ) { - /* concealment motion vectors */ - motion_type = video->pict_struct == video_t::pics_FRAME_PICTURE ? - mc_FRAME : mc_FIELD; - } - - /* derive mv_count, mv_format and dmv, (table 6-17, 6-18) */ - if( video->pict_struct == video_t::pics_FRAME_PICTURE ) { - mv_count = (motion_type == mc_FIELD && stwclass < 2) ? 2 : 1; - mv_format = (motion_type == mc_FRAME) ? mv_FRAME : mv_FIELD; - } - else { - mv_count = (motion_type == mc_16X8) ? 2 : 1; - mv_format = mv_FIELD; - } - - dmv = motion_type == mc_DMV ? 1 : 0; /* dual prime */ - - /* field mv predictions in frame pictures have to be scaled */ - mvscale = mv_format == mv_FIELD && - video->pict_struct == video_t::pics_FRAME_PICTURE ? 1 : 0; - - /* get dct_type (frame DCT / field DCT) */ - dct_type = video->pict_struct == video_t::pics_FRAME_PICTURE && - !video->frame_pred_dct && (mb_type & (mb_PATTERN | mb_INTRA)) ? - slice_buffer->get_bit() : 0; - - /* return values */ - *pmb_type = mb_type; - *pstwtype = stwtype; - *pstwclass = stwclass; - *pmotion_type = motion_type; - *pmv_count = mv_count; - *pmv_format = mv_format; - *pdmv = dmv; - *pmvscale = mvscale; - *pdct_type = dct_type; - return 0; -}