| /* Copyright (c) 2008-2009, Code Aurora Forum. All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution. |
| * * Neither the name of Code Aurora nor |
| * the names of its contributors may be used to endorse or promote |
| * products derived from this software without specific prior written |
| * permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| * NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR |
| * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
| * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
| * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| */ |
| |
| #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 { |
| unsigned int region; |
| unsigned int phys; |
| unsigned int size; |
| int offset; |
| }; |
| |
| struct venc_qp_range { |
| unsigned int min_qp; |
| unsigned int max_qp; |
| }; |
| |
| struct venc_frame_rate { |
| unsigned int frame_rate_num; |
| unsigned int frame_rate_den; |
| }; |
| |
| struct venc_slice_info { |
| unsigned int slice_mode; |
| unsigned int units_per_slice; |
| }; |
| |
| struct venc_extra_data { |
| unsigned int slice_extra_data_flag; |
| unsigned int slice_client_data1; |
| unsigned int slice_client_data2; |
| unsigned int slice_client_data3; |
| unsigned int none_extra_data_flag; |
| unsigned int none_client_data1; |
| unsigned int none_client_data2; |
| unsigned int none_client_data3; |
| }; |
| |
| struct venc_common_config { |
| unsigned int standard; |
| unsigned int input_frame_height; |
| unsigned int input_frame_width; |
| unsigned int output_frame_height; |
| unsigned int output_frame_width; |
| unsigned int rotation_angle; |
| unsigned int intra_period; |
| unsigned int rate_control; |
| struct venc_frame_rate frame_rate; |
| unsigned int bitrate; |
| struct venc_qp_range qp_range; |
| unsigned int iframe_qp; |
| unsigned int 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 { |
| unsigned int profile; |
| unsigned int level; |
| unsigned int time_resolution; |
| unsigned int ac_prediction; |
| unsigned int hec_interval; |
| unsigned int data_partition; |
| unsigned int short_header; |
| unsigned int rvlc_enable; |
| }; |
| |
| struct venc_h263_config { |
| unsigned int profile; |
| unsigned int level; |
| }; |
| |
| struct venc_h264_config { |
| unsigned int profile; |
| unsigned int level; |
| unsigned int max_nal; |
| unsigned int idr_period; |
| }; |
| |
| struct venc_pmem { |
| int src; |
| int fd; |
| unsigned int offset; |
| void *virt; |
| void *phys; |
| unsigned int size; |
| }; |
| |
| struct venc_buffer { |
| unsigned char *ptr_buffer; |
| unsigned int size; |
| unsigned int len; |
| unsigned int offset; |
| long long time_stamp; |
| unsigned int flags; |
| unsigned int 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 { |
| unsigned int flush_mode; |
| }; |
| |
| union venc_msg_data { |
| struct venc_buffer buf; |
| struct venc_buffer_flush flush_ret; |
| }; |
| |
| struct venc_msg { |
| unsigned int status_code; |
| unsigned int msg_code; |
| union venc_msg_data msg_data; |
| unsigned int msg_data_size; |
| }; |
| |
| 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; |
| }; |
| |
| #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) |
| |
| #endif |