1#ifndef _MSM_VENC_H_ 2#define _MSM_VENC_H_ 3 4#include <linux/types.h> 5 6#define VENC_MAX_RECON_BUFFERS 2 7 8#define VENC_FLAG_EOS 0x00000001 9#define VENC_FLAG_END_OF_FRAME 0x00000010 10#define VENC_FLAG_SYNC_FRAME 0x00000020 11#define VENC_FLAG_EXTRA_DATA 0x00000040 12#define VENC_FLAG_CODEC_CONFIG 0x00000080 13 14enum venc_flush_type { 15 VENC_FLUSH_INPUT, 16 VENC_FLUSH_OUTPUT, 17 VENC_FLUSH_ALL 18}; 19 20enum venc_state_type { 21 VENC_STATE_PAUSE = 0x1, 22 VENC_STATE_START = 0x2, 23 VENC_STATE_STOP = 0x4 24}; 25 26enum venc_event_type_enum { 27 VENC_EVENT_START_STATUS, 28 VENC_EVENT_STOP_STATUS, 29 VENC_EVENT_SUSPEND_STATUS, 30 VENC_EVENT_RESUME_STATUS, 31 VENC_EVENT_FLUSH_STATUS, 32 VENC_EVENT_RELEASE_INPUT, 33 VENC_EVENT_DELIVER_OUTPUT, 34 VENC_EVENT_UNKNOWN_STATUS 35}; 36 37enum venc_status_code { 38 VENC_STATUS_SUCCESS, 39 VENC_STATUS_ERROR, 40 VENC_STATUS_INVALID_STATE, 41 VENC_STATUS_FLUSHING, 42 VENC_STATUS_INVALID_PARAM, 43 VENC_STATUS_CMD_QUEUE_FULL, 44 VENC_STATUS_CRITICAL, 45 VENC_STATUS_INSUFFICIENT_RESOURCES, 46 VENC_STATUS_TIMEOUT 47}; 48 49enum venc_msg_code { 50 VENC_MSG_INDICATION, 51 VENC_MSG_INPUT_BUFFER_DONE, 52 VENC_MSG_OUTPUT_BUFFER_DONE, 53 VENC_MSG_NEED_OUTPUT_BUFFER, 54 VENC_MSG_FLUSH, 55 VENC_MSG_START, 56 VENC_MSG_STOP, 57 VENC_MSG_PAUSE, 58 VENC_MSG_RESUME, 59 VENC_MSG_STOP_READING_MSG 60}; 61 62enum venc_error_code { 63 VENC_S_SUCCESS, 64 VENC_S_EFAIL, 65 VENC_S_EFATAL, 66 VENC_S_EBADPARAM, 67 VENC_S_EINVALSTATE, 68 VENC_S_ENOSWRES, 69 VENC_S_ENOHWRES, 70 VENC_S_EBUFFREQ, 71 VENC_S_EINVALCMD, 72 VENC_S_ETIMEOUT, 73 VENC_S_ENOREATMPT, 74 VENC_S_ENOPREREQ, 75 VENC_S_ECMDQFULL, 76 VENC_S_ENOTSUPP, 77 VENC_S_ENOTIMPL, 78 VENC_S_ENOTPMEM, 79 VENC_S_EFLUSHED, 80 VENC_S_EINSUFBUF, 81 VENC_S_ESAMESTATE, 82 VENC_S_EINVALTRANS 83}; 84 85enum venc_mem_region_enum { 86 VENC_PMEM_EBI1, 87 VENC_PMEM_SMI 88}; 89 90struct venc_buf_type { 91 u32 region; 92 u32 phys; 93 u32 size; 94 int offset; 95}; 96 97struct venc_qp_range { 98 u32 min_qp; 99 u32 max_qp; 100}; 101 102struct venc_frame_rate { 103 u32 frame_rate_num; 104 u32 frame_rate_den; 105}; 106 107struct venc_slice_info { 108 u32 slice_mode; 109 u32 units_per_slice; 110}; 111 112struct venc_extra_data { 113 u32 slice_extra_data_flag; 114 u32 slice_client_data1; 115 u32 slice_client_data2; 116 u32 slice_client_data3; 117 u32 none_extra_data_flag; 118 u32 none_client_data1; 119 u32 none_client_data2; 120 u32 none_client_data3; 121}; 122 123struct venc_common_config { 124 u32 standard; 125 u32 input_frame_height; 126 u32 input_frame_width; 127 u32 output_frame_height; 128 u32 output_frame_width; 129 u32 rotation_angle; 130 u32 intra_period; 131 u32 rate_control; 132 struct venc_frame_rate frame_rate; 133 u32 bitrate; 134 struct venc_qp_range qp_range; 135 u32 iframe_qp; 136 u32 pframe_qp; 137 struct venc_slice_info slice_config; 138 struct venc_extra_data extra_data; 139}; 140 141struct venc_nonio_buf_config { 142 struct venc_buf_type recon_buf1; 143 struct venc_buf_type recon_buf2; 144 struct venc_buf_type wb_buf; 145 struct venc_buf_type cmd_buf; 146 struct venc_buf_type vlc_buf; 147}; 148 149struct venc_mpeg4_config { 150 u32 profile; 151 u32 level; 152 u32 time_resolution; 153 u32 ac_prediction; 154 u32 hec_interval; 155 u32 data_partition; 156 u32 short_header; 157 u32 rvlc_enable; 158}; 159 160struct venc_h263_config { 161 u32 profile; 162 u32 level; 163}; 164 165struct venc_h264_config { 166 u32 profile; 167 u32 level; 168 u32 max_nal; 169 u32 idr_period; 170}; 171 172struct venc_pmem { 173 int src; 174 int fd; 175 u32 offset; 176 void *virt; 177 void *phys; 178 u32 size; 179}; 180 181struct venc_buffer { 182 unsigned char *ptr_buffer; 183 u32 size; 184 u32 len; 185 u32 offset; 186 long long time_stamp; 187 u32 flags; 188 u32 client_data; 189 190}; 191 192struct venc_buffers { 193 struct venc_pmem recon_buf[VENC_MAX_RECON_BUFFERS]; 194 struct venc_pmem wb_buf; 195 struct venc_pmem cmd_buf; 196 struct venc_pmem vlc_buf; 197}; 198 199struct venc_buffer_flush { 200 u32 flush_mode; 201}; 202 203union venc_msg_data { 204 struct venc_buffer buf; 205 struct venc_buffer_flush flush_ret; 206 207}; 208 209struct venc_msg { 210 u32 status_code; 211 u32 msg_code; 212 u32 msg_data_size; 213 union venc_msg_data msg_data; 214}; 215 216union venc_codec_config { 217 struct venc_mpeg4_config mpeg4_params; 218 struct venc_h263_config h263_params; 219 struct venc_h264_config h264_params; 220}; 221 222struct venc_q6_config { 223 struct venc_common_config config_params; 224 union venc_codec_config codec_params; 225 struct venc_nonio_buf_config buf_params; 226 void *callback_event; 227}; 228 229struct venc_hdr_config { 230 struct venc_common_config config_params; 231 union venc_codec_config codec_params; 232}; 233 234struct venc_init_config { 235 struct venc_q6_config q6_config; 236 struct venc_buffers q6_bufs; 237}; 238 239struct venc_seq_config { 240 int size; 241 struct venc_pmem buf; 242 struct venc_q6_config q6_config; 243}; 244 245struct venc_version { 246 u32 major; 247 u32 minor; 248}; 249 250#define VENC_IOCTL_MAGIC 'V' 251 252#define VENC_IOCTL_CMD_READ_NEXT_MSG \ 253 _IOWR(VENC_IOCTL_MAGIC, 1, struct venc_msg) 254 255#define VENC_IOCTL_CMD_STOP_READ_MSG _IO(VENC_IOCTL_MAGIC, 2) 256 257#define VENC_IOCTL_SET_INPUT_BUFFER \ 258 _IOW(VENC_IOCTL_MAGIC, 3, struct venc_pmem) 259 260#define VENC_IOCTL_SET_OUTPUT_BUFFER \ 261 _IOW(VENC_IOCTL_MAGIC, 4, struct venc_pmem) 262 263#define VENC_IOCTL_CMD_START _IOW(VENC_IOCTL_MAGIC, 5, struct venc_init_config) 264 265#define VENC_IOCTL_CMD_ENCODE_FRAME \ 266 _IOW(VENC_IOCTL_MAGIC, 6, struct venc_buffer) 267 268#define VENC_IOCTL_CMD_FILL_OUTPUT_BUFFER \ 269 _IOW(VENC_IOCTL_MAGIC, 7, struct venc_buffer) 270 271#define VENC_IOCTL_CMD_FLUSH \ 272 _IOW(VENC_IOCTL_MAGIC, 8, struct venc_buffer_flush) 273 274#define VENC_IOCTL_CMD_PAUSE _IO(VENC_IOCTL_MAGIC, 9) 275 276#define VENC_IOCTL_CMD_RESUME _IO(VENC_IOCTL_MAGIC, 10) 277 278#define VENC_IOCTL_CMD_STOP _IO(VENC_IOCTL_MAGIC, 11) 279 280#define VENC_IOCTL_SET_INTRA_PERIOD \ 281 _IOW(VENC_IOCTL_MAGIC, 12, int) 282 283#define VENC_IOCTL_CMD_REQUEST_IFRAME _IO(VENC_IOCTL_MAGIC, 13) 284 285#define VENC_IOCTL_GET_SEQUENCE_HDR \ 286 _IOWR(VENC_IOCTL_MAGIC, 14, struct venc_seq_config) 287 288#define VENC_IOCTL_SET_INTRA_REFRESH \ 289 _IOW(VENC_IOCTL_MAGIC, 15, int) 290 291#define VENC_IOCTL_SET_FRAME_RATE \ 292 _IOW(VENC_IOCTL_MAGIC, 16, struct venc_frame_rate) 293 294#define VENC_IOCTL_SET_TARGET_BITRATE \ 295 _IOW(VENC_IOCTL_MAGIC, 17, int) 296 297#define VENC_IOCTL_SET_QP_RANGE \ 298 _IOW(VENC_IOCTL_MAGIC, 18, struct venc_qp_range) 299 300#define VENC_IOCTL_GET_VERSION \ 301 _IOR(VENC_IOCTL_MAGIC, 19, struct venc_version) 302 303#endif 304