226 lines
6.8 KiB
C
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
|
|
|