云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > h264转avi,编译通过源码

h264转avi,编译通过源码

  • 62 次阅读
  • 3 次下载
  • 2025/5/28 6:02:58

#ifdef _BS_H

#warning FIXME Multiple inclusion of bs.h #else

#define _BS_H

typedef struct bs_s bs_t; struct bs_s {

uint8_t *p_start; uint8_t *p;

uint8_t *p_end;

int i_left; /* i_count number of available bits */ int i_bits_encoded; /* RD only */ };

static void bs_init( bs_t *s, void *p_data, int i_data ) {

s->p_start = p_data; s->p = p_data;

s->p_end = s->p + i_data; s->i_left = 8; }

static int bs_pos( bs_t *s ) {

return( 8 * ( s->p - s->p_start ) + 8 - s->i_left ); }

static int bs_eof( bs_t *s ) {

return( s->p >= s->p_end ? 1: 0 ); }

static uint32_t bs_read( bs_t *s, int i_count ) {

static uint32_t i_mask[33] ={0x00,

0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, 0x1ff, 0x3ff, 0x7ff, 0xfff, 0x1fff, 0x3fff, 0x7fff, 0xffff, 0x1ffff, 0x3ffff, 0x7ffff, 0xfffff, 0x1fffff, 0x3fffff, 0x7fffff, 0xffffff, 0x1ffffff, 0x3ffffff, 0x7ffffff, 0xfffffff, 0x1fffffff,0x3fffffff,0x7fffffff,0xffffffff};

int i_shr;

uint32_t i_result = 0;

while( i_count > 0 ) {

if( s->p >= s->p_end ) {

break; }

if( ( i_shr = s->i_left - i_count ) >= 0 ) {

/* more in the buffer than requested */

i_result |= ( *s->p >> i_shr )&i_mask[i_count]; s->i_left -= i_count; if( s->i_left == 0 ) {

s->p++; s->i_left = 8; }

return( i_result ); } else {

/* less in the buffer than requested */

i_result |= (*s->p&i_mask[s->i_left]) << -i_shr; i_count -= s->i_left; s->p++;

s->i_left = 8; } }

return( i_result ); }

static uint32_t bs_read1( bs_t *s ) {

if( s->p < s->p_end ) {

unsigned int i_result;

s->i_left--;

i_result = ( *s->p >> s->i_left )&0x01;

if( s->i_left == 0 ) {

s->p++; s->i_left = 8; }

return i_result; }

return 0; }

static uint32_t bs_show( bs_t *s, int i_count ) {

if( s->p < s->p_end && i_count > 0 ) {

uint32_t i_cache = ((s->p[0] << 24)+(s->p[1] << 16)+(s->p[2] << 8)+s->p[3]) << (8-s->i_left);

return( i_cache >> ( 32 - i_count) ); }

return 0; }

/* TODO optimize */

static void bs_skip( bs_t *s, int i_count ) {

s->i_left -= i_count;

while( s->i_left <= 0 ) {

s->p++;

s->i_left += 8; } }

static int bs_read_ue( bs_t *s ) {

int i = 0;

while( bs_read1( s ) == 0 && s->p < s->p_end && i < 32 ) {

i++; }

return( ( 1 << i) - 1 + bs_read( s, i ) ); }

static int bs_read_se( bs_t *s ) {

int val = bs_read_ue( s );

return val&0x01 ? (val+1)/2 : -(val/2); }

static int bs_read_te( bs_t *s, int x ) {

if( x == 1 ) {

return 1 - bs_read1( s ); }

else if( x > 1 ) {

return bs_read_ue( s ); }

return 0; }

static void bs_write( bs_t *s, int i_count, uint32_t i_bits ) {

if( s->p >= s->p_end - 4 ) return;

while( i_count > 0 ) {

if( i_count < 32 )

i_bits &= (1<i_left ) {

*s->p = (*s->p << i_count) | i_bits; s->i_left -= i_count; break; } else {

*s->p = (*s->p << s->i_left) | (i_bits >> (i_count - s->i_left)); i_count -= s->i_left; s->p++; s->i_left = 8; } } }

搜索更多关于: h264转avi,编译通过源码 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

#ifdef _BS_H #warning FIXME Multiple inclusion of bs.h #else #define _BS_H typedef struct bs_s bs_t; struct bs_s { uint8_t *p_start; uint8_t *p; uint8_t *p_end; int i_left; /* i_count number of available bits */ int i_bits_encoded; /* RD only */ }; static void bs_init( bs_t *s, void *p_data, int i_data )

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com