|
@@ -99,6 +99,13 @@ static struct s5p_mfc_fmt formats[] = {
|
|
|
.num_planes = 1,
|
|
|
.versions = MFC_V7PLUS_BITS,
|
|
|
},
|
|
|
+ {
|
|
|
+ .fourcc = V4L2_PIX_FMT_HEVC,
|
|
|
+ .codec_mode = S5P_FIMV_CODEC_HEVC_ENC,
|
|
|
+ .type = MFC_FMT_ENC,
|
|
|
+ .num_planes = 1,
|
|
|
+ .versions = MFC_V10_BIT,
|
|
|
+ },
|
|
|
};
|
|
|
|
|
|
#define NUM_FORMATS ARRAY_SIZE(formats)
|
|
@@ -692,6 +699,368 @@ static struct mfc_control controls[] = {
|
|
|
.step = 1,
|
|
|
.default_value = 0,
|
|
|
},
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .name = "HEVC I Frame QP Value",
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 51,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .name = "HEVC P Frame QP Value",
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 51,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 51,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 51,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 51,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_PROFILE,
|
|
|
+ .type = V4L2_CTRL_TYPE_MENU,
|
|
|
+ .minimum = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
|
|
|
+ .maximum = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_LEVEL,
|
|
|
+ .type = V4L2_CTRL_TYPE_MENU,
|
|
|
+ .minimum = V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
|
|
|
+ .maximum = V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = V4L2_MPEG_VIDEO_HEVC_LEVEL_1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_TIER,
|
|
|
+ .type = V4L2_CTRL_TYPE_MENU,
|
|
|
+ .minimum = V4L2_MPEG_VIDEO_HEVC_TIER_MAIN,
|
|
|
+ .maximum = V4L2_MPEG_VIDEO_HEVC_TIER_HIGH,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = V4L2_MPEG_VIDEO_HEVC_TIER_MAIN,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 1,
|
|
|
+ .maximum = (1 << 16) - 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 1,
|
|
|
+ .maximum = 2,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 1,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE,
|
|
|
+ .type = V4L2_CTRL_TYPE_MENU,
|
|
|
+ .minimum = V4L2_MPEG_VIDEO_HEVC_REFRESH_NONE,
|
|
|
+ .maximum = V4L2_MPEG_VIDEO_HEVC_REFRESH_IDR,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = V4L2_MPEG_VIDEO_HEVC_REFRESH_NONE,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE,
|
|
|
+ .type = V4L2_CTRL_TYPE_MENU,
|
|
|
+ .minimum = V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED,
|
|
|
+ .maximum = V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED_AT_SLICE_BOUNDARY,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = V4L2_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE_DISABLED,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE,
|
|
|
+ .type = V4L2_CTRL_TYPE_MENU,
|
|
|
+ .minimum = V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B,
|
|
|
+ .maximum = V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_P,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = V4L2_MPEG_VIDEO_HEVC_HIERARCHICAL_CODING_B,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 6,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = INT_MIN,
|
|
|
+ .maximum = INT_MAX,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 4,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE,
|
|
|
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = (1 << 16) - 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = -6,
|
|
|
+ .maximum = 6,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = -6,
|
|
|
+ .maximum = 6,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD,
|
|
|
+ .type = V4L2_CTRL_TYPE_MENU,
|
|
|
+ .minimum = V4L2_MPEG_VIDEO_HEVC_SIZE_0,
|
|
|
+ .maximum = V4L2_MPEG_VIDEO_HEVC_SIZE_4,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = V4L2_MPEG_VIDEO_HEVC_SIZE_0,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .id = V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR,
|
|
|
+ .type = V4L2_CTRL_TYPE_INTEGER,
|
|
|
+ .minimum = 0,
|
|
|
+ .maximum = 1,
|
|
|
+ .step = 1,
|
|
|
+ .default_value = 0,
|
|
|
+ },
|
|
|
{
|
|
|
.id = V4L2_CID_MIN_BUFFERS_FOR_OUTPUT,
|
|
|
.type = V4L2_CTRL_TYPE_INTEGER,
|
|
@@ -1359,6 +1728,26 @@ static inline int mpeg4_level(enum v4l2_mpeg_video_mpeg4_level lvl)
|
|
|
return t[lvl];
|
|
|
}
|
|
|
|
|
|
+static inline int hevc_level(enum v4l2_mpeg_video_hevc_level lvl)
|
|
|
+{
|
|
|
+ static unsigned int t[] = {
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_1 */ 10,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_2 */ 20,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_2_1 */ 21,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_3 */ 30,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_3_1 */ 31,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_4 */ 40,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_4_1 */ 41,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_5 */ 50,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_5_1 */ 51,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_5_2 */ 52,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_6 */ 60,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_6_1 */ 61,
|
|
|
+ /* V4L2_MPEG_VIDEO_HEVC_LEVEL_6_2 */ 62,
|
|
|
+ };
|
|
|
+ return t[lvl];
|
|
|
+}
|
|
|
+
|
|
|
static inline int vui_sar_idc(enum v4l2_mpeg_video_h264_vui_sar_idc sar)
|
|
|
{
|
|
|
static unsigned int t[V4L2_MPEG_VIDEO_H264_VUI_SAR_IDC_EXTENDED + 1] = {
|
|
@@ -1635,6 +2024,153 @@ static int s5p_mfc_enc_s_ctrl(struct v4l2_ctrl *ctrl)
|
|
|
case V4L2_CID_MPEG_VIDEO_VPX_PROFILE:
|
|
|
p->codec.vp8.profile = ctrl->val;
|
|
|
break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_I_FRAME_QP:
|
|
|
+ p->codec.hevc.rc_frame_qp = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_P_FRAME_QP:
|
|
|
+ p->codec.hevc.rc_p_frame_qp = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_B_FRAME_QP:
|
|
|
+ p->codec.hevc.rc_b_frame_qp = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_FRAME_RATE_RESOLUTION:
|
|
|
+ p->codec.hevc.rc_framerate = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_MIN_QP:
|
|
|
+ p->codec.hevc.rc_min_qp = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_MAX_QP:
|
|
|
+ p->codec.hevc.rc_max_qp = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_LEVEL:
|
|
|
+ p->codec.hevc.level_v4l2 = ctrl->val;
|
|
|
+ p->codec.hevc.level = hevc_level(ctrl->val);
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_PROFILE:
|
|
|
+ switch (ctrl->val) {
|
|
|
+ case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN:
|
|
|
+ p->codec.hevc.profile =
|
|
|
+ V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN;
|
|
|
+ break;
|
|
|
+ case V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE:
|
|
|
+ p->codec.hevc.profile =
|
|
|
+ V4L2_MPEG_VIDEO_HEVC_PROFILE_MAIN_STILL_PICTURE;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ ret = -EINVAL;
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_TIER:
|
|
|
+ p->codec.hevc.tier = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_MAX_PARTITION_DEPTH:
|
|
|
+ p->codec.hevc.max_partition_depth = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_REF_NUMBER_FOR_PFRAMES:
|
|
|
+ p->codec.hevc.num_refs_for_p = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_TYPE:
|
|
|
+ p->codec.hevc.refreshtype = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_CONST_INTRA_PRED:
|
|
|
+ p->codec.hevc.const_intra_period_enable = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_LOSSLESS_CU:
|
|
|
+ p->codec.hevc.lossless_cu_enable = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_WAVEFRONT:
|
|
|
+ p->codec.hevc.wavefront_enable = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_LOOP_FILTER_MODE:
|
|
|
+ p->codec.hevc.loopfilter = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_QP:
|
|
|
+ p->codec.hevc.hier_qp_enable = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_TYPE:
|
|
|
+ p->codec.hevc.hier_qp_type = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_LAYER:
|
|
|
+ p->codec.hevc.num_hier_layer = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_QP:
|
|
|
+ p->codec.hevc.hier_qp_layer[0] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_QP:
|
|
|
+ p->codec.hevc.hier_qp_layer[1] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_QP:
|
|
|
+ p->codec.hevc.hier_qp_layer[2] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_QP:
|
|
|
+ p->codec.hevc.hier_qp_layer[3] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_QP:
|
|
|
+ p->codec.hevc.hier_qp_layer[4] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_QP:
|
|
|
+ p->codec.hevc.hier_qp_layer[5] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_QP:
|
|
|
+ p->codec.hevc.hier_qp_layer[6] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L0_BR:
|
|
|
+ p->codec.hevc.hier_bit_layer[0] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L1_BR:
|
|
|
+ p->codec.hevc.hier_bit_layer[1] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L2_BR:
|
|
|
+ p->codec.hevc.hier_bit_layer[2] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L3_BR:
|
|
|
+ p->codec.hevc.hier_bit_layer[3] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L4_BR:
|
|
|
+ p->codec.hevc.hier_bit_layer[4] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L5_BR:
|
|
|
+ p->codec.hevc.hier_bit_layer[5] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_HIER_CODING_L6_BR:
|
|
|
+ p->codec.hevc.hier_bit_layer[6] = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_GENERAL_PB:
|
|
|
+ p->codec.hevc.general_pb_enable = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_TEMPORAL_ID:
|
|
|
+ p->codec.hevc.temporal_id_enable = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_STRONG_SMOOTHING:
|
|
|
+ p->codec.hevc.strong_intra_smooth = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_INTRA_PU_SPLIT:
|
|
|
+ p->codec.hevc.intra_pu_split_disable = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_TMV_PREDICTION:
|
|
|
+ p->codec.hevc.tmv_prediction_disable = !ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_MAX_NUM_MERGE_MV_MINUS1:
|
|
|
+ p->codec.hevc.max_num_merge_mv = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_WITHOUT_STARTCODE:
|
|
|
+ p->codec.hevc.encoding_nostartcode_enable = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_REFRESH_PERIOD:
|
|
|
+ p->codec.hevc.refreshperiod = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_LF_BETA_OFFSET_DIV2:
|
|
|
+ p->codec.hevc.lf_beta_offset_div2 = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_LF_TC_OFFSET_DIV2:
|
|
|
+ p->codec.hevc.lf_tc_offset_div2 = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_HEVC_SIZE_OF_LENGTH_FIELD:
|
|
|
+ p->codec.hevc.size_of_length_field = ctrl->val;
|
|
|
+ break;
|
|
|
+ case V4L2_CID_MPEG_VIDEO_PREPEND_SPSPPS_TO_IDR:
|
|
|
+ p->codec.hevc.prepend_sps_pps_to_idr = ctrl->val;
|
|
|
+ break;
|
|
|
default:
|
|
|
v4l2_err(&dev->v4l2_dev, "Invalid control, id=%d, val=%d\n",
|
|
|
ctrl->id, ctrl->val);
|