LCU单元分割(续)

原文地址:http://blog.csdn.net/yangxiao_xiang/article/details/8275181

上一篇文章对每个LCU进行遍历所有的CU分支,只是显示LCU的分割过程,但是并不能确定一个LCU分割结果,经过zhuix7788指出,意识到自己的误区了,后来通过一天的折腾,终于找到了真正的分割输出的结果。因为一个LCU的最终分割是要经过预测和熵编码后才能通过率失真代价确定。

所以,可以在m_pcCuEncoder->compressCU( pcCU );后查看pcCU->m_puhDepth对应的数组。这是一个大小为256的数组, 表示LCU的256个4X4到底如何分割的!

详情可以参考 http://blog.csdn.net/feixiang_john/article/details/7876227#comments的评论部分。)

实现代码如下:

      // run CU encoder
      m_pcCuEncoder->compressCU( pcCU );
      //==LCU分割单元深度信息输出==//
      fprintf( g_hTrace,"=======LCU=========\n");
      for(Int i=0;i<256;i++)
      fprintf( g_hTrace, "%d\t",pcCU->getDepth(i));

输出结果前先要进行TraceEnc开启设定,在TComRom.h文件下设置#define  ENC_DEC_TRACE  1即可。

输出结果在HM-9.0-dev\cfg文件夹下的TraceEnc文件中。

打印输出结果如下:

=======LCU=========

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

1 1  1 1

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

2 2  2 2

3 3  3 3

3 3  3 3

3 3  3 3

3 3  3 3

3 3  3 3

3 3  3 3

3 3  3 3

3 3  3 3

LCU的基本存储单元为4x4的块,这个可以在HM平台的HM-9.0-dev\doc文件夹下找到一个README_data-structure文件,上面有介绍。以下就是一个LCU的存储结构示意图:


下面是根据输出结果重构的一个LCU(64x64)的分割示意图:


其中红色数字代表当前块的分割深度。

或者采用下面的方法也可以查看: 

 // analysis of CU
  xCompressCU( m_ppcBestCU[0], m_ppcTempCU[0], 0 );
	UInt LCUDepth[256] ;
	for (Int i=0;i<256;i++)
	{
		LCUDepth[i]=  m_ppcBestCU[0]->getDepth(i);
		cout<<"CurTempCUDepth: "<<LCUDepth[i]<<endl;
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值