compressSlice 中一开始的entropy coder 设置:

// set entropy coder

if( m_pcCfg->getUseSBACRD() )

{

m_pcSbacCoder->init( m_pcBinCABAC );

m_pcEntropyCoder->setEntropyCoder ( m_pcSbacCoder, pcSlice );

m_pcEntropyCoder->resetEntropy ();

m_pppcRDSbacCoder[0][CI_CURR_BEST]->load(m_pcSbacCoder);

pppcRDSbacCoder = (TEncBinCABAC *) m_pppcRDSbacCoder[0][CI_CURR_BEST]->getEncBinIf();

pppcRDSbacCoder->setBinCountingEnableFlag( false );

pppcRDSbacCoder->setBinsCoded( 0 );

}

entropy coder 设为m_pcSbacCoder ,TEncBinCABAC 指向m_pcBinCABAC。

m_pppcRDSbacCoder[0][CI_CURR_BEST] 复制 m_pcSbacCoder的初始ContextModel和TEncBinCABAC状态。

pppcRDSbacCoder 指向m_pppcRDSbacCoder[0][CI_CURR_BEST]的TEncBinCABAC

为dual layer的字典编码再添加一个自己的entropy coder(TencSbac* m_pcSbacCoderDL):

TencSbac三个私有成员,ContextModel和TEncBinCABAC状态。TencBinIf 为 TEncBinCABAC,TComBitIf

为TComBitCounter

class TEncSbac : public TencEntropyIf

{

protected:

TComBitIf* m_pcBitIf;

TComSlice* m_pcSlice;

TEncBinIf* m_pcBinIf;

}

dual layer的m_pcSbacCoderDL 的初始设置:

TEncBinCABAC *pppcRDSbacCoderDL = NULL;

{

m_pcSbacCoderDL->init( m_pcBinCABAC );

m_pcEntropyCoder->setEntropyCoder ( m_pcSbacCoderDL, pcSlice );

m_pcEntropyCoder->resetEntropy ();

//m_pcSbacCoderDL->loadContexts( m_pcSbacCoder);

pppcRDSbacCoderDL = (TEncBinCABAC *) m_pcSbacCoderDL->getEncBinIf();

pppcRDSbacCoderDL->setBinCountingEnableFlag( false );

pppcRDSbacCoderDL->setBinsCoded( 0 );

}

dual layer字典编码前的设置:

m_pcEntropyCoder->setEntropyCoder ( m_pcSbacCoderDL, pcSlice );         m_pcEntropyCoder->setBitstream( &pcBitCounters[uiSubStrm] );

m_pcCuEncoder->setBitCounter( &pcBitCounters[uiSubStrm] );

m_pcBitCounter = &pcBitCounters[uiSubStrm];

pppcRDSbacCoderDL->setBinCountingEnableFlag( true );

m_pcBitCounter->resetBits();

pppcRDSbacCoderDL->setBinsCoded( 0 );

可以共用TcomBitCounter pcBitCounters[uiSubStrm],但是ContextModel和TEncBinCABAC要有自己的。

DUAL_CODER 自身的熵编码设置就有个小bug:

{

m_pTComDictEncoder->DictCompressCu(uiCUAddr,cuCnt-1, true, pcSlice);

m_pcEntropyCoder->setBitstream( &pcBitCounters[uiSubStrm] );

m_pcCuEncoder->setBitCounter( &pcBitCounters[uiSubStrm] );

m_pcBitCounter = &pcBitCounters[uiSubStrm];

pppcRDSbacCoder->setBinCountingEnableFlag( true );

m_pcBitCounter->resetBits();

pppcRDSbacCoder->setBinsCoded( 0 );

}

compressSlice一开始初始化的EntropyCoder是 m_pcSbacCoder, m_pcEntropyCoder->setEntropyCoder ( m_pcSbacCoder, pcSlice );

这里没有设置EntropyCoder,所以第一个CU字典编码使用的是m_pcSbacCoder

但是后面HM混合编码了一个CU之后,设置了EntropyCoder是m_pppcRDSbacCoder[0][CI_CURR_BEST],从第二个CU开始这里就使用的m_pppcRDSbacCoder[0][CI_CURR_BEST]。(不过第一个CU时m_pppcRDSbacCoder[0][CI_CURR_BEST] load自m_pcSbacCoder,但pppcRDSbacCoder指向的是m_pppcRDSbacCoder[0][CI_CURR_BEST]的TEncBinCABAC.)

Bug fix:最好加上m_pcEntropyCoder->setEntropyCoder (m_pppcRDSbacCoder[0][CI_CURR_BEST], pcSlice );

