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.