Zebediah Figura (@zfigura) commented about dlls/wmvcore/async_reader.c:
if (sample->buffer)
INSSBuffer_Release(sample->buffer);
sample->buffer = NULL;
LeaveCriticalSection(&reader->callback_cs);
hr = IWMSyncReader2_GetNextSample(reader->reader, stream->number,
&sample->buffer, &sample->pts, &sample->duration,
&sample->flags, &sample->output, &sample->stream);
EnterCriticalSection(&reader->callback_cs);
}
if (SUCCEEDED(stream->read_result = hr))
{
TRACE("Got stream %u buffer with pts %I64d.\n", stream->number, sample->pts);
list_add_tail(&stream->read_samples, &sample->entry);
Under normal circumstances we only buffer one sample at a time; why use a list?