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

📄 umc_mpeg2_enc_defs.h

📁 audio-video-codecs.rar语音编解码器
💻 H
📖 第 1 页 / 共 3 页
字号:
    2*BlkStride_##C,                                   \
    0, 0, vector[0][DIR].mctype_##C, 0);               \
                                                       \
  func_getdiff_field_##C(X##Block + (BlkHeight_##C/2)*CC##FrameHSize, \
    CC##FrameHSize,                                    \
    X##RecFrame[pMBInfo[k].mv_field_sel[1][DIR]][DIR] + vector[1][DIR].offset_##C, \
    CC##FrameHSize,                                    \
    pDiff + OFF_##X + (BlkHeight_##C/2)*BlkStride_##C, \
    2*BlkStride_##C,                                   \
    0, 0, vector[1][DIR].mctype_##C, 0);               \
}

#define GETDIFF_FIELD_FB(X, CC, C, pDiff)              \
if (picture_structure == FRAME_PICTURE) {              \
  func_getdiffB_field_##C(X##Block,                    \
    2*CC##FrameHSize,                                  \
    X##RecFrame[pMBInfo[k].mv_field_sel[0][0]][0] + vector[0][0].offset_##C, \
    2*CC##FrameHSize,                                  \
    vector[0][0].mctype_##C,                           \
    X##RecFrame[pMBInfo[k].mv_field_sel[0][1]][1] + vector[0][1].offset_##C, \
    2*CC##FrameHSize,                                  \
    vector[0][1].mctype_##C,                           \
    pDiff + OFF_##X,                                   \
    4*BlkStride_##C,                                   \
    ippRndZero);                                       \
                                                       \
  func_getdiffB_field_##C(X##Block + CC##FrameHSize,   \
    2*CC##FrameHSize,                                  \
    X##RecFrame[pMBInfo[k].mv_field_sel[1][0]][0] + vector[1][0].offset_##C, \
    2*CC##FrameHSize,                                  \
    vector[1][0].mctype_##C,                           \
    X##RecFrame[pMBInfo[k].mv_field_sel[1][1]][1] + vector[1][1].offset_##C, \
    2*CC##FrameHSize,                                  \
    vector[1][1].mctype_##C,                           \
    pDiff + OFF_##X + BlkStride_##C,                   \
    4*BlkStride_##C,                                   \
    ippRndZero);                                       \
} else {                                               \
  func_getdiffB_field_##C(X##Block,                    \
    CC##FrameHSize,                                    \
    X##RecFrame[pMBInfo[k].mv_field_sel[0][0]][0] + vector[0][0].offset_##C,\
    CC##FrameHSize,                                    \
    vector[0][0].mctype_##C,                           \
    X##RecFrame[pMBInfo[k].mv_field_sel[0][1]][1] + vector[0][1].offset_##C,\
    CC##FrameHSize,                                    \
    vector[0][1].mctype_##C,                           \
    pDiff + OFF_##X,                                   \
    2*BlkStride_##C,                                   \
    ippRndZero);                                       \
                                                       \
  func_getdiffB_field_##C(                             \
    X##Block + (BlkHeight_##C/2)*CC##FrameHSize,       \
    CC##FrameHSize,                                    \
    X##RecFrame[pMBInfo[k].mv_field_sel[1][0]][0] + vector[1][0].offset_##C,  \
    CC##FrameHSize,                                    \
    vector[1][0].mctype_##C,                           \
    X##RecFrame[pMBInfo[k].mv_field_sel[1][1]][1] + vector[1][1].offset_##C, \
    CC##FrameHSize,                                    \
    vector[1][1].mctype_##C,                           \
    pDiff + OFF_##X + (BlkHeight_##C/2)*BlkStride_##C, \
    2*BlkStride_##C,                                   \
    ippRndZero);                                       \
}

#define MC_FRAME_F(X, CC, C, pDiff) \
  func_mc_frame_##C(                \
    X##RecFrame[pMBInfo[k].mv_field_sel[2][0]][0] + vector[2][0].offset_##C, \
    CC##FrameHSize,                 \
    pDiff + OFF_##X,                \
    2*BlkStride_##C,                \
    X##BlockRec,                    \
    CC##FrameHSize,                 \
    vector[2][0].mctype_##C,        \
    (IppRoundMode)0 )

