資源簡介
將實時的H264流轉為AVI文件,,也可經過改動將H264文件轉化為AVI文件。

代碼片段和文件信息
#include?
#include?
#include?
#include?
#include?
#define?_GNU_SOURCE
#include?
#ifdef?_MSC_VER
#include??????/*?_setmode()?*/
#include???/*?_O_BINARY?*/
#endif
#include?“bs.h“
#define?DATA_MAX?3000000
uint8_t?data[DATA_MAX];
typedef?int?bool;
#define?false?0;
#define?true?1;
/*?Ctrl-C?handler?*/
static?int?????i_ctrl_c?=?0;
static?void????SigIntHandler(?int?a?)
{
????i_ctrl_c?=?1;
}
typedef?struct
{
????char?*psz_fin;
????char?*psz_fout;
????float?f_fps;
????char??fcc[4];
}?cfg_t;
typedef?struct
{
????int?i_data;
????int?i_data_max;
????uint8_t?*p_data;
}?vbuf_t;
void?vbuf_init(?vbuf_t?*?);
void?vbuf_add(?vbuf_t?*?int?i_data?void?*p_data?);
void?vbuf_reset(?vbuf_t?*?);
typedef?struct
{
????FILE?*f;
????float?f_fps;
????char??fcc[4];
????int???i_width;
????int???i_height;
????int64_t?i_movi;
????int64_t?i_movi_end;
????int64_t?i_riff;
?????int?i_frame;
????int??????i_idx_max;
????uint32_t?*idx;
}?avi_t;
void?avi_init(?avi_t?*?FILE?*?float?char?fcc[4]?);
void?avi_write(?avi_t?*?vbuf_t?*?int??);
void?avi_end(?avi_t?*?);
enum?nal_unit_type_e
{
????NAL_UNKNOWN?=?0
????NAL_SLICE???=?1
????NAL_SLICE_DPA???=?2
????NAL_SLICE_DPB???=?3
????NAL_SLICE_DPC???=?4
????NAL_SLICE_IDR???=?5????/*?ref_idc?!=?0?*/
????NAL_SEI?????????=?6????/*?ref_idc?==?0?*/
????NAL_SPS?????????=?7
????NAL_PPS?????????=?8
????/*?ref_idc?==?0?for?69101112?*/
};
enum?nal_priority_e
{
????NAL_PRIORITY_DISPOSABLE?=?0
????NAL_PRIORITY_LOW????????=?1
????NAL_PRIORITY_HIGH???????=?2
????NAL_PRIORITY_HIGHEST????=?3
};
typedef?struct
{
????int?i_ref_idc;??/*?nal_priority_e?*/
????int?i_type;?????/*?nal_unit_type_e?*/
????/*?This?data?are?raw?pay0load?*/
????int?????i_payload;
????uint8_t?*p_payload;
}?nal_t;
typedef?struct
{
????int?i_width;
????int?i_height;
????int?i_nal_type;
????int?i_ref_idc;
????int?i_idr_pic_id;
????int?i_frame_num;
????int?i_poc;
????int?b_key;
????int?i_log2_max_frame_num;
????int?i_poc_type;
????int?i_log2_max_poc_lsb;
????int?i_tick;
????int?i_time_scale;
????bool?vui_flag;
}?h264_t;
void?h264_parser_init(?h264_t?*?);
void?h264_parser_parse(?h264_t?*h?nal_t?*n?int?*pb_nal_start?);
static?int?nal_decode(?nal_t?*nal?void?*p_data?int?i_data?);
static?void?Help(?void?);
static?int??Parse(?int?argc?char?**argv?cfg_t?*?);
static?int??ParseNAL(?nal_t?*nal?avi_t?*a?h264_t?*h?int?*pb_slice?);
/****************************************************************************
?*?main:
?****************************************************************************/
int?main(?int?argc?char?**argv?)
{
????cfg_t?cfg;
????FILE????*fout;
????FILE????*fin;
????vbuf_t??vb;
????avi_t???avi;
????h264_t??h264;
????nal_t?nal;
????int?i_frame;
????int?i_data;
????int?b_eof;
????int?b_key;
????int?b_slice;
int?type;//tangxiaojun
int?i_data2;//tangxiaojun
#ifdef?_MSC_VER
????_setmode(_fileno(stdin)?_O_BINARY);????/*?thanks?to?Marcos?Morais?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-10-31?08:47??avc2avi\
?????文件???????21601??2012-10-30?18:57??avc2avi\avc2avi.c
?????文件???????21704??2012-08-09?21:25??avc2avi\avc2avi.c.bak
?????文件????????4155??2007-08-23?16:38??avc2avi\avc2avi.dsp
?????文件?????????537??2007-08-23?10:40??avc2avi\avc2avi.dsw
?????文件?????????681??2012-08-11?19:07??avc2avi\avc2avi.lnk
?????文件???????91136??2012-10-30?18:58??avc2avi\avc2avi.ncb
?????文件???????49664??2012-10-30?18:58??avc2avi\avc2avi.opt
?????文件????????2463??2012-10-30?18:57??avc2avi\avc2avi.plg
?????目錄???????????0??2012-10-30?18:57??avc2avi\Debug\
?????文件??????140288??2012-08-08?14:45??avc2avi\Debug\avc2avi.bsc
?????文件??????237618??2012-10-30?18:57??avc2avi\Debug\avc2avi.exe
?????文件??????227940??2012-10-30?18:57??avc2avi\Debug\avc2avi.ilk
?????文件???????38944??2012-10-30?18:57??avc2avi\Debug\avc2avi.obj
?????文件??????232956??2012-10-30?18:57??avc2avi\Debug\avc2avi.pch
?????文件??????435200??2012-10-30?18:57??avc2avi\Debug\avc2avi.pdb
?????文件???????25283??2012-10-30?18:57??avc2avi\Debug\avc2avi.sbr
?????文件???????14178??2012-08-13?13:15??avc2avi\Debug\getopt.obj
?????文件???????15501??2012-08-13?13:15??avc2avi\Debug\getopt.sbr
?????文件???????41984??2012-10-30?18:57??avc2avi\Debug\vc60.idb
?????文件???????53248??2012-10-30?18:57??avc2avi\Debug\vc60.pdb
?????文件???????12909??2007-08-23?11:30??avc2avi\getopt.c
?????目錄???????????0??2012-08-11?19:37??avc2avi\inc\
?????文件????????8826??2007-08-23?11:06??avc2avi\inc\bs.h
?????文件????????6393??2005-12-07?12:41??avc2avi\inc\getopt.h
?????文件????????5848??2005-12-07?12:41??avc2avi\inc\stdint.h
?????目錄???????????0??2012-08-11?19:37??avc2avi\Release\
?????文件?????3032275??2012-08-03?15:26??avc2avi\test.h264
- 上一篇:glew32.lib;glew.hglew.dll
- 下一篇:CCP協議全面解析
評論
共有 條評論