Nikolay Sivov (@nsivov) commented about dlls/mf/samplegrabber.c:
if (state == SINK_STATE_RUNNING && grabber->state != SINK_STATE_RUNNING) { + /* Unpause at a position is a seek operation which drops everything pending. */ + if (grabber->state == SINK_STATE_PAUSED && offset != PRESENTATION_CURRENT_POSITION) + grabber->sample_count = MAX_SAMPLE_QUEUE_LENGTH; + /* Every transition to running state sends a bunch requests to build up initial queue. */ for (i = 0; i < grabber->sample_count; ++i) {
This looks a bit messed up I think - first we reset this to max length when stopping, then when start-from-pause case only to execute this loop and reset it back to zero. But I don't see a cleaner way right away. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7466#note_100910