[PATCH 1/2] winegstreamer: Implement pausing the media source.

Giovanni Mascellani gmascellani at codeweavers.com
Thu Jun 10 14:17:00 CDT 2021


Hi,

Il 10/06/21 18:12, Derek Lesho ha scritto:
> This patch probably warrants a few tests.  I would test at least

In line of principle I would agree. The reason I am not submitting any 
is that Nikolay told me on the chat, as I understand it, that for this 
kind of patches he prefers tests to be left out-of-tree. Since he is the 
one who usually reviews my MF patches, I am inclined to meet his requests.

> - what happens to ::RequestSample calls when a stream is paused.

As soon as the source is restarted, a corresponding number of 
MEMediaSample is generated.

I assumed that this means that samples are generated anyway during pause 
and are later emitted after Start, but as others have noted this is not 
necessarily true: requests could be queued instead of samples. The two 
cases differ for example if the Start includes a seek (if requests are 
stored, then samples are emitted at the freshly seeked location, 
otherwise they are emitted at the location of pausing). And thinking 
again about it storing the requests seems more logical than storing the 
samples. Tomorrow I'll check on Windows to see what's happening there.

> - whether MESourcePaused or the MEStreamPaused events come first.

Hmm, does this really make sense? They are emitted on two different 
queues. Does MF guarantees order of delivery across different queues? 
Even if one is submitted before the other, the system scheduler might 
decide to execute in the opposite order, if it wakes up the other thread 
first. Or is there a stronger guarantee?

>> -    IMFMediaEventQueue_QueueEventParamUnk(stream->event_queue, 
>> MEMediaSample,
>> -            &GUID_NULL, S_OK, (IUnknown *)sample);
>> +    if (stream->parent_source->state == SOURCE_PAUSED)
>> +    {
>> +        struct pending_sample *pending = malloc(sizeof(*pending));
>> +        if (!pending)
>> +        {
>> +            ERR("Cannot allocate pending sample\n");
>> +            goto out;
>> +        }
>> +        pending->sample = sample;
>> +        sample = NULL;
>> +        list_add_tail(&stream->pending_samples, &pending->entry);
> Since our media source outputs uncompressed samples, if it's common 
> behavior for an application to request a significant amount of samples 
> while the source is paused, we might instead want to add a separate 
> sample request queue.  (Lest we use too much memory)  I think this is 
> what I was referring to in my old comment.

More than the memory usage (which I doubt will be significant: after all 
until now apparently even the usage of Pause was not that pressing), I 
find concerning the observable behavior, as I said above. I will check 
better.

Thanks for the review, Giovanni.



More information about the wine-devel mailing list