📄 umc_mpeg2_dec_defs.h
字号:
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 + -