From b6d288bb8823e11114297d1e406ccd977106aaf9 Mon Sep 17 00:00:00 2001 From: Jernej Skrabec Date: Sat, 9 Nov 2019 13:06:15 +0100 Subject: [PATCH 28/44] media: cedrus: Add callback for buffer cleanup Signed-off-by: Jernej Skrabec --- drivers/staging/media/sunxi/cedrus/cedrus.h | 1 + drivers/staging/media/sunxi/cedrus/cedrus_video.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) --- a/drivers/staging/media/sunxi/cedrus/cedrus.h +++ b/drivers/staging/media/sunxi/cedrus/cedrus.h @@ -149,6 +149,7 @@ struct cedrus_dec_ops { int (*start)(struct cedrus_ctx *ctx); void (*stop)(struct cedrus_ctx *ctx); void (*trigger)(struct cedrus_ctx *ctx); + void (*buf_cleanup)(struct cedrus_ctx *ctx, struct cedrus_buffer *buf); }; struct cedrus_variant { --- a/drivers/staging/media/sunxi/cedrus/cedrus_video.c +++ b/drivers/staging/media/sunxi/cedrus/cedrus_video.c @@ -455,6 +455,18 @@ static int cedrus_buf_prepare(struct vb2 return 0; } +static void cedrus_buf_cleanup(struct vb2_buffer *vb) +{ + struct vb2_queue *vq = vb->vb2_queue; + struct cedrus_ctx *ctx = vb2_get_drv_priv(vq); + struct cedrus_dev *dev = ctx->dev; + struct cedrus_dec_ops *ops = dev->dec_ops[ctx->current_codec]; + + if (!V4L2_TYPE_IS_OUTPUT(vq->type) && ops->buf_cleanup) + ops->buf_cleanup(ctx, + vb2_to_cedrus_buffer(vq->bufs[vb->index])); +} + static int cedrus_start_streaming(struct vb2_queue *vq, unsigned int count) { struct cedrus_ctx *ctx = vb2_get_drv_priv(vq); @@ -535,6 +547,7 @@ static void cedrus_buf_request_complete( static struct vb2_ops cedrus_qops = { .queue_setup = cedrus_queue_setup, .buf_prepare = cedrus_buf_prepare, + .buf_cleanup = cedrus_buf_cleanup, .buf_queue = cedrus_buf_queue, .buf_out_validate = cedrus_buf_out_validate, .buf_request_complete = cedrus_buf_request_complete,