Files
gk-sdk/sample/common/sample_comm_venc.h

226 lines
6.8 KiB
C

/*
* Copyright (c) XMEDIA. All rights reserved.
*/
#ifndef __SAMPLE_COMM_VENC_H__
#define __SAMPLE_COMM_VENC_H__
#include "xmedia_type.h"
#include "xmedia_sys.h"
#include "xmedia_vb.h"
#include "xmedia_venc.h"
#include "xmedia_vpss.h"
#include "xmedia_mmz.h"
#ifdef __cplusplus
extern "C" {
#endif
#define VENC_FILE_PATH_SIZE (128)
#define VENC_JPEG_SPLICING_MAX_VER_CNT (8)
typedef union
{
/* Define the struct bits */
struct
{
xmedia_s32 weight1 : 4; /* [0:3] */
xmedia_s32 weight2 : 4; /* [4:7] */
} bits;
/* Define an unsigned member */
xmedia_u8 u8;
} skip_wight_value;
typedef struct
{
xmedia_bool thread_start;
xmedia_s32 vpss_pipe;
xmedia_s32 vpss_chn[VPSS_MAX_PHY_OCHN_NUM];
xmedia_s32 venc_chn[VENC_MAX_CHN_NUM];
xmedia_s32 chn_cnt;
xmedia_video_size size[VENC_MAX_CHN_NUM];
} sample_venc_qpmap_sendfrm_para;
typedef struct sample_venc_getstream_para
{
xmedia_bool thread_start;
xmedia_s32 venc_chn[VENC_MAX_CHN_NUM];
xmedia_s32 cnt;
xmedia_s32 save_stream;
xmedia_bool save_jpeg;
xmedia_char save_path[VENC_FILE_PATH_SIZE];
xmedia_u32 stream_timeout_cnt;
} sample_venc_getstream_para;
typedef struct sample_venc_jpeg_slice
{
xmedia_bool slice_enable;
xmedia_bool by_frame;
} sample_venc_jpeg_slice;
typedef struct sample_venc_vui_info
{
xmedia_bool vui_en;
xmedia_u32 stream_display_fps;
} sample_venc_vui_info;
typedef struct sample_venc_chn_info
{
xmedia_bool venc_en;
xmedia_s32 venc_chn;
xmedia_payload_type payload_type;
xmedia_u32 width;
xmedia_u32 height;
xmedia_venc_rc_mode rc_mode;
xmedia_u32 profile;
xmedia_venc_gop_attr venc_gop_attr;
xmedia_bool use_default_gop_attr;
xmedia_bool rcn_ref_share_buf;
xmedia_venc_attr_jpeg jpeg_attr;
xmedia_u32 src_frame_rate;
xmedia_u32 dst_frame_rate;
xmedia_bool support_dcf;
xmedia_u32 mpf_cnt;
sample_venc_jpeg_slice jpeg_slice;
sample_venc_vui_info vui_info;
xmedia_u32 str_buffer_size;
}sample_venc_chn_info;
typedef enum {
SAMPLE_RC_CBR = 0,
SAMPLE_RC_VBR,
SAMPLE_RC_AVBR,
SAMPLE_RC_QPMAP,
SAMPLE_RC_FIXQP,
} sample_rc;
typedef struct {
sample_venc_chn_info chn_info[VENC_MAX_CHN_NUM];
}sample_venc_config;
typedef struct {
xmedia_u32 src_width;
xmedia_u32 src_height;
xmedia_u32 dst_width;
xmedia_u32 dst_height;
xmedia_u32 enc_width;
xmedia_u32 enc_height;
xmedia_u32 row_cnt;
xmedia_u32 col_cnt;
xmedia_u32 vb_block;
xmedia_u32 vb_pool;
xmedia_u32 pool_id;
xmedia_u64 phy_addr;
xmedia_u8 *vir_addr;
xmedia_u32 vb_size;
xmedia_u32 tmp_data_start[VENC_JPEG_SPLICING_MAX_VER_CNT];
xmedia_u32 tmp_data_offset[VENC_JPEG_SPLICING_MAX_VER_CNT];
xmedia_u32 tmp_data_len[VENC_JPEG_SPLICING_MAX_VER_CNT];
xmedia_u8 *tmp_data[VENC_JPEG_SPLICING_MAX_VER_CNT];
xmedia_video_private_info priv_vb_info;
} sample_venc_splicing_info;
typedef struct
{
xmedia_s32 vpss_pipe;
xmedia_s32 vpss_chn;
xmedia_s32 venc_chn;
xmedia_char save_path[64];
sample_venc_splicing_info splicing_info;
} sample_venc_splicing_para;
typedef struct {
xmedia_u32 pool;
FILE *input_yuv[10];
pthread_t user_send_yuv_thread;
xmedia_video_pixel_format user_pixel_format;
xmedia_video_format user_video_format;
xmedia_video_compress_mode user_compress_mode;
xmedia_u32 max_send_yuv_cnt;
xmedia_u32 user_width;
xmedia_u32 user_height;
xmedia_u32 yuv_num; // YUV source file number
xmedia_char ch_yuv_path[128];
xmedia_char ch_yuv_name[10][128];
xmedia_u32 h264e_cnt;
xmedia_u32 h264e_chnl[VENC_MAX_CHN_NUM];
xmedia_u32 h265e_cnt;
xmedia_u32 h265e_chnl[VENC_MAX_CHN_NUM];
xmedia_u32 mjpeg_cnt;
xmedia_u32 mjpeg_chnl[VENC_MAX_CHN_NUM];
xmedia_u32 jpege_cnt;
xmedia_u32 jpege_chnl[VENC_MAX_CHN_NUM];
xmedia_u32 user_send_yuv_delay_ms;
}sample_venc_yuv_thread_para;
typedef struct {
xmedia_u32 block;
xmedia_u32 pool;
xmedia_u32 pool_id;
xmedia_u64 phy_addr;
xmedia_u8 *vir_addr;
xmedia_u32 size;
xmedia_s32 dev;
} sample_venc_mem_buf_info;
xmedia_s32 sample_comm_venc_get_file_post_fix(xmedia_payload_type payload, xmedia_char *file_post_fix);
xmedia_s32 sample_comm_venc_start_chn(xmedia_s32 venc_chn);
xmedia_s32 sample_comm_venc_stop_chn(xmedia_s32 venc_chn);
xmedia_s32 sample_comm_venc_get_default_gop_attr(xmedia_venc_gop_mode gop_mode, xmedia_venc_gop_attr *gop_attr);
xmedia_void sample_comm_venc_get_default_chn_info(xmedia_video_size res,xmedia_u32 framerate,sample_venc_chn_info *chn_info);
xmedia_s32 sample_comm_venc_set_rc_param(xmedia_s32 venc_chn);
xmedia_s32 sample_comm_venc_create_chn(sample_venc_chn_info *chn_param);
xmedia_s32 sample_comm_venc_destory_chn(xmedia_s32 venc_chn);
xmedia_s32 sample_comm_venc_start(sample_venc_config *venc_cfg);
xmedia_s32 sample_comm_venc_stop(sample_venc_config *venc_cfg);
xmedia_s32 sample_comm_venc_set_jpeg_exif(xmedia_s32 venc_chn);
xmedia_s32 sample_comm_venc_save_jpeg_stream(xmedia_s32 chn,FILE* fd, xmedia_venc_stream* pst_stream , xmedia_u32 recv_cnt, char *save_path);
xmedia_s32 sample_comm_venc_save_jpeg_thum(xmedia_char *result_path, xmedia_venc_stream* stream_pack, xmedia_u32 chn, xmedia_u32 recv_cnt);
xmedia_s32 sample_comm_venc_capture_jpeg(xmedia_s32 venc_chn, xmedia_s32 snap_cnt, xmedia_bool save_jpeg, xmedia_bool save_thumbnail, xmedia_char *save_path);
xmedia_s32 sample_comm_venc_start_get_stream(xmedia_s32 venc_chn[], xmedia_s32 cnt, xmedia_bool stream_no_save, xmedia_bool jpeg_no_save, xmedia_char *save_path);
xmedia_s32 sample_comm_venc_stop_get_stream(void);
xmedia_void *sample_comm_venc_user_send_thread(void *data);
xmedia_s32 sample_comm_venc_qpmap_sendfrm(xmedia_s32 pipe,xmedia_s32 vpss_chn[],xmedia_s32 venc_chn[],xmedia_s32 cnt, xmedia_video_size vpss_size[]);
xmedia_s32 sample_comm_venc_stop_send_qpmapfrm(xmedia_void);
xmedia_s32 sample_comm_venc_splicing_proc(sample_venc_splicing_para *splicing_para);
xmedia_s32 sample_comm_venc_set_roi(xmedia_s32 venc_chn[], xmedia_s32 chn_cnt);
xmedia_s32 sample_comm_venc_init(xmedia_void);
xmedia_s32 sample_comm_venc_exit(xmedia_void);
xmedia_s32 sample_comm_venc_set_fps_to_stream(sample_venc_chn_info *chn_param);
#ifdef __cplusplus
}
#endif
#endif