- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CAVLC编码部分的关键函数
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类型的结构体变量。
文档评论(0)