From: Alfred Agrell floating@muncher.se
--- dlls/winegstreamer/quartz_parser.c | 50 +++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 5 deletions(-)
diff --git a/dlls/winegstreamer/quartz_parser.c b/dlls/winegstreamer/quartz_parser.c index db171ba0747..ac4a5de5efa 100644 --- a/dlls/winegstreamer/quartz_parser.c +++ b/dlls/winegstreamer/quartz_parser.c @@ -1581,17 +1581,57 @@ static ULONG WINAPI stream_select_Release(IAMStreamSelect *iface)
static HRESULT WINAPI stream_select_Count(IAMStreamSelect *iface, DWORD *count) { - FIXME("iface %p, count %p, stub!\n", iface, count); - return E_NOTIMPL; + struct parser *filter = impl_from_IAMStreamSelect(iface); + TRACE("filter %p, count %p\n", filter, count); + if (filter->sink.pin.peer) + *count = wg_parser_get_stream_count(filter->wg_parser); + else + *count = 0; + return S_OK; }
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); + + 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); + + 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)))) + return E_OUTOFMEMORY; + if (!amt_from_wg_format(*mt, &fmt, FALSE)) + { + CoTaskMemFree(*mt); + return 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; + + return S_OK; }
static HRESULT WINAPI stream_select_Enable(IAMStreamSelect *iface, LONG index, DWORD flags)