LZ77算法基本过程http://jpkc.zust.edu.cn/2007/dmt/course/MMT03_05_2.htm

输入待字典编码的CU,

CopyCuFromPicYuv444(pcPic,m_pCuBuf, cuIdx,bEncOrg);

待编码的输入64*64,重排序后的YUV (*(m_matchFinderBase.stream)).data

void CDictEncoder::WriteStrMapResult(int len, int pos,const UChar * pCurBuf)

//写入编码的结果,32位数的iDst编码结果push_banck到m_pStrMapBufList,m_uCurrPackSize为list大小。

{

if (len == 1 && pos == (UInt)-1)//没有匹配的

{

if (numCoded>=3)

{

litFlag = (pCurBuf[0]-pCurBuf[-3])<0;

c = (UInt)ABS_DIFF(pCurBuf[0],pCurBuf[-3]);

}

else

c = (UInt)pCurBuf[0];

WriteBits(iDst,0,1,1);

WriteBits(iDst,litFlag,1,2);//因为排列顺序是YUVYUV,所以编的是与pCurBuf[-3]的差值,litFlag表示差值的正负

WriteBits(iDst,c,8,3);

}

else

{

WriteBits(iDst,1,1,1); //第1个bit占一位,指示有匹配,第2bit开始的9位表示匹配长度len,第11bit开始的22位表示偏移pos

WriteBits(iDst,len,9,2);

WriteBits(iDst,pos,22,11);

}

}

void CDictEncoder::DictCodeOneBlock()

{

for (;;)

{

len = GetOptimumFast(&pos);//返回最佳的匹配,len长度,pos偏移

pCurBuf = MatchFinder_GetPointerToCurrentPos(&m_matchFinderBase) - m_uAdditionalOffset;

//(m_matchFinderBase).buffer匹配的结束位置,即m_uAdditionalOffset=len,向前len为匹配的开始位置pCurBuf,len>8 时匹配串在pCurBuf-(pos-8)-1, pos<8时,在pCurBuf- m_uReps[pos]-1

WriteStrMapResult(len,pos,pCurBuf);

m_uAdditionalOffset -= len;

nowPos32 += len;

if ((m_uAdditionalOffset == 0) && (MatchFinder_GetNumAvailableBytes(&m_matchFinderBase) == 0))// AvailableBytes还待编的字符数,编完了则跳出

{

break;

}

}//for

}

字典的输入是pixels data in previously constructed CUs 和current LCU data

如果previously constructed CUs 是dictionary编码的,无需rollback

如果是HM编码的,则previous CUs需 rollback.

rollback的原因:用HM的constructed CU要作为下一个CU的字典输入,还需调用DictCompressCu(uiCUAddr,cuCnt-1,false,pcSlice); 再字典编码一次,不过与真正的字典编码不同,只执行编码的过程(哈希和匹配),而不写入结果。这样constructed CU 就生成了哈希表,可以作为了下一个CU的字典,方便查找。

if(dCostHM / dCostDictCoder > 1.0)

{

int i;

m_pTComDictEncoder->WriteCu2RecYuv444(pcCU,uiCUAddr);//选择字典编码,内部其实是把原CU写入到重构pic,因为重构和原CU一样

bLastCuRollBack = false;

pcCU->m_bCUCodedByDictCoderFlag = true;

for (i=0;igetTotalNumPart();i++)

{

pcCU->setPredictionMode(i,MODE_INTRA);

}

}

else

{

m_pTComDictEncoder->SetNeedRollBackVar(true);

bLastCuRollBack = true;

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

m_pTComDictEncoder->SetNeedRollBackVar(false);

}

void TComDictEnc::DictCompressCu(UInt cuIdx, UInt cuEndIdx, bool bEncOrg, TComSlice* pcSlice)

{

if (m_bNeedRollBack)

{

for(i = 0 ;i < m_pDictEncoder->m_uCurrPackSize;i++)//选择的是HM编码,所以把第一次CU原图字典编码写入的结果都弹出

{

m_pDictEncoder->m_pStrMapBufList.pop_back();

}

m_pDictEncoder->m_uCurrPackSize = 0;

}

...

CopyCuFromPicYuv444(pcPic,m_pCuBuf, cuIdx,bEncOrg);// 原CU编码时,复制的是原CU到m_pCuBuf,rollback时复制的是重构CU到m_pCuBuf

m_pDictEncoder->DictCodeOneBlock();

}

void CDictEncoder::DictCodeOneBlock()

{

len = GetOptimumFast(&pos);

if (!m_matchFinderBase.m_bEncOrg)//重构CU,rollback,只执行了编码过程,不写入结果

{

m_uAdditionalOffset -= len;

if ((m_uAdditionalOffset == 0) && (MatchFinder_GetNumAvailableBytes(&m_matchFinderBase) == 0))

{

m_bIsLastCuRollBack = 1;

break;

}

continue;

}

if (m_matchFinderBase.m_bEncOrg)//原CU,要写入结果

{

WriteStrMapResult(len,pos,pCurBuf);

}

}

