https://bugs.winehq.org/show_bug.cgi?id=25329
--- Comment #30 from Zebediah Figura z.figura12@gmail.com --- Deadly Premonition is another game that depends on the ASF reader filter, albeit rather subtly. It's doing this, in pseudocode:
graph->AddFilter(video sample grabber); graph->AddFilter(custom audio sink); graph->AddSourceFilter(L"UPDATA/MOVIE/ADVD_US.wmv", &source); for each output pin of source: graph->RenderEx(output pin, AM_RENDEREX_RENDERTOEXISTINGRENDERERS); for each output pin of source: graph->Connect(output pin, sample grabber sink); graph->AddFilter(null renderer); graph->Connect(sample grabber source, null renderer sink);
This fails with the file source filter, because the first Connect() call will try to connect an already connected pin and fail, and then the second Connect() call (which is actually checked) will fail because the sample grabber sink isn't connected. But it would work with the ASF reader, because it exposes multiple streams directly.
Note that the solution here isn't "RenderEx() should be connecting the video stream to the sample grabber sink"; we have a test that shows this isn't the case (search for the comment "Extra source pins on an intermediate filter are not rendered" in quartz:filtergraph).