【HEVC学习与研究】30、解码Coding Unit数据

简介: 一个CU结构可以认为是编码过程中作为实际处理过程的一个单元,标准文档的7.3.8.5节说明了CU的语法结构,如下图: 这个结构中,第一个元素cu_transquant_bypass_flag表示是否跳过scaling和变换过程,如果该元素不存在则默认为0。

一个CU结构可以认为是编码过程中作为实际处理过程的一个单元,标准文档的7.3.8.5节说明了CU的语法结构,如下图:




这个结构中,第一个元素cu_transquant_bypass_flag表示是否跳过scaling和变换过程,如果该元素不存在则默认为0。在xDecodeCU函数中,解析该元素的代码如下:

if (pcCU->getSlice()->getPPS()->getTransquantBypassEnableFlag())
{
<span style="white-space:pre">	</span>m_pcEntropyDecoder->decodeCUTransquantBypassFlag( pcCU, uiAbsPartIdx, uiDepth );
}
由于PPS中禁止了T ransquantBypassEnableFlag,因此该段代码被跳过,即默认cu_transquant_bypass_flag为0。


第二个元素cu_skip_flag[ x0 ][ y0 ]判断该CU在以P或者B模式编码时,是否使用跳过模式。在I帧编码时,该元素被跳过。解析该元素的部分代码:

if( !pcCU->getSlice()->isIntra())
{
	m_pcEntropyDecoder->decodeSkipFlag( pcCU, uiAbsPartIdx, uiDepth );
}


第三个元素pred_mode_flag只有在当前slice不是I slice的情况下才会出现。在解码I帧的数据时将会忽略。

第四个元素part_mode的语义表示当前CU的划分模式。解析的部分为:

Void TDecEntropy::decodePredMode( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
{
  m_pcEntropyDecoderIf->parsePredMode( pcCU, uiAbsPartIdx, uiDepth );
}

Void TDecSbac::parsePredMode( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth )
{
  if( pcCU->getSlice()->isIntra() )
  {
    pcCU->setPredModeSubParts( MODE_INTRA, uiAbsPartIdx, uiDepth );
    return;
  }
  
  UInt uiSymbol;
  Int  iPredMode = MODE_INTER;
  m_pcTDecBinIf->decodeBin( uiSymbol, m_cCUPredModeSCModel.get( 0, 0, 0 ) );
  iPredMode += uiSymbol;
  pcCU->setPredModeSubParts( (PredMode)iPredMode, uiAbsPartIdx, uiDepth );
}

在解析的过程中,若发现当前slice是I slice,则这个语法元素直接被设置为1;反之,则解码根据算数解码的结果设置为1或0;

第五个元素pcm_flag表示当前CU中所包含的是pcm_sample( )还是transform_tree( )。调试实例中pcm_flag不存在,因此默认不使用pcm_sample( ),同时也不包含pcm_alignment_zero_bit字段。

prev_intra_luma_pred_flag、mpm_idx和rem_intra_luma_pred_mode等元素都表示了亮度分量的帧内预测模式信息。intra_chroma_pred_mode呢顾名思义保存了色度分量的帧内预测信息。具体的解析方法在研究帧内预测时详述。

rqt_root_cbf元素标识了当前CU中是否包含transform_tree( )部分,若该元素取值为1,则当前CU中包含transform_tree( ),否则就没有transform_tree( )。在该元素未出现的情况下,此值默认为1。

目录
相关文章
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
522 0
|
Linux 程序员 定位技术
Linux项目实战系列之:GPS数据解析
Linux项目实战系列之:GPS数据解析
|
网络协议 NoSQL API
深入理解 RDMA 的软硬件交互机制
本文深入分析了RDMA技术在数据中心高性能网络环境下的工作原理及软硬件交互机制,通过对比传统Kernel TCP,突出了RDMA在减少延迟、提高系统性能方面的优势,同时讨论了其在内存管理、软硬交互方面的关键技术和挑战,为读者提供了全面理解RDMA技术及其应用场景的视角。
|
12月前
|
缓存 NoSQL 算法
面试题:Redis如何实现分布式锁!
面试题:Redis如何实现分布式锁!
197 0
|
编解码 测试技术 API
模拟手机设备:使用 Playwright 实现移动端自动化测试
本文介绍了使用Python的Playwright库进行移动设备模拟和自动化测试的方法。通过Playwright,开发者能模拟不同设备的硬件和软件特性,如屏幕尺寸、用户代理,以确保网站在移动设备上的表现。示例代码展示了如何模拟iPhone X并访问网站,之后可在此基础上编写测试代码以检验响应式布局和交互功能。Playwright的设备参数注册表支持多种设备,简化了移动端自动化测试的流程。
|
算法 计算机视觉 Python
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
891 2
|
机器学习/深度学习 人工智能 自然语言处理
构建未来:人工智能在创造性问题解决中的应用
【4月更文挑战第6天】本文探讨了人工智能(AI)在解决复杂问题中的创新应用,重点分析了AI如何通过模仿人类认知过程提出并实施解决方案。通过深度学习、神经网络和自然语言处理等技术,AI系统能够学习和理解问题的本质,生成新颖的解决方案,并在多个领域如医疗、金融和教育中展示其潜力。文章还讨论了AI在创造性问题解决中面临的挑战及其对未来的影响。
|
编解码 数据安全/隐私保护 计算机视觉
音视频学习之ffmpeg常用基础命令整理
音视频学习之ffmpeg常用基础命令整理
333 0
|
存储 Linux Shell
udev用户空间设备管理
udev用户空间设备管理
284 0
|
监控
135 日志监控告警系统案例(数据模型设计)
135 日志监控告警系统案例(数据模型设计)
351 0