#ifndef _MSM_VENC_H_ #define _MSM_VENC_H_ #include <linux/types.h> #define VENC_MAX_RECON_BUFFERS 2 #define VENC_FLAG_EOS 0x00000001 #define VENC_FLAG_END_OF_FRAME 0x00000010 #define VENC_FLAG_SYNC_FRAME 0x00000020 #define VENC_FLAG_EXTRA_DATA 0x00000040 #define VENC_FLAG_CODEC_CONFIG 0x00000080 enum venc_flush_type { VENC_FLUSH_INPUT, VENC_FLUSH_OUTPUT, VENC_FLUSH_ALL }; enum venc_state_type { VENC_STATE_PAUSE = 0x1, VENC_STATE_START = 0x2, VENC_STATE_STOP = 0x4 }; enum venc_event_type_enum { VENC_EVENT_START_STATUS, VENC_EVENT_STOP_STATUS, VENC_EVENT_SUSPEND_STATUS, VENC_EVENT_RESUME_STATUS, VENC_EVENT_FLUSH_STATUS, VENC_EVENT_RELEASE_INPUT, VENC_EVENT_DELIVER_OUTPUT, VENC_EVENT_UNKNOWN_STATUS }; enum venc_status_code { VENC_STATUS_SUCCESS, VENC_STATUS_ERROR, VENC_STATUS_INVALID_STATE, VENC_STATUS_FLUSHING, VENC_STATUS_INVALID_PARAM, VENC_STATUS_CMD_QUEUE_FULL, VENC_STATUS_CRITICAL, VENC_STATUS_INSUFFICIENT_RESOURCES, VENC_STATUS_TIMEOUT }; enum venc_msg_code { VENC_MSG_INDICATION, VENC_MSG_INPUT_BUFFER_DONE, VENC_MSG_OUTPUT_BUFFER_DONE, VENC_MSG_NEED_OUTPUT_BUFFER, VENC_MSG_FLUSH, VENC_MSG_START, VENC_MSG_STOP, VENC_MSG_PAUSE, VENC_MSG_RESUME, VENC_MSG_STOP_READING_MSG }; enum venc_error_code { VENC_S_SUCCESS, VENC_S_EFAIL, VENC_S_EFATAL, VENC_S_EBADPARAM, VENC_S_EINVALSTATE, VENC_S_ENOSWRES, VENC_S_ENOHWRES, VENC_S_EBUFFREQ, VENC_S_EINVALCMD, VENC_S_ETIMEOUT, VENC_S_ENOREATMPT, VENC_S_ENOPREREQ, VENC_S_ECMDQFULL, VENC_S_ENOTSUPP, VENC_S_ENOTIMPL, VENC_S_ENOTPMEM, VENC_S_EFLUSHED, VENC_S_EINSUFBUF, VENC_S_ESAMESTATE, VENC_S_EINVALTRANS }; enum venc_mem_region_enum { VENC_PMEM_EBI1, VENC_PMEM_SMI }; struct venc_buf_type { u32 region; u32 phys; u32 size; int offset; }; struct venc_qp_range { u32 min_qp; u32 max_qp; }; struct venc_frame_rate { u32 frame_rate_num; u32 frame_rate_den; }; struct venc_slice_info { u32 slice_mode; u32 units_per_slice; }; struct venc_extra_data { u32 slice_extra_data_flag; u32 slice_client_data1; u32 slice_client_data2; u32 slice_client_data3; u32 none_extra_data_flag; u32 none_client_data1; u32 none_client_data2; u32 none_client_data3; }; struct venc_common_config { u32 standard; u32 input_frame_height; u32 input_frame_width; u32 output_frame_height; u32 output_frame_width; u32 rotation_angle; u32 intra_period; u32 rate_control; struct venc_frame_rate frame_rate; u32 bitrate; struct venc_qp_range qp_range; u32 iframe_qp; u32 pframe_qp; struct venc_slice_info slice_config; struct venc_extra_data extra_data; }; struct venc_nonio_buf_config { struct venc_buf_type recon_buf1; struct venc_buf_type recon_buf2; struct venc_buf_type wb_buf; struct venc_buf_type cmd_buf; struct venc_buf_type vlc_buf; }; struct venc_mpeg4_config { u32 profile; u32 level; u32 time_resolution; u32 ac_prediction; u32 hec_interval; u32 data_partition; u32 short_header; u32 rvlc_enable; }; struct venc_h263_config { u32 profile; u32 level; }; struct venc_h264_config { u32 profile; u32 level; u32 max_nal; u32 idr_period; }; struct venc_pmem { int src; int fd; u32 offset; void *virt; void *phys; u32 size; }; struct venc_buffer { unsigned char *ptr_buffer; u32 size; u32 len; u32 offset; long long time_stamp; u32 flags; u32 client_data; }; struct venc_buffers { struct venc_pmem recon_buf[VENC_MAX_RECON_BUFFERS]; struct venc_pmem wb_buf; struct venc_pmem cmd_buf; struct venc_pmem vlc_buf; }; struct venc_buffer_flush { u32 flush_mode; }; union venc_msg_data { struct venc_buffer buf; struct venc_buffer_flush flush_ret; }; struct venc_msg { u32 status_code; u32 msg_code; u32 msg_data_size; union venc_msg_data msg_data; }; union venc_codec_config { struct venc_mpeg4_config mpeg4_params; struct venc_h263_config h263_params; struct venc_h264_config h264_params; }; struct venc_q6_config { struct venc_common_config config_params; union venc_codec_config codec_params; struct venc_nonio_buf_config buf_params; void *callback_event; }; struct venc_hdr_config { struct venc_common_config config_params; union venc_codec_config codec_params; }; struct venc_init_config { struct venc_q6_config q6_config; struct venc_buffers q6_bufs; }; struct venc_seq_config { int size; struct venc_pmem buf; struct venc_q6_config q6_config; }; struct venc_version { u32 major; u32 minor; }; #define VENC_IOCTL_MAGIC 'V' #define VENC_IOCTL_CMD_READ_NEXT_MSG \ _IOWR(VENC_IOCTL_MAGIC, 1, struct venc_msg) #define VENC_IOCTL_CMD_STOP_READ_MSG _IO(VENC_IOCTL_MAGIC, 2) #define VENC_IOCTL_SET_INPUT_BUFFER \ _IOW(VENC_IOCTL_MAGIC, 3, struct venc_pmem) #define VENC_IOCTL_SET_OUTPUT_BUFFER \ _IOW(VENC_IOCTL_MAGIC, 4, struct venc_pmem) #define VENC_IOCTL_CMD_START _IOW(VENC_IOCTL_MAGIC, 5, struct venc_init_config) #define VENC_IOCTL_CMD_ENCODE_FRAME \ _IOW(VENC_IOCTL_MAGIC, 6, struct venc_buffer) #define VENC_IOCTL_CMD_FILL_OUTPUT_BUFFER \ _IOW(VENC_IOCTL_MAGIC, 7, struct venc_buffer) #define VENC_IOCTL_CMD_FLUSH \ _IOW(VENC_IOCTL_MAGIC, 8, struct venc_buffer_flush) #define VENC_IOCTL_CMD_PAUSE _IO(VENC_IOCTL_MAGIC, 9) #define VENC_IOCTL_CMD_RESUME _IO(VENC_IOCTL_MAGIC, 10) #define VENC_IOCTL_CMD_STOP _IO(VENC_IOCTL_MAGIC, 11) #define VENC_IOCTL_SET_INTRA_PERIOD \ _IOW(VENC_IOCTL_MAGIC, 12, int) #define VENC_IOCTL_CMD_REQUEST_IFRAME _IO(VENC_IOCTL_MAGIC, 13) #define VENC_IOCTL_GET_SEQUENCE_HDR \ _IOWR(VENC_IOCTL_MAGIC, 14, struct venc_seq_config) #define VENC_IOCTL_SET_INTRA_REFRESH \ _IOW(VENC_IOCTL_MAGIC, 15, int) #define VENC_IOCTL_SET_FRAME_RATE \ _IOW(VENC_IOCTL_MAGIC, 16, struct venc_frame_rate) #define VENC_IOCTL_SET_TARGET_BITRATE \ _IOW(VENC_IOCTL_MAGIC, 17, int) #define VENC_IOCTL_SET_QP_RANGE \ _IOW(VENC_IOCTL_MAGIC, 18, struct venc_qp_range) #define VENC_IOCTL_GET_VERSION \ _IOR(VENC_IOCTL_MAGIC, 19, struct venc_version) #endif