注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

面包会有的

...

 
 
 

日志

 
 

bs_t结构及其相关函数  

2011-09-08 13:13:56|  分类: H264 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

此部分内容对应H.264标准9.1节及[2]中6.4.13小节

bs_t结构描述了比特流的概念 , 从比特流中进行顺序读写操作(相似于前向迭代器)

typedef struct bs_s

{

uint8_t *p_start; // 缓冲区首地址

uint8_t *p; // 缓冲区当前的读写指针

uint8_t *p_end; // 缓冲区尾地址

int i_left; // p所指字节当前还有多少比特可读写

int i_bits_encoded;

} bs_t;

void bs_init( bs_t *s void *p_data int i_data )

使用p_data指向的i_data个字节作为缓冲区初始化比特流s

 

int bs_pos( bs_t *s )

返回比特流s当前读写的位置(以比特为单位) , 相似于ftell的功能,

int bs_eof( bs_t *s )

当前是否已经位于比特流s的尾部 , 假如是 , 返回1;否则返回0

static uint32_t bs_read( bs_t *s int i_count )

从比特流s中读出i_count个比特的值并返回

static uint32_t bs_read1( bs_t *s )

从比特流s中读出1个比特并返回之

static uint32_t bs_show( bs_t *s int i_count )

从比特流中读出i_count个比特的值并返回 , 但是不移动读写指针

此处实现好像存在潜在的错误 , 即假如p1时 , 按照ue映射方式写入;其他情况下不执行任何操作 。

 

static void bs_rbsp_trailing( bs_t *s )

无论比特流当前位置是否字节对齐 , 都向其中写入一个比特1及若干个(0~7个)比特0 , 使其字节对齐

static int bs_size_ue( unsigned int val )

返回以ue方式对val进行Exp-goloma编码所需要的比特数 。

static int bs_size_se( int val )

返回以se方式对val进行Exp-goloma编码所需要的比特数 。

static int bs_size_te( int x int val )

返回以te方式对val进行Exp-goloma编码所需要的比特数 。 当x=1时 ,返回1;当x>1时 , 按照ue映射方式计算并返回;其他情况下返回0 。

 

#define bs_write(s,n,v)    ((s)->i_bits_encoded += (n))

void x264_sps_write( bs_t *s, x264_sps_t *sps )
{
   bs_write( s, 8, sps->i_profile_idc );


}

s是个bs_t指针,bs_write( s, 8, sps->i_profile_idc )只是更新了一下bs_t结构体的i_bits_encoded字段值。

 


 

  评论这张
 
阅读(906)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017