Re: [RFC PATCH v2 3/7] media: v4l2: Add extended buffer operations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Boris,

On 4/12/19 10:57 AM, Boris Brezillon wrote:
> On Thu,  4 Apr 2019 10:16:56 +0200
> Boris Brezillon <boris.brezillon@xxxxxxxxxxxxx> wrote:
> 
> 
>> +/**
>> + * struct v4l2_ext_buffer - extended video buffer info
>> + * @index: id number of the buffer
>> + * @type: enum v4l2_buf_type; buffer type. _MPLANE and _OVERLAY formats are
>> + *	  invalid
>> + * @flags: buffer informational flags
>> + * @field: enum v4l2_field; field order of the image in the buffer
>> + * @timestamp: frame timestamp
>> + * @sequence: sequence count of this frame
>> + * @memory: enum v4l2_memory; the method, in which the actual video data is
>> + *          passed
>> + * @planes: per-plane buffer information
>> + * @num_planes: number of plane buffers
>> + * @request_fd: fd of the request that this buffer should use
>> + * @reserved: some extra space reserved to add future fields (like timecode).
>> + *	      Must be set to 0
>> + *
>> + * Contains data exchanged by application and driver using one of the Streaming
>> + * I/O methods.
>> + */
>> +struct v4l2_ext_buffer {
>> +	__u32 index;
>> +	__u32 type;
>> +	__u32 flags;
>> +	__u32 field;
>> +	__u64 timestamp;
>> +	__u32 sequence;
>> +	__u32 memory;
>> +	struct v4l2_ext_plane planes[VIDEO_MAX_PLANES];
> 
> I had a discussion with Tomasz last week, and he made me realize I was
> misunderstanding the concept of V4L2 planes. I thought it was encoding
> pixel-component planes, but it's actually memory planes, and sometimes
> those one memory planes might contain all component planes placed next
> to each others (like the V4L2_PIX_FMT_NV12 format).
> 
> So, the question is, what do we want v4l2_ext_plane to encode (memory
> planes or pixel component planes)?
> If we go for the pixel component plane approach (which IMHO would be a
> good thing), that means we'll have to convert V4L2_PIX_FMT_NV12-like
> single-memory-plane buffers into v4l2_ext_buffer containing X planes,
> each pointing to the same memory object but at a different offset.

First of all my apologies for the long delay in replying.

I think v4l2_ext_plane should encode pixel component planes, that way
it becomes much easier to describe e.g. NV12 formats that use a single
memory range, but where each component plane has its own bytesperline
value and where each component plane starts at e.g. a page boundary
due to hardware restrictions.

This is currently impossible to describe without creating a new pixel
format.

But it is of course possible that different component planes use
different memory ranges.

I think that the memory information in v4l2_ext_plane should describe the
memory for that component plane and any following component planes that
are part of that memory. The memory information for those following
component planes should be 0 or some other value that makes it clear
that it is part of the same memory buffer as the preceding component plane.

Regards,

	Hans

> 
>> +	__u32 num_planes;
>> +	__u32 request_fd;
>> +	__u32 reserved[10];
>> +};
>> +
>>  /**
>>   * v4l2_timeval_to_ns - Convert timeval to nanoseconds
>>   * @ts:		pointer to the timeval variable to be converted
>> @@ -1062,6 +1139,35 @@ struct v4l2_exportbuffer {
>>  	__u32		reserved[11];
>>  };
>>  
> 




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux