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

📄 umc_mpeg2_dec_blk.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*//////////////////////////////////////////////////////////////////////////////////                  INTEL CORPORATION PROPRIETARY INFORMATION//     This software is supplied under the terms of a license agreement or//     nondisclosure agreement with Intel Corporation and may not be copied//     or disclosed except in accordance with the terms of that agreement.//          Copyright(c) 2003-2005 Intel Corporation. All Rights Reserved.//*/#include <ippi.h>#include <ippvc.h>#include "ippvc_bs.h"#define _DEF_BLOCK \  Ipp16s *pDstBlock = pQuantSpec->dq;#define DEF_BLOCK \  Ipp16s pDstBlock[64];#define MP2_FUNC(type, name, arg)  type name argstatic Ipp16s Qmatrix[64] ={    16,16,16,16,16,16,16,16, // It    16,16,16,16,16,16,16,16, // Is    16,16,16,16,16,16,16,16, // The    16,16,16,16,16,16,16,16, // Default    16,16,16,16,16,16,16,16, // Non    16,16,16,16,16,16,16,16, // Intra    16,16,16,16,16,16,16,16, // Quantizer    16,16,16,16,16,16,16,16, // Matrix};#define UHBITS(code, nbits) (((Ipp32u)(code)) >> (32 - (nbits)))#define SHBITS(code, nbits) (((Ipp32s)(code)) >> (32 - (nbits)))#define TAB1_OFFSET_10BIT 248#define TAB1_OFFSET_15BIT 360#define TAB1_OFFSET_16BIT 408#define TAB1_OFFSET_8BIT_INTRA 432#define TAB1_OFFSET_10BIT_INTRA 680static const Ipp16u MPEG2_VLC_TAB1[] ={  0xae2, 0xae2,  0x6e9, 0x6e9,  0x12e0, 0x12e0,  0x6e8, 0x6e8,  0x6c7, 0x6c7, 0x6c7, 0x6c7,  0x6c6, 0x6c6, 0x6c6, 0x6c6,  0xac1, 0xac1, 0xac1, 0xac1,  0x6c5, 0x6c5, 0x6c5, 0x6c5,  0x70d,  0x1b00,  0x70c,  0x70b,  0xb03,  0xf01,  0x1700,  0x70a,  0xea0, 0xea0, 0xea0, 0xea0, 0xea0, 0xea0, 0xea0, 0xea0, // 0010 10xx  0x6a4, 0x6a4, 0x6a4, 0x6a4, 0x6a4, 0x6a4, 0x6a4, 0x6a4, // 0011 00xx  0x6a3, 0x6a3, 0x6a3, 0x6a3, 0x6a3, 0x6a3, 0x6a3, 0x6a3, // 0011 10xx  0xa80, 0xa80, 0xa80, 0xa80, 0xa80, 0xa80, 0xa80, 0xa80,  0xa80, 0xa80, 0xa80, 0xa80, 0xa80, 0xa80, 0xa80, 0xa80, // 0100 0xxx  0x682, 0x682, 0x682, 0x682, 0x682, 0x682, 0x682, 0x682,  0x682, 0x682, 0x682, 0x682, 0x682, 0x682, 0x682, 0x682, // 0101 0xxx  0x661, 0x661, 0x661, 0x661, 0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661, 0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661, 0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661, 0x661, 0x661, 0x661, 0x661, // 0110 xxxx  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, 0x640, // 264  /* 13-bit code */  0xbaa, 0xba9, 0xfa5, 0x13a3,  0x17a2, 0x1fa1, 0x1ba1, 0x3fa0,  0x3ba0, 0x37a0, 0x33a0, 0x7ba,  0x7b9, 0x7b8, 0x7b7, 0x7b6,  0x2f80, 0x2f80, 0xb88, 0xb88,  0xf84, 0xf84, 0x2b80, 0x2b80,  0x1382, 0x1382, 0xb87, 0xb87,  0x795, 0x795, 0x794, 0x794,  0x2780, 0x2780, 0x793, 0x793,  0x792, 0x792, 0x1781, 0x1781,  0xf83, 0xf83, 0x2380, 0x2380,  0xb86, 0xb86, 0x791, 0x791, // 312  /* 10-bit code  */  0x750, 0x750, 0x750, 0x750, 0x750, 0x750, 0x750, 0x750,  0xb45, 0xb45, 0xb45, 0xb45, 0xb45, 0xb45, 0xb45, 0xb45,  0x1f40, 0x1f40, 0x1f40, 0x1f40, 0x1f40, 0x1f40, 0x1f40, 0x1f40,  0xf42, 0xf42, 0xf42, 0xf42, 0xf42, 0xf42, 0xf42, 0xf42,  0x1341, 0x1341, 0x1341, 0x1341, 0x1341, 0x1341, 0x1341, 0x1341,  0x74f, 0x74f, 0x74f, 0x74f, 0x74f, 0x74f, 0x74f, 0x74f,  0x74e, 0x74e, 0x74e, 0x74e, 0x74e, 0x74e, 0x74e, 0x74e,  0xb44, 0xb44, 0xb44, 0xb44, 0xb44, 0xb44, 0xb44, 0xb44, // 376  /* 15-bit code */  0xa3e0, 0x9fe0, 0x9be0, 0x97e0,  0x93e0, 0x8fe0, 0x8be0, 0x87e0,  0x83e0, 0x3be1, 0x37e1, 0x33e1,  0x2fe1, 0x2be1, 0x27e1, 0x23e1,  0x7fc0, 0x7fc0, 0x7bc0, 0x7bc0,  0x77c0, 0x77c0, 0x73c0, 0x73c0,  0x6fc0, 0x6fc0, 0x6bc0, 0x6bc0,  0x67c0, 0x67c0, 0x63c0, 0x63c0,  0x5fc0, 0x5fc0, 0x5bc0, 0x5bc0,  0x57c0, 0x57c0, 0x53c0, 0x53c0,  0x4fc0, 0x4fc0, 0x4bc0, 0x4bc0,  0x47c0, 0x47c0, 0x43c0, 0x43c0, // 424  /* 16-bit code */  0x4a01, 0x4601, 0x4201, 0x3e01,  0xe06, 0xa10, 0xa0f, 0xa0e,  0xa0d, 0xa0c, 0xa0b, 0x61f,  0x61e, 0x61d, 0x61c, 0x61b, // 440  /* 8-bit code for B15 */  0x6e7, 0x6e7, 0x6e8, 0x6e8,  0x6e6, 0x6e6, 0xae2, 0xae2,  0x1ec0, 0x1ec0, 0x1ec0, 0x1ec0,  0x1ac0, 0x1ac0, 0x1ac0, 0x1ac0,  0x6c4, 0x6c4, 0x6c4, 0x6c4,  0x6c5, 0x6c5, 0x6c5, 0x6c5,  0x1701, 0x70b, 0x2f00, 0x2b00,  0x70d, 0x70c, 0xb03, 0x1301,  0x6a2, 0x6a2, 0x6a2, 0x6a2,  0x6a2, 0x6a2, 0x6a2, 0x6a2,  0xaa1, 0xaa1, 0xaa1, 0xaa1,  0xaa1, 0xaa1, 0xaa1, 0xaa1,  0x6a3, 0x6a3, 0x6a3, 0x6a3,  0x6a3, 0x6a3, 0x6a3, 0x6a3,  0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661,  0x661, 0x661, 0x661, 0x661,  0xffff, 0xffff, 0xffff, 0xffff, // illegal  0xffff, 0xffff, 0xffff, 0xffff, // bit combination  0xffff, 0xffff, 0xffff, 0xffff, // proceed with  0xffff, 0xffff, 0xffff, 0xffff, // previous branch  0xe80, 0xe80, 0xe80, 0xe80,  0xe80, 0xe80, 0xe80, 0xe80,  0xe80, 0xe80, 0xe80, 0xe80,  0xe80, 0xe80, 0xe80, 0xe80,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0x640, 0x640, 0x640, 0x640,  0xa60, 0xa60, 0xa60, 0xa60,  0xa60, 0xa60, 0xa60, 0xa60,  0xa60, 0xa60, 0xa60, 0xa60,  0xa60, 0xa60, 0xa60, 0xa60,  0xa60, 0xa60, 0xa60, 0xa60,  0xa60, 0xa60, 0xa60, 0xa60,  0xa60, 0xa60, 0xa60, 0xa60,  0xa60, 0xa60, 0xa60, 0xa60,  0x12a0, 0x12a0, 0x12a0, 0x12a0,  0x12a0, 0x12a0, 0x12a0, 0x12a0,  0x16a0, 0x16a0, 0x16a0, 0x16a0,  0x16a0, 0x16a0, 0x16a0, 0x16a0,  0x6e9, 0x6e9, 0xee1, 0xee1,  0x6ea, 0x6ea, 0x22e0, 0x22e0,  0x26e0, 0x26e0, 0x3300, 0x3700,  0xf02, 0xb04, 0x3b00, 0x3f00, // 688  /* 10-bit code for B15 */  0xb25, 0xb25, 0x72e, 0x72e,  0x1342, 0x750, 0x72f, 0x72f,};#define UNPACK_VLC1(tab_val, run, val, len) \{ \  Ipp32u _tab_val = tab_val; \  run = _tab_val & 0x1f; \  len = (_tab_val >> 5) & 0xf; \  val = (_tab_val >> 9); \}#define UNPACK_VLC2(tab_val, run, val, len) \{ \  Ipp32u _tab_val = tab_val; \  run = _tab_val & 0x1f; \  len = (_tab_val >> 5) & 0xf; \  val = (_tab_val >> 10); \}const Ipp8u MPEG2_DCSIZE_TAB[128] = {  0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,  0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,  0x30, 0x30, 0x30, 0x30, 0x33, 0x33, 0x33, 0x33,  0x34, 0x34, 0x34, 0x34, 0x45, 0x45, 0x56, 0x00,  0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,  0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67,  0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78, 0x78,  0x89, 0x89, 0x89, 0x89, 0x9a, 0x9a, 0x9b, 0x9b,  0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,  0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,  0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22,  0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x55, 0x00,  0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,  0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,  0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,  0x88, 0x88, 0x88, 0x88, 0x99, 0x99, 0xaa, 0xbb};#ifdef __ICL#define DECLALIGN(x) __declspec(align(x))#else#define DECLALIGN(x)#endifDECLALIGN(16)static int scan_tbl[4][64] ={    {        0,  8,  1,  2,  9,  16, 24, 17, // It        10, 3,  4,  11, 18, 25, 32, 40, // is        33, 26, 19, 12, 5,  6,  13, 20, // transposed        27, 34, 41, 48, 56, 49, 42, 35, // zigzag        28, 21, 14, 7,  15, 22, 29, 36, // reverse        43, 50, 57, 58, 51, 44, 37, 30, // scan        23, 31, 38, 45, 52, 59, 60, 53, // matrix        46, 39, 47, 54, 61, 62, 55, 63  // for mpeg2    },    {        0,  1,  2,  3,  8,  9,  16, 17, // It        10, 11, 4,  5,  6,  7,  15, 14, // is        13, 12, 19, 18, 24, 25, 32, 33, // transposed        26, 27, 20, 21, 22, 23, 28, 29, // alternate        30, 31, 34, 35, 40 ,41, 48, 49, // reverse        42, 43, 36, 37, 38, 39, 44, 45, // scan        46, 47, 50, 51, 56, 57, 58, 59, // matrix        52, 53, 54, 55, 60, 61, 62, 63  // for mpeg2    },    {        0,  1,  8,  16, 9,  2,  3,  10, // It        17, 24, 32, 25, 18, 11, 4,  5,  // is        12, 19, 26, 33, 40, 48, 41, 34, // not transposed        27, 20, 13,  6,  7, 14, 21, 28, // zigzag        35, 42, 49, 56, 57, 50, 43, 36, // reverse        29, 22, 15, 23, 30, 37, 44, 51, // scan        58, 59, 52, 45, 38, 31, 39, 46, // matrix        53, 60, 61, 54, 47, 55, 62, 63  // for mpeg1    },    {        0,  8,  16, 24, 1,  9,  2,  10, // It        17, 25, 32, 40, 48, 56, 57, 49, // is        41, 33, 26, 18,  3, 11, 4,  12, // not transposed        19, 27, 34, 42, 50, 58, 35, 43, // zigzag        51, 59, 20, 28, 5 , 13, 6 , 14, // reverse        21, 29, 36, 44, 52, 60, 37, 45, // scan        53, 61, 22, 30, 7 , 15, 23, 31, // matrix        38, 46, 54, 62, 39, 47, 55, 63  // for mpeg1 (not used)    }};Ipp8u default_intra_quantizer_matrix[64] ={   8, 16, 16, 19, 16, 19, 22, 22,  // It  22, 22, 22, 22, 26, 24, 26, 27,  // Is  27, 27, 26, 26, 26, 26, 27, 27,  // The  27, 29, 29, 29, 34, 34, 34, 29,  // Default  29, 29, 27, 27, 29, 29, 32, 32,  // mpeg  34, 34, 37, 38, 37, 35, 35, 34,  // Intra  35, 38, 38, 40, 40, 40, 48, 48,  // Quantizer  46, 46, 56, 56, 58, 69, 69, 83   // Matrix};/***************************************************************/#define DECODE_DC(val)                                    \{                                                         \  const Ipp8u *pTab;                                      \  int dct_dc_size;                                        \  SHOW_HI9BITS(BS, code);                                 \  pTab = MPEG2_DCSIZE_TAB + (chromaFlag << 6);            \  if (code < 0xf8000000) {                                \    tbl = pTab[UHBITS(code, 5)];                          \    dct_dc_size = tbl & 0xF;                              \    len = tbl >> 4;                                       \    if (dct_dc_size) {                                    \      EXPAND_17BITS(BS, code);                            \      code <<= len;                                       \      val = UHBITS(code, dct_dc_size) - UHBITS(SHBITS(~code, 1), dct_dc_size); \      SKIP_BITS(BS, len + dct_dc_size);                   \    } else {                                              \      val = 0;                                            \      SKIP_BITS(BS, len);                                 \    }                                                     \  } else {                                                \    tbl = pTab[32 + (UHBITS(code, 10) & 0x1f)];           \    dct_dc_size = tbl & 0xF;                              \    len = tbl >> 4;                                       \    EXPAND_17BITS(BS, code);                              \    EXPAND_25BITS(BS, code);                              \    code <<= len;                                         \    val = UHBITS(code, dct_dc_size) - UHBITS(SHBITS(~code, 1), dct_dc_size); \    SKIP_BITS(BS, len + dct_dc_size);                     \  }                                                       \}/* /////////////////////////////////////////////////////////////////////////////  Name://    ippiDecodeInter8x8IDCTAdd_MPEG2_1u8u////  Purpose://    Performs VLC decoding of DCT coefficients for one inter 8x8 block,//    dequantization of coefficients, inverse DCT and addition of resulted//    8x8 block to destination.////  Parameters://    ppBitStream      Pointer to the pointer to the current byte in//                     the bitstream, it is updated after block decoding.//    pBitOffset       Pointer to the bit position in the byte pointed by//                     *ppBitStream, it is updated after block decoding.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -