http://write.blog.csdn.net/postedit/7852406

http://write.blog.csdn.net/postedit/7852406

``` UINT Ue(BYTE *pBuff, UINT nLen, UINT &nStartBit)
{
//计算0bit的个数
UINT nZeroNum = ;
)
{
] & ())) //&:按位与，%取余
{
break;
}
nZeroNum++;
nStartBit++;
}
nStartBit ++;

//计算结果
DWORD dwRet = ;
; i<nZeroNum; i++)
{
dwRet <<= ;
] & ()))
{
dwRet += ;
}
nStartBit++;
}
<< nZeroNum) -  + dwRet;
}

int Se(BYTE *pBuff, UINT nLen, UINT &nStartBit)
{

int UeVal=Ue(pBuff,nLen,nStartBit);
double k=UeVal;
);//ceil函数：ceil函数的作用是求不小于给定实数的最小整数。ceil(2)=ceil(1.2)=cei(1.5)=2.00
==)
nValue=-nValue;
return nValue;

}

DWORD u(UINT BitCount,BYTE * buf,UINT &nStartBit)
{
DWORD dwRet = ;
; i<BitCount; i++)
{
dwRet <<= ;
] & ()))
{
dwRet += ;
}
nStartBit++;
}
return dwRet;
}

bool h264_decode_seq_parameter_set(BYTE * buf,UINT nLen,int &Width,int &Height)
{
UINT StartBit=;
,buf,StartBit);
,buf,StartBit);
,buf,StartBit);
)
{
,buf,StartBit);
,buf,StartBit);//(buf[1] & 0x80)>>7;
,buf,StartBit);//(buf[1] & 0x40)>>6;
,buf,StartBit);//(buf[1] & 0x20)>>5;
,buf,StartBit);//(buf[1] & 0x10)>>4;
,buf,StartBit);
,buf,StartBit);

int seq_parameter_set_id=Ue(buf,nLen,StartBit);

|| profile_idc ==  ||
profile_idc ==  || profile_idc ==  )
{
int chroma_format_idc=Ue(buf,nLen,StartBit);
)
,buf,StartBit);
int bit_depth_luma_minus8=Ue(buf,nLen,StartBit);
int bit_depth_chroma_minus8=Ue(buf,nLen,StartBit);
,buf,StartBit);
,buf,StartBit);

];
if( seq_scaling_matrix_present_flag )
{
; i < ; i++ ) {
seq_scaling_list_present_flag[i]=u(,buf,StartBit);
}
}
}
int log2_max_frame_num_minus4=Ue(buf,nLen,StartBit);
int pic_order_cnt_type=Ue(buf,nLen,StartBit);
)
int log2_max_pic_order_cnt_lsb_minus4=Ue(buf,nLen,StartBit);
)
{
,buf,StartBit);
int offset_for_non_ref_pic=Se(buf,nLen,StartBit);
int offset_for_top_to_bottom_field=Se(buf,nLen,StartBit);
int num_ref_frames_in_pic_order_cnt_cycle=Ue(buf,nLen,StartBit);

int *offset_for_ref_frame=new int[num_ref_frames_in_pic_order_cnt_cycle];
; i < num_ref_frames_in_pic_order_cnt_cycle; i++ )
offset_for_ref_frame[i]=Se(buf,nLen,StartBit);
delete [] offset_for_ref_frame;
}
int num_ref_frames=Ue(buf,nLen,StartBit);
,buf,StartBit);
int pic_width_in_mbs_minus1=Ue(buf,nLen,StartBit);
int pic_height_in_map_units_minus1=Ue(buf,nLen,StartBit);

Width=(pic_width_in_mbs_minus1+)*;
Height=(pic_height_in_map_units_minus1+)*;

return true;
}
else
return false;
}

void CCommDlg::OnOK()
{
CString  str;
//数据必须把H264的头0x000001去掉
BYTE bytes[]={0x67,0x64,0x08,0x1F,0xAC,0x34,0xC1,0x08,0x28,0x0F,0x64};
UINT startbit=;
int Width,Height;
,Width,Height))
{
str.Format("%d-%d",Width,Height);

AfxMessageBox(str);
}
}```

## 从H264码流中获取视频宽高 (SPS帧)的更多相关文章

