From: Alfred Agrell floating@muncher.se
--- dlls/winegstreamer/quartz_parser.c | 44 ++++++++++++++++++++++++++++-- 1 file changed, 41 insertions(+), 3 deletions(-)
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index b1a463af531..8c8b244a4be 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -1526,9 +1526,47 @@ static HRESULT WINAPI stream_select_Info(IAMStreamSelect *iface, LONG index, AM_MEDIA_TYPE **mt, DWORD *flags, LCID *lcid, DWORD *group, WCHAR **name, IUnknown **object, IUnknown **unknown) { - FIXME("iface %p, index %ld, mt %p, flags %p, lcid %p, group %p, name %p, object %p, unknown %p, stub!\n", - iface, index, mt, flags, lcid, group, name, object, unknown); - return E_NOTIMPL; + struct parser *filter = impl_from_IAMStreamSelect(iface); + wg_parser_stream_t stream = wg_parser_get_stream(filter->wg_parser, index); + HRESULT hr = S_OK; + + FIXME("filter %p, index %ld, mt %p, flags %p, lcid %p, group %p, name %p, object %p, unknown %p, semi-stub!\n", + filter, index, mt, flags, lcid, group, name, object, unknown); + EnterCriticalSection(&filter->filter.filter_cs); + + if (!filter->sink.pin.peer) + return VFW_E_NOT_CONNECTED; + if (index < 0 || index >= wg_parser_get_stream_count(filter->wg_parser)) + return S_FALSE; + + if (mt) + { + struct wg_format fmt; + wg_parser_stream_get_preferred_format(stream, &fmt); + if (!(*mt = CoTaskMemAlloc(sizeof(AM_MEDIA_TYPE)))) + hr = E_OUTOFMEMORY; + if (*mt && !amt_from_wg_format(*mt, &fmt, FALSE)) + { + CoTaskMemFree(*mt); + hr = E_OUTOFMEMORY; + } + } + + if (flags) /* todo */ + *flags = 0; + if (lcid) /* todo */ + *lcid = 0; + if (group) /* todo */ + *group = 0; + if (name) /* todo */ + *name = NULL; + if (object) /* todo */ + *object = NULL; + if (unknown) + *unknown = NULL; + + LeaveCriticalSection(&filter->filter.filter_cs); + return hr; }
static HRESULT WINAPI stream_select_Enable(IAMStreamSelect *iface, LONG index, DWORD flags)