open-ameba/sdk/component/common/media/muxer/mp4_encap.h

110 lines
3.1 KiB
C
Raw Permalink Normal View History

2016-11-22 04:48:09 +00:00
#ifndef _MP4_ENCAP_H_
#define _MP4_ENCAP_H_
#include "basic_types.h"
#include "osdep_service.h"
#define MAX_BOX_CHILD 8
#define RBUF_SIZE 1024
typedef struct _mp4root{
unsigned int video_len;
unsigned int audio_len;
unsigned int total;
unsigned int keyindex;
}MP4root,*PMP4root;
#define STORAGE_IDLE 0
#define STORAGE_START 1
#define STORAGE_WRITE_ALL 2
#define STORAGE_WRITE_VIDEO 3
#define STORAGE_WRITE_AUDIO 4
#define STORAGE_STOP 5
#define STORAGE_END 6
#define STORAGE_ALL 0
#define STORAGE_VIDEO 1
#define STORAGE_AUDIO 2
typedef struct _mp4_payload{
unsigned char *addr;
unsigned int len;
}mp4_payload,pmp4_payload;
typedef struct _mp4_write_info{
int mp4_start_position;
int mp4_end_position;
int mp4_occupy_size;
int mp4_empty_size;
int mp4_write_start_position;
int mp4_write_end_position;
int mp4_write_occupy_size;
int mp4_write_empty_size;
int mp4_write_length;
}mp4_winfo,*pmp4_winfo;
typedef struct _mp4_context{
FATFS m_fs;
int drv_num;
char _drv[4];
FIL m_file;
char filename[32];
int Fatfs_ok;
int filecount;
int width;
int height;
int sample_rate;
int channel_count;
int frame_rate;
u32 start_time;//rtw_get_current_time()
u32 file_name_index;
u32 storage_state;
MP4root root;
MP4root root_reserve;
int period_time;
int file_total;
int sps_start;
int type;
int sps_len;
int pps_len;
int sps_pps_mark;
unsigned int *video_buffer_index;
unsigned int *video_buffer_size;
int video_size;
unsigned int *audio_buffer_index;
unsigned int *audio_buffer_size;
int audio_size;
unsigned char *moov_box;
int moov_box_size;
unsigned char *h264_buf;
int H264_LENGTH;
mp4_payload payload;
mp4_payload reserved_payload;
int reserved_start_index;
int iframe;
int reserved_type;
_sema start_fatfs_write;
int write_status;
int audio_write_status;
int video_write_status;
int buffer_write_status;//0: real write 1: virtual write
mp4_winfo winfo;
int nal_len;
int h264_extra_len;
int mp4_muxer_enable;
}mp4_context,*pmp4_context;
#define IDLE 0
#define FATFS_WRITING 1
#define FATFS_DONE 2
void mp4_handle(pmp4_context mp4_ctx,unsigned char *buf,unsigned int size,int type);
void set_mp4_audio_buffer(pmp4_context mp4_ctx,unsigned int *audio_index,unsigned int *audio_size,int size);
void set_mp4_video_buffer(pmp4_context mp4_ctx,unsigned int *video_index,unsigned int *video_size,int size);
void set_mp4_moov_buffer(pmp4_context mp4_ctx,unsigned char *moov,int size);
int mp4_set_record(pmp4_context mp4_ctx,int num);
void mp4_muxer_init(pmp4_context mp4_ctx);
void mp4_muxer_close(pmp4_context mp4_ctx);
int mp4_set_start_status(pmp4_context mp4_ctx);
#endif