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

📄 umc_mpeg2_dec_defs.h

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 H
📖 第 1 页 / 共 2 页
字号:
    int           motion_vector_count;    int           motion_vertical_field_select[4];    //motion vectorsDECLALIGN(16)    short         PMV[8];DECLALIGN(16)    short         vector[8];DECLALIGN(16)    short         vector_chroma[8];DECLALIGN(16)    short         vector_luma[8];    int          offset_field_y[2];    int          offset_field_uv[2];    int          shift_y[2], shift_uv[2];    int          odd_pitch_y, odd_pitch_uv;    int          row_l, col_l, row_c, col_c;    int          offset_l, offset_c;    Ipp8u        *blkCurrYUV[3];}sMacroblock;typedef struct{    short *idct;//[768]// size = 64 * 12    short *dq;//[128];}sBlock;typedef struct{  Ipp32s max_bits;  Ipp32s bits_table0;  Ipp32s bits_table1;  Ipp32u threshold_table0;  Ipp16s *table0;  Ipp16s *table1;} mp2_VLCTable;typedef struct{    Ipp32s *ippTableB5a;    Ipp32s *ippTableB5b;}vlcStorageMPEG2;typedef struct{    sBlock                  block;    sSlice                  slice;DECLALIGN(16)  sMacroblock  macroblock;    sFrameBuffer            frame_buffer;    Ipp8u*                  bs_curr_ptr;    Ipp32s                  bs_bit_offset;    Ipp8u*                  bs_start_ptr;    Ipp8u*                  bs_end_ptr;} IppVideoContext;} // namespace UMC/*******************************************************/#define FUNC_DCT8x8      ippiDCT8x8Inv_AANTransposed_16s_C1R#define FUNC_DCT8x8Intra ippiDCT8x8Inv_AANTransposed_16s8u_C1R#define FUNC_MC(W, H, PIC, pSrcRef, srcStep, pSrcYData, srcYDataStep, pDst, dstStep, mcType, roundControl) \  ippiMC##W##x##H##_8u_C1(pSrcRef, srcStep, pSrcYData, srcYDataStep, pDst, dstStep, 2*mcType, roundControl)#define FUNC_MCB(W, H, PIC, pSrcRefF, srcStepF, mcTypeF, pSrcRefB, srcStepB, mcTypeB, \                 pSrcYData, srcYDataStep, pDst, dstStep, roundControl) \  ippiMC##W##x##H##B_8u_C1(pSrcRefF, srcStepF, 2*mcTypeF, pSrcRefB, srcStepB, 2*mcTypeB, \                           pSrcYData, srcYDataStep, pDst, dstStep, roundControl)#define FUNC_COPY_HP(W, H, pSrc, srcStep, pDst, dstStep, acc, rounding) \  ippiCopy##W##x##H##HP_8u_C1R(pSrc, srcStep, pDst, dstStep, acc, rounding)/*******************************************************/#define HP_FLAG_MC(flag, x, y) \  flag = ((x + x) & 2) | (y & 1); \  flag += flag#define HP_FLAG_CP(flag, x, y) \  flag = (x & 1) | ((y + y) & 2)#define CHECK_OFFSETS(offs_y1, offs_uv1) \  if ((offs_uv1 < 0) || (offs_y1 < 0) || \    ((unsigned) offs_y1 > sequenceHeader.mb_height*16 * pitch_Y)) \  { \  /*printf("offs_uv1 = %x offs_y1 = %x sz = %x\n", offs_uv1, offs_y1, sequenceHeader.mb_height*16 * pitch_Y);*/ \    /*VM_ASSERT(0);*/ \    return; \  }#define CALC_OFFSETS_FRAME(offs_l, offs_c, flag_l, flag_c, xl, yl, HP_FLAG) \{ \  int xc = xl/2; \  int yc = yl/2; \\  offs_l = pMacro->offset_l + (yl >> 1)*pitch_Y  + (xl >> 1); \  offs_c = pMacro->offset_c + (yc >> 1)*pitch_UV + (xc >> 1); \  HP_FLAG(flag_l, xl, yl); \  HP_FLAG(flag_c, xc, yc); \\  CHECK_OFFSETS(offs_l, offs_c) \}#define CALC_OFFSETS_FIELD(offs_l, offs_c, flag_l, flag_c, xl, yl, field_sel, HP_FLAG) \{ \  int xc = xl/2; \  int yc = yl/2; \\  offs_l = pMacro->offset_l + ((yl &~ 1) + field_sel)*pitch_Y  + (xl >> 1); \  offs_c = pMacro->offset_c + ((yc &~ 1) + field_sel)*pitch_UV + (xc >> 1); \  HP_FLAG(flag_l, xl, yl); \  HP_FLAG(flag_c, xc, yc); \\  CHECK_OFFSETS(offs_l, offs_c) \}#define MC_16x16(PIC, ref_Y_data1, ref_U_data1, ref_V_data1, flag1, flag2) \  FUNC_MC(16, 16, PIC, ref_Y_data1,pitch_Y,          \                          diff,32,                      \                          cur_Y_data,                   \                          pitch_Y, flag1, 0);           \                                                        \  FUNC_MC(8, 8, PIC, ref_U_data1,pitch_UV,      \                              diff+256,16,              \                              cur_U_data,               \                              pitch_UV, flag2, 0);      \                                                        \  FUNC_MC(8, 8, PIC, ref_V_data1,pitch_UV,      \                              diff+320,16,              \                              cur_V_data,               \                              pitch_UV, flag2, 0);#define MC_FIELD0(ref_Y_data1, ref_U_data1, ref_V_data1, flag1, flag2) \  FUNC_MC(16, 8, FieldDCT,  \                      ref_Y_data1, pitch_Y_2,           \                      diff,64,                          \                      cur_Y_data, pitch_Y_2,            \                      flag1, 0);                        \                                                        \  FUNC_MC(8, 4, FieldDCT, ref_U_data1, pitch_UV_2,      \                          diff+256,32,                  \                          cur_U_data, pitch_UV_2,       \                          flag2, 0);                    \                                                        \  FUNC_MC(8, 4, FieldDCT, ref_V_data1, pitch_UV_2,      \                          diff+320,32,                  \                          cur_V_data, pitch_UV_2,       \                          flag2, 0);#define MC_FIELD1(ref_Y_data2, ref_U_data2, ref_V_data2, flag1, flag2) \  FUNC_MC(16, 8, FieldDCT, \          ref_Y_data2, pitch_Y_2,            \                      diff+16,64,                        \                      cur_Y_data + pitch_Y, pitch_Y_2,   \                      flag1, 0);                         \                                                         \  FUNC_MC(8, 4, FieldDCT, \          ref_U_data2, pitch_UV_2,           \                      diff+256+8,32,                     \                      cur_U_data + pitch_UV, pitch_UV_2, \                      flag2, 0);                         \                                                         \  FUNC_MC(8, 4, FieldDCT, \          ref_V_data2, pitch_UV_2,           \                      diff+320+8,32,                     \                      cur_V_data + pitch_UV, pitch_UV_2, \                      flag2, 0);#define MCZERO_FRAME(ref_Y_data1, ref_U_data1, ref_V_data1, flag1, flag2) \  FUNC_COPY_HP(16, 16, ref_Y_data1,pitch_Y,     \                          cur_Y_data,                   \                          pitch_Y, flag1, 0);           \  FUNC_COPY_HP(8, 8, ref_U_data1,pitch_UV,     \                              cur_U_data,               \                              pitch_UV, flag2, 0);      \  FUNC_COPY_HP(8, 8, ref_V_data1,pitch_UV,     \                              cur_V_data,               \                              pitch_UV, flag2, 0);#define MCZERO_FIELD0(ref_Y_data1, ref_U_data1, ref_V_data1, flag1, flag2) \  FUNC_COPY_HP(16, 8, ref_Y_data1, pitch_Y_2,      \                      cur_Y_data, pitch_Y_2,            \                      flag1, 0);                        \  FUNC_COPY_HP(8, 4, ref_U_data1, pitch_UV_2,     \                      cur_U_data, pitch_UV_2,       \                      flag2, 0);                    \  FUNC_COPY_HP(8, 4, ref_V_data1, pitch_UV_2,     \                      cur_V_data, pitch_UV_2,       \                      flag2, 0);#define MCZERO_FIELD1(ref_Y_data2, ref_U_data2, ref_V_data2, flag1, flag2) \  FUNC_COPY_HP(16, 8, ref_Y_data2, pitch_Y_2,       \                      cur_Y_data + pitch_Y, pitch_Y_2,   \                      flag1, 0);                         \  FUNC_COPY_HP(8, 4, ref_U_data2, pitch_UV_2,          \                      cur_U_data + pitch_UV, pitch_UV_2, \                      flag2, 0);                         \  FUNC_COPY_HP(8, 4, ref_V_data2, pitch_UV_2,          \                      cur_V_data + pitch_UV, pitch_UV_2, \                      flag2, 0);#define SWAP(TYPE, _val0, _val1) { \  TYPE _tmp = _val0; \  _val0 = _val1; \  _val1 = _tmp; \}IppStatus _mp2_ReconstructDCTBlock_MPEG2_32s(Ipp8u  **BitStream_curr_ptr,                                             Ipp32s *BitStream_bit_offset,                                             Ipp32s *scan,                                             int    quant,                                             Ipp16s *quant_matrix,                                             Ipp16s *dest,                                             Ipp32s *pDstSize);#define DCT8x8INV(SRC, DST, PITCH, NUM) \  if (!NUM) { \    Ipp32s *_DST = (Ipp32s*)(DST); \    int x = ((SRC)[0] + 4) >> 3; \    x = (x & 0xffff) | (x << 16); \    int i; \    for (i = 0; i < 8; i++) { \      _DST[0] = x; \      _DST[1] = x; \      _DST[2] = x; \      _DST[3] = x; \      _DST = (Ipp32s*)((Ipp8u*)_DST + PITCH); \    } \  } else { \    FUNC_DCT8x8(SRC, DST, PITCH, NUM); \  }#define RESET_PMV(array) {                         \  int nn;                                          \  for(nn=0; nn<sizeof(array)/sizeof(Ipp32s); nn++) \    ((Ipp32s*)array)[nn] = 0;                      \}#define COPY_PMV(adst,asrc) {                      \  int nn;                                          \  for(nn=0; nn<sizeof(adst)/sizeof(Ipp32s); nn++)  \    ((Ipp32s*)adst)[nn] = ((Ipp32s*)asrc)[nn];     \}#endif //__UMC_MPEG2_DEC_DEFS_H__

⌨️ 快捷键说明

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