📄 umc_mpeg2_enc_defs.h
字号:
curr->mean + 2, \
me_bound_left[DIR], \
me_bound_right[DIR], \
(me_bound_top[DIR] + 0) >> 1, \
me_bound_bottom[DIR] >> 1, \
threadSpec[numTh].PMV[1][DIR], \
pMBInfo[k].MV[1][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[1][DIR] \
: MV_ZERO, \
&vector[1][DIR], \
&threadSpec[numTh], \
i, j, \
&pMBInfo[k].mv_field_sel[1][DIR], \
NULL, 0); \
diff_f[1][1] = MotionEstimation_Field( pRef[1], \
pRec[1], \
2*YFrameHSize, \
YBlock + YFrameHSize, \
2*YFrameHSize, \
mean_fld + 2, \
curr->var + 2, \
curr->mean + 2, \
me_bound_left[DIR], \
me_bound_right[DIR], \
(me_bound_top[DIR] + 0) >> 1, \
me_bound_bottom[DIR] >> 1, \
threadSpec[numTh].PMV[1][DIR], \
pMBInfo[k].MV[1][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[1][DIR] \
: MV_ZERO, \
&vector[1][DIR], \
&threadSpec[numTh], \
i, j, \
&pMBInfo[k].mv_field_sel[1][DIR], \
&diff_f[1][0], 1); \
vardiff_fld = diff_f[0][0] + diff_f[1][0]; \
dct_type = DCT_FIELD; \
\
} else { \
diff_f[0][0] = MotionEstimation_FieldPict(pRef[ipflag], \
pRec[ipflag], \
YFrameHSize, \
YBlock, \
YFrameHSize, \
mean_frm, \
curr->var, \
curr->mean, \
me_bound_left[DIR], \
me_bound_right[DIR], \
me_bound_top[DIR], \
me_bound_1_bottom[DIR], \
threadSpec[numTh].PMV[0][DIR], \
pMBInfo[k].MV[0][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[0][DIR] \
: MV_ZERO, \
&(vector[0][DIR]), \
&threadSpec[numTh], \
i, j, \
&pMBInfo[k].mv_field_sel[0][DIR], \
NULL, ipflag); \
if(!ipflag) \
diff_f[0][1] = MotionEstimation_FieldPict(pRef[1], \
pRec[1], \
YFrameHSize, \
YBlock, \
YFrameHSize, \
mean_frm, \
curr->var, \
curr->mean, \
me_bound_left[DIR], \
me_bound_right[DIR], \
me_bound_top[DIR], \
me_bound_1_bottom[DIR], \
threadSpec[numTh].PMV[0][DIR], \
pMBInfo[k].MV[0][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[0][DIR] \
: MV_ZERO, \
&(vector[0][DIR]), \
&threadSpec[numTh], \
i, j, \
&pMBInfo[k].mv_field_sel[0][DIR], \
&diff_f[0][0], 1); \
diff_f[1][0] = MotionEstimation_FieldPict(pRef[ipflag] + 8*YFrameHSize, \
pRec[ipflag] + 8*YFrameHSize, \
YFrameHSize, \
YBlock + 8*YFrameHSize, \
YFrameHSize, \
mean_frm + 2, \
curr->var + 2, \
curr->mean + 2, \
me_bound_left[DIR], \
me_bound_right[DIR], \
me_bound_2_top[DIR], \
me_bound_bottom[DIR], \
threadSpec[numTh].PMV[1][DIR], \
pMBInfo[k].MV[1][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[1][DIR] \
: MV_ZERO, \
&(vector[1][DIR]), \
&threadSpec[numTh], \
i, j + 8, \
&pMBInfo[k].mv_field_sel[1][DIR], \
NULL, ipflag); \
if(!ipflag) \
diff_f[1][1] = MotionEstimation_FieldPict(pRef[1] + 8*YFrameHSize, \
pRec[1] + 8*YFrameHSize, \
YFrameHSize, \
YBlock + 8*YFrameHSize, \
YFrameHSize, \
mean_frm + 2, \
curr->var + 2, \
curr->mean + 2, \
me_bound_left[DIR], \
me_bound_right[DIR], \
me_bound_2_top[DIR], \
me_bound_bottom[DIR], \
threadSpec[numTh].PMV[1][DIR], \
pMBInfo[k].MV[1][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[1][DIR] \
: MV_ZERO, \
&(vector[1][DIR]), \
&threadSpec[numTh], \
i, j + 8, \
&pMBInfo[k].mv_field_sel[1][DIR], \
&diff_f[1][0], 1); \
vardiff_fld = diff_f[0][0] + diff_f[1][0]; \
dct_type = DCT_FRAME; \
\
} \
GETDIFF_FIELD(Y, Y, l, pDiff, DIR); \
\
if( picture_structure == FRAME_PICTURE ) { \
VARMEAN_FRAME(pDiff, vardiff_tmp, meandiff_tmp, _vardiff); \
{ \
Ipp32s var_fld = 0, var = 0; \
ippiFrameFieldSAD16x16_16s32s_C1R(pDiff, BlkStride_l*2, &var, &var_fld); \
if (var < var_fld) { \
dct_type = DCT_FRAME; \
vardiff_fld = _vardiff; \
ippsCopy_8u((Ipp8u*)vardiff_tmp, (Ipp8u*)curr->var, sizeof(curr->var)); \
ippsCopy_8u((Ipp8u*)meandiff_tmp, (Ipp8u*)curr->mean, sizeof(curr->mean)); \
} \
} \
/*if(_vardiff <= vardiff_fld) { \
dct_type = DCT_FRAME; \
vardiff_fld = _vardiff; \
}*/ \
} \
}
/*********************************************************/
#ifdef _BIG_ENDIAN_
#define BSWAP(x) (x)
#else // Little endian
#define BSWAP(x) (Ipp32u)(((x) << 24) + (((x)&0xff00) << 8) + (((x) >> 8)&0xff00) + ((x) >> 24))
#endif
// to suppress "conditional expression is constant" warning
#if defined(_DEBUG) || defined(MPEG2_ASSERT)
#define CHECK_ippiPutBits(offset,val,len) { \
Ipp32s _len = len; \
mpeg2_assert((offset) >= 0 && (offset) <= 32); \
mpeg2_assert((_len) > 0 && (_len) < 32); \
mpeg2_assert(((val) & (-1 << (_len))) == 0); \
}
#else
#define CHECK_ippiPutBits(offset,val,len)
#endif
#define ippiPutBits(pBitStream,offset,val,len) \
{ \
Ipp32s tmpcnt; \
Ipp32u r_tmp; \
CHECK_ippiPutBits(offset,val,len) \
tmpcnt = (offset) - (len); \
if(tmpcnt < 0) \
{ \
r_tmp = (pBitStream)[0] | ((val) >> (-tmpcnt)); \
(pBitStream)[0] = BSWAP(r_tmp); \
(pBitStream)++; \
(pBitStream)[0] = (val) << (32 + tmpcnt); \
(offset) = 32 + tmpcnt; \
} \
else \
{ \
(pBitStream)[0] |= (val) << tmpcnt; \
(offset) = tmpcnt; \
} \
}
#define SET_BUFFER(bb, ptr, len) \
bb.start_pointer = ptr; \
*(Ipp32u*)bb.start_pointer = 0; \
bb.bit_offset = 32; \
bb.bytelen = len; \
bb.current_pointer = (Ipp32u*)bb.start_pointer;
#define FLUSH_BITSTREAM(pBitStream, offset) \
if (offset != 32) { \
(pBitStream)[0] = BSWAP((pBitStream)[0]); \
(pBitStream)++; \
offset &= ~7; \
}
#define BITPOS(bs) \
((Ipp32s)((Ipp8u*)bs.bBuf.current_pointer - (Ipp8u*)bs.bBuf.start_pointer)*8 \
- bs.bBuf.bit_offset)
#define CHECK_BUFFER
#define PUT_BITS_THREAD(nTh, VAL, NBITS) \
ippiPutBits(threadSpec[nTh].bBuf.current_pointer, \
threadSpec[nTh].bBuf.bit_offset, \
VAL, NBITS)
#define PUT_BITS_TH(VAL, NBITS) \
PUT_BITS_THREAD(numTh, VAL, NBITS)
#define PUT_BITS(VAL, NBITS) \
PUT_BITS_THREAD(0, VAL, NBITS)
#define PUT_ALIGNMENT(nTh) \
threadSpec[nTh].bBuf.bit_offset &= ~7;
#define PUT_START_CODE_TH(th,scode) { \
Ipp32u code1, code2; \
Ipp32s off = threadSpec[th].bBuf.bit_offset &~ 7; \
code1 = threadSpec[th].bBuf.current_pointer[0]; \
code2 = 0; \
if(off > 0) code1 |= (scode) >> (32-off); \
if(off < 32) code2 = (scode) << off; \
threadSpec[th].bBuf.current_pointer[0] = BSWAP(code1); \
threadSpec[th].bBuf.current_pointer++; \
threadSpec[th].bBuf.current_pointer[0] = code2; \
threadSpec[th].bBuf.bit_offset = off; \
}
#define PUT_START_CODE(scode) PUT_START_CODE_TH(0,scode)
#define PUT_MB_TYPE(PictureType, MOTION_TYPE) { \
Ipp32s mb_type = MOTION_TYPE; \
if (CodedBlockPattern) mb_type |= MB_PATTERN; \
PUT_BITS_TH(mbtypetab[PictureType - 1][mb_type].code, \
mbtypetab[PictureType - 1][mb_type].len); \
}
#define PUT_BLOCK_PATTERN(CodedBlockPattern) \
if (CodedBlockPattern) { \
Ipp32s extra_bits = block_count - 6; \
Ipp32s cbp6 = (CodedBlockPattern >> extra_bits) & 63; \
PUT_BITS_TH(CBP_VLC_Tbl[cbp6].code, CBP_VLC_Tbl[cbp6].len); \
if (extra_bits) { \
PUT_BITS_TH(CodedBlockPattern & ((1 << extra_bits) - 1), extra_bits); \
} \
}
#define PUT_MB_MODES(PictureType, MOTION_TYPE) \
{ \
PUT_MB_TYPE(PictureType, MOTION_TYPE) \
\
if (picture_structure != FRAME_PICTURE) { \
/* (3 - x) is: MC_FRAME -> MC_FIELD, MC_FIELD -> MC_16X8 */ \
PUT_BITS_TH(3 - pMBInfo[k].prediction_type, 2); \
} else \
if (!curr_frame_dct) { \
PUT_BITS_TH(pMBInfo[k].prediction_type, 2); \
if (CodedBlockPattern) { \
PUT_BITS_TH(pMBInfo[k].dct_type, 1); \
} \
} \
}
#define PUT_MB_MODE_NO_MV(PictureType) \
{ \
PUT_MB_TYPE(PictureType, 0) \
\
if (picture_structure == FRAME_PICTURE && !curr_frame_dct) { \
PUT_BITS_TH(pMBInfo[k].dct_type, 1); \
} \
}
#endif // __UMC_MPEG2_ENC_DEFS_H
#endif // UMC_ENABLE_MPEG2_VIDEO_ENCODER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -