| /* 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_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) |
| |
| 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, |
| }; |
| |
| 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 reserved; |
| }; |
| |
| 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; |
| }; |
| |
| #endif /* _MSM_VDEC_H_ */ |