static void __gsc_m2m_cleanup_queue(struct gsc_ctx *ctx) { struct vb2_v4l2_buffer *src_vb, *dst_vb; while (v4l2_m2m_num_src_bufs_ready(ctx->m2m_ctx) > 0) { src_vb = v4l2_m2m_src_buf_remove(ctx->m2m_ctx); v4l2_m2m_buf_done(src_vb, VB2_BUF_STATE_ERROR); } while (v4l2_m2m_num_dst_bufs_ready(ctx->m2m_ctx) > 0) { dst_vb = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx); v4l2_m2m_buf_done(dst_vb, VB2_BUF_STATE_ERROR); } }
static int nxp_m2m_job_ready(void *priv) { /* TODO */ #if 0 struct nxp_video *me = priv; pr_debug("%s\n", __func__); if (v4l2_m2m_num_src_bufs_ready(me->m2m_ctx) < 1 || v4l2_m2m_num_dst_bufs_ready(m2->m2m_ctx) < 1) { pr_err("%s: Not enough buffers available\n", __func__); return 0; } #endif return 1; }
static int hva_job_ready(void *priv) { struct hva_ctx *ctx = priv; struct device *dev = ctx_to_dev(ctx); if (!v4l2_m2m_num_src_bufs_ready(ctx->fh.m2m_ctx)) { dev_dbg(dev, "%s job not ready: no frame buffers\n", ctx->name); return 0; } if (!v4l2_m2m_num_dst_bufs_ready(ctx->fh.m2m_ctx)) { dev_dbg(dev, "%s job not ready: no stream buffers\n", ctx->name); return 0; } if (ctx->aborting) { dev_dbg(dev, "%s job not ready: aborting\n", ctx->name); return 0; } return 1; }