1. 从H264码流中获取视频宽高 (SPS帧) 升级篇

之前写过 <从H264码流中获取视频宽高 (SPS帧)> . 但发现很多局限性,而且有时解出来是错误的. 所以重新去研究了. 用了 官方提供的代码库来解析. 花了点时间,从代码库里单独把解 ...

2. H264码流中SPS PPS详解&lt;转&gt;

转载地址:https://zhuanlan.zhihu.com/p/27896239 1 SPS和PPS从何处而来? 2 SPS和PPS中的每个参数起什么作用? 3 如何解析SDP中包含的H.264的 ...

3. Activity启动过程中获取组件宽高的五种方式

第一种:(重写Activity的onWindowFocusChanged方法) /** * 重写Acitivty的onWindowFocusChanged方法 */ @Override public ...

4. H.264从SPS中提取视频宽高

H.264有两种封装模式: (1)annexb模式:传统模式,使用start code来分隔NAL, SPS和PPS是在ES流的头部: (2)mp4模式:没有start code,使用NALU长度(固 ...

5. android onCreate中获取view宽高为0的解决方法

view.post(runnable) 通过post可以将一个runnable投递到消息队列的尾部,然后等待UI线程Looper调用此runnable的时候,view也已经初始化好了. view.po ...

6. Activity正确获取View宽高

在View的measure完成后,一般可以通过getMeasureWidth/getMeasureWidth方法可以正确的获取View的宽高,而在特殊情况下,可能需要多次measure才能确定最终的测 ...

7. H264码流打包分析

转自:http://www.360doc.com/content/13/0124/08/9008018_262076786.shtml   SODB 数据比特串-->最原始的编码数据 RBSP ...

8. H264码流打包分析(精华)

H264码流打包分析 SODB 数据比特串-->最原始的编码数据 RBSP 原始字节序列载荷-->在SODB的后面填加了结尾比特(RBSP trailing bits 一个bit“1”)若 ...

9. H264码流解析及NALU

ffmpeg 从mp4上提取H264的nalu http://blog.csdn.net/gavinr/article/details/7183499 639     /* bitstream fil ...

## 随机推荐

1. iOS 自定义UITableViewCell

#import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplicationDelegate> @pr ...

作者在Windows XP SP3 32位下亲测通过,理论上Win7也没问题. 1. 如果系统中安装有Python,请先把Python卸载. 2. 下载安装Python(x,y) 2.7.5.0, 下 ...

3. Fastjson简单使用方法

一.简单数据的序列化 pubic class UserInfo implements Serializable{ private String name; private int age; publi ...

4. 洛谷 P3927 Factorial

题目描述 SOL君很喜欢阶乘.而SOL菌很喜欢研究进制. 这一天,SOL君跟SOL菌炫技,随口算出了n的阶乘. SOL菌表示不服,立刻就要算这个数在k进制表示下末尾0的个数. 但是SOL菌太菜了于是请 ...

5. Eclipse Maven构建WebApp项目资源目录显示不全的原因与解决方式

一.问题展示 1.Eclipse在使用Maven构建WebApp项目的时候,首先Maven的安装和配置都没有问题的,但是构建项目之后,Maven项目要求的几个必须要有的资源目录显示不了: 问题如下图: ...

6. [Error]Python虚拟环境报错 OSError: setuptools pip wheel failed with error code 2

mkvirtualenv py35 python新建虚拟环境报错,setuptools pip wheel failed with error code 2 刚好昨天在CentOS安装的时候也总是报s ...

7. java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration] with root cause

在用Java web和hbase连接时,报出来这个错误,一开始我以为是hbase导入的包位置不对,不从build path那里导入,而是从WEB-INF下的lib中导入,尝试了之后结果仍是这个错误 十 ...

8. 01List.ashx(班级列表动态页面)

01List.html <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <he ...

9. 使用LeakCanary检测内存泄露 翻译 MD

Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

10. HIBERNATE知识复习记录1-连接及常用方法

要去面试了,复习一下HIBERNATE的相关知识吧,原来边看视频边写的代码如下,已经分不清先后次序了,大致看一看吧. 先看下总的配置文件hibernate.cfg.xml: <?xml vers ...