diff mbox series

[11/20] media: s5p-mfc: Add support for UHD encoding.

Message ID 20220517125548.14746-12-smitha.t@samsung.com
State New
Headers show
Series Add MFC v12 support. | expand

Commit Message

Smitha T Murthy May 17, 2022, 12:55 p.m. UTC
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: linux-fsd@tesla.com
Signed-off-by: Smitha T Murthy <smitha.t@samsung.com>
---
 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(-)

Comments

Hans Verkuil May 18, 2022, 9:50 a.m. UTC | #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: linux-fsd@tesla.com
> Signed-off-by: Smitha T Murthy <smitha.t@samsung.com>
> ---
>  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 */
diff mbox series

Patch

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 */