#define MC_FIELD_F(X, CC, C, pDiff)                    \
if (picture_structure == FRAME_PICTURE) {              \
  func_mc_field_##C(                                   \
    X##RecFrame[pMBInfo[k].mv_field_sel[0][0]][0] + vector[0][0].offset_##C, \
    2*CC##FrameHSize,                                  \
    pDiff + OFF_##X,                                   \
    4*BlkStride_##C,                                   \
    X##BlockRec,                                       \
    2*CC##FrameHSize,                                  \
    vector[0][0].mctype_##C,                           \
    (IppRoundMode)0 );                                 \
                                                       \
  func_mc_field_##C(                                   \
    X##RecFrame[pMBInfo[k].mv_field_sel[1][0]][0] + vector[1][0].offset_##C, \
    2*CC##FrameHSize,                                  \
    pDiff + OFF_##X + BlkStride_##C,                   \
    4*BlkStride_##C,                                   \
    X##BlockRec + CC##FrameHSize,                      \
    2*CC##FrameHSize,                                  \
    vector[1][0].mctype_##C,                           \
    (IppRoundMode)0 );                                 \
} else {                                               \
  func_mc_field_##C(                                   \
    X##RecFrame[pMBInfo[k].mv_field_sel[0][0]][0] + vector[0][0].offset_##C, \
    CC##FrameHSize,                                    \
    pDiff + OFF_##X,                                   \
    2*BlkStride_##C,                                   \
    X##BlockRec,                                       \
    CC##FrameHSize,                                    \
    vector[0][0].mctype_##C,                           \
    (IppRoundMode)0 );                                 \
                                                       \
  func_mc_field_##C(                                   \
    X##RecFrame[pMBInfo[k].mv_field_sel[1][0]][0] + vector[1][0].offset_##C, \
    CC##FrameHSize,                                    \
    pDiff + OFF_##X + (BlkHeight_##C/2)*BlkStride_##C, \
    2*BlkStride_##C,                                   \
    X##BlockRec + (BlkHeight_##C/2)*CC##FrameHSize,    \
    CC##FrameHSize,                                    \
    vector[1][0].mctype_##C,                           \
    (IppRoundMode)0 );                                 \
}

// Note: right and bottom borders are excluding

#define BOUNDS_H(DIR, xoff)                                              \
  me_bound_left[DIR] = xoff - pMotionData[B_count].searchRange[DIR][0];  \
  if (me_bound_left[DIR] < 0)                                            \
  {                                                                      \
    me_bound_left[DIR] = 0;                                              \
  }                                                                      \
  me_bound_right[DIR] = xoff + pMotionData[B_count].searchRange[DIR][0]; \
  if (me_bound_right[DIR] > MBcountH*16 - 16) {                          \
    me_bound_right[DIR] = IPP_MAX(xoff, MBcountH*16 - 16);               \
  }                                                                      \
  me_bound_left[DIR] -= xoff;                                            \
  me_bound_right[DIR] -= xoff;

#define BOUNDS_V(DIR, yoff)                                              \
  me_bound_top[DIR] = yoff - pMotionData[B_count].searchRange[DIR][1];   \
  if( me_bound_top[DIR] < 0 )                                            \
  {                                                                      \
    me_bound_top[DIR] = 0;                                               \
  }                                                                      \
  me_bound_bottom[DIR] = yoff + pMotionData[B_count].searchRange[DIR][1];\
  if (me_bound_bottom[DIR] > YFrameVSize - 16) {                         \
    me_bound_bottom[DIR] = IPP_MAX(yoff, YFrameVSize - 16);              \
  }                                                                      \
  me_bound_top[DIR] -= yoff;                                             \
  me_bound_bottom[DIR] -= yoff;

// internal border for 16x8 prediction
#define BOUNDS_V_FIELD(DIR, yoff)                                            \
  me_bound_1_bottom[DIR] = yoff + pMotionData[B_count].searchRange[DIR][1];  \
  if (me_bound_1_bottom[DIR] > YFrameVSize - 8) {                            \
    me_bound_1_bottom[DIR] = IPP_MAX(yoff, YFrameVSize - 8);                 \
  }                                                                          \
  me_bound_2_top[DIR] = yoff + 8 - pMotionData[B_count].searchRange[DIR][1]; \
  if( me_bound_2_top[DIR] < 0 )                                              \
  {                                                                          \
    me_bound_2_top[DIR] = 0;                                                 \
  }                                                                          \
  me_bound_1_bottom[DIR] -= yoff;                                            \
  me_bound_2_top[DIR] -= yoff + 8;