HM中再增加一路自己的entropy coder的更多相关文章

  1. java8在Collection中新增加的方法removeIf

    记得我在以前找工作的经历中,遇到过一个面试官问过我一个很基础的问题.问题是:有一个List中有10个元素,我现在想从中删除3个元素,请问怎么做?我当时也没想,就直接说,List的有自带的remove方 ...

  2. java在线聊天项目1.0版 异常处理——开启多个客户端,关闭一个客户端后,在其他客户端中再发出信息会出现异常的处理

    异常一 只开启一个客户端,输入信息后关闭,客户端出现如下异常 根据异常说明 ChatClientFrame客户端117行 提示原因是Socket关闭 分析原因 客户端代码 while (connect ...

  3. SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步

    原文:SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步 由于之前的需要,禁止了复制架构更改,以至在发布中添加一个字段,并不会同步到订阅中,而现在又在订阅中添加了一个同名 ...

  4. OA项目之弹出层中再弹出层

    弹出层中再弹出一层如图: <asp:TextBox runat="server" ID="txtUName" CssClass="span2&q ...

  5. VMware workstation 的虚拟机中再安装workstation

    在VMware workstation 10中运行的虚拟机中再安装workstation软件时,启动时会出现不断重启的故障, 解决办法: 在宿主虚拟机的.vmx文件中添加一行 monitor_cont ...

  6. HM中CU,TU的划分

    相信只要是做算法改进的,首先都会遇到这么一个问题:CU,PU及TU这几个在HM中该如何打印出它们最终的划分情况呢?也经常有人来问我这个问题,一般来说,因为问我的时候我一般手头都没有现成的代码可以提供, ...

  7. web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开

    https://blog.csdn.net/zgsdzczh/article/details/79744838 web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开   <style typ ...

  8. impala不能查询hive中新增加的表问题

         使用Cloudera Manager部署安装的CDH和Impala,Hive中新增加的表,impala中查询不到,其原因是/etc/impala/conf下面没有hadoop和hive相关的 ...

  9. .net网站上传图片换电脑不显示 当不用网站的IP地址访问图片,只用相对路径访问时,在发布网站的时候,将上传图片的目标文件夹,包含在项目中再发布即可。

    .net网站上传图片换电脑不显示 当不用网站的IP地址访问图片,只用相对路径访问时,在发布网站的时候,将上传图片的目标文件夹,包含在项目中再发布即可.

随机推荐

  1. MySQL bin-log 日志清理方式

    MySQL bin-log 作用   1.数据恢复:如果你的数据库出问题了,而你之前有过备份,那么可以看日志文件,找出是哪个命令导致你的数据库出问题了,想办法挽回损失. 2.主从服务器之间同步数据:主 ...

  2. 制作透明色:《CSS3 RGBA》与Opacity样式用法

    前面我们一起探讨了一下CSS3 Gradient(css3 渐变),今天我们一起来探讨一下CSS3中的RGBA.RGB对于大家来说一点不陌生,他就是红色R+绿色G+蓝色B,那现在我们所说的RGBA又是 ...

  3. shell 条件判断参数

    -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d file 若文件存在且是一个目录,则为真 -e file 若文件存在,则为真 -f ...

  4. 批量清除.svn 或 _svn

    Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]@=&q ...

  5. HDU 2289 CUP 二分

    Cup Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  6. 用户名 不在 sudoers文件中,此事将被报告。(转)

    话说昨天新建了一个帐号linc,今天在执行sudo时回显一个很吓人的信息: [sudo] password for linc: linc 不在 sudoers 文件中.此事将被报告. 这是要去哪儿报告 ...

  7. Tar命令用法详解

    tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用其中一个.下面的 ...

  8. Device Tree(一):背景介绍

    一.前言 作为一个多年耕耘在linux 2.6.23内核的开发者,各个不同项目中各种不同周边外设驱动的开发以及各种琐碎的.扯皮的俗务占据了大部分的时间.当有机会下载3.14的内核并准备学习的时候,突然 ...

  9. FreeSWITCH一些需求应对

    一.用户号码组 听到这个名词的时候,心中还挺迷茫,需求如下: 一个用户分配号码为800,但是这个用户有一部座机,两部手机:有人拨打800这个号码时,这个用户的所有关联终端都要振铃. 其实就是用户号码多 ...

  10. Pre-Query trigger in Oracle D2k / Oracle Forms

    Pre-Query trigger in Oracle D2k / Oracle Forms DescriptionFires during Execute Query or Count Query ...