OSDN Git Service

msm: vidc: Add support for color space information
authorManikanta Sivapala <msivap@codeaurora.org>
Wed, 25 May 2016 05:38:40 +0000 (22:38 -0700)
committerManikanta Sivapala <msivap@codeaurora.org>
Tue, 9 Aug 2016 06:07:54 +0000 (11:37 +0530)
When clients specify color space information, venus HW
should embed it in the bit stream. This helps to
regenerate original colors when decoded by decoder.
When decoder detects the color space VUI, Venus fills
the corresponding extradata

CRs-Fixed: 1026204
Change-Id: Ie9523558c23a8edc7a7ee058937658dd87ef5b16
Signed-off-by: Praneeth Paladugu <ppaladug@codeaurora.org>
Signed-off-by: Manikanta Sivapala <msivap@codeaurora.org>
drivers/media/platform/msm/vidc/hfi_packetization.c
drivers/media/platform/msm/vidc/msm_vdec.c
drivers/media/platform/msm/vidc/msm_venc.c
drivers/media/platform/msm/vidc/msm_vidc_common.c
drivers/media/platform/msm/vidc/msm_vidc_debug.c
drivers/media/platform/msm/vidc/vidc_hfi.h
drivers/media/platform/msm/vidc/vidc_hfi_api.h
drivers/media/platform/msm/vidc/vidc_hfi_helper.h
include/uapi/linux/v4l2-controls.h
include/uapi/media/msm_vidc.h

index cbe7702..9b9b744 100644 (file)
@@ -675,6 +675,12 @@ static int get_hfi_extradata_index(enum hal_extradata_id index)
        case HAL_EXTRADATA_PQ_INFO:
                ret = HFI_PROPERTY_PARAM_VENC_OVERRIDE_QP_EXTRADATA;
                break;
+       case HAL_EXTRADATA_VUI_DISPLAY_INFO:
+               ret = HFI_PROPERTY_PARAM_VUI_DISPLAY_INFO_EXTRADATA;
+               break;
+       case HAL_EXTRADATA_VPX_COLORSPACE:
+               ret = HFI_PROPERTY_PARAM_VDEC_VPX_COLORSPACE_EXTRADATA;
+               break;
        default:
                dprintk(VIDC_WARN, "Extradata index not found: %d\n", index);
                break;
@@ -2127,6 +2133,26 @@ int create_pkt_cmd_session_set_property(
                pkt->size += sizeof(u32) + sizeof(struct hfi_enable);
                break;
        }
+       case HAL_PARAM_VENC_VIDEO_SIGNAL_INFO:
+       {
+               struct hal_video_signal_info *hal = pdata;
+               struct hfi_video_signal_metadata *signal_info =
+                       (struct hfi_video_signal_metadata *)
+                       &pkt->rg_property_data[1];
+
+               signal_info->enable = true;
+               signal_info->video_format = MSM_VIDC_NTSC;
+               signal_info->video_full_range = hal->full_range;
+               signal_info->color_description = MSM_VIDC_COLOR_DESC_PRESENT;
+               signal_info->color_primaries = hal->color_space;
+               signal_info->transfer_characteristics = hal->transfer_chars;
+               signal_info->matrix_coeffs = hal->matrix_coeffs;
+
+               pkt->rg_property_data[0] =
+                       HFI_PROPERTY_PARAM_VENC_VIDEO_SIGNAL_INFO;
+               pkt->size += sizeof(u32) + sizeof(*signal_info);
+               break;
+       }
        /* FOLLOWING PROPERTIES ARE NOT IMPLEMENTED IN CORE YET */
        case HAL_CONFIG_BUFFER_REQUIREMENTS:
        case HAL_CONFIG_PRIORITY:
