|
@@ -645,17 +645,22 @@ static int vidioc_dqbuf(struct file *file, void *priv, struct v4l2_buffer *buf)
|
|
|
mfc_err("Call on DQBUF after unrecoverable error\n");
|
|
|
return -EIO;
|
|
|
}
|
|
|
- if (buf->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
|
|
|
- ret = vb2_dqbuf(&ctx->vq_src, buf, file->f_flags & O_NONBLOCK);
|
|
|
- else if (buf->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
|
|
|
+
|
|
|
+ switch (buf->type) {
|
|
|
+ case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
|
|
|
+ return vb2_dqbuf(&ctx->vq_src, buf, file->f_flags & O_NONBLOCK);
|
|
|
+ case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
|
|
|
ret = vb2_dqbuf(&ctx->vq_dst, buf, file->f_flags & O_NONBLOCK);
|
|
|
- if (ret == 0 && ctx->state == MFCINST_FINISHED &&
|
|
|
- list_empty(&ctx->vq_dst.done_list))
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ if (ctx->state == MFCINST_FINISHED &&
|
|
|
+ (ctx->dst_bufs[buf->index].flags & MFC_BUF_FLAG_EOS))
|
|
|
v4l2_event_queue_fh(&ctx->fh, &ev);
|
|
|
- } else {
|
|
|
- ret = -EINVAL;
|
|
|
+ return 0;
|
|
|
+ default:
|
|
|
+ return -EINVAL;
|
|
|
}
|
|
|
- return ret;
|
|
|
}
|
|
|
|
|
|
/* Export DMA buffer */
|