Merge "msm: vidc: Add control to set csc coefficients to firmware"

This commit is contained in:
Linux Build Service Account 2016-09-07 06:43:19 -07:00 committed by Gerrit - the friendly Code Review server
commit dcb32ab988
11 changed files with 411 additions and 59 deletions

View File

@ -636,6 +636,19 @@ static int get_hfi_extradata_index(enum hal_extradata_id index)
case HAL_EXTRADATA_METADATA_MBI:
ret = HFI_PROPERTY_PARAM_VENC_MBI_DUMPING;
break;
case HAL_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI:
ret =
HFI_PROPERTY_PARAM_VDEC_MASTERING_DISPLAY_COLOUR_SEI_EXTRADATA;
break;
case HAL_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI:
ret = HFI_PROPERTY_PARAM_VDEC_CONTENT_LIGHT_LEVEL_SEI_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;
@ -2025,7 +2038,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:

View File

@ -51,27 +51,6 @@ static const char *const mpeg_video_output_order[] = {
"Decode Order",
NULL
};
static const char *const mpeg_video_vidc_extradata[] = {
"Extradata none",
"Extradata MB Quantization",
"Extradata Interlace Video",
"Extradata VC1 Framedisp",
"Extradata VC1 Seqdisp",
"Extradata timestamp",
"Extradata S3D Frame Packing",
"Extradata Frame Rate",
"Extradata Panscan Window",
"Extradata Recovery point SEI",
"Extradata Closed Caption UD",
"Extradata AFD UD",
"Extradata Multislice info",
"Extradata number of concealed MB",
"Extradata metadata filler",
"Extradata input crop",
"Extradata digital zoom",
"Extradata aspect ratio",
"Extradata mpeg2 seqdisp",
};
static const char *const mpeg_vidc_video_alloc_mode_type[] = {
"Buffer Allocation Static",
"Buffer Allocation Ring Buffer",
@ -263,7 +242,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_FRAME_BITS_INFO,
.maximum = V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE,
.default_value = V4L2_MPEG_VIDC_EXTRADATA_NONE,
.menu_skip_mask = ~(
(1 << V4L2_MPEG_VIDC_EXTRADATA_NONE) |
@ -285,7 +264,12 @@ static struct msm_vidc_ctrl msm_vdec_ctrls[] = {
(1 << V4L2_MPEG_VIDC_EXTRADATA_MPEG2_SEQDISP) |
(1 << V4L2_MPEG_VIDC_EXTRADATA_STREAM_USERDATA) |
(1 << V4L2_MPEG_VIDC_EXTRADATA_FRAME_QP) |
(1 << V4L2_MPEG_VIDC_EXTRADATA_FRAME_BITS_INFO)
(1 << V4L2_MPEG_VIDC_EXTRADATA_FRAME_BITS_INFO) |
(1 << V4L2_MPEG_VIDC_EXTRADATA_DISPLAY_COLOUR_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,
.step = 0,

View File

@ -154,29 +154,6 @@ static const char *const vp8_profile_level[] = {
"2.0",
"3.0",
};
static const char *const mpeg_video_vidc_extradata[] = {
"Extradata none",
"Extradata MB Quantization",
"Extradata Interlace Video",
"Extradata VC1 Framedisp",
"Extradata VC1 Seqdisp",
"Extradata timestamp",
"Extradata S3D Frame Packing",
"Extradata Frame Rate",
"Extradata Panscan Window",
"Extradata Recovery point SEI",
"Extradata Closed Caption UD",
"Extradata AFD UD",
"Extradata Multislice info",
"Extradata number of concealed MB",
"Extradata metadata filler",
"Extradata input crop",
"Extradata digital zoom",
"Extradata aspect ratio",
"Extradata macroblock metadata",
};
static const char *const perf_level[] = {
"Nominal",
"Performance",
@ -1144,6 +1121,55 @@ static struct msm_vidc_ctrl msm_venc_ctrls[] = {
.default_value = V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_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,
},
{
.id = V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC,
.name = "Set VPE Color space conversion coefficients",
.type = V4L2_CTRL_TYPE_INTEGER,
.minimum = V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_DISABLE,
.maximum = V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_ENABLE,
.default_value = V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_DISABLE,
.step = 1,
},
};
#define NUM_CTRLS ARRAY_SIZE(msm_venc_ctrls)
@ -1232,6 +1258,8 @@ static struct msm_vidc_format venc_formats[] = {
},
};
static int msm_venc_set_csc(struct msm_vidc_inst *inst);
static int msm_venc_queue_setup(struct vb2_queue *q,
const struct v4l2_format *fmt,
unsigned int *num_buffers,
@ -1946,6 +1974,7 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
u32 hier_p_layers = 0, hier_b_layers = 0, mbi_statistics_mode = 0;
struct hal_venc_perf_mode venc_mode;
int max_hierp_layers;
struct hal_video_signal_info signal_info = {0};
if (!inst || !inst->core || !inst->core->device) {
dprintk(VIDC_ERR, "%s invalid parameters\n", __func__);
@ -2870,6 +2899,71 @@ static int try_set_ctrl(struct msm_vidc_inst *inst, struct v4l2_ctrl *ctrl)
pdata = &enable;
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);
if (rc)
dprintk(VIDC_ERR, "fail to set csc: %d\n", rc);
}
break;
default:
dprintk(VIDC_ERR, "Unsupported index: %x\n", ctrl->id);
rc = -ENOTSUPP;
@ -3295,7 +3389,7 @@ exit:
return rc;
}
int msm_venc_set_csc(struct msm_vidc_inst *inst)
static int msm_venc_set_csc(struct msm_vidc_inst *inst)
{
int rc = 0;
int count = 0;
@ -3339,10 +3433,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,

View File

@ -52,6 +52,39 @@
#define IS_SYS_CMD_VALID(cmd) (((cmd) >= SYS_MSG_START) && \
((cmd) <= SYS_MSG_END))
const char *const mpeg_video_vidc_extradata[] = {
"Extradata none",
"Extradata MB Quantization",
"Extradata Interlace Video",
"Extradata VC1 Framedisp",
"Extradata VC1 Seqdisp",
"Extradata timestamp",
"Extradata S3D Frame Packing",
"Extradata Frame Rate",
"Extradata Panscan Window",
"Extradata Recovery point SEI",
"Extradata Multislice info",
"Extradata number of concealed MB",
"Extradata metadata filler",
"Extradata input crop",
"Extradata digital zoom",
"Extradata aspect ratio",
"Extradata mpeg2 seqdisp",
"Extradata stream userdata",
"Extradata frame QP",
"Extradata frame bits info",
"Extradata LTR",
"Extradata macroblock metadata",
"Extradata VQZip SEI",
"Extradata YUV Stats",
"Extradata ROI QP",
"Extradata output crop",
"Extradata display colour SEI",
"Extradata light level SEI",
"Extradata display VUI",
"Extradata vpx color space",
};
struct getprop_buf {
struct list_head list;
void *data;
@ -96,7 +129,6 @@ int msm_comm_g_ctrl(struct msm_vidc_inst *inst, int id)
rc = v4l2_g_ctrl(&inst->ctrl_handler, &ctrl);
return rc ?: ctrl.value;
}
enum multi_stream msm_comm_get_stream_output_mode(struct msm_vidc_inst *inst)
{
if (inst->session_type == MSM_VIDC_DECODER) {
@ -4088,6 +4120,18 @@ enum hal_extradata_id msm_comm_get_hal_extradata_index(
case V4L2_MPEG_VIDC_EXTRADATA_METADATA_MBI:
ret = HAL_EXTRADATA_METADATA_MBI;
break;
case V4L2_MPEG_VIDC_EXTRADATA_DISPLAY_COLOUR_SEI:
ret = HAL_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI;
break;
case V4L2_MPEG_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI:
ret = HAL_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI;
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;

View File

@ -19,6 +19,8 @@ struct vb2_buf_entry {
struct vb2_buffer *vb;
};
extern const char *const mpeg_video_vidc_extradata[];
enum load_calc_quirks {
LOAD_CALC_NO_QUIRKS = 0,
LOAD_CALC_IGNORE_TURBO_LOAD = 1 << 0,

View File

@ -25,7 +25,6 @@ int msm_vidc_hw_rsp_timeout = 1000;
u32 msm_fw_coverage = 0x0;
int msm_vidc_reset_clock_control = 0x0;
int msm_vidc_regulator_scaling = 0x0;
int msm_vidc_vpe_csc_601_to_709 = 0x0;
int msm_vidc_dec_dcvs_mode = 0x1;
int msm_vidc_enc_dcvs_mode = 0x1;
int msm_vidc_sys_idle_indicator = 0x0;
@ -204,11 +203,6 @@ struct dentry *msm_vidc_debugfs_init_drv(void)
"debugfs_create_file: regulator_scaling fail\n");
goto failed_create_dir;
}
if (!debugfs_create_bool("enable_vpe_csc_601_709", S_IRUGO | S_IWUSR,
dir, &msm_vidc_vpe_csc_601_to_709)) {
dprintk(VIDC_ERR, "debugfs_create_file: fail\n");
goto failed_create_dir;
}
if (!debugfs_create_bool("sys_idle_indicator", S_IRUGO | S_IWUSR,
dir, &msm_vidc_sys_idle_indicator)) {
dprintk(VIDC_ERR,

View 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
@ -212,6 +213,14 @@ struct hfi_extradata_header {
(HFI_PROPERTY_PARAM_VDEC_OX_START + 0x019)
#define HFI_PROPERTY_PARAM_VDEC_SCS_THRESHOLD \
(HFI_PROPERTY_PARAM_VDEC_OX_START + 0x01A)
#define HFI_PROPERTY_PARAM_VUI_DISPLAY_INFO_EXTRADATA \
(HFI_PROPERTY_PARAM_VDEC_OX_START + 0x01B)
#define HFI_PROPERTY_PARAM_VDEC_VPX_COLORSPACE_EXTRADATA \
(HFI_PROPERTY_PARAM_VDEC_OX_START + 0x001D)
#define HFI_PROPERTY_PARAM_VDEC_MASTERING_DISPLAY_COLOUR_SEI_EXTRADATA \
(HFI_PROPERTY_PARAM_VDEC_OX_START + 0x001E)
#define HFI_PROPERTY_PARAM_VDEC_CONTENT_LIGHT_LEVEL_SEI_EXTRADATA \
(HFI_PROPERTY_PARAM_VDEC_OX_START + 0x001F)
#define HFI_PROPERTY_CONFIG_VDEC_OX_START \
(HFI_DOMAIN_BASE_VDEC + HFI_ARCH_OX_OFFSET + 0x0000)

View File

@ -117,6 +117,10 @@ enum hal_extradata_id {
HAL_EXTRADATA_DIGITAL_ZOOM,
HAL_EXTRADATA_LTR_INFO,
HAL_EXTRADATA_METADATA_MBI,
HAL_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI,
HAL_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI,
HAL_EXTRADATA_VUI_DISPLAY_INFO,
HAL_EXTRADATA_VPX_COLORSPACE,
};
enum hal_property {
@ -220,6 +224,7 @@ enum hal_property {
HAL_PARAM_VENC_HIER_P_HYBRID_MODE,
HAL_PARAM_VENC_MBI_STATISTICS_MODE,
HAL_PARAM_VENC_BITRATE_TYPE,
HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
};
enum hal_domain {
@ -959,6 +964,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_OCMEM = 0x00000001,
VIDC_UNUSED_RESORUCE = 0x10000000,

View File

@ -339,7 +339,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)
@ -644,6 +644,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;

View File

@ -739,6 +739,18 @@ enum v4l2_mpeg_vidc_extradata {
V4L2_MPEG_VIDC_EXTRADATA_FRAME_BITS_INFO = 19,
V4L2_MPEG_VIDC_EXTRADATA_LTR = 20,
V4L2_MPEG_VIDC_EXTRADATA_METADATA_MBI = 21,
#define V4L2_MPEG_VIDC_EXTRADATA_DISPLAY_COLOUR_SEI \
V4L2_MPEG_VIDC_EXTRADATA_DISPLAY_COLOUR_SEI
V4L2_MPEG_VIDC_EXTRADATA_DISPLAY_COLOUR_SEI = 26,
#define V4L2_MPEG_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI \
V4L2_MPEG_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI
V4L2_MPEG_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI = 27,
#define V4L2_MPEG_VIDC_EXTRADATA_VUI_DISPLAY \
V4L2_MPEG_VIDC_EXTRADATA_VUI_DISPLAY
V4L2_MPEG_VIDC_EXTRADATA_VUI_DISPLAY = 28,
#define V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE \
V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE
V4L2_MPEG_VIDC_EXTRADATA_VPX_COLORSPACE = 29,
};
#define V4L2_CID_MPEG_VIDC_SET_PERF_LEVEL (V4L2_CID_MPEG_MSM_VIDC_BASE + 26)
@ -1034,6 +1046,31 @@ enum v4l2_mpeg_vidc_video_venc_bitrate_type_enable {
V4L2_CID_MPEG_VIDC_VIDEO_VENC_BITRATE_ENABLE = 1
};
#define V4L2_CID_MPEG_VIDC_VIDEO_COLOR_SPACE \
(V4L2_CID_MPEG_MSM_VIDC_BASE + 80)
#define V4L2_CID_MPEG_VIDC_VIDEO_FULL_RANGE \
(V4L2_CID_MPEG_MSM_VIDC_BASE + 81)
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 + 82)
#define V4L2_CID_MPEG_VIDC_VIDEO_MATRIX_COEFFS \
(V4L2_CID_MPEG_MSM_VIDC_BASE + 83)
#define V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC \
(V4L2_CID_MPEG_MSM_VIDC_BASE + 87)
enum v4l2_cid_mpeg_vidc_video_vpe_csc_type_enable {
V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_DISABLE = 0,
V4L2_CID_MPEG_VIDC_VIDEO_VPE_CSC_ENABLE = 1
};
/* Camera class control IDs */
#define V4L2_CID_CAMERA_CLASS_BASE (V4L2_CTRL_CLASS_CAMERA | 0x900)

View File

@ -43,6 +43,19 @@ struct msm_vidc_mpeg2_seqdisp_payload {
unsigned int disp_width;
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;
@ -109,6 +122,44 @@ struct msm_vidc_s3d_frame_packing_payload {
unsigned int fpa_extension_flag;
};
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_mastering_display_colour_sei_payload {
unsigned int nDisplayPrimariesX[3];
unsigned int nDisplayPrimariesY[3];
unsigned int nWhitePointX;
unsigned int nWhitePointY;
unsigned int nMaxDisplayMasteringLuminance;
unsigned int nMinDisplayMasteringLuminance;
};
struct msm_vidc_content_light_level_sei_payload {
unsigned int nMaxContentLight;
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,
@ -124,8 +175,17 @@ enum msm_vidc_extradata_type {
MSM_VIDC_EXTRADATA_STREAM_USERDATA = 0x0000000E,
MSM_VIDC_EXTRADATA_FRAME_QP = 0x0000000F,
MSM_VIDC_EXTRADATA_FRAME_BITS_INFO = 0x00000010,
#define MSM_VIDC_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI \
MSM_VIDC_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI
MSM_VIDC_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI = 0x00000015,
#define MSM_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI \
MSM_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI
MSM_VIDC_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI = 0x00000016,
MSM_VIDC_EXTRADATA_INPUT_CROP = 0x0700000E,
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,
@ -133,6 +193,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,
};
enum msm_vidc_interlace_type {
MSM_VIDC_INTERLACE_FRAME_PROGRESSIVE = 0x01,
@ -159,4 +222,79 @@ enum msm_vidc_userdata_type {
MSM_VIDC_USERDATA_TYPE_TOP_FIELD = 0x2,
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_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,
};
#endif