H264解析sps獲取解析度等資訊

2021-09-02 01:57:02 字數 2516 閱讀 1815

#include #include #include #include typedef  unsigned int uint;

typedef  unsigned char byte;

typedef  unsigned long dword;

uint ue(byte *pbuff, uint nlen, uint &nstartbit)

nzeronum++;

nstartbit++;

}nstartbit ++;  

//計算結果

dword dwret = 0;

for (uint i=0; i> (nstartbit % 8)))

nstartbit++;

}return (1 << nzeronum) - 1 + dwret;} 

int se(byte *pbuff, uint nlen, uint &nstartbit)  

dword u(uint bitcount,byte * buf,uint &nstartbit)

nstartbit++;

}return dwret;} 

/** * h264的nal起始碼防競爭機制

* * @param buf sps資料內容

* * @無返回值

*/void de_emulation_prevention(byte* buf,unsigned int* buf_size)}}

int log2_max_frame_num_minus4=ue(buf,nlen,startbit);

int pic_order_cnt_type=ue(buf,nlen,startbit);

if( pic_order_cnt_type == 0 )

int log2_max_pic_order_cnt_lsb_minus4=ue(buf,nlen,startbit);

else if( pic_order_cnt_type == 1 )

int num_ref_frames=ue(buf,nlen,startbit);

int gaps_in_frame_num_value_allowed_flag=u(1,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+1)*16;

height=(pic_height_in_map_units_minus1+1)*16;

int frame_mbs_only_flag=u(1,buf,startbit);

if(!frame_mbs_only_flag)

int mb_adaptive_frame_field_flag=u(1,buf,startbit);

int direct_8x8_inference_flag=u(1,buf,startbit);

int frame_cropping_flag=u(1,buf,startbit);

if(frame_cropping_flag)

int vui_parameter_present_flag=u(1,buf,startbit);

if(vui_parameter_present_flag)

}int overscan_info_present_flag=u(1,buf,startbit);

if(overscan_info_present_flag)

int video_signal_type_present_flag=u(1,buf,startbit);

if(video_signal_type_present_flag)

}int chroma_loc_info_present_flag=u(1,buf,startbit);

if(chroma_loc_info_present_flag)

int timing_info_present_flag=u(1,buf,startbit);

if(timing_info_present_flag)}}

return true;

}else

return false;

}

timing_info_present_flag等於1表示num_units_in_tick,time_scale和fixed_frame_rate_flag在位元流中存在。

timing_info_present_flag等於0表示num_units_in_tick,time_scale和fixed_frame_rate_flag在位元流中不存在。

因此,當timing_info_present_flag等於0時,無法得到位元速率,bool h264_decode_sps(byte * buf,unsigned int nlen,int &width,int &height,int &fps)引數fps返回值為0,可據此設定乙個預設幀率。

**:  

H264解碼SPS獲取寬高和幀率

include include include include typedef unsigned intuint typedef unsigned char byte typedef unsigned long dword uint ue byte pbuff,uint nlen,uint nsta...

H264解碼SPS獲取寬高和幀率

本篇文章講述了如何解碼sps獲取寬高和幀率資訊。include include include include typedef unsigned int uint typedef unsigned char byte typedef unsigned long dword uint ue byte ...

H264編碼方式解析(1)

h.264可用於手機電視廣播,開啟手機就可以收看數字電視節目。美國高等電視系統會議和日本無線電工業和事務協會都準備把h.264作為地面可攜式數字電視廣播的編碼方式。歐洲數字電視廣播標準化團體也正在將h.264作為數碼電視的一種編碼方式來採用。甚至 論壇也在動作。d9型 碟片只有8.5gb容量,不夠放...