MFC driver had restriction on max resolution of 1080p,
updated it for UHD. Added corresponding support to
set recommended profile and level for H264 in UHD scenario.
Cc: [email protected]
Signed-off-by: Smitha T Murthy <[email protected]>
---
drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c | 4 ++--
.../media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c | 12 ++++++++++++
2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c
index 456edcfebba7..9b624f17e32b 100644
--- a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c
+++ b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c
@@ -1630,8 +1630,8 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f)
return -EINVAL;
}
- v4l_bound_align_image(&pix_fmt_mp->width, 8, 1920, 1,
- &pix_fmt_mp->height, 4, 1080, 1, 0);
+ v4l_bound_align_image(&pix_fmt_mp->width, 8, 3840, 1,
+ &pix_fmt_mp->height, 4, 2160, 1, 0);
} else {
mfc_err("invalid buf type\n");
return -EINVAL;
diff --git a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c
index 7db7945ea80f..2b6d6259a209 100644
--- a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c
+++ b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c
@@ -1127,6 +1127,18 @@ static int s5p_mfc_set_enc_params_h264(struct s5p_mfc_ctx *ctx)
reg |= ((p->num_b_frame & 0x3) << 16);
writel(reg, mfc_regs->e_gop_config);
+ /* UHD encoding case */
+ if ((ctx->img_width == 3840) && ctx->img_height == 2160) {
+ if (p_h264->level < 51) {
+ mfc_debug(2, "Set Level 5.1 for UHD\n");
+ p_h264->level = 51;
+ }
+ if (p_h264->profile != 0x2) {
+ mfc_debug(2, "Set High profile for UHD\n");
+ p_h264->profile = 0x2;
+ }
+ }
+
/* profile & level */
reg = 0;
/** level */
--
2.17.1
Hi Smitha,
On 5/17/22 14:55, Smitha T Murthy wrote:
> MFC driver had restriction on max resolution of 1080p,
> updated it for UHD. Added corresponding support to
> set recommended profile and level for H264 in UHD scenario.
>
> Cc: [email protected]
> Signed-off-by: Smitha T Murthy <[email protected]>
> ---
> drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c | 4 ++--
> .../media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c | 12 ++++++++++++
> 2 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c
> index 456edcfebba7..9b624f17e32b 100644
> --- a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c
> +++ b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_enc.c
> @@ -1630,8 +1630,8 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f)
> return -EINVAL;
> }
>
> - v4l_bound_align_image(&pix_fmt_mp->width, 8, 1920, 1,
> - &pix_fmt_mp->height, 4, 1080, 1, 0);
> + v4l_bound_align_image(&pix_fmt_mp->width, 8, 3840, 1,
> + &pix_fmt_mp->height, 4, 2160, 1, 0);
Is this supported by older MFC versions as well? This seems to enable UHD support
for all MFC versions.
Regards,
Hans
> } else {
> mfc_err("invalid buf type\n");
> return -EINVAL;
> diff --git a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c
> index 7db7945ea80f..2b6d6259a209 100644
> --- a/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c
> +++ b/drivers/media/platform/samsung/s5p-mfc/s5p_mfc_opr_v6.c
> @@ -1127,6 +1127,18 @@ static int s5p_mfc_set_enc_params_h264(struct s5p_mfc_ctx *ctx)
> reg |= ((p->num_b_frame & 0x3) << 16);
> writel(reg, mfc_regs->e_gop_config);
>
> + /* UHD encoding case */
> + if ((ctx->img_width == 3840) && ctx->img_height == 2160) {
> + if (p_h264->level < 51) {
> + mfc_debug(2, "Set Level 5.1 for UHD\n");
> + p_h264->level = 51;
> + }
> + if (p_h264->profile != 0x2) {
> + mfc_debug(2, "Set High profile for UHD\n");
> + p_h264->profile = 0x2;
> + }
> + }
> +
> /* profile & level */
> reg = 0;
> /** level */