📄 umc_h264_dec_decode_cabac.cpp
字号:
{{7, 38}, {3, 50}, {-11, 82}}, {{13, 50}, {19, 40}, {-2, 77}}, {{10, 57}, {3, 66}, {-2, 77}}, {{26, 43}, {18, 50}, {25, 42}},};// See table 9-23 of H.264 standardINITIALIZE_VALUES M_and_N_for_ctxIdx_338_398_inter[61][3] ={ {{14, 11}, {19, -6}, {17, -13}}, {{11, 14}, {18, -6}, {16, -9}}, {{9, 11}, {14, 0}, {17, -12}}, {{18, 11}, {26, -12}, {27, -21}}, {{21, 9}, {31, -16}, {37, -30}}, {{23, -2}, {33, -25}, {41, -40}}, {{32, -15}, {33, -22}, {42, -41}}, {{32, -15}, {37, -28}, {48, -47}}, {{34, -21}, {39, -30}, {39, -32}}, {{39, -23}, {42, -30}, {46, -40}}, {{42, -33}, {47, -42}, {52, -51}}, {{41, -31}, {45, -36}, {46, -41}}, {{46, -28}, {49, -34}, {52, -39}}, {{38, -12}, {41, -17}, {43, -19}}, {{21, 29}, {32, 9}, {32, 11}}, {{45, -24}, {69, -71}, {61, -55}}, {{53, -45}, {63, -63}, {56, -46}}, {{48, -26}, {66, -64}, {62, -50}}, {{65, -43}, {77, -74}, {81, -67}}, {{43, -19}, {54, -39}, {45, -20}}, {{39, -10}, {52, -35}, {35, -2}}, {{30, 9}, {41, -10}, {28, 15}}, {{18, 26}, {36, 0}, {34, 1}}, {{20, 27}, {40, -1}, {39, 1}}, {{0, 57}, {30, 14}, {30, 17}}, {{-14, 82}, {28, 26}, {20, 38}}, {{-5, 75}, {23, 37}, {18, 45}}, {{-19, 97}, {12, 55}, {15, 54}}, {{-35, 125}, {11, 65}, {0, 79}}, {{27, 0}, {37, -33}, {36, -16}}, {{28, 0}, {39, -36}, {37, -14}}, {{31, -4}, {40, -37}, {37, -17}}, {{27, 6}, {38, -30}, {32, 1}}, {{34, 8}, {46, -33}, {34, 15}}, {{30, 10}, {42, -30}, {29, 15}}, {{24, 22}, {40, -24}, {24, 25}}, {{33, 19}, {49, -29}, {34, 22}}, {{22, 32}, {38, -12}, {31, 16}}, {{26, 31}, {40, -10}, {35, 18}}, {{21, 41}, {38, -3}, {31, 28}}, {{26, 44}, {46, -5}, {33, 41}}, {{23, 47}, {31, 20}, {36, 28}}, {{16, 65}, {29, 30}, {27, 47}}, {{14, 71}, {25, 44}, {21, 62}}, {{8, 60}, {12, 48}, {18, 31}}, {{6, 63}, {11, 49}, {19, 26}}, {{17, 65}, {26, 45}, {36, 24}}, {{21, 24}, {22, 22}, {24, 23}}, {{23, 20}, {23, 22}, {27, 16}}, {{26, 23}, {27, 21}, {24, 30}}, {{27, 32}, {33, 20}, {31, 29}}, {{28, 23}, {26, 28}, {22, 41}}, {{28, 24}, {30, 24}, {22, 42}}, {{23, 40}, {27, 34}, {16, 60}}, {{24, 32}, {18, 42}, {15, 52}}, {{28, 29}, {25, 39}, {14, 60}}, {{23, 42}, {18, 50}, {3, 78}}, {{19, 57}, {12, 70}, {-16, 123}}, {{22, 53}, {21, 54}, {21, 53}}, {{22, 61}, {14, 71}, {22, 56}}, {{11, 86}, {11, 83}, {25, 61}},};INITIALIZE_VALUES M_and_N_for_ctxIdx_399_401_inter[3][3] ={ {{12, 40}, {25, 32}, {21, 33}}, {{11, 51}, {21, 49}, {19, 50}}, {{14, 59}, {21, 54}, {17, 61}},};INITIALIZE_VALUES M_and_N_for_ctxIdx_402_459_inter[58][3] ={ {{-4, 79}, {-5, 85}, {-3, 78}}, {{-7, 71}, {-6, 81}, {-8, 74}}, {{-5, 69}, {-10,77}, {-9, 72}}, {{-9, 70}, {-7, 81}, {-10,72}}, {{-8 ,66}, {-17,80}, {-18,75}}, {{-10,68}, {-18,73}, {-12,71}}, {{-19,73}, {-4, 74}, {-11,63}}, {{-12,69}, {-10,83}, {-5, 70}}, {{-16,70}, {-9, 71}, {-17,75}}, {{-15,67}, {-9, 67}, {-14,72}}, {{-20,62}, {-1, 61}, {-16,67}}, {{-19,70}, {-8, 66}, {-8, 53}}, {{-16,66}, {-14,66}, {-14,59}}, {{-22,65}, {0, 59}, {-9, 52}}, {{-20,63}, {2, 59}, {-11,68}}, {{9, -2}, {17,-10}, {9, -2}}, {{26, -9}, {32,-13}, {30,-10}}, {{33, -9}, {42, -9}, {31, -4}}, {{39, -7}, {49, -5}, {33, -1}}, {{41, -2}, {53, 0}, {33, 7}}, {{45, 3}, {64, 3}, {31, 12}}, {{49, 9}, {68, 10}, {37, 23}}, {{45, 27}, {66, 27}, {31, 38}}, {{36, 59}, {47, 57}, {20, 64}}, {{-6, 66}, {-5, 71}, {-9, 71}}, {{-7, 35}, {0, 24}, {-7, 37}}, {{-7, 42}, {-1, 36}, {-8, 44}}, {{-8, 45}, {-2, 42}, {-11,49}}, {{-5, 48}, {-2, 52}, {-10,56}}, {{-12,56}, {-9, 57}, {-12,59}}, {{-6, 60}, {-6, 63}, {-8, 63}}, {{-5, 62}, {-4, 65}, {-9, 67}}, {{-8, 66}, {-4, 67}, {-6, 68}}, {{-8, 76}, {-7, 82}, {-10,79}}, {{-5, 85}, {-3, 81}, {-3, 78}}, {{-6, 81}, {-3, 76}, {-8, 74}}, {{-10,77}, {-7, 72}, {-9, 72}}, {{-7, 81}, {-6, 78}, {-10,72}}, {{-17,80}, {-12,72}, {-18,75}}, {{-18,73}, {-14,68}, {-12,71}}, {{-4, 74}, {-3, 70}, {-11,63}}, {{-10,83}, {-6, 76}, {-5, 70}}, {{-9, 71}, {-5, 66}, {-17,75}}, {{-9, 67}, {-5, 62}, {-14,72}}, {{-1, 61}, {0, 57}, {-16,67}}, {{-8, 66}, {-4, 61}, {-8, 53}}, {{-14,66}, {-9, 60}, {-14,59}}, {{0, 59}, {1, 54}, {-9, 52}}, {{2, 59}, {2, 58}, {-11,68}}, {{21,-13}, {17,-10}, {9, -2}}, {{33,-14}, {32,-13}, {30,-10}}, {{39, -7}, {42, -9}, {31, -4}}, {{46, -2}, {49, -5}, {33, -1}}, {{51, 2}, {53, 0}, {33, 7}}, {{60, 6}, {64, 3}, {31, 12}}, {{61, 17}, {68, 10}, {37, 23}}, {{55, 34}, {66, 27}, {31, 38}}, {{42, 62}, {47, 57}, {20, 64}},};} //end namespace UMCH264DecodingFunctionalusing namespace UMCH264DecodingFunctional;namespace UMC{void H264Bitstream::InitializeContextVariablesIntra_CABAC(long SliceQPy){ long l; // See subclause 9.3.1.1 of H.264 standard // Initialize context(s) for mb_type (SI & I slices) for (l = 0;l <= 10;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_0_10[l - 0].m, M_and_N_for_ctxIdx_0_10[l - 0].n, SliceQPy); }; // Initialize context(s) for mb_qp_delta & // intra_chroma_pred_mode & prev_intra4x4_pred_mode_flag & // rem_intra4x4_pred_mode for (l = 60;l <= 69;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_60_69[l - 60].m, M_and_N_for_ctxIdx_60_69[l - 60].n, SliceQPy); }; // Initialize context(s) for mb_field_decoding_flag & // coded_block_pattern(luma) & coded_block_pattern(chroma) & // coded_block_flag (SI & I slices) for (l = 70;l <= 104;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_70_104_intra[l - 70].m, M_and_N_for_ctxIdx_70_104_intra[l - 70].n, SliceQPy); }; // Initalize context(s) for significant_coeff_flag[] (frame coded) for (l = 105;l <= 165;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_105_165_intra[l - 105].m, M_and_N_for_ctxIdx_105_165_intra[l - 105].n, SliceQPy); }; // Initalize context(s) for last_significant_coeff_flag[] (frame coded) for (l = 166;l <= 226;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_166_226_intra[l - 166].m, M_and_N_for_ctxIdx_166_226_intra[l - 166].n, SliceQPy); }; // Initalize context(s) for coeff_abs_level_minus1[] for (l = 227;l <= 275;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_227_275_intra[l - 227].m, M_and_N_for_ctxIdx_227_275_intra[l - 227].n, SliceQPy); }; // ctxIdx equal to 276 is associated the end_of_slice_flag // Initial values associated with ctxIdx equal to 276 // are specified to be pStateIdx = 63 and valMPS = 0 context_array[276].pStateIdx = 63; context_array[276].valMPS = 0; // Initalize context(s) for significant_coeff_flag[] (field coded) for (l = 277;l <= 337;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_277_337_intra[l - 277].m, M_and_N_for_ctxIdx_277_337_intra[l - 277].n, SliceQPy); }; // Initalize context(s) for last_significant_coeff_flag[] (field coded) for (l = 338;l <= 398;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_338_398_intra[l - 338].m, M_and_N_for_ctxIdx_338_398_intra[l - 338].n, SliceQPy); }; for (l = 399;l <= 401;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_399_401_intra[l - 399].m, M_and_N_for_ctxIdx_399_401_intra[l - 399].n, SliceQPy); }; for (l = 402;l <= 459;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_402_459_intra[l - 402].m, M_and_N_for_ctxIdx_402_459_intra[l - 402].n, SliceQPy); };} //void H264Bitstream::InitializeContextVariablesIntra_CABAC(long SliceQPy)void H264Bitstream::InitializeContextVariablesInter_CABAC(long SliceQPy, long cabac_init_idc){ long l; // See subclause 9.3.1.1 of H.264 standard // Initialize context(s) for mb_skip_flag & mb_type (P & SP slices) // & sub_mb_pred (P & SP slices) for (l = 11;l <= 23;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_11_23[l - 11][cabac_init_idc].m, M_and_N_for_ctxIdx_11_23[l - 11][cabac_init_idc].n, SliceQPy); }; // Initialize context(s) for mb_skip_flag & mb_type (B slices) // & sub_mb_pred (B slices) for (l = 24;l <= 39;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_24_39[l - 24][cabac_init_idc].m, M_and_N_for_ctxIdx_24_39[l - 24][cabac_init_idc].n, SliceQPy); }; // Initialize context(s) for mvd_10 & mvd_11 for (l = 40;l <= 53;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_40_53[l - 40][cabac_init_idc].m, M_and_N_for_ctxIdx_40_53[l - 40][cabac_init_idc].n, SliceQPy); }; // Initialize context(s) for ref_idx_10 & ref_idx_11 for (l = 54;l <= 59;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_54_59[l - 54][cabac_init_idc].m, M_and_N_for_ctxIdx_54_59[l - 54][cabac_init_idc].n, SliceQPy); }; // Initialize context(s) for mb_qp_delta & // intra_chroma_pred_mode & prev_intra4x4_pred_mode_flag & // rem_intra4x4_pred_mode for (l = 60;l <= 69;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_60_69[l - 60].m, M_and_N_for_ctxIdx_60_69[l - 60].n, SliceQPy); }; // Initalize context(s) for mb_field_decoding_flag & // coded_block_pattern(luma) & coded_block_pattern(chroma) & // coded_block_flag (P, SP & B slices) for (l = 70;l <= 104;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_70_104_inter[l - 70][cabac_init_idc].m, M_and_N_for_ctxIdx_70_104_inter[l - 70][cabac_init_idc].n, SliceQPy); }; // Initalize context(s) for significant_coeff_flag[] (frame coded) for (l = 105;l <= 165;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_105_165_inter[l - 105][cabac_init_idc].m, M_and_N_for_ctxIdx_105_165_inter[l - 105][cabac_init_idc].n, SliceQPy); }; // Initalize context(s) for last_significant_coeff_flag[] (frame coded) for (l = 166;l <= 226;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_166_226_inter[l - 166][cabac_init_idc].m, M_and_N_for_ctxIdx_166_226_inter[l - 166][cabac_init_idc].n, SliceQPy); }; // Initalize context(s) for coeff_abs_level_minus1[] for (l = 227;l <= 275;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_227_275_inter[l - 227][cabac_init_idc].m, M_and_N_for_ctxIdx_227_275_inter[l - 227][cabac_init_idc].n, SliceQPy); }; // Initalize context(s) for significant_coeff_flag[] (field coded) for (l = 277;l <= 337;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_277_337_inter[l - 277][cabac_init_idc].m, M_and_N_for_ctxIdx_277_337_inter[l - 277][cabac_init_idc].n, SliceQPy); }; // Initalize context(s) for last_significant_coeff_flag[] (field coded) for (l = 338;l <= 398;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_338_398_inter[l - 338][cabac_init_idc].m, M_and_N_for_ctxIdx_338_398_inter[l - 338][cabac_init_idc].n, SliceQPy); }; for (l = 399;l <= 401;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_399_401_inter[l - 399][cabac_init_idc].m, M_and_N_for_ctxIdx_399_401_inter[l - 399][cabac_init_idc].n, SliceQPy); }; for (l = 402;l <= 459;l += 1) { InitializeContext( &(context_array[l]), M_and_N_for_ctxIdx_402_459_inter[l - 402][cabac_init_idc].m, M_and_N_for_ctxIdx_402_459_inter[l - 402][cabac_init_idc].n, SliceQPy); };} //void H264Bitstream::InitializeContextVariablesInter_CABAC(long SliceQPy, long cabac_init_idc)void H264Bitstream::InitializeDecodingEngine_CABAC(void){ // See subclause 9.3.1.2 of H.264 standard ResetBitStream_CABAC(); m_lcodIRange = 0x01fe; m_lcodIOffset = ReadBits_CABAC(9);} //void H264Bitstream::InitializeDecodingEngine_CABAC(void)void H264Bitstream::ResetBitStream_CABAC(void){/* m_nRegister = 0; m_nReadyBits = 0;*/ ippiAlignBSPointerRight(m_pbs, m_bitOffset);/* Load16Bits_CABAC();*/} // void H264Bitstream::ResetBitStream_CABAC(void)void H264Bitstream::Load16Bits_CABAC(void){/* VM_ASSERT(m_nReadyBits==0); ippiGetBits16(m_pbs, m_bitOffset, m_nRegister); m_nReadyBits = 16;*/} // void H264Bitstream::Load16Bits_CABAC(void)void H264Bitstream::TerminateDecode_CABAC(){ //if (m_nReadyBits>8) ippiUngetNBits(m_pbs,m_bitOffset,8); ippiAlignBSPointerRight(m_pbs, m_bitOffset);}long H264Bitstream::ReadBits_CABAC(long lNum){ long lResult;/* if (lNum > m_nReadyBits) Load16Bits_CABAC(); lResult = (m_nRegister >> (m_nReadyBits -= lNum)) & ~(0xffffffff << lNum);*/ ippiGetNBits(m_pbs, m_bitOffset, lNum, lResult); return lResult;} //long H264Bitstream::ReadBits_CABAC(long lNum)} // end namespace UMC
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -