Hello,
Changes in v2:
* use _DEC_ instead of _DECODER_ in the name of the new controls (Hans)
* rebase on top of media master branch
v1 can be found at [1]
regards,
Stan
[1] https://patchwork.linuxtv.org/project/linux-media/cover/[email protected]/
Stanimir Varbanov (4):
v4l2-ctrl: Make display delay and display enable std controls
venus: vdec: Add support for display delay and delay enable controls
s5p-mfc: Use display delay and display enable std controls
docs: Deprecate mfc display delay controls
.../media/v4l/ext-ctrls-codec.rst | 25 +++++++++++++++++++
drivers/media/platform/qcom/venus/core.h | 2 ++
drivers/media/platform/qcom/venus/vdec.c | 10 +++++++-
.../media/platform/qcom/venus/vdec_ctrls.c | 16 +++++++++++-
drivers/media/platform/s5p-mfc/s5p_mfc_dec.c | 16 ++++++++++++
drivers/media/v4l2-core/v4l2-ctrls.c | 4 +++
include/uapi/linux/v4l2-controls.h | 3 +++
7 files changed, 74 insertions(+), 2 deletions(-)
--
2.17.1
Deprecate mfc private display delay and display enable controls for
new clients and use the standard controls instead.
Signed-off-by: Stanimir Varbanov <[email protected]>
---
.../userspace-api/media/v4l/ext-ctrls-codec.rst | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
index 5d7c47837035..815c6eb4a0d0 100644
--- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
+++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
@@ -2111,6 +2111,11 @@ MFC 5.1 Control IDs
feature can be used for example for generating thumbnails of videos.
Applicable to the H264 decoder.
+ .. note::
+
+ This control is deprecated. Use the standard
+ ``V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE`` control instead.
+
``V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY (integer)``
Display delay value for H264 decoder. The decoder is forced to
return a decoded frame after the set 'display delay' number of
@@ -2118,6 +2123,11 @@ MFC 5.1 Control IDs
of display order, in addition the hardware may still be using the
returned buffer as a reference picture for subsequent frames.
+ .. note::
+
+ This control is deprecated. Use the standard
+ ``V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY`` control instead.
+
``V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P (integer)``
The number of reference pictures used for encoding a P picture.
Applicable to the H264 encoder.
--
2.17.1
Use the standard display_delay and display_delay_enable controls,
the legacy private MFC controls are kept for backward compatibility.
Acked-by: Marek Szyprowski <[email protected]>
Signed-off-by: Stanimir Varbanov <[email protected]>
---
drivers/media/platform/s5p-mfc/s5p_mfc_dec.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
index a71753d459ba..a92a9ca6e87e 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
@@ -167,6 +167,13 @@ static struct mfc_control controls[] = {
.step = 1,
.default_value = 0,
},
+ {
+ .id = V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY,
+ .type = V4L2_CTRL_TYPE_INTEGER,
+ .minimum = 0,
+ .maximum = 16383,
+ .default_value = 0,
+ },
{
.id = V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE,
.type = V4L2_CTRL_TYPE_BOOLEAN,
@@ -176,6 +183,13 @@ static struct mfc_control controls[] = {
.step = 1,
.default_value = 0,
},
+ {
+ .id = V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE,
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
+ .minimum = 0,
+ .maximum = 1,
+ .default_value = 0,
+ },
{
.id = V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER,
.type = V4L2_CTRL_TYPE_BOOLEAN,
@@ -690,9 +704,11 @@ static int s5p_mfc_dec_s_ctrl(struct v4l2_ctrl *ctrl)
switch (ctrl->id) {
case V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY:
+ case V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY:
ctx->display_delay = ctrl->val;
break;
case V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY_ENABLE:
+ case V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE:
ctx->display_delay_enable = ctrl->val;
break;
case V4L2_CID_MPEG_VIDEO_DECODER_MPEG4_DEBLOCK_FILTER:
--
2.17.1
Add support for display delay and display delay enable std controls.
With this we implement decoder decode output order (decode vs display).
Once firmware implement few new features the controls will be used
for other use-cases.
Signed-off-by: Stanimir Varbanov <[email protected]>
---
drivers/media/platform/qcom/venus/core.h | 2 ++
drivers/media/platform/qcom/venus/vdec.c | 10 +++++++++-
drivers/media/platform/qcom/venus/vdec_ctrls.c | 16 +++++++++++++++-
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
index b984d508ed71..1028b492216c 100644
--- a/drivers/media/platform/qcom/venus/core.h
+++ b/drivers/media/platform/qcom/venus/core.h
@@ -172,6 +172,8 @@ struct vdec_controls {
u32 post_loop_deb_mode;
u32 profile;
u32 level;
+ u32 display_delay;
+ u32 display_delay_enable;
};
struct venc_controls {
diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/platform/qcom/venus/vdec.c
index e4dc97f00fc3..c20496a14a55 100644
--- a/drivers/media/platform/qcom/venus/vdec.c
+++ b/drivers/media/platform/qcom/venus/vdec.c
@@ -620,7 +620,7 @@ static int vdec_set_properties(struct venus_inst *inst)
{
struct vdec_controls *ctr = &inst->controls.dec;
struct hfi_enable en = { .enable = 1 };
- u32 ptype;
+ u32 ptype, decode_order;
int ret;
if (ctr->post_loop_deb_mode) {
@@ -630,6 +630,14 @@ static int vdec_set_properties(struct venus_inst *inst)
return ret;
}
+ if (ctr->display_delay_enable && ctr->display_delay == 0) {
+ ptype = HFI_PROPERTY_PARAM_VDEC_OUTPUT_ORDER;
+ decode_order = HFI_OUTPUT_ORDER_DECODE;
+ ret = hfi_session_set_property(inst, ptype, &decode_order);
+ if (ret)
+ return ret;
+ }
+
return 0;
}
diff --git a/drivers/media/platform/qcom/venus/vdec_ctrls.c b/drivers/media/platform/qcom/venus/vdec_ctrls.c
index 974110b75b93..07680aae0a36 100644
--- a/drivers/media/platform/qcom/venus/vdec_ctrls.c
+++ b/drivers/media/platform/qcom/venus/vdec_ctrls.c
@@ -30,6 +30,12 @@ static int vdec_op_s_ctrl(struct v4l2_ctrl *ctrl)
case V4L2_CID_MPEG_VIDEO_VP9_LEVEL:
ctr->level = ctrl->val;
break;
+ case V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY:
+ ctr->display_delay = ctrl->val;
+ break;
+ case V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE:
+ ctr->display_delay_enable = ctrl->val;
+ break;
default:
return -EINVAL;
}
@@ -89,7 +95,7 @@ int vdec_ctrl_init(struct venus_inst *inst)
struct v4l2_ctrl *ctrl;
int ret;
- ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 9);
+ ret = v4l2_ctrl_handler_init(&inst->ctrl_handler, 11);
if (ret)
return ret;
@@ -158,6 +164,14 @@ int vdec_ctrl_init(struct venus_inst *inst)
if (ctrl)
ctrl->flags |= V4L2_CTRL_FLAG_VOLATILE;
+ v4l2_ctrl_new_std(&inst->ctrl_handler, &vdec_ctrl_ops,
+ V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY,
+ 0, 16383, 1, 0);
+
+ v4l2_ctrl_new_std(&inst->ctrl_handler, &vdec_ctrl_ops,
+ V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE,
+ 0, 1, 1, 0);
+
ret = inst->ctrl_handler.error;
if (ret) {
v4l2_ctrl_handler_free(&inst->ctrl_handler);
--
2.17.1
Hans, any comments ?
On 1/15/21 11:26 AM, Stanimir Varbanov wrote:
> Hello,
>
> Changes in v2:
>
> * use _DEC_ instead of _DECODER_ in the name of the new controls (Hans)
> * rebase on top of media master branch
>
> v1 can be found at [1]
>
> regards,
> Stan
>
> [1] https://patchwork.linuxtv.org/project/linux-media/cover/[email protected]/
>
> Stanimir Varbanov (4):
> v4l2-ctrl: Make display delay and display enable std controls
> venus: vdec: Add support for display delay and delay enable controls
> s5p-mfc: Use display delay and display enable std controls
> docs: Deprecate mfc display delay controls
>
> .../media/v4l/ext-ctrls-codec.rst | 25 +++++++++++++++++++
> drivers/media/platform/qcom/venus/core.h | 2 ++
> drivers/media/platform/qcom/venus/vdec.c | 10 +++++++-
> .../media/platform/qcom/venus/vdec_ctrls.c | 16 +++++++++++-
> drivers/media/platform/s5p-mfc/s5p_mfc_dec.c | 16 ++++++++++++
> drivers/media/v4l2-core/v4l2-ctrls.c | 4 +++
> include/uapi/linux/v4l2-controls.h | 3 +++
> 7 files changed, 74 insertions(+), 2 deletions(-)
>
--
regards,
Stan
On 15/01/2021 10:26, Stanimir Varbanov wrote:
> Deprecate mfc private display delay and display enable controls for
> new clients and use the standard controls instead.
>
> Signed-off-by: Stanimir Varbanov <[email protected]>
Acked-by: Hans Verkuil <[email protected]>
Thanks!
Hans
> ---
> .../userspace-api/media/v4l/ext-ctrls-codec.rst | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> index 5d7c47837035..815c6eb4a0d0 100644
> --- a/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> +++ b/Documentation/userspace-api/media/v4l/ext-ctrls-codec.rst
> @@ -2111,6 +2111,11 @@ MFC 5.1 Control IDs
> feature can be used for example for generating thumbnails of videos.
> Applicable to the H264 decoder.
>
> + .. note::
> +
> + This control is deprecated. Use the standard
> + ``V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY_ENABLE`` control instead.
> +
> ``V4L2_CID_MPEG_MFC51_VIDEO_DECODER_H264_DISPLAY_DELAY (integer)``
> Display delay value for H264 decoder. The decoder is forced to
> return a decoded frame after the set 'display delay' number of
> @@ -2118,6 +2123,11 @@ MFC 5.1 Control IDs
> of display order, in addition the hardware may still be using the
> returned buffer as a reference picture for subsequent frames.
>
> + .. note::
> +
> + This control is deprecated. Use the standard
> + ``V4L2_CID_MPEG_VIDEO_DEC_DISPLAY_DELAY`` control instead.
> +
> ``V4L2_CID_MPEG_MFC51_VIDEO_H264_NUM_REF_PIC_FOR_P (integer)``
> The number of reference pictures used for encoding a P picture.
> Applicable to the H264 encoder.
>