HEVC-初始化估计数据(帧间帧内)

/** initialize prediction data with enabling sub-LCU-level delta QP
*\param  uiDepth  depth of the current CU
*\param  qp     qp for the current CU
*- set CU width and CU height according to depth
*- set qp value according to input qp 
*- set last-coded qp value according to input last-coded qp 
*/
Void TComDataCU::initEstData( UInt uiDepth, Int qp )
{
  m_dTotalCost         = MAX_DOUBLE;//double 类型成员函数 总的分割代价sum of partition RD costs
  m_uiTotalDistortion  = 0;         //无符号int 类型变量  总的分割失真sum of partition distortion
  m_uiTotalBits        = 0;         //sum of partition bits  bits是编码后的比特数
  m_uiTotalBins        = 0;         //sum of partition bins  bin是句法元素的二进制位数


  UChar uhWidth  = g_uiMaxCUWidth  >> uiDepth;
  UChar uhHeight = g_uiMaxCUHeight >> uiDepth;

  for (UInt ui = 0; ui < m_uiNumPartition; ui++)//64x64/4x4=256
  {
	  if(getPic()->getPicSym()->getInverseCUOrderMap(getAddr())*m_pcPic->getNumPartInCU()+m_uiAbsIdxInLCU+ui >= getSlice()->getSliceSegmentCurStartCUAddr())
    {
	  //Char*  m_apiMVPIdx[2]; ///< array of motion vector predictor candidates
	  //Char*  m_apiMVPNum[2]; ///< array of number of possible motion vectors predictors单向预测和双向预测  	
	  m_apiMVPIdx[0][ui] = -1;
      m_apiMVPIdx[1][ui] = -1;
      m_apiMVPNum[0][ui] = -1;
      m_apiMVPNum[1][ui] = -1;
      m_puhDepth  [ui] = uiDepth;
      m_puhWidth  [ui] = uhWidth;
      m_puhHeight [ui] = uhHeight;
      m_puhTrIdx  [ui] = 0;
      //UChar* m_puhTransformSkip[3];///< array of transform skipping flags 
	  m_puhTransformSkip[0][ui] = 0;//QP for Y
      m_puhTransformSkip[1][ui] = 0;//QP forCb
      m_puhTransformSkip[2][ui] = 0;//QP forCr from JCTVC-L1003_v34.doc 8.6.2	Scaling and transformation process
      m_skipFlag[ui]   = false;
      m_pePartSize[ui] = SIZE_NONE; // SIZE_NONE=15 不支持帧内帧间分割模式
      m_pePredMode[ui] = MODE_NONE; // MODE_NONE = 15 不是帧内帧间预测模式
      m_CUTransquantBypass[ui] = false;
      m_pbIPCMFlag[ui] = 0;
      m_phQP[ui] = qp;
      m_pbMergeFlag[ui] = 0;
      m_puhMergeIndex[ui] = 0;
      m_puhLumaIntraDir[ui] = DC_IDX;//#define DC_IDX  1  //index for intra DC mode
      m_puhChromaIntraDir[ui] = 0;
      m_puhInterDir[ui] = 0;
      //UChar*   m_puhCbf[3];  ///< array of coded block flags (CBF)
	  m_puhCbf[0][ui] = 0;
      m_puhCbf[1][ui] = 0;
      m_puhCbf[2][ui] = 0;
    }
  }

  UInt uiTmp = uhWidth*uhHeight;

  if(getPic()->getPicSym()->getInverseCUOrderMap(getAddr())*m_pcPic->getNumPartInCU()+m_uiAbsIdxInLCU >= getSlice()->getSliceSegmentCurStartCUAddr())
  {
    m_acCUMvField[0].clearMvField();
    m_acCUMvField[1].clearMvField();
    uiTmp = uhWidth*uhHeight;
    
	//亮度采样系数缓冲器 3种
    memset( m_pcTrCoeffY,    0, uiTmp * sizeof( *m_pcTrCoeffY    ) );
#if ADAPTIVE_QP_SELECTION
    memset( m_pcArlCoeffY ,  0, uiTmp * sizeof( *m_pcArlCoeffY   ) );
#endif
    memset( m_pcIPCMSampleY, 0, uiTmp * sizeof( *m_pcIPCMSampleY ) );

	//色度采样系统缓冲器 3种
    uiTmp>>=2;//除以4,对于色度长宽各减半
	//Tr:transformed变换后的
    memset( m_pcTrCoeffCb,    0, uiTmp * sizeof( *m_pcTrCoeffCb    ) );
    memset( m_pcTrCoeffCr,    0, uiTmp * sizeof( *m_pcTrCoeffCr    ) );
#if ADAPTIVE_QP_SELECTION  
	//采用自适应QP选择 ARL:Adaptive Reconstruction Level
    memset( m_pcArlCoeffCb,   0, uiTmp * sizeof( *m_pcArlCoeffCb   ) );
    memset( m_pcArlCoeffCr,   0, uiTmp * sizeof( *m_pcArlCoeffCr   ) );
#endif                 
	//采用PCM模式进行色度采样
    memset( m_pcIPCMSampleCb, 0, uiTmp * sizeof( *m_pcIPCMSampleCb ) );
    memset( m_pcIPCMSampleCr, 0, uiTmp * sizeof( *m_pcIPCMSampleCr ) );
  }
}

