Hi Boris,
On 4/12/19 10:57 AM, Boris Brezillon wrote:
> On Thu, 4 Apr 2019 10:16:56 +0200
> Boris Brezillon <[email protected]> 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];
>> };
>>
>