Commit ff3f4490 authored by Aakarsh Jain's avatar Aakarsh Jain Committed by Hans Verkuil
Browse files

media: s5p-mfc: Add support for DMABUF for encoder



Add dmabuf support for mfc encoder

Cc: linux-fsd@tesla.com
Signed-off-by: default avatarSmitha T Murthy <smithatmurthy@gmail.com>
Signed-off-by: default avatarAakarsh Jain <aakarsh.jain@samsung.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
parent 15fe06f7
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -865,7 +865,7 @@ static int s5p_mfc_open(struct file *file)
		q->io_modes = VB2_MMAP;
		q->ops = get_dec_queue_ops();
	} else if (vdev == dev->vfd_enc) {
		q->io_modes = VB2_MMAP | VB2_USERPTR;
		q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
		q->ops = get_enc_queue_ops();
	} else {
		ret = -ENOENT;
@@ -892,7 +892,7 @@ static int s5p_mfc_open(struct file *file)
		q->io_modes = VB2_MMAP;
		q->ops = get_dec_queue_ops();
	} else if (vdev == dev->vfd_enc) {
		q->io_modes = VB2_MMAP | VB2_USERPTR;
		q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF;
		q->ops = get_enc_queue_ops();
	} else {
		ret = -ENOENT;
+11 −9
Original line number Diff line number Diff line
@@ -1538,9 +1538,10 @@ static int vidioc_reqbufs(struct file *file, void *priv,
	struct s5p_mfc_ctx *ctx = fh_to_ctx(priv);
	int ret = 0;

	/* if memory is not mmp or userptr return error */
	/* if memory is not mmp or userptr or dmabuf return error */
	if ((reqbufs->memory != V4L2_MEMORY_MMAP) &&
		(reqbufs->memory != V4L2_MEMORY_USERPTR))
		(reqbufs->memory != V4L2_MEMORY_USERPTR) &&
		(reqbufs->memory != V4L2_MEMORY_DMABUF))
		return -EINVAL;
	if (reqbufs->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
		if (reqbufs->count == 0) {
@@ -1617,9 +1618,10 @@ static int vidioc_querybuf(struct file *file, void *priv,
	struct s5p_mfc_ctx *ctx = fh_to_ctx(priv);
	int ret = 0;

	/* if memory is not mmp or userptr return error */
	/* if memory is not mmp or userptr or dmabuf return error */
	if ((buf->memory != V4L2_MEMORY_MMAP) &&
		(buf->memory != V4L2_MEMORY_USERPTR))
		(buf->memory != V4L2_MEMORY_USERPTR) &&
		(buf->memory != V4L2_MEMORY_DMABUF))
		return -EINVAL;
	if (buf->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) {
		if (ctx->state != MFCINST_GOT_INST) {
@@ -2581,13 +2583,13 @@ static int s5p_mfc_start_streaming(struct vb2_queue *q, unsigned int count)
						S5P_MFC_R2H_CMD_SEQ_DONE_RET,
						0);
		}

		if (q->memory != V4L2_MEMORY_DMABUF) {
			if (ctx->src_bufs_cnt < ctx->pb_count) {
			mfc_err("Need minimum %d OUTPUT buffers\n",
					ctx->pb_count);
				mfc_err("Need minimum %d OUTPUT buffers\n", ctx->pb_count);
				return -ENOBUFS;
			}
		}
	}

	/* If context is ready then dev = work->data;schedule it to run */
	if (s5p_mfc_ctx_ready(ctx))