[Linaro-mm-sig] [RFCv2 PATCH 4/9] v4l: add buffer exporting via dmabuf

Subash Patel subashrp at gmail.com
Thu Mar 22 07:59:57 PDT 2012



On 03/22/2012 07:37 PM, Laurent Pinchart wrote:
> Hi Subash,
>
> On Thursday 22 March 2012 19:27:01 Subash Patel wrote:
>> On 03/22/2012 04:46 PM, Laurent Pinchart wrote:
>>> On Tuesday 13 March 2012 11:17:02 Tomasz Stanislawski wrote:
>
> [snip]
>
>>>> diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
>>>> index bb6844e..e71c787 100644
>>>> --- a/include/linux/videodev2.h
>>>> +++ b/include/linux/videodev2.h
>>>> @@ -680,6 +680,25 @@ struct v4l2_buffer {
>>>>
>>>>    #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE	0x0800
>>>>    #define V4L2_BUF_FLAG_NO_CACHE_CLEAN		0x1000
>>>>
>>>> +/**
>>>> + * struct v4l2_exportbuffer - export of video buffer as DMABUF file
>>>> descriptor
>>>> + *
>>>> + * @fd:		file descriptor associated with DMABUF (set by driver)
>>>> + * @mem_offset:	for non-multiplanar buffers with memory ==
>>>> V4L2_MEMORY_MMAP;
>>>
>>> I don't think we will ever support exporting anything else than
>>> V4L2_MEMORY_MMAP buffers. What will happen for multiplanar buffers ?
>>>
>>>> + *		offset from the start of the device memory for this plane,
>>>> + *		(or a "cookie" that should be passed to mmap() as offset)
>>>> + *
>>>
>>> Shouldn't the mem_offset field always be set to the mmap cookie value ?
>>> I'm a bit confused by the "or" part, it seems to have been copied from
>>> the v4l2_buffer documentation directly. We should clarify that.
>>>
>>>> + * Contains data used for exporting a video buffer as DMABUF file
>>>> + * descriptor. Uses the same 'cookie' as mmap() syscall. All reserved
>>>> fields
>>>> + * must be set to zero.
>>>> + */
>>>> +struct v4l2_exportbuffer {
>>>> +	__u32		fd;
>>>> +	__u32		reserved0;
>>>
>>> Why is there a reserved field here ?
>>
>> +1 to Laurent. Any particular need for reserved0 and reserved[13] below?
>> I think one void user pointer is sufficient even for future need.
>
> I'd rather have more than one void user pointer, just in case. A couple of
> bytes won't be expensive,
Just an off-topic note. When I learnt to hit keyboard for programming(in 
linux for embedded), I had strict guidelines not to declare variables as 
I like, as memory and computing was very precious then. A decade later, 
people no more think its expensive to keep 14*3 bytes*(who knows how 
many dma_buf objects) in the system.
Just a side note, thats all :)

and they will save lots of hassle in the future if
> we need to add a couple of fields. I was just wondering why there was a
> reserved field between fd and mem_offset.
>
>>>> +	__u32		mem_offset;
>>>> +	__u32		reserved[13];
>>>> +};
>>>> +
>>
>> Also, what is the reason for returning the fd through this structure? To
>> keep it aligned with other v4l2 calls? I liked(or now hate making change
>> in the app) how it was being returned through the ioctl in your last patch.
>
> Probably to be consistent with the V4L2 API, yes. It won't make a big
> difference for applications, I would favor consistency in this case.
>


More information about the dri-devel mailing list