index 0c26cc7..96fefea 100644 (file)
@@ -247,7 +247,7 @@ static struct msm_vidc_ctrl msm_vdec_ctrls[] = {
                .name = "Extradata Type",
                .type = V4L2_CTRL_TYPE_MENU,
                .minimum = V4L2_MPEG_VIDC_EXTRADATA_NONE,
-               .maximum = V4L2_MPEG_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI,
+               .maximum = V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE,
                .default_value = V4L2_MPEG_VIDC_EXTRADATA_NONE,
                .menu_skip_mask = ~(
                        (1 << V4L2_MPEG_VIDC_EXTRADATA_NONE) |
@@ -273,7 +273,10 @@ static struct msm_vidc_ctrl msm_vdec_ctrls[] = {
                        (1 << V4L2_MPEG_VIDC_EXTRADATA_VQZIP_SEI) |
                        (1 << V4L2_MPEG_VIDC_EXTRADATA_OUTPUT_CROP) |
                        (1 << V4L2_MPEG_VIDC_EXTRADATA_DISPLAY_COLOUR_SEI) |
-                       (1 << V4L2_MPEG_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI)
+                       (1 <<
+                       V4L2_MPEG_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI) |
+                       (1 << V4L2_MPEG_VIDC_EXTRADATA_VUI_DISPLAY) |
+                       (1 << V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE)
                        ),
                .qmenu = mpeg_video_vidc_extradata,
        },
index 55e54f7..c08084a 100644 (file)
@@ -1242,6 +1242,46 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
                .default_value = V4L2_MPEG_VIDC_VIDEO_H264_TRANSFORM_8x8_ENABLE,
                .step = 1,
        },
+       {
+               .id = V4L2_CID_MPEG_VIDC_VIDEO_COLOR_SPACE,
+               .name = "Set Color space",
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .minimum = MSM_VIDC_BT709_5,
+               .maximum = MSM_VIDC_BT2020,
+               .default_value = MSM_VIDC_BT601_6_625,
+               .step = 1,
+               .qmenu = NULL,
+       },
+       {
+               .id = V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE,
+               .name = "Set Color space range",
+               .type = V4L2_CTRL_TYPE_BOOLEAN,
+               .minimum = V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE_DISABLE,
+               .maximum = V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE_ENABLE,
+               .default_value = V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE_DISABLE,
+               .step = 1,
+       },
+       {
+               .id = V4L2_CID_MPEG_VIDC_VIDEO_TRANSFER_CHARS,
+               .name = "Set Color space transfer characterstics",
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .minimum = MSM_VIDC_TRANSFER_BT709_5,
+               .maximum = MSM_VIDC_TRANSFER_BT_2020_12,
+               .default_value = MSM_VIDC_TRANSFER_601_6_625,
+               .step = 1,
+               .qmenu = NULL,
+       },
+       {
+               .id = V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS,
+               .name = "Set Color space matrix coefficients",
+               .type = V4L2_CTRL_TYPE_INTEGER,
+               .minimum = MSM_VIDC_MATRIX_BT_709_5,
+               .maximum = MSM_VIDC_MATRIX_BT_2020_CONST,
+               .default_value = MSM_VIDC_MATRIX_601_6_625,
+               .step = 1,
+               .qmenu = NULL,
+       },
+
 };
 
 #define NUM_CTRLS ARRAY_SIZE(msm_venc_ctrls)
@@ -2105,6 +2145,7 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
        int baselayerid = 0;
        int frameqp = 0;
        int pic_order_cnt = 0;
+       struct hal_video_signal_info signal_info = {0};
 
        if (!inst || !inst->core || !inst->core->device) {
                dprintk(VIDC_ERR, "%s invalid parameters\n", __func__);
@@ -3093,6 +3134,64 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
                pdata = &pic_order_cnt;
                break;
        }
