Merge "video: driver: use custom v4l2 ctrls in place of S/G_PARM on decoder"

This commit is contained in:
qctecmdr
2022-03-30 15:32:02 -07:00
committed by Gerrit - the friendly Code Review server
6 changed files with 135 additions and 8 deletions

View File

@@ -252,19 +252,47 @@ static struct msm_platform_inst_capability instance_data_kalama[] = {
{FRAME_RATE, DEC, CODECS_ALL, {FRAME_RATE, DEC, CODECS_ALL,
(MINIMUM_FPS << 16), (MAXIMUM_FPS << 16), (MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
1, (DEFAULT_FPS << 16)}, 1, (DEFAULT_FPS << 16),
V4L2_CID_MPEG_VIDC_FRAME_RATE,
0,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{0}, {0},
msm_vidc_adjust_frame_rate},
{FRAME_RATE, DEC, VP9, {FRAME_RATE, DEC, VP9,
(MINIMUM_FPS << 16), (MAXIMUM_OVERRIDE_VP9_FPS << 16), (MINIMUM_FPS << 16), (MAXIMUM_OVERRIDE_VP9_FPS << 16),
1, (DEFAULT_FPS << 16)}, 1, (DEFAULT_FPS << 16),
V4L2_CID_MPEG_VIDC_FRAME_RATE,
0,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{0}, {0},
msm_vidc_adjust_frame_rate},
{OPERATING_RATE, ENC|DEC, CODECS_ALL, {OPERATING_RATE, ENC, CODECS_ALL,
(MINIMUM_FPS << 16), (MAXIMUM_FPS << 16), (MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
1, (DEFAULT_FPS << 16)}, 1, (DEFAULT_FPS << 16)},
{OPERATING_RATE, DEC, CODECS_ALL,
(MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
1, (DEFAULT_FPS << 16),
V4L2_CID_MPEG_VIDC_OPERATING_RATE,
0,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{0}, {0},
msm_vidc_adjust_operating_rate},
{OPERATING_RATE, DEC, VP9, {OPERATING_RATE, DEC, VP9,
(MINIMUM_FPS << 16), (MAXIMUM_OVERRIDE_VP9_FPS << 16), (MINIMUM_FPS << 16), (MAXIMUM_OVERRIDE_VP9_FPS << 16),
1, (DEFAULT_FPS << 16)}, 1, (DEFAULT_FPS << 16),
V4L2_CID_MPEG_VIDC_OPERATING_RATE,
0,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{0}, {0},
msm_vidc_adjust_operating_rate},
{INPUT_RATE, ENC|DEC, CODECS_ALL, {INPUT_RATE, ENC|DEC, CODECS_ALL,
(MINIMUM_FPS << 16), INT_MAX, (MINIMUM_FPS << 16), INT_MAX,

View File

@@ -237,19 +237,47 @@ static struct msm_platform_inst_capability instance_data_waipio[] = {
{FRAME_RATE, DEC, CODECS_ALL, {FRAME_RATE, DEC, CODECS_ALL,
(MINIMUM_FPS << 16), (MAXIMUM_FPS << 16), (MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
1, (DEFAULT_FPS << 16)}, 1, (DEFAULT_FPS << 16),
V4L2_CID_MPEG_VIDC_FRAME_RATE,
0,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{0}, {0},
msm_vidc_adjust_frame_rate},
{FRAME_RATE, DEC, VP9, {FRAME_RATE, DEC, VP9,
(MINIMUM_FPS << 16), (MAXIMUM_OVERRIDE_VP9_FPS << 16), (MINIMUM_FPS << 16), (MAXIMUM_OVERRIDE_VP9_FPS << 16),
1, (DEFAULT_FPS << 16)}, 1, (DEFAULT_FPS << 16),
V4L2_CID_MPEG_VIDC_FRAME_RATE,
0,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{0}, {0},
msm_vidc_adjust_frame_rate},
{OPERATING_RATE, ENC|DEC, CODECS_ALL, {OPERATING_RATE, ENC, CODECS_ALL,
(MINIMUM_FPS << 16), (MAXIMUM_FPS << 16), (MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
1, (DEFAULT_FPS << 16)}, 1, (DEFAULT_FPS << 16)},
{OPERATING_RATE, DEC, CODECS_ALL,
(MINIMUM_FPS << 16), (MAXIMUM_FPS << 16),
1, (DEFAULT_FPS << 16),
V4L2_CID_MPEG_VIDC_OPERATING_RATE,
0,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{0}, {0},
msm_vidc_adjust_operating_rate},
{OPERATING_RATE, DEC, VP9, {OPERATING_RATE, DEC, VP9,
(MINIMUM_FPS << 16), (MAXIMUM_OVERRIDE_VP9_FPS << 16), (MINIMUM_FPS << 16), (MAXIMUM_OVERRIDE_VP9_FPS << 16),
1, (DEFAULT_FPS << 16)}, 1, (DEFAULT_FPS << 16),
V4L2_CID_MPEG_VIDC_OPERATING_RATE,
0,
CAP_FLAG_OUTPUT_PORT |
CAP_FLAG_INPUT_PORT | CAP_FLAG_DYNAMIC_ALLOWED,
{0}, {0},
msm_vidc_adjust_operating_rate},
{INPUT_RATE, ENC|DEC, CODECS_ALL, {INPUT_RATE, ENC|DEC, CODECS_ALL,
(MINIMUM_FPS << 16), INT_MAX, (MINIMUM_FPS << 16), INT_MAX,

View File

@@ -52,6 +52,8 @@ int msm_vidc_prepare_dependency_list(struct msm_vidc_inst *inst);
int msm_vidc_adjust_session_priority(void *instance, struct v4l2_ctrl *ctrl); int msm_vidc_adjust_session_priority(void *instance, struct v4l2_ctrl *ctrl);
int msm_vidc_adjust_roi_info(void *instance, struct v4l2_ctrl *ctrl); int msm_vidc_adjust_roi_info(void *instance, struct v4l2_ctrl *ctrl);
int msm_vidc_adjust_all_intra(void *instance, struct v4l2_ctrl *ctrl); int msm_vidc_adjust_all_intra(void *instance, struct v4l2_ctrl *ctrl);
int msm_vidc_adjust_frame_rate(void *instance, struct v4l2_ctrl *ctrl);
int msm_vidc_adjust_operating_rate(void *instance, struct v4l2_ctrl *ctrl);
int msm_vidc_set_header_mode(void *instance, int msm_vidc_set_header_mode(void *instance,
enum msm_vidc_inst_capability_type cap_id); enum msm_vidc_inst_capability_type cap_id);

View File

@@ -1040,6 +1040,7 @@ static int msm_vidc_update_static_property(struct msm_vidc_inst *inst,
if (rc) if (rc)
return rc; return rc;
} }
if (ctrl->id == V4L2_CID_MPEG_VIDC_PRIORITY) { if (ctrl->id == V4L2_CID_MPEG_VIDC_PRIORITY) {
rc = msm_vidc_adjust_session_priority(inst, ctrl); rc = msm_vidc_adjust_session_priority(inst, ctrl);
if (rc) if (rc)
@@ -2770,6 +2771,69 @@ int msm_vidc_adjust_roi_info(void *instance, struct v4l2_ctrl *ctrl)
return 0; return 0;
} }
int msm_vidc_adjust_frame_rate(void *instance, struct v4l2_ctrl *ctrl)
{
int rc = 0;
struct msm_vidc_inst_capability *capability;
struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance;
u32 adjusted_value;
if (!inst || !inst->capabilities) {
d_vpr_e("%s: invalid params\n", __func__);
return -EINVAL;
}
capability = inst->capabilities;
adjusted_value = ctrl ? ctrl->val : capability->cap[FRAME_RATE].value;
if (is_realtime_session(inst)) {
rc = msm_vidc_check_core_mbps(inst);
if (rc) {
i_vpr_e(inst, "%s: unsupported load\n", __func__);
return rc;
}
}
inst->priority_level = MSM_VIDC_PRIORITY_HIGH;
capability->cap[FRAME_RATE].flags |= CAP_FLAG_CLIENT_SET;
msm_vidc_update_cap_value(inst, FRAME_RATE, adjusted_value, __func__);
return 0;
}
int msm_vidc_adjust_operating_rate(void *instance, struct v4l2_ctrl *ctrl)
{
int rc = 0;
struct msm_vidc_inst_capability *capability;
struct msm_vidc_inst *inst = (struct msm_vidc_inst *) instance;
u32 adjusted_value;
if (!inst || !inst->capabilities) {
d_vpr_e("%s: invalid params\n", __func__);
return -EINVAL;
}
capability = inst->capabilities;
adjusted_value = ctrl ? ctrl->val : capability->cap[OPERATING_RATE].value;
if (is_realtime_session(inst)) {
rc = msm_vidc_check_core_mbps(inst);
if (rc) {
i_vpr_e(inst, "%s: unsupported load\n", __func__);
return rc;
}
}
inst->priority_level = MSM_VIDC_PRIORITY_HIGH;
capability->cap[OPERATING_RATE].flags |= CAP_FLAG_CLIENT_SET;
msm_vidc_update_cap_value(inst, OPERATING_RATE, adjusted_value, __func__);
return 0;
}
int msm_vidc_prepare_dependency_list(struct msm_vidc_inst *inst) int msm_vidc_prepare_dependency_list(struct msm_vidc_inst *inst)
{ {
struct list_head root_list, opt_list; struct list_head root_list, opt_list;

View File

@@ -1316,6 +1316,8 @@ bool msm_vidc_allow_s_ctrl(struct msm_vidc_inst *inst, u32 id)
case V4L2_CID_MPEG_VIDC_PRIORITY: case V4L2_CID_MPEG_VIDC_PRIORITY:
case V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST: case V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST:
case V4L2_CID_MPEG_VIDC_INPUT_METADATA_FD: case V4L2_CID_MPEG_VIDC_INPUT_METADATA_FD:
case V4L2_CID_MPEG_VIDC_FRAME_RATE:
case V4L2_CID_MPEG_VIDC_OPERATING_RATE:
allow = true; allow = true;
break; break;
default: default:

View File

@@ -66,6 +66,9 @@
#define V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST (V4L2_CID_MPEG_VIDC_BASE + 0x3) #define V4L2_CID_MPEG_VIDC_LOWLATENCY_REQUEST (V4L2_CID_MPEG_VIDC_BASE + 0x3)
/* FIXme: */ /* FIXme: */
#define V4L2_CID_MPEG_VIDC_CODEC_CONFIG (V4L2_CID_MPEG_VIDC_BASE + 0x4) #define V4L2_CID_MPEG_VIDC_CODEC_CONFIG (V4L2_CID_MPEG_VIDC_BASE + 0x4)
#define V4L2_CID_MPEG_VIDC_FRAME_RATE (V4L2_CID_MPEG_VIDC_BASE + 0x5)
#define V4L2_CID_MPEG_VIDC_OPERATING_RATE (V4L2_CID_MPEG_VIDC_BASE + 0x6)
/* Encoder Intra refresh period */ /* Encoder Intra refresh period */
#define V4L2_CID_MPEG_VIDC_INTRA_REFRESH_PERIOD (V4L2_CID_MPEG_VIDC_BASE + 0xB) #define V4L2_CID_MPEG_VIDC_INTRA_REFRESH_PERIOD (V4L2_CID_MPEG_VIDC_BASE + 0xB)
#define V4L2_CID_MPEG_VIDC_TIME_DELTA_BASED_RC (V4L2_CID_MPEG_VIDC_BASE + 0xD) #define V4L2_CID_MPEG_VIDC_TIME_DELTA_BASED_RC (V4L2_CID_MPEG_VIDC_BASE + 0xD)