diff options
author | Praveen Chavan <pchavan@codeaurora.org> | 2014-04-16 13:01:08 -0700 |
---|---|---|
committer | Vineeta Srivastava <vsrivastava@google.com> | 2014-05-10 13:44:43 -0700 |
commit | ddec801d6d47bca63210dcdd3adace275ffdabe8 (patch) | |
tree | 7990c34fda5fc318988a12f000451ba6901365aa /original-kernel-headers | |
parent | 6260e9a11b21813c5beae11739c28b6ffed62cac (diff) | |
download | msm8x74-ddec801d6d47bca63210dcdd3adace275ffdabe8.tar.gz |
msm8x74: update video kernel headers
Change-Id: Ic4dfc9eee17005516257ce8b347ab5548ce1e833
Diffstat (limited to 'original-kernel-headers')
-rw-r--r-- | original-kernel-headers/linux/msm_vidc_dec.h | 1 | ||||
-rw-r--r-- | original-kernel-headers/linux/msm_vidc_enc.h | 1 | ||||
-rw-r--r-- | original-kernel-headers/linux/videodev2.h | 179 | ||||
-rw-r--r-- | original-kernel-headers/media/msm_media_info.h | 355 | ||||
-rw-r--r-- | original-kernel-headers/media/msm_vidc.h | 130 |
5 files changed, 527 insertions, 139 deletions
diff --git a/original-kernel-headers/linux/msm_vidc_dec.h b/original-kernel-headers/linux/msm_vidc_dec.h index 35279bf..6a1c3cb 100644 --- a/original-kernel-headers/linux/msm_vidc_dec.h +++ b/original-kernel-headers/linux/msm_vidc_dec.h @@ -284,6 +284,7 @@ enum vdec_codec { VDEC_CODECTYPE_VC1 = 0xb, VDEC_CODECTYPE_VC1_RCV = 0xc, VDEC_CODECTYPE_HEVC = 0xd, + VDEC_CODECTYPE_MVC = 0xe, }; enum vdec_mpeg2_profile { diff --git a/original-kernel-headers/linux/msm_vidc_enc.h b/original-kernel-headers/linux/msm_vidc_enc.h index dcc2353..4ce3db1 100644 --- a/original-kernel-headers/linux/msm_vidc_enc.h +++ b/original-kernel-headers/linux/msm_vidc_enc.h @@ -59,6 +59,7 @@ #define VEN_EXTRADATA_QCOMFILLER 0x002 #define VEN_EXTRADATA_SLICEINFO 0x100 #define VEN_EXTRADATA_LTRINFO 0x200 +#define VEN_EXTRADATA_MBINFO 0x400 /*ENCODER CONFIGURATION CONSTANTS*/ diff --git a/original-kernel-headers/linux/videodev2.h b/original-kernel-headers/linux/videodev2.h index e616e10..e0e9503 100644 --- a/original-kernel-headers/linux/videodev2.h +++ b/original-kernel-headers/linux/videodev2.h @@ -682,30 +682,40 @@ struct v4l2_buffer { }; /* Flags for 'flags' field */ -#define V4L2_BUF_FLAG_MAPPED 0x0001 /* Buffer is mapped (flag) */ -#define V4L2_BUF_FLAG_QUEUED 0x0002 /* Buffer is queued for processing */ -#define V4L2_BUF_FLAG_DONE 0x0004 /* Buffer is ready */ -#define V4L2_BUF_FLAG_KEYFRAME 0x0008 /* Image is a keyframe (I-frame) */ -#define V4L2_BUF_FLAG_PFRAME 0x0010 /* Image is a P-frame */ -#define V4L2_BUF_FLAG_BFRAME 0x0020 /* Image is a B-frame */ +#define V4L2_BUF_FLAG_MAPPED 0x0001 /* Buffer is mapped (flag) */ +#define V4L2_BUF_FLAG_QUEUED 0x0002 /* Buffer is queued for processing */ +#define V4L2_BUF_FLAG_DONE 0x0004 /* Buffer is ready */ +#define V4L2_BUF_FLAG_KEYFRAME 0x0008 /* Image is a keyframe (I-frame) */ +#define V4L2_BUF_FLAG_PFRAME 0x0010 /* Image is a P-frame */ +#define V4L2_BUF_FLAG_BFRAME 0x0020 /* Image is a B-frame */ /* Buffer is ready, but the data contained within is corrupted. */ -#define V4L2_BUF_FLAG_ERROR 0x0040 -#define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ -#define V4L2_BUF_FLAG_INPUT 0x0200 /* input field is valid */ -#define V4L2_BUF_FLAG_PREPARED 0x0400 /* Buffer is prepared for queuing */ +#define V4L2_BUF_FLAG_ERROR 0x0040 +#define V4L2_BUF_FLAG_TIMECODE 0x0100 /* timecode field is valid */ +#define V4L2_BUF_FLAG_PREPARED 0x0400 /* Buffer is prepared for queuing */ /* Cache handling flags */ -#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x0800 -#define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x1000 -#define V4L2_BUF_FLAG_EOS 0x2000 -#define V4L2_QCOM_BUF_FLAG_CODECCONFIG 0x4000 -#define V4L2_QCOM_BUF_FLAG_EOSEQ 0x8000 -#define V4L2_QCOM_BUF_TIMESTAMP_INVALID 0x10000 -#define V4L2_QCOM_BUF_FLAG_IDRFRAME 0x20000 /* Image is a IDR-frame */ -#define V4L2_QCOM_BUF_FLAG_DECODEONLY 0x40000 -#define V4L2_QCOM_BUF_DATA_CORRUPT 0x80000 -#define V4L2_QCOM_BUF_DROP_FRAME 0x100000 -#define V4L2_QCOM_BUF_INPUT_UNSUPPORTED 0x200000 -#define V4L2_QCOM_BUF_FLAG_READONLY 0x400000 +#define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x0800 +#define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x1000 +/* Timestamp type */ +#define V4L2_BUF_FLAG_TIMESTAMP_MASK 0xe000 +#define V4L2_BUF_FLAG_TIMESTAMP_UNKNOWN 0x0000 +#define V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC 0x2000 +#define V4L2_BUF_FLAG_TIMESTAMP_COPY 0x4000 +/* Vendor extensions */ +#define V4L2_QCOM_BUF_FLAG_CODECCONFIG 0x10000 +#define V4L2_QCOM_BUF_FLAG_EOSEQ 0x20000 +#define V4L2_QCOM_BUF_TIMESTAMP_INVALID 0x40000 +#define V4L2_QCOM_BUF_FLAG_IDRFRAME 0x80000 /*Image is a IDR-frame*/ +#define V4L2_QCOM_BUF_FLAG_DECODEONLY 0x100000 +#define V4L2_QCOM_BUF_DATA_CORRUPT 0x200000 +#define V4L2_QCOM_BUF_DROP_FRAME 0x400000 +#define V4L2_QCOM_BUF_INPUT_UNSUPPORTED 0x800000 +#define V4L2_QCOM_BUF_FLAG_EOS 0x1000000 +#define V4L2_QCOM_BUF_TS_DISCONTINUITY 0x2000000 +#define V4L2_QCOM_BUF_TS_ERROR 0x4000000 +#define V4L2_QCOM_BUF_FLAG_READONLY 0x8000000 +#define V4L2_MSM_VIDC_BUF_START_CODE_NOT_FOUND 0x10000000 +#define V4L2_MSM_BUF_FLAG_YUV_601_709_CLAMP 0x20000000 +#define V4L2_MSM_BUF_FLAG_MBAFF 0x40000000 /* * O V E R L A Y P R E V I E W @@ -1551,6 +1561,7 @@ enum v4l2_mpeg_video_h264_level { V4L2_MPEG_VIDEO_H264_LEVEL_4_2 = 13, V4L2_MPEG_VIDEO_H264_LEVEL_5_0 = 14, V4L2_MPEG_VIDEO_H264_LEVEL_5_1 = 15, + V4L2_MPEG_VIDEO_H264_LEVEL_5_2 = 16, }; #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_ALPHA (V4L2_CID_MPEG_BASE+360) #define V4L2_CID_MPEG_VIDEO_H264_LOOP_FILTER_BETA (V4L2_CID_MPEG_BASE+361) @@ -1834,10 +1845,15 @@ enum v4l2_mpeg_vidc_extradata { V4L2_MPEG_VIDC_EXTRADATA_MULTISLICE_INFO, V4L2_MPEG_VIDC_EXTRADATA_NUM_CONCEALED_MB, V4L2_MPEG_VIDC_EXTRADATA_METADATA_FILLER, - V4L2_MPEG_VIDC_INDEX_EXTRADATA_INPUT_CROP, - V4L2_MPEG_VIDC_INDEX_EXTRADATA_DIGITAL_ZOOM, - V4L2_MPEG_VIDC_INDEX_EXTRADATA_ASPECT_RATIO, - V4L2_MPEG_VIDC_EXTRADATA_MPEG2_SEQDISP + V4L2_MPEG_VIDC_EXTRADATA_INPUT_CROP, + V4L2_MPEG_VIDC_EXTRADATA_DIGITAL_ZOOM, + V4L2_MPEG_VIDC_EXTRADATA_ASPECT_RATIO, + V4L2_MPEG_VIDC_EXTRADATA_MPEG2_SEQDISP, + V4L2_MPEG_VIDC_EXTRADATA_STREAM_USERDATA, + V4L2_MPEG_VIDC_EXTRADATA_FRAME_QP, + V4L2_MPEG_VIDC_EXTRADATA_FRAME_BITS_INFO, + V4L2_MPEG_VIDC_EXTRADATA_METADATA_MBI, + V4L2_MPEG_VIDC_EXTRADATA_LTR }; #define V4L2_CID_MPEG_VIDC_SET_PERF_LEVEL (V4L2_CID_MPEG_MSM_VIDC_BASE + 26) @@ -1904,6 +1920,117 @@ enum v4l2_mpeg_vidc_video_preserve_text_quality { #define V4L2_CID_MPEG_VIDC_VIDEO_REQUEST_SEQ_HEADER \ (V4L2_CID_MPEG_MSM_VIDC_BASE + 36) +#define V4L2_CID_MPEG_VIDC_VIDEO_LTRMODE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 37) + +enum v4l2_mpeg_vidc_video_ltrmode { + V4L2_MPEG_VIDC_VIDEO_LTR_MODE_DISABLE = 0, + V4L2_MPEG_VIDC_VIDEO_LTR_MODE_MANUAL = 1, + V4L2_MPEG_VIDC_VIDEO_LTR_MODE_PERIODIC = 2 +}; + +#define V4L2_CID_MPEG_VIDC_VIDEO_LTRCOUNT \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 38) + +#define V4L2_CID_MPEG_VIDC_VIDEO_USELTRFRAME \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 39) + +#define V4L2_CID_MPEG_VIDC_VIDEO_MARKLTRFRAME \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 40) + +#define V4L2_CID_MPEG_VIDC_VIDEO_HIER_P_NUM_LAYERS \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 41) + +#define V4L2_CID_MPEG_VIDC_VIDEO_VPX_ERROR_RESILIENCE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 42) + +#define V4L2_CID_MPEG_VIDC_VIDEO_VP8_MIN_QP (V4L2_CID_MPEG_MSM_VIDC_BASE + 43) +#define V4L2_CID_MPEG_VIDC_VIDEO_VP8_MAX_QP (V4L2_CID_MPEG_MSM_VIDC_BASE + 44) + +#define V4L2_CID_MPEG_VIDC_VIDEO_MPEG4_TIME_RESOLUTION \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 45) +#define V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_MODE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 46) + +enum v4l2_mpeg_vidc_video_decoder_multi_stream { + V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_PRIMARY = 0, + V4L2_CID_MPEG_VIDC_VIDEO_STREAM_OUTPUT_SECONDARY = 1, +}; + +#define V4L2_CID_MPEG_VIDC_VIDEO_MVC_BUFFER_LAYOUT \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 47) +enum v4l2_mpeg_vidc_video_mvc_layout { + V4L2_MPEG_VIDC_VIDEO_MVC_SEQUENTIAL = 0, + V4L2_MPEG_VIDC_VIDEO_MVC_TOP_BOTTOM = 1 +}; + +#define V4L2_CID_MPEG_VIDC_VIDEO_CONCEAL_COLOR \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 48) + +#define V4L2_CID_MPEG_VIDC_VIDEO_SCS_THRESHOLD \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 49) + +#define V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 50) +enum v4l2_mpeg_vidc_video_deinterlace { + V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE_DISABLED = 0, + V4L2_CID_MPEG_VIDC_VIDEO_DEINTERLACE_ENABLED = 1 +}; + +#define V4L2_CID_MPEG_VIDC_VIDEO_MPEG2_LEVEL (V4L2_CID_MPEG_MSM_VIDC_BASE+51) +enum v4l2_mpeg_vidc_video_mpeg2_level { + V4L2_MPEG_VIDC_VIDEO_MPEG2_LEVEL_0 = 0, + V4L2_MPEG_VIDC_VIDEO_MPEG2_LEVEL_1 = 1, + V4L2_MPEG_VIDC_VIDEO_MPEG2_LEVEL_2 = 2, + V4L2_MPEG_VIDC_VIDEO_MPEG2_LEVEL_3 = 3, +}; +#define V4L2_CID_MPEG_VIDC_VIDEO_MPEG2_PROFILE (V4L2_CID_MPEG_MSM_VIDC_BASE+52) +enum v4l2_mpeg_vidc_video_mpeg2_profile { + V4L2_MPEG_VIDC_VIDEO_MPEG2_PROFILE_SIMPLE = 0, + V4L2_MPEG_VIDC_VIDEO_MPEG2_PROFILE_MAIN = 1, + V4L2_MPEG_VIDC_VIDEO_MPEG2_PROFILE_422 = 2, + V4L2_MPEG_VIDC_VIDEO_MPEG2_PROFILE_SNR_SCALABLE = 3, + V4L2_MPEG_VIDC_VIDEO_MPEG2_PROFILE_SPATIAL_SCALABLE = 4, + V4L2_MPEG_VIDC_VIDEO_MPEG2_PROFILE_HIGH = 5, +}; + +#define V4L2_CID_MPEG_VIDC_VIDEO_RATE_CONTROL_TIMESTAMP_MODE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 53) +enum v4l2_mpeg_vidc_video_rate_control_timestamp_mode { + V4L2_MPEG_VIDC_VIDEO_RATE_CONTROL_TIMESTAMP_MODE_HONOR = 0, + V4L2_MPEG_VIDC_VIDEO_RATE_CONTROL_TIMESTAMP_MODE_IGNORE = 1, +}; + +#define V4L2_CID_MPEG_VIDC_VIDEO_ENABLE_INITIAL_QP \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 54) + +#define V4L2_CID_MPEG_VIDC_VIDEO_I_FRAME_QP \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 55) + +#define V4L2_CID_MPEG_VIDC_VIDEO_P_FRAME_QP \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 56) + +#define V4L2_CID_MPEG_VIDC_VIDEO_B_FRAME_QP \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 57) + +#define V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_X_RANGE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 58) + +#define V4L2_CID_MPEG_VIDC_VIDEO_PFRAME_X_RANGE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 59) + +#define V4L2_CID_MPEG_VIDC_VIDEO_BFRAME_X_RANGE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 60) + +#define V4L2_CID_MPEG_VIDC_VIDEO_IFRAME_Y_RANGE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 61) + +#define V4L2_CID_MPEG_VIDC_VIDEO_PFRAME_Y_RANGE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 62) + +#define V4L2_CID_MPEG_VIDC_VIDEO_BFRAME_Y_RANGE \ + (V4L2_CID_MPEG_MSM_VIDC_BASE + 63) + /* Camera class control IDs */ #define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900) #define V4L2_CID_CAMERA_CLASS (V4L2_CTRL_CLASS_CAMERA | 1) diff --git a/original-kernel-headers/media/msm_media_info.h b/original-kernel-headers/media/msm_media_info.h index 42c3572..ae72558 100644 --- a/original-kernel-headers/media/msm_media_info.h +++ b/original-kernel-headers/media/msm_media_info.h @@ -6,94 +6,279 @@ #endif enum color_fmts { + /* Venus NV12: + * YUV 4:2:0 image with a plane of 8 bit Y samples followed + * by an interleaved U/V plane containing 8 bit 2x2 subsampled + * colour difference samples. + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X Height | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | Y_Scanlines + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X V | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X V + * U V U V U V U V U V U V X X X X ^ + * U V U V U V U V U V U V X X X X | + * U V U V U V U V U V U V X X X X | + * U V U V U V U V U V U V X X X X UV_Scanlines + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X V + * X X X X X X X X X X X X X X X X --> Buffer size alignment + * + * Y_Stride : Width aligned to 128 + * UV_Stride : Width aligned to 128 + * Y_Scanlines: Height aligned to 32 + * UV_Scanlines: Height/2 aligned to 16 + * Total size = align((Y_Stride * Y_Scanlines + * + UV_Stride * UV_Scanlines + 4096), 4096) + */ COLOR_FMT_NV12, + + /* Venus NV21: + * YUV 4:2:0 image with a plane of 8 bit Y samples followed + * by an interleaved V/U plane containing 8 bit 2x2 subsampled + * colour difference samples. + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X Height | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | Y_Scanlines + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X V | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X V + * V U V U V U V U V U V U X X X X ^ + * V U V U V U V U V U V U X X X X | + * V U V U V U V U V U V U X X X X | + * V U V U V U V U V U V U X X X X UV_Scanlines + * X X X X X X X X X X X X X X X X | + * X X X X X X X X X X X X X X X X V + * X X X X X X X X X X X X X X X X --> Padding & Buffer size alignment + * + * Y_Stride : Width aligned to 128 + * UV_Stride : Width aligned to 128 + * Y_Scanlines: Height aligned to 32 + * UV_Scanlines: Height/2 aligned to 16 + * Total size = align((Y_Stride * Y_Scanlines + * + UV_Stride * UV_Scanlines + 4096), 4096) + */ COLOR_FMT_NV21, + /* Venus NV12_MVTB: + * Two YUV 4:2:0 images/views one after the other + * in a top-bottom layout, same as NV12 + * with a plane of 8 bit Y samples followed + * by an interleaved U/V plane containing 8 bit 2x2 subsampled + * colour difference samples. + * + * + * <-------- Y/UV_Stride --------> + * <------- Width -------> + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X ^ ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X Height | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | Y_Scanlines | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X V | | + * X X X X X X X X X X X X X X X X | View_1 + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X V | + * U V U V U V U V U V U V X X X X ^ | + * U V U V U V U V U V U V X X X X | | + * U V U V U V U V U V U V X X X X | | + * U V U V U V U V U V U V X X X X UV_Scanlines | + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X V V + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X ^ ^ ^ + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X Height | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | Y_Scanlines | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X | | | + * Y Y Y Y Y Y Y Y Y Y Y Y X X X X V | | + * X X X X X X X X X X X X X X X X | View_2 + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X V | + * U V U V U V U V U V U V X X X X ^ | + * U V U V U V U V U V U V X X X X | | + * U V U V U V U V U V U V X X X X | | + * U V U V U V U V U V U V X X X X UV_Scanlines | + * X X X X X X X X X X X X X X X X | | + * X X X X X X X X X X X X X X X X V V + * X X X X X X X X X X X X X X X X --> Buffer size alignment + * + * Y_Stride : Width aligned to 128 + * UV_Stride : Width aligned to 128 + * Y_Scanlines: Height aligned to 32 + * UV_Scanlines: Height/2 aligned to 16 + * View_1 begin at: 0 (zero) + * View_2 begin at: Y_Stride * Y_Scanlines + UV_Stride * UV_Scanlines + * Total size = align((2*(Y_Stride * Y_Scanlines) + * + 2*(UV_Stride * UV_Scanlines) + 4096), 4096) + */ + COLOR_FMT_NV12_MVTB, }; -#define VENUS_Y_STRIDE(__color_fmt, __width) ({\ - unsigned int __alignment, __stride = 0; \ - if (__width) { \ - switch (__color_fmt) { \ - case COLOR_FMT_NV12: \ - __alignment = 128; \ - __stride = MSM_MEDIA_ALIGN(__width, __alignment);\ - break;\ - default:\ - break;\ - }\ - } \ - __stride;\ -}) - -#define VENUS_UV_STRIDE(__color_fmt, __width) ({\ - unsigned int __alignment, __stride = 0; \ - if (__width) {\ - switch (__color_fmt) { \ - case COLOR_FMT_NV12: \ - __alignment = 128; \ - __stride = MSM_MEDIA_ALIGN(__width, __alignment); \ - break; \ - default: \ - break; \ - } \ - } \ - __stride; \ -}) - -#define VENUS_Y_SCANLINES(__color_fmt, __height) ({ \ - unsigned int __alignment, __sclines = 0; \ - if (__height) {\ - switch (__color_fmt) { \ - case COLOR_FMT_NV12: \ - __alignment = 32; \ - __sclines = MSM_MEDIA_ALIGN(__height, __alignment); \ - break; \ - default: \ - break; \ - } \ - } \ - __sclines; \ -}) - -#define VENUS_UV_SCANLINES(__color_fmt, __height) ({\ - unsigned int __alignment, __sclines = 0; \ - if (__height) {\ - switch (__color_fmt) { \ - case COLOR_FMT_NV12: \ - __alignment = 16; \ - __sclines = MSM_MEDIA_ALIGN(((__height + 1) >> 1), __alignment); \ - break; \ - default: \ - break; \ - } \ - } \ - __sclines; \ -}) - -#define VENUS_BUFFER_SIZE( \ - __color_fmt, __width, __height) ({ \ - unsigned int __uv_alignment; \ - unsigned int __size = 0; \ - unsigned int __y_plane, __uv_plane, __y_stride, \ - __uv_stride, __y_sclines, __uv_sclines; \ - if (__width && __height) {\ - __y_stride = VENUS_Y_STRIDE(__color_fmt, __width); \ - __uv_stride = VENUS_UV_STRIDE(__color_fmt, __width); \ - __y_sclines = VENUS_Y_SCANLINES(__color_fmt, __height); \ - __uv_sclines = VENUS_UV_SCANLINES(__color_fmt, __height); \ - switch (__color_fmt) { \ - case COLOR_FMT_NV12: \ - __uv_alignment = 4096; \ - __y_plane = __y_stride * __y_sclines; \ - __uv_plane = __uv_stride * __uv_sclines + __uv_alignment; \ - __size = __y_plane + __uv_plane; \ - __size = MSM_MEDIA_ALIGN(__size, 4096); \ - break; \ - default: \ - break; \ - } \ - } \ - __size; \ -}) +static inline unsigned int VENUS_Y_STRIDE(int color_fmt, int width) +{ + unsigned int alignment, stride = 0; + if (!width) + goto invalid_input; + + switch (color_fmt) { + case COLOR_FMT_NV21: + case COLOR_FMT_NV12: + case COLOR_FMT_NV12_MVTB: + alignment = 128; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + default: + break; + } +invalid_input: + return stride; +} + +static inline unsigned int VENUS_UV_STRIDE(int color_fmt, int width) +{ + unsigned int alignment, stride = 0; + if (!width) + goto invalid_input; + + switch (color_fmt) { + case COLOR_FMT_NV21: + case COLOR_FMT_NV12: + case COLOR_FMT_NV12_MVTB: + alignment = 128; + stride = MSM_MEDIA_ALIGN(width, alignment); + break; + default: + break; + } +invalid_input: + return stride; +} + +static inline unsigned int VENUS_Y_SCANLINES(int color_fmt, int height) +{ + unsigned int alignment, sclines = 0; + if (!height) + goto invalid_input; + + switch (color_fmt) { + case COLOR_FMT_NV21: + case COLOR_FMT_NV12: + case COLOR_FMT_NV12_MVTB: + alignment = 32; + sclines = MSM_MEDIA_ALIGN(height, alignment); + break; + default: + break; + } +invalid_input: + return sclines; +} + +static inline unsigned int VENUS_UV_SCANLINES(int color_fmt, int height) +{ + unsigned int alignment, sclines = 0; + if (!height) + goto invalid_input; + + switch (color_fmt) { + case COLOR_FMT_NV21: + case COLOR_FMT_NV12: + case COLOR_FMT_NV12_MVTB: + alignment = 16; + sclines = MSM_MEDIA_ALIGN(((height + 1) >> 1), alignment); + break; + default: + break; + } +invalid_input: + return sclines; +} + +static inline unsigned int VENUS_BUFFER_SIZE( + int color_fmt, int width, int height) +{ + unsigned int uv_alignment; + unsigned int size = 0; + unsigned int y_plane, uv_plane, y_stride, + uv_stride, y_sclines, uv_sclines; + if (!width || !height) + goto invalid_input; + + y_stride = VENUS_Y_STRIDE(color_fmt, width); + uv_stride = VENUS_UV_STRIDE(color_fmt, width); + y_sclines = VENUS_Y_SCANLINES(color_fmt, height); + uv_sclines = VENUS_UV_SCANLINES(color_fmt, height); + switch (color_fmt) { + case COLOR_FMT_NV21: + case COLOR_FMT_NV12: + uv_alignment = 4096; + y_plane = y_stride * y_sclines; + uv_plane = uv_stride * uv_sclines + uv_alignment; + size = y_plane + uv_plane; + size = MSM_MEDIA_ALIGN(size, 4096); + break; + case COLOR_FMT_NV12_MVTB: + uv_alignment = 4096; + y_plane = y_stride * y_sclines; + uv_plane = uv_stride * uv_sclines; + size = y_plane + uv_plane; + size = 2 * size + uv_alignment; + size = MSM_MEDIA_ALIGN(size, 4096); + break; + default: + break; + } +invalid_input: + return size; +} + +static inline unsigned int VENUS_VIEW2_OFFSET( + int color_fmt, int width, int height) +{ + unsigned int offset = 0; + unsigned int y_plane, uv_plane, y_stride, + uv_stride, y_sclines, uv_sclines; + if (!width || !height) + goto invalid_input; + + y_stride = VENUS_Y_STRIDE(color_fmt, width); + uv_stride = VENUS_UV_STRIDE(color_fmt, width); + y_sclines = VENUS_Y_SCANLINES(color_fmt, height); + uv_sclines = VENUS_UV_SCANLINES(color_fmt, height); + switch (color_fmt) { + case COLOR_FMT_NV12_MVTB: + y_plane = y_stride * y_sclines; + uv_plane = uv_stride * uv_sclines; + offset = y_plane + uv_plane; + break; + default: + break; + } +invalid_input: + return offset; +} #endif diff --git a/original-kernel-headers/media/msm_vidc.h b/original-kernel-headers/media/msm_vidc.h index 2164275..0a91e32 100644 --- a/original-kernel-headers/media/msm_vidc.h +++ b/original-kernel-headers/media/msm_vidc.h @@ -25,10 +25,11 @@ int msm_vidc_enum_fmt(void *instance, struct v4l2_fmtdesc *f); int msm_vidc_s_fmt(void *instance, struct v4l2_format *f); int msm_vidc_g_fmt(void *instance, struct v4l2_format *f); int msm_vidc_s_ctrl(void *instance, struct v4l2_control *a); +int msm_vidc_s_ext_ctrl(void *instance, struct v4l2_ext_controls *a); int msm_vidc_g_ctrl(void *instance, struct v4l2_control *a); int msm_vidc_reqbufs(void *instance, struct v4l2_requestbuffers *b); int msm_vidc_prepare_buf(void *instance, struct v4l2_buffer *b); -int msm_vidc_release_buf(void *instance, struct v4l2_buffer *b); +int msm_vidc_release_buffers(void *instance, int buffer_type); int msm_vidc_qbuf(void *instance, struct v4l2_buffer *b); int msm_vidc_dqbuf(void *instance, struct v4l2_buffer *b); int msm_vidc_streamon(void *instance, enum v4l2_buf_type i); @@ -48,6 +49,14 @@ int msm_vidc_wait(void *instance); int msm_vidc_s_parm(void *instance, struct v4l2_streamparm *a); int msm_vidc_enum_framesizes(void *instance, struct v4l2_frmsizeenum *fsize); #endif +struct msm_vidc_extradata_header { + unsigned int size; + unsigned int:32; /** Keeping binary compatibility */ + unsigned int:32; /* with firmware and OpenMAX IL **/ + unsigned int type; /* msm_vidc_extradata_type */ + unsigned int data_size; + unsigned char data[1]; +}; struct msm_vidc_interlace_payload { unsigned int format; }; @@ -64,7 +73,6 @@ struct msm_vidc_concealmb_payload { struct msm_vidc_recoverysei_payload { unsigned int flags; }; - struct msm_vidc_aspect_ratio_payload { unsigned int size; unsigned int version; @@ -72,7 +80,6 @@ struct msm_vidc_aspect_ratio_payload { unsigned int aspect_width; unsigned int aspect_height; }; - struct msm_vidc_mpeg2_seqdisp_payload { unsigned int video_format; bool color_descp; @@ -82,7 +89,30 @@ struct msm_vidc_mpeg2_seqdisp_payload { unsigned int disp_width; unsigned int disp_height; }; - +struct msm_vidc_input_crop_payload { + unsigned int size; + unsigned int version; + unsigned int port_index; + unsigned int left; + unsigned int top; + unsigned int width; + unsigned int height; +}; +struct msm_vidc_digital_zoom_payload { + unsigned int size; + unsigned int version; + unsigned int port_index; + unsigned int zoom_width; + unsigned int zoom_height; +}; +struct msm_vidc_extradata_index { + unsigned int type; + union { + struct msm_vidc_input_crop_payload input_crop; + struct msm_vidc_digital_zoom_payload digital_zoom; + struct msm_vidc_aspect_ratio_payload aspect_ratio; + }; +}; struct msm_vidc_panscan_window { unsigned int panscan_height_offset; unsigned int panscan_width_offset; @@ -93,35 +123,79 @@ struct msm_vidc_panscan_window_payload { unsigned int num_panscan_windows; struct msm_vidc_panscan_window wnd[1]; }; +struct msm_vidc_stream_userdata_payload { + unsigned int type; + unsigned int data[1]; +}; +struct msm_vidc_frame_qp_payload { + unsigned int frame_qp; +}; +struct msm_vidc_frame_bits_info_payload { + unsigned int frame_bits; + unsigned int header_bits; +}; +struct msm_vidc_s3d_frame_packing_payload { + unsigned int fpa_id; + unsigned int cancel_flag; + unsigned int fpa_type; + unsigned int quin_cunx_flag; + unsigned int content_interprtation_type; + unsigned int spatial_flipping_flag; + unsigned int frame0_flipped_flag; + unsigned int field_views_flag; + unsigned int current_frame_is_frame0_flag; + unsigned int frame0_self_contained_flag; + unsigned int frame1_self_contained_flag; + unsigned int frame0_graid_pos_x; + unsigned int frame0_graid_pos_y; + unsigned int frame1_graid_pos_x; + unsigned int frame1_graid_pos_y; + unsigned int fpa_reserved_byte; + unsigned int fpa_repetition_period; + unsigned int fpa_extension_flag; +}; + enum msm_vidc_extradata_type { - EXTRADATA_NONE = 0x00000000, - EXTRADATA_MB_QUANTIZATION = 0x00000001, - EXTRADATA_INTERLACE_VIDEO = 0x00000002, - EXTRADATA_VC1_FRAMEDISP = 0x00000003, - EXTRADATA_VC1_SEQDISP = 0x00000004, - EXTRADATA_TIMESTAMP = 0x00000005, - EXTRADATA_S3D_FRAME_PACKING = 0x00000006, - EXTRADATA_FRAME_RATE = 0x00000007, - EXTRADATA_PANSCAN_WINDOW = 0x00000008, - EXTRADATA_RECOVERY_POINT_SEI = 0x00000009, - EXTRADATA_MPEG2_SEQDISP = 0x0000000D, - EXTRADATA_MULTISLICE_INFO = 0x7F100000, - EXTRADATA_NUM_CONCEALED_MB = 0x7F100001, - EXTRADATA_INDEX = 0x7F100002, - EXTRADATA_ASPECT_RATIO = 0x7F100003, - EXTRADATA_METADATA_FILLER = 0x7FE00002, + MSM_VIDC_EXTRADATA_NONE = 0x00000000, + MSM_VIDC_EXTRADATA_MB_QUANTIZATION = 0x00000001, + MSM_VIDC_EXTRADATA_INTERLACE_VIDEO = 0x00000002, + MSM_VIDC_EXTRADATA_VC1_FRAMEDISP = 0x00000003, + MSM_VIDC_EXTRADATA_VC1_SEQDISP = 0x00000004, + MSM_VIDC_EXTRADATA_TIMESTAMP = 0x00000005, + MSM_VIDC_EXTRADATA_S3D_FRAME_PACKING = 0x00000006, + MSM_VIDC_EXTRADATA_FRAME_RATE = 0x00000007, + MSM_VIDC_EXTRADATA_PANSCAN_WINDOW = 0x00000008, + MSM_VIDC_EXTRADATA_RECOVERY_POINT_SEI = 0x00000009, + MSM_VIDC_EXTRADATA_MPEG2_SEQDISP = 0x0000000D, + MSM_VIDC_EXTRADATA_STREAM_USERDATA = 0x0000000E, + MSM_VIDC_EXTRADATA_FRAME_QP = 0x0000000F, + MSM_VIDC_EXTRADATA_FRAME_BITS_INFO = 0x00000010, + MSM_VIDC_EXTRADATA_INPUT_CROP = 0x0700000E, + MSM_VIDC_EXTRADATA_DIGITAL_ZOOM = 0x07000010, + MSM_VIDC_EXTRADATA_MULTISLICE_INFO = 0x7F100000, + MSM_VIDC_EXTRADATA_NUM_CONCEALED_MB = 0x7F100001, + MSM_VIDC_EXTRADATA_INDEX = 0x7F100002, + MSM_VIDC_EXTRADATA_ASPECT_RATIO = 0x7F100003, + MSM_VIDC_EXTRADATA_METADATA_LTR = 0x7F100004, + MSM_VIDC_EXTRADATA_METADATA_FILLER = 0x7FE00002, + MSM_VIDC_EXTRADATA_METADATA_MBI = 0x7F100005, }; enum msm_vidc_interlace_type { - INTERLACE_FRAME_PROGRESSIVE = 0x01, - INTERLACE_INTERLEAVE_FRAME_TOPFIELDFIRST = 0x02, - INTERLACE_INTERLEAVE_FRAME_BOTTOMFIELDFIRST = 0x04, - INTERLACE_FRAME_TOPFIELDFIRST = 0x08, - INTERLACE_FRAME_BOTTOMFIELDFIRST = 0x10, + MSM_VIDC_INTERLACE_FRAME_PROGRESSIVE = 0x01, + MSM_VIDC_INTERLACE_INTERLEAVE_FRAME_TOPFIELDFIRST = 0x02, + MSM_VIDC_INTERLACE_INTERLEAVE_FRAME_BOTTOMFIELDFIRST = 0x04, + MSM_VIDC_INTERLACE_FRAME_TOPFIELDFIRST = 0x08, + MSM_VIDC_INTERLACE_FRAME_BOTTOMFIELDFIRST = 0x10, }; enum msm_vidc_recovery_sei { - FRAME_RECONSTRUCTION_INCORRECT = 0x0, - FRAME_RECONSTRUCTION_CORRECT = 0x01, - FRAME_RECONSTRUCTION_APPROXIMATELY_CORRECT = 0x02, + MSM_VIDC_FRAME_RECONSTRUCTION_INCORRECT = 0x0, + MSM_VIDC_FRAME_RECONSTRUCTION_CORRECT = 0x01, + MSM_VIDC_FRAME_RECONSTRUCTION_APPROXIMATELY_CORRECT = 0x02, +}; +enum msm_vidc_userdata_type { + MSM_VIDC_USERDATA_TYPE_FRAME = 0x1, + MSM_VIDC_USERDATA_TYPE_TOP_FIELD = 0x2, + MSM_VIDC_USERDATA_TYPE_BOTTOM_FIELD = 0x3, }; #endif |