⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_h264_dec_decode_cabac.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    {{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 + -