/* Export DMA buffer */ static int vidioc_expbuf(struct file *file, void *priv, struct v4l2_exportbuffer *eb) { struct s5p_mfc_ctx *ctx = fh_to_ctx(priv); if (eb->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE) return vb2_expbuf(&ctx->vq_src, eb); if (eb->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE) return vb2_expbuf(&ctx->vq_dst, eb); return -EINVAL; }
/** * v4l2_m2m_expbuf() - export a source or destination buffer, depending on * the type */ int v4l2_m2m_expbuf(struct file *file, struct v4l2_m2m_ctx *m2m_ctx, struct v4l2_exportbuffer *eb) { struct vb2_queue *vq; vq = v4l2_m2m_get_vq(m2m_ctx, eb->type); return vb2_expbuf(vq, eb); }
int vb2_ioctl_expbuf(struct file *file, void *priv, struct v4l2_exportbuffer *p) { struct video_device *vdev = video_devdata(file); if (vb2_queue_is_busy(vdev, file)) return -EBUSY; return vb2_expbuf(vdev->queue, p); }
int uvc_export_buffer(struct uvc_video_queue *queue, struct v4l2_exportbuffer *exp) { int ret; mutex_lock(&queue->mutex); ret = vb2_expbuf(&queue->queue, exp); mutex_unlock(&queue->mutex); return ret; }
static int xvip_dma_expbuf(struct file *file, void *priv, struct v4l2_exportbuffer *eb) { struct v4l2_fh *vfh = file->private_data; struct xvip_dma *dma = to_xvip_dma(vfh->vdev); int ret; mutex_lock(&dma->lock); if (dma->queue.owner && dma->queue.owner != vfh) { ret = -EBUSY; goto done; } ret = vb2_expbuf(&dma->queue, eb); done: mutex_unlock(&dma->lock); return ret; }