summaryrefslogtreecommitdiff
path: root/original-kernel-headers
diff options
context:
space:
mode:
authorPraveen Chavan <pchavan@codeaurora.org>2014-04-16 13:01:08 -0700
committerVineeta Srivastava <vsrivastava@google.com>2014-05-10 13:44:43 -0700
commitddec801d6d47bca63210dcdd3adace275ffdabe8 (patch)
tree7990c34fda5fc318988a12f000451ba6901365aa /original-kernel-headers
parent6260e9a11b21813c5beae11739c28b6ffed62cac (diff)
downloadmsm8x74-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.h1
-rw-r--r--original-kernel-headers/linux/msm_vidc_enc.h1
-rw-r--r--original-kernel-headers/linux/videodev2.h179
-rw-r--r--original-kernel-headers/media/msm_media_info.h355
-rw-r--r--original-kernel-headers/media/msm_vidc.h130
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