#define ME_FRAME(DIR, vardiff_res, pDiff, dct_type)            \
{                                                              \
  Ipp32s vardiff_tmp[4], meandiff_tmp[4], _vardiff;            \
                                                               \
  pRef[0] = YRefFrame[curr_field][DIR] + cur_offset;           \
  pRef[1] = YRefFrame[1-curr_field][DIR] + cur_offset;         \
  pRec[0] = YRecFrame[curr_field][DIR] + cur_offset;           \
  pRec[1] = YRecFrame[1-curr_field][DIR] + cur_offset;         \
  dct_type = DCT_FRAME;                                        \
                                                               \
  vardiff_res = MotionEstimation_Frame( 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_bottom[DIR],                                      \
    threadSpec[numTh].PMV[0][DIR],                             \
    pMBInfo[k].MV[0][DIR],                                     \
    (j != start_y) ? pMBInfo[k - MBcountH].MV[0][DIR]          \
                   : MV_ZERO,                                  \
    &vector[2][DIR],                                           \
    &threadSpec[numTh],                                        \
    i, j,                                                      \
    &pMBInfo[k].mv_field_sel[2][DIR],                          \
    NULL, ipflag);                                             \
  if(picture_structure != FRAME_PICTURE && !ipflag) {          \
    MotionEstimation_Frame( 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_bottom[DIR],                                    \
      threadSpec[numTh].PMV[1][DIR],                           \
      pMBInfo[k].MV[1][DIR],                                   \
      (j != start_y) ? pMBInfo[k - MBcountH].MV[1][DIR]        \
                    : MV_ZERO,                                 \
      &vector[2][DIR],                                         \
      &threadSpec[numTh],                                      \
      i, j,                                                    \
      &pMBInfo[k].mv_field_sel[2][DIR],                        \
      &vardiff_res, 1);                                        \
  }                                                            \
  else if (!curr_frame_dct) {                                  \
    GETDIFF_FRAME(Y, Y, l, pDiff, DIR);                        \
                                                               \
    VARMEAN_FIELD(pDiff, vardiff_tmp, meandiff_tmp, _vardiff); \
    {                                                          \
      Ipp32s var_fld = 0, var = 0;                             \
      ippiFrameFieldSAD16x16_16s32s_C1R(pDiff, BlkStride_l*2, &var, &var_fld);  \
      if (var_fld < var) {                                     \
        dct_type = DCT_FIELD;                                  \
        vardiff_res = _vardiff;                                \
        ippsCopy_8u((Ipp8u*)vardiff_tmp, (Ipp8u*)curr->var, sizeof(curr->var)); \
        ippsCopy_8u((Ipp8u*)meandiff_tmp, (Ipp8u*)curr->mean, sizeof(curr->mean)); \
      }                                                        \
    }                                                          \
  }                                                            \
}

#define ME_FIELD(DIR, vardiff_fld, pDiff, dct_type)            \
{                                                              \
  Ipp32s vardiff_tmp[4], meandiff_tmp[4], _vardiff;            \
  Ipp32s diff_f[2][2]; /* [srcfld][reffld] */                  \
                                                               \
  if (picture_structure == FRAME_PICTURE) {                    \
    diff_f[0][0] = MotionEstimation_Field( pRef[0],            \
      pRec[0],                                                 \
      2*YFrameHSize,                                           \
      YBlock,                                                  \
      2*YFrameHSize,                                           \
      mean_fld,                                                \
      curr->var,                                               \
      curr->mean,                                              \
      me_bound_left[DIR],                                      \
      me_bound_right[DIR],                                     \
      (me_bound_top[DIR] + 0) >> 1,                            \
      me_bound_bottom[DIR] >> 1,                               \
      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, 0);                                                \
    diff_f[0][1] = MotionEstimation_Field( pRef[1],            \
      pRec[1],                                                 \
      2*YFrameHSize,                                           \
      YBlock,                                                  \
      2*YFrameHSize,                                           \
      mean_fld,                                                \
      curr->var,                                               \
      curr->mean,                                              \
      me_bound_left[DIR],                                      \
      me_bound_right[DIR],                                     \
      (me_bound_top[DIR] + 0) >> 1,                            \
      me_bound_bottom[DIR] >> 1,                               \
      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_Field( pRef[0],            \
      pRec[0],                                                 \
      2*YFrameHSize,                                           \
      YBlock + YFrameHSize,                                    \
      2*YFrameHSize,                                           \
      mean_fld + 2,                                            \
      curr->var + 2,                                           \

⌨️ 快捷键说明

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