All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab@redhat.com>
To: Tomasz Stanislawski <t.stanislaws@samsung.com>
Cc: linux-media@vger.kernel.org, linaro-mm-sig@lists.linaro.org,
	sumit.semwal@ti.com, jesse.barker@linaro.org, rob@ti.com,
	daniel@ffwll.ch, m.szyprowski@samsung.com,
	kyungmin.park@samsung.com, hverkuil@xs4all.nl,
	laurent.pinchart@ideasonboard.com, pawel@osciak.com
Subject: Re: [PATCH 05/10] v4l: add buffer exporting via dmabuf
Date: Mon, 23 Jan 2012 14:42:45 -0200	[thread overview]
Message-ID: <4F1D8E05.4060109@redhat.com> (raw)
In-Reply-To: <4F1D8324.5000709@samsung.com>

Em 23-01-2012 13:56, Tomasz Stanislawski escreveu:
> Hi Mauro,
> 
> On 01/23/2012 04:04 PM, Mauro Carvalho Chehab wrote:
>> Em 23-01-2012 12:42, Tomasz Stanislawski escreveu:
>>> Hi Mauro.
>>> On 01/23/2012 03:32 PM, Mauro Carvalho Chehab wrote:
>>>> Em 23-01-2012 11:51, Tomasz Stanislawski escreveu:
>>>>> This patch adds extension to V4L2 api. It allow to export a mmap buffer as file
>>>>> descriptor. New ioctl VIDIOC_EXPBUF is added. It takes a buffer offset used by
>>>>> mmap and return a file descriptor on success.
>>>>
>>>> This requires more discussions.
>>>>
>>>> The usecase for this new API seems to replace the features previously provided
>>>> by the overlay mode. There, not only the buffer were exposed to userspace, but
>>>> some control were provided, in order to control the overlay window.
>>>
>>> This ioctl was introduced to support exporting of V4L2 buffers via dma-buf interface. This framework was little common with overlay mode. Could you describe what overlay mode feature is replaced by VIDIOC_EXPBUF?
>>
>> The V4L2 API doesn't just export "raw" buffers. It provides a logic to control
>> the streams, with includes buffer settings, buffer queue/dequeue, buffer meta-data
>> (like timestamps), etc.
> 
> The DMABUF buffers are handled by vb2-core. It provides control for queuing and passing streaming and metadata management (like timestamps) to the driver.
> 
>>
>> I would expect to see something similar for the dma buffers.
> 
> Those features may be introduced to dma-buf. As I understand queue/dequeue refers to passing 
> ownership between a CPU and a driver. It is handled in vb2-core. Passing buffer between multiple 
> APIs like V4L2 and DRM will be probably handled in the userspace. Currently the dma-buf provides 
> only the mechanism for mapping the same memory by multiple devices.

I'm not sure if the dma-buf itself should have such meta data, but the V4L2 API 
likely needs it.

>>
>> With regards to the overlay mode, this is the old way to export DMA buffers between
>> a video capture driver and a graphics adapter driver. A dma-buf interface will
>> superseed the video overlay mode, as it will provide more features. Yet, care
>> should be taken when writing the userspace interface, in order to be sure that all
>> features needed will be provided there.
>>
> 
> The s5p-tv and s5p-fimc do not have support for OVERLAY mode. As I know vb2-core 
> has no support for the mode, either.

True. It was decided that overlay is an old design, and a dma-buffer
oriented approach would be needed. So, the decision were to not implement
anything there, until a proper dma-buf support were not added.

> What kind of features present in OVERLAYS are 
> needed in dmabuf? Note that dmabuf do not have be used only for buffers with video data.

That's a good point. Basically, Ovelay mode is supported by
those 3 ioctl's:

#define VIDIOC_G_FBUF            _IOR('V', 10, struct v4l2_framebuffer)
#define VIDIOC_S_FBUF            _IOW('V', 11, struct v4l2_framebuffer)
#define VIDIOC_OVERLAY           _IOW('V', 14, int)

With use these structs:

struct v4l2_pix_format {
        __u32                   width;
        __u32                   height;
        __u32                   pixelformat;
        enum v4l2_field         field;
       	__u32                   bytesperline;
        __u32                   sizeimage;
        enum v4l2_colorspace    colorspace;
        __u32                   priv;
};