+       case V4L2_CID_MPEG_VIDC_VIDEO_COLOR_SPACE:
+       {
+               signal_info.color_space = ctrl->val;
+               temp_ctrl = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE);
+               signal_info.full_range = temp_ctrl ? temp_ctrl->val : 0;
+               temp_ctrl =
+                       TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_TRANSFER_CHARS);
+               signal_info.transfer_chars = temp_ctrl ? temp_ctrl->val : 0;
+               temp_ctrl =
+                       TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS);
+               signal_info.matrix_coeffs = temp_ctrl ? temp_ctrl->val : 0;
+               property_id = HAL_PARAM_VENC_VIDEO_SIGNAL_INFO;
+               pdata = &signal_info;
+               break;
+       }
+       case V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE:
+       {
+               signal_info.full_range = ctrl->val;
+               temp_ctrl = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_COLOR_SPACE);
+               signal_info.color_space = temp_ctrl ? temp_ctrl->val : 0;
+               temp_ctrl =
+                       TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_TRANSFER_CHARS);
+               signal_info.transfer_chars = temp_ctrl ? temp_ctrl->val : 0;
+               temp_ctrl =
+                       TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS);
+               signal_info.matrix_coeffs = temp_ctrl ? temp_ctrl->val : 0;
+               property_id = HAL_PARAM_VENC_VIDEO_SIGNAL_INFO;
+               pdata = &signal_info;
+               break;
+       }
+       case V4L2_CID_MPEG_VIDC_VIDEO_TRANSFER_CHARS:
+       {
+               signal_info.transfer_chars = ctrl->val;
+               temp_ctrl = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE);
+               signal_info.full_range = temp_ctrl ? temp_ctrl->val : 0;
+               temp_ctrl = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_COLOR_SPACE);
+               signal_info.color_space = temp_ctrl ? temp_ctrl->val : 0;
+               temp_ctrl =
+                       TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS);
+               signal_info.matrix_coeffs = temp_ctrl ? temp_ctrl->val : 0;
+               property_id = HAL_PARAM_VENC_VIDEO_SIGNAL_INFO;
+               pdata = &signal_info;
+               break;
+       }
+       case V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS:
+       {
+               signal_info.matrix_coeffs = ctrl->val;
+               temp_ctrl = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE);
+               signal_info.full_range = temp_ctrl ? temp_ctrl->val : 0;
+               temp_ctrl =
+                       TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_TRANSFER_CHARS);
+               signal_info.transfer_chars = temp_ctrl ? temp_ctrl->val : 0;
+               temp_ctrl = TRY_GET_CTRL(V4L2_CID_MPEG_VIDC_VIDEO_COLOR_SPACE);
+               signal_info.color_space = temp_ctrl ? temp_ctrl->val : 0;
+               property_id = HAL_PARAM_VENC_VIDEO_SIGNAL_INFO;
+               pdata = &signal_info;
+               break;
+       }
        case V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC:
                if (ctrl->val == V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_ENABLE) {
                        rc = msm_venc_set_csc(inst);
@@ -3516,10 +3615,6 @@ int msm_venc_s_fmt(struct msm_vidc_inst *inst, struct v4l2_format *f)
        }
        hdev = inst->core->device;
 