<think>嗯,用户的问题是关于视频编码中的运动估计预测以及TZSearch算法之的关系。首先,我需要明确这些概念各自的定义和作用。 运动估计是视频编码中的关键技术,用于减少时冗余。预测则是利用已编码的来预测当前,从而减少需要传输的数据量。TZSearch算法是一种快速运动估计算法,用于高效地找到最佳匹配块,进而提升编码速度。 接下来,我需要理清它们之的关系。预测依赖于运动估计来找到参考块,而TZSearch作为运动估计的一种方法,优化了这个过程。需要解释TZSearch如何工作,比如它的搜索模式、步骤以及如何提高效率。同时,要指出它在H.265/HEVC等标准中的应用,这样用户能理解其实际应用场景。 用户可能还想了解TZSearch的具体步骤和优势,比如钻石搜索、光栅扫描等策略,以及为什么这些策略能减少计算量。此外,需要强调TZSearch在保持率失真性能的同时提升速度的重要性,这对实时编码尤为关键。 可能的相关问题包括TZSearch与传统全搜索的比较,它在不同编码标准中的差异,优化方法,以及在不同场景下的应用效果。这些扩展问题能帮助用户更全面地理解主题。 需要确保使用正确的中文术语,避免技术术语错误,并按照系统指令使用正确的LaTeX格式。同时,引用标识要自然地添加到相关段落末尾,确保回答结构清晰,逻辑连贯。</think>### 运动估计预测与TZSearch算法的关系 #### 1. 核心概念定义 - **运动估计(Motion Estimation, ME)** 通过分析连续视频中物体的位移向量,找到当前块在参考中的最佳匹配位置,公式表示为: $$ \text{最小化 } SAD = \sum_{i,j} |C(i,j) - R(i+dx,j+dy)| $$ 其中$C$为当前块,$R$为参考,$(dx, dy)$为运动矢量[^1]。 - **预测(Inter Prediction)** 基于运动估计结果,利用参考数据预测当前内容,减少时冗余,是视频编码的核心技术之一[^2]。 - **TZSearch(Test Zone Search)** 一种快速运动估计算法,通过分层搜索策略(如钻石搜索、光栅扫描)快速定位最优运动矢量,显著降低计算复杂度[^3]。 #### 2. 三者的关系 1. **技术依赖** 预测依赖运动估计提供运动矢量,而TZSearch是实现高效运动估计的具体算法。例如在H.265/HEVC中,TZSearch用于加速编码单元(CU)的搜索过程[^4]。 2. **性能优化** TZSearch通过以下步骤提升效率: - **初始搜索点预测**:利用空域/时域相邻块的运动矢量 - **分层搜索**:先粗后精的搜索模式(如5×5钻石→3×3菱形) - **提前终止**:当SAD值超过阈值时停止搜索 3. **编码标准应用** 在H.264/AVC中采用UMHexagonS算法,而H.265/HEVC改用TZSearch,计算复杂度降低约30%的同时保持率失真性能[^5]。 #### 3. 算法实现示例(伪代码) ```python def TZSearch(current_block, reference_frame): # 步骤1:获取空域/时域预测MV initial_mv = get_spatial_temporal_mv() # 步骤2:钻石搜索 best_mv = diamond_search(initial_mv, step=2) # 步骤3:光栅扫描补充搜索 if not converged: best_mv = raster_scan_search(best_mv) return best_mv ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Digital2Slave

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值