HEVC里面CU与TU打印到屏幕及提取到txt文本

 测试模型为HM16.5 

在解决方案资源管理器里面找到项目TlibEncoder,会看到里面有个源文件TencCU.cpp


 (1)打印到屏幕

(在TencCU.cpp的xCompressCU函数(237行)后面添加,即可提取每个CU的相关信息并将其打印到屏幕)


  printf("\n---------------CTUAddress(Raster Scan): %d-----------------\n",pCtu->getCtuRsAddr()); 

  printf("\n---------------CUstarts--------------\n"); 

  int iCount =0; 

 

  TComSlice *constpcSlice = pCtu->getSlice();

  constTComSPS   &sps=*(pcSlice->getSPS());

 

  intiWidthInPart = sps.getMaxCUWidth() >> 2; 

 

  for (int i = 0; i < pCtu->getTotalNumPart();i++) 

  { 

         if ( (iCount & (iWidthInPart - 1)) == 0) 

                printf("\n"); 

 

         printf("%d ",pCtu->getDepth(g_auiRasterToZscan[i])); 

         iCount++; 

  } 

  printf("\n---------------CUends--------------\n"); 

  printf("\n---------------TUstarts--------------\n"); 

 

  iCount = 0; 

 

  for (int i = 0; i < pCtu->getTotalNumPart();i++) 

  {

         if ( (iCount & (iWidthInPart - 1)) == 0) 

                printf("\n");  

 

         printf("%d ",pCtu->getTransformIdx(g_auiRasterToZscan[i]) +pCtu->getDepth(g_auiRasterToZscan[i])); 

         iCount++; 

  } 

  printf("\n---------------TUends--------------\n");  

(2) 将CU的划分方式提取出来并存储到txt文本

需要添加头文件include<stdlib.h>

然后定义一个文件指针 FILE *fp;

创建一个txt文件,例如命名为BasketballDrill_spilt_CU.txt,注意后面"w"是打开文件方式,将原有内容清空写入新数据,如果文件不存在则新建,类似的还有"r"只读打开(不能写入);"a"向文件中追加内容,原有内容不变,等等

所以要用“a”的形式,以免循环后数值被覆盖

fp = fopen ("BasketballDrill_spilt_CU.txt", "a");

然后将打印的printf注释掉,在(1)中相同的位置添加如下代码即可。

注:要等项目运行完再打开创建的txt文本。

// 添加 开始:CU和TU划分
  printf("\n---------------CTU Address(Raster Scan): %d-----------------\n", pCtu->getCtuRsAddr());  
  printf("\n---------------CU starts--------------\n");  
  FILE *fp;
  fp = fopen ("BasketballDrill_spilt_CU.txt", "a");


  int iCount = 0;  


  TComSlice *const pcSlice = pCtu->getSlice();
  const TComSPS   &sps =*(pcSlice->getSPS());


  int iWidthInPart = sps.getMaxCUWidth() >> 2;  


  for (int i = 0; i < pCtu->getTotalNumPart(); i++)  
  {  
 if ( (iCount & (iWidthInPart - 1)) == 0)  
 // printf("\n");  
 fprintf(fp,"\n");


// printf("%d ", pCtu->getDepth(g_auiRasterToZscan[i]));  
 iCount++;  
 fprintf(fp,"%d ",pCtu->getDepth(g_auiRasterToZscan[i]));
   }  
  
   printf("\n---------------CU ends--------------\n");  
   printf("\n---------------TU starts--------------\n");  


   iCount = 0;  


   for (int i = 0; i < pCtu->getTotalNumPart(); i++)  
   { 
 if ( (iCount & (iWidthInPart - 1)) == 0)  
 //printf("\n");   


 //printf("%d ", pCtu->getTransformIdx(g_auiRasterToZscan[i]) + pCtu->getDepth(g_auiRasterToZscan[i]));  
 iCount++;  
    }  
   // printf("\n---------------TU ends--------------\n");  


  // 添加 结束:CU和TU划分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

rs勿忘初心

您的鼓励将是我的最大创动原动力

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

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

打赏作者

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

抵扣说明:

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

余额充值