123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278 |
- #ifndef _MSM_VDEC_H_
- #define _MSM_VDEC_H_
- #include <linux/types.h>
- #define VDEC_IOCTL_MAGIC 'v'
- #define VDEC_IOCTL_INITIALIZE _IOWR(VDEC_IOCTL_MAGIC, 1, struct vdec_init)
- #define VDEC_IOCTL_SETBUFFERS _IOW(VDEC_IOCTL_MAGIC, 2, struct vdec_buffer)
- #define VDEC_IOCTL_QUEUE _IOWR(VDEC_IOCTL_MAGIC, 3, \
- struct vdec_input_buf)
- #define VDEC_IOCTL_REUSEFRAMEBUFFER _IOW(VDEC_IOCTL_MAGIC, 4, unsigned int)
- #define VDEC_IOCTL_FLUSH _IOW(VDEC_IOCTL_MAGIC, 5, unsigned int)
- #define VDEC_IOCTL_EOS _IO(VDEC_IOCTL_MAGIC, 6)
- #define VDEC_IOCTL_GETMSG _IOR(VDEC_IOCTL_MAGIC, 7, struct vdec_msg)
- #define VDEC_IOCTL_CLOSE _IO(VDEC_IOCTL_MAGIC, 8)
- #define VDEC_IOCTL_FREEBUFFERS _IOW(VDEC_IOCTL_MAGIC, 9, struct vdec_buf_info)
- #define VDEC_IOCTL_GETDECATTRIBUTES _IOR(VDEC_IOCTL_MAGIC, 10, \
- struct vdec_dec_attributes)
- #define VDEC_IOCTL_GETVERSION _IOR(VDEC_IOCTL_MAGIC, 11, struct vdec_version)
- #define VDEC_IOCTL_SETPROPERTY _IOW \
- (VDEC_IOCTL_MAGIC, 12, struct vdec_property_info)
- #define VDEC_IOCTL_GETPROPERTY _IOR \
- (VDEC_IOCTL_MAGIC, 13, struct vdec_property_info)
- #define VDEC_IOCTL_PERFORMANCE_CHANGE_REQ _IOW(VDEC_IOCTL_MAGIC, 14, \
- unsigned int)
- enum {
- VDEC_FRAME_DECODE_OK,
- VDEC_FRAME_DECODE_ERR,
- VDEC_FATAL_ERR,
- VDEC_FLUSH_FINISH,
- VDEC_EOS,
- VDEC_FRAME_FLUSH,
- VDEC_STREAM_SWITCH,
- VDEC_SUSPEND_FINISH,
- VDEC_BUFFER_CONSUMED
- };
- enum {
- VDEC_FLUSH_INPUT,
- VDEC_FLUSH_OUTPUT,
- VDEC_FLUSH_ALL
- };
- enum {
- VDEC_BUFFER_TYPE_INPUT,
- VDEC_BUFFER_TYPE_OUTPUT,
- VDEC_BUFFER_TYPE_INTERNAL1,
- VDEC_BUFFER_TYPE_INTERNAL2,
- };
- enum {
- VDEC_QUEUE_SUCCESS,
- VDEC_QUEUE_FAILED,
- VDEC_QUEUE_BADSTATE,
- };
- enum {
- VDEC_COLOR_FORMAT_NV21 = 0x01,
- VDEC_COLOR_FORMAT_NV21_YAMOTO = 0x02
- };
- enum vdec_property_id {
- VDEC_FOURCC,
- VDEC_PROFILE,
- VDEC_LEVEL,
- VDEC_DIMENSIONS,
- VDEC_CWIN,
- VDEC_INPUT_BUF_REQ,
- VDEC_OUTPUT_BUF_REQ,
- VDEC_LUMA_CHROMA_STRIDE,
- VDEC_NUM_DAL_PORTS,
- VDEC_PRIORITY,
- VDEC_FRAME_ALIGNMENT
- };
- enum {
- PERF_REQUEST_SET_MIN = 0,
- PERF_REQUEST_LOWER,
- PERF_REQUEST_RAISE,
- PERF_REQUEST_SET_MAX
- };
- struct vdec_input_buf_info {
- u32 offset;
- u32 data;
- u32 size;
- int timestamp_lo;
- int timestamp_hi;
- int avsync_state;
- u32 flags;
- };
- struct vdec_buf_desc {
- u32 bufsize;
- u32 num_min_buffers;
- u32 num_max_buffers;
- };
- struct vdec_buf_req {
- u32 max_input_queue_size;
- struct vdec_buf_desc input;
- struct vdec_buf_desc output;
- struct vdec_buf_desc dec_req1;
- struct vdec_buf_desc dec_req2;
- };
- struct vdec_region_info {
- u32 src_id;
- u32 offset;
- u32 size;
- };
- struct vdec_config {
- u32 fourcc; /* video format */
- u32 width; /* source width */
- u32 height; /* source height */
- u32 order; /* render decoder order */
- u32 notify_enable; /* enable notify input buffer done event */
- u32 vc1_rowbase;
- u32 h264_startcode_detect;
- u32 h264_nal_len_size;
- u32 postproc_flag;
- u32 fruc_enable;
- u32 color_format; /* used to set YUV color format */
- };
- struct vdec_vc1_panscan_regions {
- int num;
- int width[4];
- int height[4];
- int xoffset[4];
- int yoffset[4];
- };
- struct vdec_cropping_window {
- u32 x1;
- u32 y1;
- u32 x2;
- u32 y2;
- };
- struct vdec_frame_info {
- u32 status; /* video decode status */
- u32 offset; /* buffer offset */
- u32 data1; /* user data field 1 */
- u32 data2; /* user data field 2 */
- int timestamp_lo; /* lower 32 bits timestamp, in msec */
- int timestamp_hi; /* higher 32 bits timestamp, in msec */
- int cal_timestamp_lo; /* lower 32 bits cal timestamp, in msec */
- int cal_timestamp_hi; /* higher 32 bits cal timestamp, in msec */
- u32 dec_width; /* frame roi width */
- u32 dec_height; /* frame roi height */
- struct vdec_cropping_window cwin; /* The frame cropping window */
- u32 picture_type[2]; /* picture coding type */
- u32 picture_format; /* picture coding format */
- u32 vc1_rangeY; /* luma range mapping */
- u32 vc1_rangeUV; /* chroma range mapping */
- u32 picture_resolution; /* scaling factor */
- u32 frame_disp_repeat; /* how often repeated by disp */
- u32 repeat_first_field; /* repeat 1st field after 2nd */
- u32 top_field_first; /* top field displayed first */
- u32 interframe_interp; /* not for inter-frame interp */
- struct vdec_vc1_panscan_regions panscan; /* pan region */
- u32 concealed_macblk_num; /* number of concealed macro blk */
- u32 flags; /* input flags */
- u32 performance_stats; /* performance statistics returned by decoder */
- u32 data3; /* user data field 3 */
- };
- struct vdec_buf_info {
- u32 buf_type;
- struct vdec_region_info region;
- u32 num_buf;
- u32 islast;
- };
- struct vdec_buffer {
- u32 pmem_id;
- struct vdec_buf_info buf;
- };
- struct vdec_sequence {
- u8 *header;
- u32 len;
- };
- struct vdec_config_sps {
- struct vdec_config cfg;
- struct vdec_sequence seq;
- };
- #define VDEC_MSG_REUSEINPUTBUFFER 1
- #define VDEC_MSG_FRAMEDONE 2
- struct vdec_msg {
- u32 id;
- union {
- /* id = VDEC_MSG_REUSEINPUTBUFFER */
- u32 buf_id;
- /* id = VDEC_MSG_FRAMEDONE */
- struct vdec_frame_info vfr_info;
- };
- };
- struct vdec_init {
- struct vdec_config_sps sps_cfg;
- struct vdec_buf_req *buf_req;
- };
- struct vdec_input_buf {
- u32 pmem_id;
- struct vdec_input_buf_info buffer;
- struct vdec_queue_status *queue_status;
- };
- struct vdec_queue_status {
- u32 status;
- };
- struct vdec_dec_attributes {
- u32 fourcc;
- u32 profile;
- u32 level;
- u32 dec_pic_width;
- u32 dec_pic_height;
- struct vdec_buf_desc input;
- struct vdec_buf_desc output;
- struct vdec_buf_desc dec_req1;
- struct vdec_buf_desc dec_req2;
- };
- struct vdec_version {
- u32 major;
- u32 minor;
- };
- struct dal_vdec_rectangle {
- u32 width;
- u32 height;
- };
- struct stride_type {
- u32 luma;
- u32 chroma;
- };
- struct frame_alignment_type {
- u32 luma_width;
- u32 luma_height;
- u32 chroma_width;
- u32 chroma_height;
- u32 chroma_offset;
- };
- union vdec_property {
- u32 fourcc;
- u32 profile;
- u32 level;
- struct dal_vdec_rectangle dim;
- struct vdec_cropping_window cw;
- struct vdec_buf_desc input_req;
- struct vdec_buf_desc output_req;
- struct stride_type stride;
- u32 num_dal_ports;
- u32 priority;
- struct frame_alignment_type frame_alignment;
- u32 def_type;
- };
- struct vdec_property_info {
- enum vdec_property_id id;
- union vdec_property property;
- };
- #endif /* _MSM_VDEC_H_ */
|