Le vendredi 16 juin 2017 à 16:39 +0900, Gustavo Padovan a écrit : > > From: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxx> > > For explicit synchronization (and soon for HAL3/Request API) we need > the v4l2-driver to guarantee the ordering which the buffer were queued > by userspace. This is already true for many drivers, but we never had > the need to say it. Phrased this way, that sound like a statement that a m2m decoder handling b-frame will just never be supported. I think decoders are a very important use case for explicit synchronization. What I believe happens with decoders is simply that the allocation order (the order in which empty buffers are retrieved from the queue) will be different then the actual presentation order. Also, multiple buffers endup being filled at the same time. Some firmware may inform of the new order at the last minute, making indeed the fence useless, but these are firmware and the information can be known earlier. Also, this information would be known by userspace for the case (up-coming, see STM patches and Rockchip comments [0]) or state-less decoder, because it is available while parsing the bitstream. For this last scenarios, the fact that ordering is not the same should disable the fences since userspace can know which fences to wait for first. Those drivers would need to set "ordered" to 0, which would be counter intuitive. I think this use case is too important to just ignore it. I would expect that we at least have a todo with something sensible as a plan to cover this. > > > Signed-off-by: Gustavo Padovan <gustavo.padovan@xxxxxxxxxxxxx> > --- > include/media/videobuf2-core.h | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h > index aa43e43..a8b800e 100644 > --- a/include/media/videobuf2-core.h > +++ b/include/media/videobuf2-core.h > @@ -491,6 +491,9 @@ struct vb2_buf_ops { > * @last_buffer_dequeued: used in poll() and DQBUF to immediately return if the > > * last decoded buffer was already dequeued. Set for capture queues > > * when a buffer with the V4L2_BUF_FLAG_LAST is dequeued. > + * @ordered: if the driver can guarantee that the queue will be ordered or not. > > + * The default is not ordered unless the driver sets this flag. It > > + * is mandatory for using explicit fences. > > * @fileio: file io emulator internal data, used only if emulator is active > > * @threadio: thread io internal data, used only if thread is active > */ > @@ -541,6 +544,7 @@ struct vb2_queue { > > > unsigned int is_output:1; > > > unsigned int copy_timestamp:1; > > > unsigned int last_buffer_dequeued:1; > > > + unsigned int ordered:1; > > > > struct vb2_fileio_data *fileio; > > > struct vb2_threadio_data *threadio;
Attachment:
signature.asc
Description: This is a digitally signed message part