struct v4l2_framebuffer {
        __u32                   capability;
        __u32                   flags;

        void                    *base;		/* Should be replaced by the DMA buf specifics */
        struct v4l2_pix_format  fmt;
};
/*  Flags for the 'capability' field. Read only */
#define V4L2_FBUF_CAP_EXTERNOVERLAY     0x0001
#define V4L2_FBUF_CAP_CHROMAKEY         0x0002
#define V4L2_FBUF_CAP_LIST_CLIPPING     0x0004
#define V4L2_FBUF_CAP_BITMAP_CLIPPING   0x0008
#define V4L2_FBUF_CAP_LOCAL_ALPHA       0x0010
#define V4L2_FBUF_CAP_GLOBAL_ALPHA      0x0020
#define V4L2_FBUF_CAP_LOCAL_INV_ALPHA   0x0040
#define V4L2_FBUF_CAP_SRC_CHROMAKEY     0x0080
/*  Flags for the 'flags' field. */
#define V4L2_FBUF_FLAG_PRIMARY          0x0001
#define V4L2_FBUF_FLAG_OVERLAY          0x0002
#define V4L2_FBUF_FLAG_CHROMAKEY        0x0004
#define V4L2_FBUF_FLAG_LOCAL_ALPHA	0x0008
#define V4L2_FBUF_FLAG_GLOBAL_ALPHA     0x0010
#define V4L2_FBUF_FLAG_LOCAL_INV_ALPHA  0x0020
#define V4L2_FBUF_FLAG_SRC_CHROMAKEY    0x0040

It should be noticed that devices that support OVERLAY can provide
data on both dma-buffer sharing and via the standard MMAP/read() mode at
the same time, each with a different video format. So, the VIDIOC_S_FBUF
ioctl needs to set the pixel format, and image size for the overlay,
while the other ioctl's set it for the MMAP (or read) mode.

Buffer queue/dequeue happens internally, and can be started/stopped via
a VIDIOC_OVERLAY call.

>>>>
>>>> Please start a separate thread about that, explaining how are you imagining that
>>>> a V4L2 application would use such ioctl.
> 
> I will post a simple application that does buffer sharing between two V4L2 devices (camera and TV output).

Ok.

>>>
>>> This patch is essential for full implementation of support for DMABUF framework in V4L2. Therefore the patch cannot be moved to separate thread.
>>
>> I'm not proposing to move the patch to a separate thread. All I'm saying
>> is that the API extensions for dmabuf requires its own separate discussions.
> 
> I agree. However DMA patches plays important role in this PoC patchset so I decided to keep patches to together. Moreover I wanted this code to compile successfully.
> 
> I prefer to have a good reason for adding extension before proposing it on the mailing list. The DMA buffer sharing seams to be a right reason for adding dma_get_pages but comments for V4L2/Linaro people is needed.
> 
>>
>> I couldn't guess, just from your patches, what ioctl's a V4L2 application
>> like tvtime or xawtv would use the DMABUF.
> 
> DMABUF is dedicated for application that use streaming between at least two devices. 
> Especially if those devices are controlled by different APIs, like DRM and V4L2. 
> It would be probably used in the middle-ware like gstreamer or OpenMAX.

This is what the X11 v4l extension driver does: it shares DMA buffers between V4L2 
and DRM. The extension currently relies on XV extension, simply because this is what
were available at the time the extension was written. I didn't have any time yet
to port it to use something more modern.

It is probably a good idea for you to take a look on it, when writing the API bits.
Its source is available at:

	http://cgit.freedesktop.org/xorg/driver/xf86-video-v4l/

Regards,
Mauro

  reply	other threads:[~2012-01-23 16:43 UTC|newest]

