|
@@ -1147,6 +1147,11 @@ static int vidioc_reqbufs(struct file *file, void *priv,
|
|
|
(reqbufs->memory != V4L2_MEMORY_USERPTR))
|
|
|
return -EINVAL;
|
|
|
if (reqbufs->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
|
|
|
+ if (reqbufs->count == 0) {
|
|
|
+ ret = vb2_reqbufs(&ctx->vq_dst, reqbufs);
|
|
|
+ ctx->capture_state = QUEUE_FREE;
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
if (ctx->capture_state != QUEUE_FREE) {
|
|
|
mfc_err("invalid capture state: %d\n",
|
|
|
ctx->capture_state);
|
|
@@ -1168,6 +1173,14 @@ static int vidioc_reqbufs(struct file *file, void *priv,
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
} else if (reqbufs->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) {
|
|
|
+ if (reqbufs->count == 0) {
|
|
|
+ mfc_debug(2, "Freeing buffers\n");
|
|
|
+ ret = vb2_reqbufs(&ctx->vq_src, reqbufs);
|
|
|
+ s5p_mfc_hw_call(dev->mfc_ops, release_codec_buffers,
|
|
|
+ ctx);
|
|
|
+ ctx->output_state = QUEUE_FREE;
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
if (ctx->output_state != QUEUE_FREE) {
|
|
|
mfc_err("invalid output state: %d\n",
|
|
|
ctx->output_state);
|