2009-10-14 05:57:16 +02:00
|
|
|
/****************************************************************************
|
|
|
|
****************************************************************************
|
|
|
|
***
|
|
|
|
*** This header was automatically generated from a Linux kernel header
|
|
|
|
*** of the same name, to make information necessary for userspace to
|
|
|
|
*** call into the kernel available to libc. It contains only constants,
|
|
|
|
*** structures, and macros generated from the original header, and thus,
|
|
|
|
*** contains no copyrightable information.
|
|
|
|
***
|
|
|
|
****************************************************************************
|
|
|
|
****************************************************************************/
|
|
|
|
#ifndef _MSM_VENC_H_
|
|
|
|
#define _MSM_VENC_H_
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2009-10-14 05:57:16 +02:00
|
|
|
#include <linux/types.h>
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_MAX_RECON_BUFFERS 2
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#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
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
enum venc_flush_type {
|
|
|
|
VENC_FLUSH_INPUT,
|
|
|
|
VENC_FLUSH_OUTPUT,
|
|
|
|
VENC_FLUSH_ALL
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
enum venc_state_type {
|
|
|
|
VENC_STATE_PAUSE = 0x1,
|
|
|
|
VENC_STATE_START = 0x2,
|
|
|
|
VENC_STATE_STOP = 0x4
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
enum venc_mem_region_enum {
|
|
|
|
VENC_PMEM_EBI1,
|
|
|
|
VENC_PMEM_SMI
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_buf_type {
|
|
|
|
unsigned int region;
|
|
|
|
unsigned int phys;
|
|
|
|
unsigned int size;
|
|
|
|
int offset;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_qp_range {
|
|
|
|
unsigned int min_qp;
|
|
|
|
unsigned int max_qp;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_frame_rate {
|
|
|
|
unsigned int frame_rate_num;
|
|
|
|
unsigned int frame_rate_den;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_slice_info {
|
|
|
|
unsigned int slice_mode;
|
|
|
|
unsigned int units_per_slice;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_h263_config {
|
|
|
|
unsigned int profile;
|
|
|
|
unsigned int level;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_h264_config {
|
|
|
|
unsigned int profile;
|
|
|
|
unsigned int level;
|
|
|
|
unsigned int max_nal;
|
|
|
|
unsigned int idr_period;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_pmem {
|
|
|
|
int src;
|
2009-10-14 05:57:16 +02:00
|
|
|
int fd;
|
2010-03-04 01:26:26 +01:00
|
|
|
unsigned int offset;
|
|
|
|
void *virt;
|
|
|
|
void *phys;
|
|
|
|
unsigned int size;
|
2009-10-14 05:57:16 +02:00
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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;
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2009-10-14 05:57:16 +02:00
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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;
|
2009-10-14 05:57:16 +02:00
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_buffer_flush {
|
|
|
|
unsigned int flush_mode;
|
2009-10-14 05:57:16 +02:00
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
union venc_msg_data {
|
|
|
|
struct venc_buffer buf;
|
|
|
|
struct venc_buffer_flush flush_ret;
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2009-10-14 05:57:16 +02:00
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_msg {
|
|
|
|
unsigned int status_code;
|
|
|
|
unsigned int msg_code;
|
|
|
|
union venc_msg_data msg_data;
|
|
|
|
unsigned int msg_data_size;
|
2009-10-14 05:57:16 +02:00
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
union venc_codec_config {
|
|
|
|
struct venc_mpeg4_config mpeg4_params;
|
|
|
|
struct venc_h263_config h263_params;
|
|
|
|
struct venc_h264_config h264_params;
|
2009-10-14 05:57:16 +02:00
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
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;
|
2009-10-14 05:57:16 +02:00
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_hdr_config {
|
|
|
|
struct venc_common_config config_params;
|
|
|
|
union venc_codec_config codec_params;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_init_config {
|
|
|
|
struct venc_q6_config q6_config;
|
|
|
|
struct venc_buffers q6_bufs;
|
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
struct venc_seq_config {
|
|
|
|
int size;
|
|
|
|
struct venc_pmem buf;
|
|
|
|
struct venc_q6_config q6_config;
|
2009-10-14 05:57:16 +02:00
|
|
|
};
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2009-10-14 05:57:16 +02:00
|
|
|
#define VENC_IOCTL_MAGIC 'V'
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_READ_NEXT_MSG _IOWR(VENC_IOCTL_MAGIC, 1, struct venc_msg)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_STOP_READ_MSG _IO(VENC_IOCTL_MAGIC, 2)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_SET_INPUT_BUFFER _IOW(VENC_IOCTL_MAGIC, 3, struct venc_pmem)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_SET_OUTPUT_BUFFER _IOW(VENC_IOCTL_MAGIC, 4, struct venc_pmem)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_START _IOW(VENC_IOCTL_MAGIC, 5, struct venc_init_config)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_ENCODE_FRAME _IOW(VENC_IOCTL_MAGIC, 6, struct venc_buffer)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_FILL_OUTPUT_BUFFER _IOW(VENC_IOCTL_MAGIC, 7, struct venc_buffer)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_FLUSH _IOW(VENC_IOCTL_MAGIC, 8, struct venc_buffer_flush)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_PAUSE _IO(VENC_IOCTL_MAGIC, 9)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_RESUME _IO(VENC_IOCTL_MAGIC, 10)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_STOP _IO(VENC_IOCTL_MAGIC, 11)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_SET_INTRA_PERIOD _IOW(VENC_IOCTL_MAGIC, 12, int)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_CMD_REQUEST_IFRAME _IO(VENC_IOCTL_MAGIC, 13)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_GET_SEQUENCE_HDR _IOWR(VENC_IOCTL_MAGIC, 14, struct venc_seq_config)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_SET_INTRA_REFRESH _IOW(VENC_IOCTL_MAGIC, 15, int)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_SET_FRAME_RATE _IOW(VENC_IOCTL_MAGIC, 16, struct venc_frame_rate)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_SET_TARGET_BITRATE _IOW(VENC_IOCTL_MAGIC, 17, int)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#define VENC_IOCTL_SET_QP_RANGE _IOW(VENC_IOCTL_MAGIC, 18, struct venc_qp_range)
|
2012-03-08 01:14:53 +01:00
|
|
|
|
2010-03-04 01:26:26 +01:00
|
|
|
#endif
|