HM中再增加一路自己的entropy coder
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的更多相关文章
- java8在Collection中新增加的方法removeIf
记得我在以前找工作的经历中,遇到过一个面试官问过我一个很基础的问题.问题是:有一个List中有10个元素,我现在想从中删除3个元素,请问怎么做?我当时也没想,就直接说,List的有自带的remove方 ...
- java在线聊天项目1.0版 异常处理——开启多个客户端,关闭一个客户端后,在其他客户端中再发出信息会出现异常的处理
异常一 只开启一个客户端,输入信息后关闭,客户端出现如下异常 根据异常说明 ChatClientFrame客户端117行 提示原因是Socket关闭 分析原因 客户端代码 while (connect ...
- SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步
原文:SqlServer 禁止架构更改的复制中手动修复使发布和订阅中分别增加的字段同步 由于之前的需要,禁止了复制架构更改,以至在发布中添加一个字段,并不会同步到订阅中,而现在又在订阅中添加了一个同名 ...
- OA项目之弹出层中再弹出层
弹出层中再弹出一层如图: <asp:TextBox runat="server" ID="txtUName" CssClass="span2&q ...
- VMware workstation 的虚拟机中再安装workstation
在VMware workstation 10中运行的虚拟机中再安装workstation软件时,启动时会出现不断重启的故障, 解决办法: 在宿主虚拟机的.vmx文件中添加一行 monitor_cont ...
- HM中CU,TU的划分
相信只要是做算法改进的,首先都会遇到这么一个问题:CU,PU及TU这几个在HM中该如何打印出它们最终的划分情况呢?也经常有人来问我这个问题,一般来说,因为问我的时候我一般手头都没有现成的代码可以提供, ...
- web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开
https://blog.csdn.net/zgsdzczh/article/details/79744838 web页在微信中访问增加遮罩层 右上角弹出在浏览器中打开 <style typ ...
- impala不能查询hive中新增加的表问题
使用Cloudera Manager部署安装的CDH和Impala,Hive中新增加的表,impala中查询不到,其原因是/etc/impala/conf下面没有hadoop和hive相关的 ...
- .net网站上传图片换电脑不显示 当不用网站的IP地址访问图片,只用相对路径访问时,在发布网站的时候,将上传图片的目标文件夹,包含在项目中再发布即可。
.net网站上传图片换电脑不显示 当不用网站的IP地址访问图片,只用相对路径访问时,在发布网站的时候,将上传图片的目标文件夹,包含在项目中再发布即可.
随机推荐
- linux学习建议
给初学者的建议 注意事项: 1 严格区分大小写,包括命令和文件夹,windows和linux的系统不太一样 2 所有内容都是以文件保存,包括硬件,文件要永久生效,都要写入文件,所以文件命令很重要 3 ...
- SqlSever基础 Upper函数 返回字符串的大写形式
镇场诗:---大梦谁觉,水月中建博客.百千磨难,才知世事无常.---今持佛语,技术无量愿学.愿尽所学,铸一良心博客.------------------------------------------ ...
- (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) (4)设计一个测试类
package b; public interface Computer { int computer(int n,int m); } package b; public class Jia impl ...
- BZOJ 2568 比特集合
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2568 题意:维护一个集合S,支持以下操作: (1)INS M : 将元素 M 插入 ...
- nohup不输出日志信息的方法,及linux重定向学习
起因 最近使用nohup创建了一个后台进程,默认日志输出到了nohup.out文件中,程序跑起来也就没再管,过了大约一周,发现硬盘空间不够了,于是查找原因,发现这个nohup.out文件已经到了70G ...
- 样式表中的 element.style样式如何修改
我们在写前面 web样式的时候,会发现有些时候,我们怎么修改 style里面的值,页面上的样式都不会修改,当你用工具查看时,会发现里面会有 element.style的值,这个值还找不到是在哪里出现的 ...
- ThinkPHP 模型(Model)命名规范
一个小问题搞了好久:如果数据库的表名中有下划线,那么在用thinkphp做自动完成时注意Model类的命名要变成驼峰法,文件名和类名都要变.( 另外注意:只有使用create方法创建数据时才能调用到自 ...
- Know How And When To Use System.Message_Level To Control Messages In Oracle Forms
SYSTEM.MESSAGE_LEVEL is used to control the messages that end users see when they use the Oracle For ...
- Virtualenv: 一个Python环境管理工具(windown版本)
1.安装virtualenv 在安装virtualenv之前,我们需要安装至少有一个版本的python:因为virtualenv是python的一个第三方模块,必须基于python环境才能安装: 如果 ...
- 二维数组实现checkbox的分组多选
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <script language="j ...