void CDictEncoder::DictCodeOneBlock()

{

for (;;)

{

len = GetOptimumFast(&pos);//返回最佳的匹配,len长度,pos偏移

if (!m_matchFinderBase.m_bEncOrg)//重构CU,rollback,只执行了编码过程,不写入结果

{

m_uAdditionalOffset -= len;

if ((m_uAdditionalOffset == 0) && (MatchFinder_GetNumAvailableBytes(&m_matchFinderBase) == 0))

{

m_bIsLastCuRollBack = 1;

break;

}

continue;

}//if

if (m_matchFinderBase.m_bEncOrg)//原CU,要写入结果

{

pCurBuf = MatchFinder_GetPointerToCurrentPos(&m_matchFinderBase) - m_uAdditionalOffset;

//(m_matchFinderBase).buffer匹配的结束位置,即m_uAdditionalOffset=len,向前len为匹配的开始位置pCurBuf,len>8 时匹配串在pCurBuf-(pos-8)-1, pos<8时,在pCurBuf- m_uReps[pos]-1

WriteStrMapResult(len,pos,pCurBuf);

m_uAdditionalOffset -= len;

nowPos32 += len;

if ((m_uAdditionalOffset == 0) && (MatchFinder_GetNumAvailableBytes(&m_matchFinderBase) == 0))// AvailableBytes还待编的字符数,编完了则跳出

{

break;

}

}//if

}//for

}

参考:

JCTVC-K0133

JCTVC-I0272-r2444 Screen Content Coding using Dual-coder Mixed Chroma-sampling-rate (DMC) Techniques

HM80ECF444DualCoderSourceCode.zip

JAVA WEB 中的编码分析

JAVA WEB 中的编码分析 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-co ...

Java开发中的编码分析&lowbar;&lowbar;GET&amp&semi;POST

GET方式提交参数分析 code.jsp

JAVA中的编码分析

在实际编程中可以不用关注JVM中使用的是什么编码,而只需要关注自己输出需要采用的编码,JVM会根据你设置的编码正确操作. 1.String采用的是什么编码? 很多厂家根据规范实现了JVM,JVM只说明 ...

Python2 中字典实现的分析【翻译】

在这片文章中会介绍 Python2 中字典的实现,Hash 冲突的解决方法以及在 C 语言中 Python 字典的具体结构,并分析了数据插入和删除的过程.翻译自python-dictionary-im ...

HM中再增加一路自己的entropy coder

compressSlice 中一开始的entropy coder 设置: // set entropy coder if( m_pcCfg->getUseSBACRD() ) { m_pcSba ...

WebGIS中GeoHash编码的研究和扩展

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 1.1普通地理编码流程 将采集的POI入库后,数据库里保存有 ...

【JAVA编码专题】 JAVA字符编码系列三:Java应用中的编码问题

这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记录下来以便日后参考. 为了构成一个完整的对文字编码的认识和深入把握,以便处理在Java开发过程中遇到的各种问 ...

HM中CU,TU的划分

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

Java web中常见编码乱码问题(一)

最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

随机推荐

eclipse打开文件或者目录位置

1.点击Run-->External Tools-->External Tools Configurations... 右击program,点击new 2.填写名称,Location,Ar ...

radius服务器搭建

yum install -y unzip gcc-c++ cd /opt unzip release-stable.zip mv ToughRADIUS-release-stable toughrad ...

KafKa介绍(分布式架构)

介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以to ...

利用Python写入CSV文件的方法

第一种:CSV写入中文 #! /usr/bin/env python # _*_ coding:utf- _*_ import csv csvfile = file('test.csv', 'wb') ...

运行php网站需要安装什么

php的运行环境: 为了能够运行php,有以下两种方法: 1. 使用支持php和MySQL的web主机(): 2. 本机(自己电脑)安装web服务器,然后安装MySQL和php. web虚拟主机: 大 ...

批处理 安装、卸载 window service

注意:安装中调用了卸载的bat,安装之前先卸载...PS:可以删除 安装代码: @echo off set filename=LXServer.exe set servicename=Service1 ...

03&period;CSS选择器--&gt&semi;交集并集选择器

