store_coding_state (cs_cm)的作用

//++ 以下是对当前宏块进行编码(这里的编码主要目的是为了计算按当前组合方式编码
//++ 生成码流的大小,因此编码前要保存当前编码状态,编码完成后必须恢复现场)
//=====   S T O R E   C O D I N G   S T A T E   =====
//---------------------------------------------------
store_coding_state (cs_cm); //++ 保存当前编码状态

经常会看到store_coding_state所以有的时候很不明白到底为什么要保存当前编码状态。

今天看到firstime老大的注释,我也些许明白了点。因为在编码前要保存当前编码状态,这样编码完成后才能恢复现场。

看下代码吧

* /brief
*    store coding state (for rd-optimized mode decision)

void
store_coding_state (CSptr cs)
{
int i;

EncodingEnvironment *ee_src, *ee_dest;
Bitstream            *bs_src, *bs_dest;

MotionInfoContexts   *mc_src = img->currentSlice->mot_ctx;
TextureInfoContexts *tc_src = img->currentSlice->tex_ctx;
MotionInfoContexts   *mc_dest = cs->mot_ctx;
TextureInfoContexts *tc_dest = cs->tex_ctx;
Macroblock           *currMB = &(img->mb_data [img->current_mb_nr]);


if (!input->rdopt) return;//如果不是RDO,则返回

if (cs->symbol_mode==CABAC)
{
//=== important variables of data partition array ===重要的数据内容数组的一些变量
//only one partition for IDR img对于IDR图像只有一个分区
for (i = 0; i <(img->currentPicture->idr_flag? 1:cs->no_part); i++)//如果是IDR则只执行一次,其他的执行no_part次
{
    ee_src = &(img->currentSlice->partArr[i].ee_cabac);
    bs_src =   img->currentSlice->partArr[i].bitstream;
    ee_dest = &(cs->encenv   [i]);
    bs_dest = &(cs->bitstream[i]);

    memcpy (ee_dest, ee_src, sizeof(EncodingEnvironment));
    memcpy (bs_dest, bs_src, sizeof(Bitstream));
}

//=== contexts for binary arithmetic coding ===储存算术编码的上下文
    memcpy (mc_dest, mc_src, sizeof(MotionInfoContexts));
    memcpy (tc_dest, tc_src, sizeof(TextureInfoContexts));

}
else
{
    //=== important variables of data partition array ===在数据块重要的变量
for (i = 0; i <(img->currentPicture->idr_flag? 1:cs->no_part); i++)
{   
    bs_src =   img->currentSlice->partArr[i].bitstream;  
    bs_dest = &(cs->bitstream[i]);
      memcpy (bs_dest, bs_src, sizeof(Bitstream));
    }
}
//=== syntax element number and bitcounters ===语法元素的成员和位数
cs->currSEnr = currMB->currSEnr;
memcpy (cs->bitcounter, currMB->bitcounter, MAX_BITCOUNTER_MB*sizeof(int));

//=== elements of current macroblock ===储存元素和现在的宏块
memcpy (cs->mvd, currMB->mvd, 2*2*BLOCK_MULTIPLE*BLOCK_MULTIPLE*sizeof(int));
cs->cbp_bits = currMB->cbp_bits;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455891.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第十五届北京师范大学程序设计竞赛决赛(网络同步赛) B lca水 D 思维,找规律...

第十五届北京师范大学程序设计竞赛决赛&#xff08;网络同步赛&#xff09; B. Borrow Classroom 题意&#xff1a;一棵树&#xff0c;点 1为根&#xff0c;一个人从点 b到 点 c再到点 1&#xff0c;第二个人从点 a出发&#xff0c;问第二个人能否截住第一个人。 tags&#xff…

macbook所有型号大全_苹果笔记本型号大全

很多朋友在选购苹果笔记本也就是MacBook的时候都会考虑究竟买哪一个系列会比较好&#xff0c;下面就为大家介绍一下苹果笔记本型号大全都有什么&#xff0c;希望以下的介绍能够帮助到您。苹果笔记本型号大全目前苹果笔记本有以下的几个主要的型号&#xff1a;1、MacBook Air是目…

【Python基础入门系列】第06天:Python 模块和包

在计算机程序的开发过程中&#xff0c;随着程序代码越写越多&#xff0c;在一个文件里代码就会越来越长&#xff0c;越来越不容易维护。 为了编写可维护的代码&#xff0c;我们把很多函数分组&#xff0c;分别放到不同的文件里&#xff0c;这样&#xff0c;每个文件包含的代码…

Css中的选择器

Css选择器 CSS代码用来修饰 HTML元素. 要用CSS代码设置样式, 首先要选中HTML元素. 用来选中 元素的 代码称为 选择器, 或 选择符. html元素是指, 标签与标签包裹内容的整体. 常用的选择器有如下几种&#xff1a; 1、标签选择器 标签选择器&#xff0c;此种选择器影响范围大…

福州联通与市政府携手 共筑新型智慧城市

“福州联通今年将投入专项资金&#xff0c;在福州市区建设NB-IoT网络&#xff0c;包括2000个载扇部署&#xff0c;建设一张覆盖完备、性能领先的窄带物联网。”据介绍&#xff0c;去年9月&#xff0c;福州联通与福州市政府正式签署《共同推进窄带物联网&#xff08;NB-IoT&…

流媒体技术的国内外动态

1、大规模流媒体应用中关键技术的研究 支持大规模用户在线使用的流媒体应用是Internet中极富潜力的一项“重磅级用”,但由于Internet缺乏服务质量(QoS)与相应的安全保障,并且网络和终端系统又存在着较大的异构性,这使得在Internet上构建支持大规模用户的在线流媒体应用面临很多…

空间直线与平面的交点

这内容属于计算几何&#xff0c;在 3D游戏开发编程基础 或者在游戏开发中的数学和物理算法 这种资料上也可以找到相关的内容和代码。或者更广泛点称为是计算机图形学&#xff0c; 接下来我们进入正题&#xff0c;如果直线不与平面平行&#xff0c;将存在交点。如下图所示&#…

iphone导出视频 无法连接到设备_拷贝iphone照片,显示无法连接设备?TRIZ 3秒钟解决...

手机存储满了&#xff0c;想把手机里面的照片和视频拷贝出来。 又不想交给苹果cloud的“苹果税”。USB手动连上IPHONE&#xff0c;结果每次复制了几百兆&#xff0c;就会弹出“无法连接设备”&#xff0c;导致拷贝失败。并且每次重新连接之后&#xff0c;删掉的照片又出现在手机…

【Python基础入门系列】第07天:Python 数据结构--序列

python内置序列类型最常见的是列表&#xff0c;元组和字符串。&#xff08;序列是python中最基础的数据结构&#xff0c;而数据结构是计算机存储&#xff0c;组织数据的方式。&#xff09; 另外还提供了字典和集合的数据结构&#xff0c;但他们属于无顺序的数据集合体&#xf…

Css颜色和文本字体

Css颜色,文本字体 css颜色表示法 颜色名表示&#xff0c;比如&#xff1a;red 红色&#xff0c;gold 金色16进制数值表示&#xff0c;比如&#xff1a;#ff0000 表示红色&#xff0c;这种可以简写成 #f00RGB颜色: 红(R)、绿(G)、蓝(B)三个颜色通道的变化 background-color: r…

springBoot(20):使用Spring Session实现集群-redis

一、session集群的解决方案1.1、扩展指定server利用Servlet容器提供的插件功能&#xff0c;自定义HttpSession的创建和管理策略&#xff0c;并通过配置的方式替换掉默认的策略。缺点&#xff1a;耦合Tomcat/Jetty等Servlet容器&#xff0c;不能随意更换容器。1.2、利用Filter利…

docker desktop ubuntu镜像_原创 | Docker入门,看了不理解,假一赔命

写在前面这篇博客适合谁&#xff1f;对于Docker并不了解&#xff0c;只是有一点模糊的感觉&#xff0c;觉得Docker可以当成虚拟机用之类的只是下载了Docker软件&#xff0c;对于怎么配置&#xff0c;怎么玩&#xff0c;第一步干什么&#xff0c;完全一无所知其二&#xff0c;我…

Windows - Windows下安装MSI程序遇到2503和2502错误

三个步骤可以解决这个问题&#xff1a; 1&#xff09; 以管理员身份开启命令行模式并键入msiexec /package <msi文件路径> 2&#xff09; 修改组策略 计算机配置 ->> 管理模板 ->> Windows组件 ->> Windows Installer ->> 始终以提升的权限进行安…

如何确定h.264的码率

A:如何确定h.264的码率&#xff1f; 码率 编码产生的总比特数 * 帧频 / 编码总帧数码率控制机制就是使编码器编码产生的码流尽量符合你设定的码率。从上面的公式可以看出&#xff0c;当编码帧数和帧频确定后&#xff0c;码率控制要做的就是控制编码产生的比特数。 A:我现在想…

【Python基础入门系列】第08天:Python List

Python内置的一种数据类型是列表&#xff1a;list。list是一种有序的集合&#xff0c;可以随时添加和删除其中的元素。 LIST 列表 比如&#xff0c;列出班里所有同学的名字&#xff0c;就可以用一个list表示&#xff1a; >>> classmates [liuwang, xuezhang, al…

金属磁记忆传感器封装

金属磁记忆传感器封装 摘 要 通过分析压力传感器和FBG传感器的结构,针对金属磁记忆传感器自身特点,结合井下作业要求,提出了金属磁记忆传感器的封装设计原则;根据该原则,设计出了一种金属磁记忆传感器的封装结构,并对其进行了有限元模拟分析;对封装后的金属磁记忆传感器实物进…

【Python基础入门系列】第09天:Python tuple

Python 中的数据结构是通过某种方式组织在一起的数据元素的集合&#xff0c;这些数据元素可以是数字、字符、甚至可以是其他数据结构 在 Python 中&#xff0c;最基本的数据结构是序列&#xff08;在前面文章我们也说过序列&#xff09;&#xff0c;序列中的每个元素都有一个序…

黑客攻防:关于工业网络安全的那些事

1、概述 随着工业信息化的快速发展以及工业4.0时代的到来&#xff0c;工业化与信息化的融合趋势越来越明显&#xff0c;工业控制系统也在利用最新的计算机网络技术来提高系统间的集成、互联以及信息化管理水平。未来为了提高生产效率和效益&#xff0c;工控网络会越来越开放&am…

elementui table某一列是否显示_Vue项目引进ElementUI组件的方法

环境要求NodejsNodejs官网下载地址&#xff1a;http://nodejs.cn/download/具体安装参考其他资料打开cmd命令行&#xff0c;输入npm -v&#xff0c;如果出现如下图的显示&#xff0c;说明已经安装正确。如果安装版本比较老&#xff0c;想升级新版本npm install npm -g安装 webp…

Entry

Entry&#xff08;单行输入框&#xff09;用于获取用户输入的文本。 Entry组件仅允许输入一行文本&#xff0c;如果输入过长&#xff0c;那么内容将被滚动&#xff0c;意味着字符串不能被全部看到。 1 from tkinter import *2 3 master Tk()4 5 e Entry(master)6 e.pack(padx…