OSDN Git Service

media: cedrus: Adjust buffer size based on codec
authorJernej Skrabec <jernej.skrabec@gmail.com>
Wed, 9 Nov 2022 18:23:07 +0000 (19:23 +0100)
committerHans Verkuil <hverkuil-cisco@xs4all.nl>
Fri, 18 Nov 2022 14:48:16 +0000 (15:48 +0100)
In some cases decoding engine needs extra space in capture buffers. This
is the case for decoding 10-bit HEVC frames into 8-bit capture format.
This commit only adds infrastructure for such cases.

Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
drivers/staging/media/sunxi/cedrus/cedrus.h
drivers/staging/media/sunxi/cedrus/cedrus_video.c

index a6a649b..3f628e6 100644 (file)
@@ -162,6 +162,8 @@ struct cedrus_dec_ops {
        int (*start)(struct cedrus_ctx *ctx);
        void (*stop)(struct cedrus_ctx *ctx);
        void (*trigger)(struct cedrus_ctx *ctx);
+       unsigned int (*extra_cap_size)(struct cedrus_ctx *ctx,
+                                      struct v4l2_pix_format *pix_fmt);
 };
 
 struct cedrus_variant {
index e6909be..73464c5 100644 (file)
@@ -250,6 +250,10 @@ static int cedrus_try_fmt_vid_cap_p(struct cedrus_ctx *ctx,
        pix_fmt->height = ctx->src_fmt.height;
        cedrus_prepare_format(pix_fmt);
 
+       if (ctx->current_codec->extra_cap_size)
+               pix_fmt->sizeimage +=
+                       ctx->current_codec->extra_cap_size(ctx, pix_fmt);
+
        return 0;
 }