| #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 |