-       if (msm_vidc_vpe_csc_601_to_709) {
-               msm_venc_set_csc(inst);
-       }
-
        if (f->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
                fmt = msm_comm_get_pixel_fmt_fourcc(venc_formats,
                        ARRAY_SIZE(venc_formats), f->fmt.pix_mp.pixelformat,
index 8541e06..61ca46f 100644 (file)
@@ -77,6 +77,8 @@ const char *const mpeg_video_vidc_extradata[] = {
        "Extradata display colour SEI",
        "Extradata light level SEI",
        "Extradata PQ Info",
+       "Extradata display VUI",
+       "Extradata vpx color space",
 };
 
 struct getprop_buf {
@@ -210,7 +212,8 @@ int msm_comm_ctrl_init(struct msm_vidc_inst *inst,
                }
 
                if (!ctrl) {
-                       dprintk(VIDC_ERR, "%s - invalid ctrl\n", __func__);
+                       dprintk(VIDC_ERR, "%s - invalid ctrl %s\n", __func__,
+                                drv_ctrls[idx].name);
                        return -EINVAL;
                }
 
@@ -4692,6 +4695,13 @@ enum hal_extradata_id msm_comm_get_hal_extradata_index(
        case V4L2_MPEG_VIDC_EXTRADATA_PQ_INFO:
                ret = HAL_EXTRADATA_PQ_INFO;
                break;
+
+       case V4L2_MPEG_VIDC_EXTRADATA_VUI_DISPLAY:
+               ret = HAL_EXTRADATA_VUI_DISPLAY_INFO;
+               break;
+       case V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE:
+               ret = HAL_EXTRADATA_VPX_COLORSPACE;
+               break;
        default:
                dprintk(VIDC_WARN, "Extradata not found: %d\n", index);
                break;
index fb79661..7976d6e 100644 (file)
@@ -171,8 +171,6 @@ struct dentry *msm_vidc_debugfs_init_drv(void)
                        &msm_vidc_fw_low_power_mode) &&
        __debugfs_create(u32, "debug_output", &msm_vidc_debug_out) &&
        __debugfs_create(u32, "hw_rsp_timeout", &msm_vidc_hw_rsp_timeout) &&
-       __debugfs_create(bool, "enable_vpe_csc_601_709",
-                       &msm_vidc_vpe_csc_601_to_709) &&
        __debugfs_create(bool, "sys_idle_indicator",
                        &msm_vidc_sys_idle_indicator) &&
        __debugfs_create(u32, "firmware_unload_delay",
index 3307106..4cbb59d 100644 (file)
@@ -85,6 +85,7 @@
 #define HFI_EXTRADATA_STREAM_USERDATA          0x0000000E
 #define HFI_EXTRADATA_FRAME_QP                 0x0000000F
 #define HFI_EXTRADATA_FRAME_BITS_INFO          0x00000010
+#define HFI_EXTRADATA_VPX_COLORSPACE           0x00000014
 #define HFI_EXTRADATA_MULTISLICE_INFO          0x7F100000
 #define HFI_EXTRADATA_NUM_CONCEALED_MB         0x7F100001
 #define HFI_EXTRADATA_INDEX                                    0x7F100002
index 36df3a1..34ab36a 100644 (file)
@@ -125,6 +125,8 @@ enum hal_extradata_id {
        HAL_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI,
        HAL_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI,
        HAL_EXTRADATA_PQ_INFO,
+       HAL_EXTRADATA_VUI_DISPLAY_INFO,
+       HAL_EXTRADATA_VPX_COLORSPACE,
 };
 
 enum hal_property {
@@ -239,6 +241,7 @@ enum hal_property {
        HAL_CONFIG_VENC_BLUR_RESOLUTION,
        HAL_PARAM_VENC_SESSION_QP_RANGE_PACKED,
        HAL_PARAM_VENC_H264_TRANSFORM_8x8,
+       HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
 };
 
 enum hal_domain {
@@ -992,6 +995,13 @@ struct hal_vpe_color_space_conversion {
        u32 csc_limit[HAL_MAX_LIMIT_COEFFS];
 };
 
+struct hal_video_signal_info {
+       u32 color_space;
+       u32 transfer_chars;
+       u32 matrix_coeffs;
+       bool full_range;
+};
+
 enum vidc_resource_id {
        VIDC_RESOURCE_NONE,
        VIDC_RESOURCE_OCMEM,
index ff043e9..2324074 100644 (file)
@@ -350,7 +350,7 @@ struct hfi_buffer_info {
        (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x01B)
 #define HFI_PROPERTY_PARAM_VENC_LTRMODE                \
         (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x01C)
-#define HFI_PROPERTY_PARAM_VENC_VIDEO_FULL_RANGE       \
+#define HFI_PROPERTY_PARAM_VENC_VIDEO_SIGNAL_INFO      \
        (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x01D)
 #define HFI_PROPERTY_PARAM_VENC_H264_VUI_TIMING_INFO   \
        (HFI_PROPERTY_PARAM_VENC_COMMON_START + 0x01E)
@@ -671,6 +671,16 @@ struct hfi_frame_size {
        u32 height;
 };
 
+struct hfi_video_signal_metadata {
+       u32 enable;
+       u32 video_format;
+       u32 video_full_range;
+       u32 color_description;
+       u32 color_primaries;
+       u32 transfer_characteristics;
+       u32 matrix_coeffs;
+};
+
 struct hfi_h264_vui_timing_info {
        u32 enable;
        u32 fixed_frame_rate;
index 2cf0469..643c68f 100644 (file)
@@ -815,6 +815,12 @@ enum v4l2_mpeg_vidc_extradata {
 #define V4L2_MPEG_VIDC_EXTRADATA_PQ_INFO \
        V4L2_MPEG_VIDC_EXTRADATA_PQ_INFO
        V4L2_MPEG_VIDC_EXTRADATA_PQ_INFO = 28,
+#define V4L2_MPEG_VIDC_EXTRADATA_VUI_DISPLAY \
+       V4L2_MPEG_VIDC_EXTRADATA_VUI_DISPLAY
+       V4L2_MPEG_VIDC_EXTRADATA_VUI_DISPLAY = 29,
+#define V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE \
+       V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE
+       V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE = 30,
 };
 
 #define V4L2_CID_MPEG_VIDC_SET_PERF_LEVEL (V4L2_CID_MPEG_MSM_VIDC_BASE + 26)
@@ -1176,6 +1182,23 @@ enum v4l2_mpeg_vidc_video_h264_transform_8x8 {
        V4L2_MPEG_VIDC_VIDEO_H264_TRANSFORM_8x8_ENABLE = 1,
 };
 
+#define V4L2_CID_MPEG_VIDC_VIDEO_COLOR_SPACE \
+               (V4L2_CID_MPEG_MSM_VIDC_BASE + 94)
+
+#define V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE \
+               (V4L2_CID_MPEG_MSM_VIDC_BASE + 95)
+
+enum v4l2_cid_mpeg_vidc_video_full_range {
+       V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE_DISABLE = 0,
+       V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE_ENABLE = 1,
+};
+
+#define V4L2_CID_MPEG_VIDC_VIDEO_TRANSFER_CHARS \
+               (V4L2_CID_MPEG_MSM_VIDC_BASE + 96)
+
+#define V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS \
+               (V4L2_CID_MPEG_MSM_VIDC_BASE + 97)
+
 /*  Camera class control IDs */
 
 #define V4L2_CID_CAMERA_CLASS_BASE     (V4L2_CTRL_CLASS_CAMERA | 0x900)
index 45cc81a..b259bde 100644 (file)
@@ -55,6 +55,18 @@ struct msm_vidc_mpeg2_seqdisp_payload {
        unsigned int disp_height;
 };
 
+struct msm_vidc_vc1_seqdisp_payload {
+       unsigned int prog_seg_format;
+       unsigned int uv_sampl_fmt;
+       unsigned int color_format;
+       unsigned int color_primaries;
+       unsigned int transfer_char;
+       unsigned int matrix_coeffs;
+       unsigned int aspect_ratio;
+       unsigned int aspect_horiz;
+       unsigned int aspect_vert;
+};
+
 struct msm_vidc_input_crop_payload {
        unsigned int size;
        unsigned int version;
@@ -154,6 +166,13 @@ struct msm_vidc_yuv_stats_payload {
        unsigned int frame_difference;
 };
 
+struct msm_vidc_vpx_colorspace_payload {
+       unsigned int color_space;
+       unsigned int yuv_range_flag;
+       unsigned int sumsampling_x;
+       unsigned int sumsampling_y;
+};
+
 struct msm_vidc_roi_qp_payload {
        int upper_qp_offset;
        int lower_qp_offset;
@@ -176,6 +195,23 @@ struct msm_vidc_content_light_level_sei_payload {
        unsigned int nMaxPicAverageLight;
 };
 
+struct msm_vidc_vui_display_info_payload {
+       unsigned int video_signal_present_flag;
+       unsigned int video_format;
+       unsigned int bit_depth_y;
+       unsigned int bit_depth_c;
+       unsigned int video_full_range_flag;
+       unsigned int color_description_present_flag;
+       unsigned int color_primaries;
+       unsigned int transfer_characteristics;
+       unsigned int matrix_coefficients;
+       unsigned int chroma_location_info_present_flag;
+       unsigned int chroma_format_idc;
+       unsigned int separate_color_plane_flag;
+       unsigned int chroma_sample_loc_type_top_field;
+       unsigned int chroma_sample_loc_type_bottom_field;
+};
+
 enum msm_vidc_extradata_type {
        MSM_VIDC_EXTRADATA_NONE = 0x00000000,
        MSM_VIDC_EXTRADATA_MB_QUANTIZATION = 0x00000001,
@@ -207,6 +243,9 @@ enum msm_vidc_extradata_type {
        MSM_VIDC_EXTRADATA_OUTPUT_CROP
        MSM_VIDC_EXTRADATA_OUTPUT_CROP = 0x0700000F,
        MSM_VIDC_EXTRADATA_DIGITAL_ZOOM = 0x07000010,
+#define MSM_VIDC_EXTRADATA_VPX_COLORSPACE_INFO \
+       MSM_VIDC_EXTRADATA_VPX_COLORSPACE_INFO
+       MSM_VIDC_EXTRADATA_VPX_COLORSPACE_INFO = 0x070000011,
        MSM_VIDC_EXTRADATA_MULTISLICE_INFO = 0x7F100000,
        MSM_VIDC_EXTRADATA_NUM_CONCEALED_MB = 0x7F100001,
        MSM_VIDC_EXTRADATA_INDEX = 0x7F100002,
@@ -214,6 +253,9 @@ enum msm_vidc_extradata_type {
        MSM_VIDC_EXTRADATA_METADATA_LTR = 0x7F100004,
        MSM_VIDC_EXTRADATA_METADATA_FILLER = 0x7FE00002,
        MSM_VIDC_EXTRADATA_METADATA_MBI = 0x7F100005,
+#define MSM_VIDC_EXTRADATA_VUI_DISPLAY_INFO \
+       MSM_VIDC_EXTRADATA_VUI_DISPLAY_INFO
+       MSM_VIDC_EXTRADATA_VUI_DISPLAY_INFO = 0x7F100006,
        MSM_VIDC_EXTRADATA_YUVSTATS_INFO = 0x7F100007,
 };
 enum msm_vidc_interlace_type {
@@ -243,12 +285,90 @@ enum msm_vidc_userdata_type {
        MSM_VIDC_USERDATA_TYPE_BOTTOM_FIELD = 0x3,
 };
 
+/* See colour_primaries of ISO/IEC 14496 for significance */
+enum msm_vidc_h264_color_primaries_values {
+       MSM_VIDC_RESERVED_1 = 0,
+       MSM_VIDC_BT709_5 = 1,
+       MSM_VIDC_UNSPECIFIED = 2,
+       MSM_VIDC_RESERVED_2 = 3,
+       MSM_VIDC_BT470_6_M = 4,
+       MSM_VIDC_BT601_6_625 = 5,
+       MSM_VIDC_BT470_6_BG = MSM_VIDC_BT601_6_625,
+       MSM_VIDC_BT601_6_525 = 6,
+       MSM_VIDC_SMPTE_240M = 7,
+       MSM_VIDC_GENERIC_FILM = 8,
+       MSM_VIDC_BT2020 = 9,
+};
+
+enum msm_vidc_vp9_color_primaries_values {
+       MSM_VIDC_CS_UNKNOWN,
+       MSM_VIDC_CS_BT_601,
+       MSM_VIDC_CS_BT_709,
+       MSM_VIDC_CS_SMPTE_170,
+       MSM_VIDC_CS_SMPTE_240,
+       MSM_VIDC_CS_BT_2020,
+       MSM_VIDC_CS_RESERVED,
+       MSM_VIDC_CS_RGB,
+};
+
+enum msm_vidc_h264_matrix_coeff_values {
+       MSM_VIDC_MATRIX_RGB = 0,
+       MSM_VIDC_MATRIX_BT_709_5 = 1,
+       MSM_VIDC_MATRIX_UNSPECIFIED = 2,
+       MSM_VIDC_MATRIX_RESERVED = 3,
+       MSM_VIDC_MATRIX_FCC_47 = 4,
+       MSM_VIDC_MATRIX_601_6_625 = 5,
+       MSM_VIDC_MATRIX_BT470_BG = MSM_VIDC_MATRIX_601_6_625,
+       MSM_VIDC_MATRIX_601_6_525 = 6,
+       MSM_VIDC_MATRIX_SMPTE_170M = MSM_VIDC_MATRIX_601_6_525,
+       MSM_VIDC_MATRIX_SMPTE_240M = 7,
+       MSM_VIDC_MATRIX_Y_CG_CO = 8,
+       MSM_VIDC_MATRIX_BT_2020 = 9,
+       MSM_VIDC_MATRIX_BT_2020_CONST = 10,
+};
+
+enum msm_vidc_h264_transfer_chars_values {
+       MSM_VIDC_TRANSFER_RESERVED_1 = 0,
+       MSM_VIDC_TRANSFER_BT709_5 = 1,
+       MSM_VIDC_TRANSFER_UNSPECIFIED = 2,
+       MSM_VIDC_TRANSFER_RESERVED_2 = 3,
+       MSM_VIDC_TRANSFER_BT_470_6_M = 4,
+       MSM_VIDC_TRANSFER_BT_470_6_BG = 5,
+       MSM_VIDC_TRANSFER_601_6_625 = 6,
+       MSM_VIDC_TRANSFER_601_6_525 = MSM_VIDC_TRANSFER_601_6_625,
+       MSM_VIDC_TRANSFER_SMPTE_240M = 7,
+       MSM_VIDC_TRANSFER_LINEAR = 8,
+       MSM_VIDC_TRANSFER_LOG_100_1 = 9,
+       MSM_VIDC_TRANSFER_LOG_100_SQRT10_1 = 10,
+       MSM_VIDC_TRANSFER_IEC_61966 = 11,
+       MSM_VIDC_TRANSFER_BT_1361 = 12,
+       MSM_VIDC_TRANSFER_SRGB = 13,
+       MSM_VIDC_TRANSFER_BT_2020_10 = 14,
+       MSM_VIDC_TRANSFER_BT_2020_12 = 15,
+};
+
 enum msm_vidc_pixel_depth {
        MSM_VIDC_BIT_DEPTH_8,
        MSM_VIDC_BIT_DEPTH_10,
        MSM_VIDC_BIT_DEPTH_UNSUPPORTED = 0XFFFFFFFF,
 };
 
+enum msm_vidc_video_format {
+       MSM_VIDC_COMPONENT,
+       MSM_VIDC_PAL,
+       MSM_VIDC_NTSC,
+       MSM_VIDC_SECAM,
+       MSM_VIDC_MAC,
+       MSM_VIDC_UNSPECIFIED_FORMAT,
+       MSM_VIDC_RESERVED_1_FORMAT,
+       MSM_VIDC_RESERVED_2_FORMAT,
+};
+
+enum msm_vidc_color_desc_flag {
+       MSM_VIDC_COLOR_DESC_NOT_PRESENT,
+       MSM_VIDC_COLOR_DESC_PRESENT,
+};
+
 /*enum msm_vidc_pic_struct */
 #define MSM_VIDC_PIC_STRUCT_MAYBE_INTERLACED 0x0
 #define MSM_VIDC_PIC_STRUCT_PROGRESSIVE 0x1