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

📄 umc_mpeg2_enc_defs.h

📁 audio-video-codecs.rar语音编解码器
💻 H
📖 第 1 页 / 共 3 页
字号:
      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 + -