hm编码工具使用_HM中字典编码分析相关推荐

  1. python编码和解码_Python中的编码与解码(转)

    Python中的字符编码与解码困扰了我很久了,一直没有认真整理过,这次下静下心来整理了一下我对方面知识的理解. 文章中对有些知识没有做深入的探讨,一是我自己也没有去深入的了解,例如各种编码方案的实现方 ...

  2. mysql gbk编码 字节数,mysql中utf-8编码数据库转换成GBK编码的问题

    摘要 腾兴网为您分享:mysql中utf-8编码数据库转换成GBK编码的问题,之了课堂,易信,一折包邮,星球联盟等软件知识,以及七日杀,草莓软件,装修施工站,桔子会,桌面切换,看小说神器,酷派应用商店 ...

  3. hm编码工具使用_HM集团旗下最高端品牌ARKET将进驻中国,带你看看真正的“北欧风”...

    HM集团旗下最高端的品牌ARKET近日开通了微博,并宣布将在秋季进驻天猫. 听到这个消息,钟爱ARKET且一直私心将它当成小众品牌好好藏着的人可能会欢呼--终于不用等待漫长的海购了!但也有相当一部分朋 ...

  4. hm编码工具使用_H.265视频编码与技术全析(下)

    H.265视频编码与技术全析(下) 四.帧内预测模式 共35个(h264有9个),包括Planar,DC,33个方向模式: 除了Intra_Angular预测外,HEVC还和H.264/MPEG-4 ...

  5. python声明编码作用_Python源代码中的编码声明字符串的作用

    原来以为Python编源代码头部的#encoding: utf8的字符串对于python的实际编码解析是没有影响的. 但是今天发现一个很好玩的问题.Mark一下. 当python的代码中存在类似u'中 ...

  6. python 编码声明位置,python中的编码声明

    python中的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 #!/usr/bin/python 相当于写死了 python 路径(是告诉OS执行这个py时,调 ...

  7. java中base64编码加密和android中base64编码加密不一样?base64编码解析错误?

    在android的base64加密后得到: WwogIHsKICAgICJ0MSI6ICIwIiwKICAgICJ0MiI6ICIyNDM4NCIsCiAgICAidDMiOiAiIiwKICAgIC ...

  8. java chunked编码解码_HTTP1.1中CHUNKED编码方式传输数据的解析

    "隐网项目"的图片下载模块需要与HTTP Response报文打交道,由于使用的是C++,没有java中十分好用的httpclient,所以打算自己实现.之前考虑的比较简单,假设请 ...

  9. 【LDPC编码】CDR系统中LDPC编码,LDPC编码的码长为9216

    1.软件版本 matlab2013b 2.系统描述 在广播通信系统中,消息发送的速度和性能是一对矛盾,当发送速度快,则必然会降低消息的可靠性,当要求系统的性能,则必然会降低发送码率.为了提高系统的性能 ...

最新文章

  1. vivo7.0系统机器(亲测有效)激活Xposed框架的教程
  2. 自动驾驶系统为何要打上「思想钢印」?北京顺义闹市区里藏着毫末智行的谜底...
  3. 3D模型在网页上显示
  4. 3.5 将 Batch 拟合进神经网络-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. python3 open()内置函数
  6. 向量 矩阵 张量_张量,矩阵和向量有什么区别?
  7. C#抓取网页HTML内容
  8. 实习生对企业的认识_如何成为您认识的超级明星实习生
  9. 转: Linux下单网卡多vlan多虚拟机
  10. python画环形图_用Python把图做的好看点:用Matplotlib画个环形图
  11. MOD - Power Modulo Inverted(SPOJ3105) + Clever Y(POJ3243) + Hard Equation (Gym 101853G ) + EXBSGS
  12. 人工智能运行环境linux,Intel OpenVINO 人工智能推论环境搭建 (Linux) 第一章
  13. win11不显示缩略图怎么办 windows11不显示缩略图的解决方法
  14. html 自定义标签 ios,iOS标签 | 菜鸟教程
  15. linux服务器运行dyna,dynamips分布式实现详解
  16. MYSQLg高级------聚簇索引和非聚簇索引
  17. android studio如何多moudle依赖同一个gradle配置
  18. jack server无法启动
  19. C++基础课-郑莉 1-4章
  20. 狼人杀超详入门攻略2之狼人战术

热门文章

  1. Ubuntu安装hp打印机
  2. 入选数据库顶会 VLDB:如何有效降低产品级内存数据库快照尾延迟?
  3. iGrimace iOS7-Ios8-ios一键新机 系统 NZT NEO 非V8锤子IG基本操作全教程:v3 v8
  4. Imatest图像处理软件 Imatest Master
  5. 32位程序和64位程序
  6. 随机森林算法(RandomForest)实现MNIST手写体数字识别
  7. 云痕大数据 家长登录_1 云痕家长操作手册
  8. nodejs mysql更新redis_node中的redis使用--ioredis
  9. Android 集成友盟推送方案(1)
  10. 调焦后焦实现不同距离成像_一次性学全佳能尼康的对焦模式、对焦区域模式等对焦知识!(上)...