• 大小: 3.23MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-11-11
  • 语言: 其他
  • 标签: H264  AVI  h.264  

资源简介

将实时的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

评论

共有 条评论