[PATCH 0/5] MR61: winegstreamer: Dynamic transform stream format change support.
Zebediah Figura
zfigura at codeweavers.com
Thu May 12 13:24:26 CDT 2022
On 5/12/22 12:12, Rémi Bernon (@rbernon) wrote:
> On Thu May 12 16:42:57 2022 +0000, **** wrote:
>> Zebediah Figura replied on the mailing list:
>> ```
>> On 5/12/22 03:15, Rémi Bernon (@rbernon) wrote:
>>> Compared to last attempt, I moved the format pointer to a dedicated
>> `wg_transform_read_data` parameter instead of a property of the sample.
>> Most of the transforms use `NULL` there as they don't expect or support
>> format change. H264 decoder passes a transform format member where it
>> tracks the current stream format.
>>>
>> I'm sorry, but I still don't see why the wg_transform object needs to
>> store the previous format. It may not make the API any more complex to
>> you, but conceptually I find it more complex, and I'd rather avoid
>> maintaining that complexity.
>> What is it that makes "peeking" for a sample untenable, or buffering it
>> on the client side?
>> ```
>> I'm sorry, but I still don't see why the wg_transform object needs to
>> store the previous format. It may not make the API any more complex to
>> you, but conceptually I find it more complex, and I'd rather avoid
>> maintaining that complexity.
>>
>
> The `wg_transform` doesn't store the current format, it keeps the
> format of each buffer it queues.
I'm sorry, that was an error on my part. I should have said not "store
the previous format" but "know the previous format".
>
>
>> What is it that makes "peeking" for a sample untenable, or buffering it
>> on the client side?
>>
>
> There's no really such thing as "peeking" when `read_data` also pushes
> the input buffers, and when output presense also depends on it. Unless
> of course you consider that peeking should do that first, in which case
> it's not really just peeking.
>
> Then, like I previously described, to be able to implement zero copy,
> we will need to have a buffer ready for the decoder to write to, before
> we generate any output, and so before we push the input data.
>
> The buffer we will want to write to is the buffer that the MF transform
> user has given us, and we shouldn't write to it if the buffer format
> changes. In that particular case, yes, we will have to buffer the data
> instead, but that's the only case where we want to do it.
>
> If "peeking" does everything because it has to (prepares output buffer,
> pushes input data, check whether output has been produced or if format
> has changed), it's not really just peeking anymore and it's exactly and
> everything that `read_data` is going to do.
>
I guess "peek" implies that it writes the output data without removing
it, so maybe that's a failure of language on my part. I don't
necessarily mean we need to write the output data. We just need a way to
retrieve *only* the caps (possibly with other metadata), without
dequeuing anything else.
Granted, you can't implement a "peek" operation with zero-copy, either,
but you also don't get "read" with quite the same semantics. At the
moment it's hard for me to say what the zero-copy API should look like.
If nothing else it can be made into a separate syscall, like
"get_format". Yes, having a separate syscall means more glue, but like I
said, I'd rather have more syscalls with a clear and idiomatic
organization, than less syscalls with a monolithic one.
More information about the wine-devel
mailing list