Thread overview: 46+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-23 13:51 [PATCH 00/10] Integration of videobuf2 with dmabuf Tomasz Stanislawski
2012-01-23 13:51 ` [PATCH 01/10] arm: dma: support for dma_get_pages Tomasz Stanislawski
2012-01-23 13:51 ` [PATCH 02/10] [media] media: vb2: remove plane argument from call_memop and cleanup mempriv usage Tomasz Stanislawski
2012-01-23 13:51 ` [PATCH 03/10] media: vb2: add prepare/finish callbacks to allocators Tomasz Stanislawski
2012-02-03 15:42   ` Pawel Osciak
2012-01-23 13:51 ` [PATCH 04/10] v4l: vb2: fixes for DMABUF support Tomasz Stanislawski
2012-01-23 14:22   ` Mauro Carvalho Chehab
2012-01-23 14:32     ` Tomasz Stanislawski
2012-01-23 14:52       ` Mauro Carvalho Chehab
2012-01-23 15:25         ` Tomasz Stanislawski
2012-01-23 16:06           ` Mauro Carvalho Chehab
2012-01-23 16:37             ` Tomasz Stanislawski
2012-01-23 16:51               ` Mauro Carvalho Chehab
2012-01-25  5:35           ` Semwal, Sumit
2012-01-25 10:34             ` Tomasz Stanislawski
2012-01-25 14:09               ` Semwal, Sumit
2012-01-23 13:51 ` [PATCH 05/10] v4l: add buffer exporting via dmabuf Tomasz Stanislawski
2012-01-23 14:32   ` Mauro Carvalho Chehab
2012-01-23 14:37     ` Laurent Pinchart
2012-01-23 14:42     ` Tomasz Stanislawski
2012-01-23 15:04       ` Mauro Carvalho Chehab
2012-01-23 15:56         ` Tomasz Stanislawski
2012-01-23 16:42           ` Mauro Carvalho Chehab [this message]
2012-01-23 16:57             ` V4L2 Overlay mode replacement by dma-buf - was: " Mauro Carvalho Chehab
2012-01-24  0:11               ` Clark, Rob
2012-01-24  9:44             ` Laurent Pinchart
2012-01-24 11:07   ` [Linaro-mm-sig] " Subash Patel
2012-01-24 12:06     ` Tomasz Stanislawski
2012-01-27 13:40       ` Subash Patel
2012-01-30 14:16         ` Laurent Pinchart
2012-01-26  9:48   ` Tomasz Stanislawski
2012-02-03 15:47     ` Pawel Osciak
2012-02-03 15:50   ` Pawel Osciak
2012-01-23 13:51 ` [PATCH 06/10] v4l: vb2: " Tomasz Stanislawski
2012-01-23 13:51 ` [PATCH 07/10] v4l: vb2: remove dma-contig allocator Tomasz Stanislawski
2012-01-23 14:24   ` Mauro Carvalho Chehab
2012-01-23 13:51 ` [PATCH 08/10] v4l: vb2-dma-contig: code refactoring, support for DMABUF exporting Tomasz Stanislawski
2012-01-23 14:26   ` Mauro Carvalho Chehab
2012-01-23 14:35     ` Tomasz Stanislawski
2012-01-23 14:43       ` Mauro Carvalho Chehab
2012-01-23 14:35   ` [PATCH] media: vb2-memops: Export vb2_get_vma symbol Laurent Pinchart
2012-01-23 14:44     ` Tomasz Stanislawski
2012-03-21 11:12       ` Laurent Pinchart
2012-01-23 13:51 ` [PATCH 09/10] v4l: fimc: integrate capture i-face with dmabuf Tomasz Stanislawski
2012-01-23 13:51 ` [PATCH 10/10] v4l: s5p-tv: mixer: integrate " Tomasz Stanislawski
2012-01-23 14:37 ` [PATCH 00/10] Integration of videobuf2 " Mauro Carvalho Chehab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4F1D8E05.4060109@redhat.com \
    --to=mchehab@redhat.com \
    --cc=daniel@ffwll.ch \
    --cc=hverkuil@xs4all.nl \
    --cc=jesse.barker@linaro.org \
    --cc=kyungmin.park@samsung.com \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linaro-mm-sig@lists.linaro.org \
    --cc=linux-media@vger.kernel.org \
    --cc=m.szyprowski@samsung.com \
    --cc=pawel@osciak.com \
    --cc=rob@ti.com \
    --cc=sumit.semwal@ti.com \
    --cc=t.stanislaws@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.