[v3,2/2] media: coda: Add more H264 levels for CODA960

Message ID 20220309173636.1879419-2-festevam@gmail.com (mailing list archive)
State Superseded
Headers
Series [v3,1/2] media: coda: Fix reported H264 profile |

Commit Message

Fabio Estevam March 9, 2022, 5:36 p.m. UTC
  From: Nicolas Dufresne <nicolas.dufresne@collabora.com>

Add H264 level 1.0, 4.1, 4.2 to the list of supported formats.
While the hardware does not fully support these levels, it does support
most of them. The constraints on frame size and pixel formats already
cover the limitation.

This fixes negotiation of level on GStreamer 1.17.1.

Cc: stable@vger.kernel.org
Fixes: 42a68012e67c2 ("media: coda: add read-only h.264 decoder profile/level controls")
Suggested-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
Signed-off-by: Fabio Estevam <festevam@denx.de>
---
Changes since v2:
- Remove 5.0 level and use Phillip's suggestion to get the correct levels
being reported by v4l2h264enc:

                     h264_level 0x00990a67 (menu)   : min=0 max=13 default=11 value=11
				0: 1
				5: 2
				8: 3
				9: 3.1
				10: 3.2
				11: 4
				12: 4.1
				13: 4.2

 drivers/media/platform/coda/coda-common.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
  

Comments

Philipp Zabel March 11, 2022, 9:35 a.m. UTC | #1
On Mi, 2022-03-09 at 14:36 -0300, Fabio Estevam wrote:
> From: Nicolas Dufresne <nicolas.dufresne@collabora.com>
> 
> Add H264 level 1.0, 4.1, 4.2 to the list of supported formats.
> While the hardware does not fully support these levels, it does
> support
> most of them. The constraints on frame size and pixel formats already
> cover the limitation.
> 
> This fixes negotiation of level on GStreamer 1.17.1.
> 
> Cc: stable@vger.kernel.org
> Fixes: 42a68012e67c2 ("media: coda: add read-only h.264 decoder
> profile/level controls")
> Suggested-by: Philipp Zabel <p.zabel@pengutronix.de>
> Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
> Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
> Signed-off-by: Fabio Estevam <festevam@denx.de>
> ---
> Changes since v2:
> - Remove 5.0 level and use Phillip's suggestion to get the correct
> levels
> being reported by v4l2h264enc:
> 
>                      h264_level 0x00990a67 (menu)   : min=0 max=13
> default=11 value=11
>                                 0: 1
>                                 5: 2
>                                 8: 3
>                                 9: 3.1
>                                 10: 3.2
>                                 11: 4
>                                 12: 4.1
>                                 13: 4.2
> 
>  drivers/media/platform/coda/coda-common.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/platform/coda/coda-common.c
> b/drivers/media/platform/coda/coda-common.c
> index 280d77f1567c..da8bc1f87ba0 100644
> --- a/drivers/media/platform/coda/coda-common.c
> +++ b/drivers/media/platform/coda/coda-common.c
> @@ -2349,12 +2349,15 @@ static void coda_encode_ctrls(struct coda_ctx
> *ctx)
>         if (ctx->dev->devtype->product == CODA_960) {
>                 v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops,
>                         V4L2_CID_MPEG_VIDEO_H264_LEVEL,
> -                       V4L2_MPEG_VIDEO_H264_LEVEL_4_0,
> -                       ~((1 << V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
> +                       V4L2_MPEG_VIDEO_H264_LEVEL_4_2,
> +                       ~((1 << V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
> +                         (1 << V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
>                           (1 << V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
>                           (1 << V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
>                           (1 << V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
> -                         (1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_0)),
> +                         (1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
> +                         (1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
> +                         (1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_2)),
>                         V4L2_MPEG_VIDEO_H264_LEVEL_4_0);
>         }
>         v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,

Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>

regards
Philipp
  

Patch

diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/platform/coda/coda-common.c
index 280d77f1567c..da8bc1f87ba0 100644
--- a/drivers/media/platform/coda/coda-common.c
+++ b/drivers/media/platform/coda/coda-common.c
@@ -2349,12 +2349,15 @@  static void coda_encode_ctrls(struct coda_ctx *ctx)
 	if (ctx->dev->devtype->product == CODA_960) {
 		v4l2_ctrl_new_std_menu(&ctx->ctrls, &coda_ctrl_ops,
 			V4L2_CID_MPEG_VIDEO_H264_LEVEL,
-			V4L2_MPEG_VIDEO_H264_LEVEL_4_0,
-			~((1 << V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
+			V4L2_MPEG_VIDEO_H264_LEVEL_4_2,
+			~((1 << V4L2_MPEG_VIDEO_H264_LEVEL_1_0) |
+			  (1 << V4L2_MPEG_VIDEO_H264_LEVEL_2_0) |
 			  (1 << V4L2_MPEG_VIDEO_H264_LEVEL_3_0) |
 			  (1 << V4L2_MPEG_VIDEO_H264_LEVEL_3_1) |
 			  (1 << V4L2_MPEG_VIDEO_H264_LEVEL_3_2) |
-			  (1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_0)),
+			  (1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_0) |
+			  (1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_1) |
+			  (1 << V4L2_MPEG_VIDEO_H264_LEVEL_4_2)),
 			V4L2_MPEG_VIDEO_H264_LEVEL_4_0);
 	}
 	v4l2_ctrl_new_std(&ctx->ctrls, &coda_ctrl_ops,