源码分析系列(二)x264_cavlc_dataflow

http://www.cnblogs.com/xkfz007/articles/2616156.html

CAVLC编码部分的关键函数

2.1 x264_macroblock_write_cavlc(x264_t *h, bs_t *s)

功能

判断宏块类型,对宏块进行CAVLC编码。

输入项目

x264_t *h:指向x264_t类型的结构体的指针变量。

输出项目

bs_t *s: 指向bs_s类型结构体的指针变量。

流程图

如附图6所示:

附图6: x264_macroblock_write_cavlc流程图

2.2 block_residual_write_cavlc(x264_t *h,bs_t *s,int i_idx,int *l, int i_count)

功能

对得到的残差数据进行cavlc编码

输入项目

x264_t *h: 指向x264_t类型的结构体变量的指针变量

int i_idx:索引

int *l: l为指针变量,它指向长度为4x4的数组的首地址

int i_count:编码后的码流长度

输出项目

Bs_t *s: 指向bs_s类型的结构体变量的指针变量

流程图

如附图7所示:

附图7: block_residual_write_cavlc流程图

2.3 bs_write( bs_t *s, int i_count, uint32_t i_bits )

功能

将i_bits逐位写入码流,码流长度为i_count。

输入项目

int i_count:编码后的码流长度;

uint32_t i_bits:待编码的数。

输出项目

bs_t *s:bs_s类型的结构体变量;

bs_t *s : bs_s类型的结构体变量;

typedef struct bs_s

{

uint8_t *p_start;

uint8_t *p;

uint8_t *p_end;

int i_left;

} bs_t;

p_start:码流的开始地址;

p:当前码流的地址;

p_end:码流的结束地址;

i_left:存储单元中空闲的比特数。

流程图

如附图8所示:

附图8: bs_write流程图

2.4 bs_write_vlc( bs_t *s, vlc_t v )

功能

将i_bits逐位写入码流,该码流长度为I_size。

输入项目

vlc_t v : vlc_t类型的结构体变量。

typedef struct

{

int i_bits;

int i_size;

} vlc_t;

I_bits:待编码的数;

I_size:编码后的长度。

输出项目

bs_t *s : bs_s类型的结构体变量

2.5 bs_write_ue( bs_t *s, unsigned int val )

功能

进行无符号指数哥伦布编码。

输入项目

val:待编码的无符号数。

输出项目

bs_t *s:bs_s类型的结构体变量。

流程图

如附图9所示:

附图9: bs_write_ue流程图

2.6 bs_write_se( bs_t *s, int val )

功能

进行有符号指数哥伦布编码。

输入项目

val:待编码的有符号数。

输出项目

bs_t *s:bs_s类型的结构体变量。

分类: X264

时间: 2024-08-08 04:17:13

源码分析系列(二)x264_cavlc_dataflow的相关文章

Cordova Android源码分析系列二(CordovaWebView相关类分析)

本篇文章是Cordova Android源码分析系列文章的第二篇,主要分析CordovaWebView和CordovaWebViewClient类,通过分析代码可以知道Web网页加载的过程,错误出来,多线程处理等. CordovaWebView类分析 CordovaWebView类继承了Android WebView类,这是一个很自然的实现,共1000多行代码.包含了PluginManager pluginManager,BroadcastReceiver receiver,CordovaInt

Redis java客户端 jedis 源码分析系列二:单实例 jedis

在使用Jedis的过程中最简单的用法就是单实例单连接的jedis,如下代码所示: public void testJedis(){ Jedis jedis = new Jedis("127.0.0.1"); jedis.set("key", "value"); jedis.get("key"); jedis.close(); } 让我们深入到内部去看一看其结构,如下图所示: 此处请先忽略 JedisPool 类和 Pool&l

jQuery源码分析系列(36) : Ajax - 类型转化器

什么是类型转化器? jQuery支持不同格式的数据返回形式,比如dataType为 xml, json,jsonp,script, or html 但是浏览器的XMLHttpRequest对象对数据的响应只有 responseText与responseXML 二种 所以现在我要定义dataType为jsonp,那么所得的最终数据是一个json的键值对,所以jQuery内部就会默认帮你完成这个转化工作 jQuery为了处理这种执行后数据的转化,就引入了类型转化器,如果没有指定类型就依据响应头Con

jquery2源码分析系列目录

学习jquery的源码对于提高前端的能力很有帮助,下面的系列是我在网上看到的对jquery2的源码的分析.等有时间了好好研究下.我们知道jquery2开始就不支持IE6-8了,从jquery2的源码中可以学到很多w3c新的标准( 如html5,css3,ECMAScript).原文地址是:http://www.cnblogs.com/aaronjs/p/3279314.html 关于1.x.x版的jquery源码分析系列,本博客也转载了一个地址http://www.cnblogs.com/jav

jQuery-1.9.1源码分析系列完毕目录整理

jQuery 1.9.1源码分析已经完毕.目录如下 jQuery-1.9.1源码分析系列(一)整体架构 jQuery-1.9.1源码分析系列(一)整体架构续 jQuery-1.9.1源码分析系列(二)jQuery选择器 jQuery-1.9.1源码分析系列(二)jQuery选择器续1 jQuery-1.9.1源码分析系列(二)jQuery选择器续2——筛选 jQuery-1.9.1源码分析系列(三) Sizzle选择器引擎——词法解析 jQuery-1.9.1源码分析系列(三) Sizzle选择

Dubbo源码分析系列-服务的发布

RPC简化类图 RPC模块核心接口和抽象实现 默认实现Dubbo协议的接口和抽象实现 服务发布过程 调用过程 上图是服务提供者暴露服务的主过程: 首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloWorldImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到Invoker的转化.接下来就是Invoker转换到Exporter的过程. Dubbo处理服务暴露的关键

jQuery源码分析系列(35) : Ajax - jsonp的实现与原理

ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本 json核心就是:允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了. jquery ext dojo这类库的实现手段其实大同小异 在同源策略下,在某个服务器下的页面是无法获取到该服务器以外的数据的,但img.iframe.s

[转]jQuery源码分析系列

文章转自:jQuery源码分析系列-Aaron 版本截止到2013.8.24 jQuery官方发布最新的的2.0.3为准 附上每一章的源码注释分析 :https://github.com/JsAaron/jQuery 正在编写的书 - jQuery架构设计与实现 本人在慕课网的教程(完结) jQuery源码解析(架构与依赖模块) 64课时 jQuery源码解析(DOM与核心模块)64课时 jQuery源码分析目录(完结) jQuery源码分析系列(01) : 整体架构 jQuery源码分析系列(

Spark 源码分析系列

如下,是 spark 源码分析系列的一些文章汇总,持续更新中...... Spark RPC spark 源码分析之五--Spark RPC剖析之创建NettyRpcEnv spark 源码分析之六--Spark RPC剖析之Dispatcher和Inbox.Outbox剖析 spark 源码分析之七--Spark RPC剖析之RpcEndPoint和RpcEndPointRef剖析 spark 源码分析之八--Spark RPC剖析之TransportContext和TransportClie

SpringMVC源码分析系列

说到java的mvc框架,struts2和springmvc想必大家都知道,struts2的设计基本上完全脱离了Servlet容器,而springmvc是依托着Servlet容器元素来设计的,同时springmvc基于Spring框架,Spring框架想必搞java的同学都很熟悉. 一进Spring的官网就发现了这样一排醒目的文字, spring可以让我们构造简单的.便携的.又快又易于扩展的基于jvm的系统和应用程序. 没错,基于Spring的MVC框架SpringMVC同样也可以构造具有这些特