From: R��mi Bernon rbernon@codeweavers.com
--- dlls/qasf/asfreader.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-)
diff --git a/dlls/qasf/asfreader.c b/dlls/qasf/asfreader.c index dd8e8b282b3..4edc487800b 100644 --- a/dlls/qasf/asfreader.c +++ b/dlls/qasf/asfreader.c @@ -209,16 +209,25 @@ static HRESULT asf_reader_wait_state(struct strmbase_filter *iface, DWORD timeou static HRESULT asf_reader_init_stream(struct strmbase_filter *iface) { struct asf_reader *filter = impl_from_strmbase_filter(iface); + WMT_STREAM_SELECTION selections[ARRAY_SIZE(filter->streams)]; + WORD stream_numbers[ARRAY_SIZE(filter->streams)]; + IWMReaderAdvanced *reader_advanced; HRESULT hr; int i;
TRACE("iface %p\n", iface);
+ if (FAILED(hr = IWMReader_QueryInterface(filter->reader, &IID_IWMReaderAdvanced, (void **)&reader_advanced))) + return hr; + for (i = 0; i < filter->stream_count; ++i) { struct asf_stream *stream = filter->streams + i; IWMOutputMediaProps *props;
+ stream_numbers[i] = i + 1; + selections[i] = WMT_OFF; + if (!stream->source.pin.peer) continue;
@@ -226,14 +235,14 @@ static HRESULT asf_reader_init_stream(struct strmbase_filter *iface) if (FAILED(hr)) { WARN("Failed to commit stream %u allocator, hr %#lx\n", i, hr); - return hr; + break; }
hr = IWMReader_GetOutputFormat(filter->reader, stream->index, 0, &props); if (FAILED(hr)) { WARN("Failed to get stream %u output format, hr %#lx\n", i, hr); - return hr; + break; }
hr = IWMOutputMediaProps_SetMediaType(props, (WM_MEDIA_TYPE *)&stream->source.pin.mt); @@ -243,17 +252,28 @@ static HRESULT asf_reader_init_stream(struct strmbase_filter *iface) if (FAILED(hr)) { WARN("Failed to set stream %u output format, hr %#lx\n", i, hr); - return hr; + break; }
hr = IPin_NewSegment(stream->source.pin.peer, 0, 0, 1); if (FAILED(hr)) { WARN("Failed to start stream %u new segment, hr %#lx\n", i, hr); - return hr; + break; } + + selections[i] = WMT_ON; }
+ if (SUCCEEDED(hr) && FAILED(hr = IWMReaderAdvanced_SetStreamsSelected(reader_advanced, + filter->stream_count, stream_numbers, selections))) + WARN("Failed to set reader %p stream selection, hr %#lx\n", filter->reader, hr); + + IWMReaderAdvanced_Release(reader_advanced); + + if (FAILED(hr)) + return hr; + filter->status = -1; if (FAILED(hr = IWMReader_Start(filter->reader, 0, 0, 1, NULL))) {