博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
H.266 帧内预测深度信息输出(一)
阅读量:3577 次
发布时间:2019-05-20

本文共 1618 字,大约阅读时间需要 5 分钟。

在视频编码的最新标准,H.266的帧内预测过程中,其深度划分方式已由原本的四叉树划分,进一步变成四叉树+二叉树的划分模式,取消原有的PU,TU划分模式。

QTBT的划分模式带来了很多的改变,但对于现阶段的代码而已,其本质仍是以HM,即H.265为基础进行增加一些新的技术标准。

关于查看CTU的最终划分深度极其划分信息,可以从解码端对码流的操作中获得,也可以在一个CTU编译完成后,得到编码后的CTU中获得。

我们首先思考一下,编码CTU之前,我们要进行什么操作?通过我们对HM代码的经验,可以知道,CTU之前的部分是Slice,所以,从Slice的代码部分,可以得到最终的划分方式。

之后,由于其深度划分已经由原始的四叉树改编为四叉树+二叉树划分,这个时候,我们查看了TComDataCU,即CU结构体定义的类,从中我们发现了两个函数

1) UChar getDepth ( UInt uiIdx ) const { return m_puhDepth[getTextType()][uiIdx]; }

2)  UInt          getBTDepth(UInt uiAbsPartIdx);

这里 是两个获取深度的函数,都是通过对uidx的索引,获得当前像素位置的深度信息,其中在第一个函数中,我们看到了getTestType的函数,通过在CU结构体中查阅,发现其是获取亮度或色度信息的值。这点事因为在H.266中,编码过程中亮度和色度在I帧的时候,已经是分开进行编码。所以,编码过程中必然,会对亮度和色度进行区分,这个却分的代码之后会进行解释,这里主要是对深度信息的输出进行展示。

既然已经知道了获得深度信息的两个关键函数,那么我们就可以输出一下,其中一个CTU的深度划分信息了。代码如下,

// run CTU trial encoder    m_pcCuEncoder->compressCtu( pCtu );// 加载编码一个CTU之后,首先判断其选择的编码标准	#if JVET_C0024_QTBT//这里主要是对I帧进行操作,其实这个判断在帧内预测部分可以去掉	if (pCtu->getSlice()->isIntra()){		cout << "亮度" << endl;		// 设置当前为亮度模式		pCtu->getSlice()->setTextType(CHANNEL_TYPE_CHROMA);		int iCount = 0;		//  获取CTU大小		UInt uiCTUSize = pCtu->getSlice()->getSPS()->getCTUSize(); int iWidthInPart = uiCTUSize >> 2;for (int i = 0; i < pCtu->getTotalNumPart(); i++){if ((iCount & (iWidthInPart - 1)) == 0)printf("\n");UInt uiDepth = ((UInt)pCtu->getDepth(g_auiRasterToZscan[i]));UInt uiBTDepth = ((UInt)pCtu->getBTDepth(g_auiRasterToZscan[i]));// 四叉树的深度 + 二叉树的深度 = 最终划分的深度			cout << uiDepth + uiBTDepth << " ";			iCount++;		}		cout << "==" << endl;		//system("pause");	}	#else 以上就是增加的代码内容,下一步我们需要打印出来 单纯的深度信息,我们并不能确定其最终的划分形式,但是打印深度信息是我们获得最终划分形式的第一步。 好了,下面关于更多详细信息,将在下一个部分进行叙述,这里主要就是介绍一下如何输出一个CTU的深度信息

转载地址:http://gvxgj.baihongyu.com/

你可能感兴趣的文章
小甲鱼Python第二十一讲(lambda表达式)
查看>>
小甲鱼Python第二十三讲、第二十四讲(递归-这帮小兔崽子、汉诺塔)
查看>>
小甲鱼Python第二十七讲(集合)
查看>>
可调谐半导体激光器的窄线宽测试及压缩
查看>>
matlab中 %d,%f,%c,%s
查看>>
常见的光纤接头汇总
查看>>
半导体激光器—问题整理(二)
查看>>
科研日记7.31
查看>>
zemax仿真二向色镜
查看>>
stm32单片机编程时extern的用法
查看>>
UART4和5的问题
查看>>
Spring框架中在并发访问时的线程安全性
查看>>
网站部署
查看>>
什么情况下会发生栈内存溢出。
查看>>
何为去中心化
查看>>
缓存一致性:写策略
查看>>
Cache一致性:MESI
查看>>
缓存一致性:写未命中
查看>>
为什么用中间位作为组索引
查看>>
缓存:局部性
查看>>