Signed-off-by: Derek Lesho dlesho@codeweavers.com --- dlls/winegstreamer/colorconvert.c | 37 +++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-)
diff --git a/dlls/winegstreamer/colorconvert.c b/dlls/winegstreamer/colorconvert.c index a53cb8a099c..3ae646f1ae2 100644 --- a/dlls/winegstreamer/colorconvert.c +++ b/dlls/winegstreamer/colorconvert.c @@ -52,6 +52,8 @@ struct color_converter { IMFTransform IMFTransform_iface; LONG refcount; + IMFAttributes *attributes; + IMFAttributes *output_attributes; IMFMediaType *input_type; IMFMediaType *output_type; CRITICAL_SECTION cs; @@ -102,6 +104,10 @@ static ULONG WINAPI color_converter_Release(IMFTransform *iface) { transform->cs.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&transform->cs); + if (transform->attributes) + IMFAttributes_Release(transform->attributes); + if (transform->output_attributes) + IMFAttributes_Release(transform->output_attributes); gst_object_unref(transform->container); heap_free(transform); } @@ -170,9 +176,14 @@ static HRESULT WINAPI color_converter_GetOutputStreamInfo(IMFTransform *iface, D
static HRESULT WINAPI color_converter_GetAttributes(IMFTransform *iface, IMFAttributes **attributes) { - FIXME("%p, %p.\n", iface, attributes); + struct color_converter *converter = impl_color_converter_from_IMFTransform(iface);
- return E_NOTIMPL; + TRACE("%p, %p.\n", iface, attributes); + + *attributes = converter->attributes; + IMFAttributes_AddRef(*attributes); + + return S_OK; }
static HRESULT WINAPI color_converter_GetInputStreamAttributes(IMFTransform *iface, DWORD id, @@ -186,9 +197,14 @@ static HRESULT WINAPI color_converter_GetInputStreamAttributes(IMFTransform *ifa static HRESULT WINAPI color_converter_GetOutputStreamAttributes(IMFTransform *iface, DWORD id, IMFAttributes **attributes) { - FIXME("%p, %u, %p.\n", iface, id, attributes); + struct color_converter *converter = impl_color_converter_from_IMFTransform(iface);
- return E_NOTIMPL; + TRACE("%p, %u, %p.\n", iface, id, attributes); + + *attributes = converter->output_attributes; + IMFAttributes_AddRef(*attributes); + + return S_OK; }
static HRESULT WINAPI color_converter_DeleteInputStream(IMFTransform *iface, DWORD id) @@ -653,6 +669,7 @@ HRESULT color_converter_create(REFIID riid, void **ret) { struct color_converter *object; GstElement *videoconvert; + HRESULT hr;
TRACE("%s %p\n", debugstr_guid(riid), ret);
@@ -665,6 +682,18 @@ HRESULT color_converter_create(REFIID riid, void **ret) InitializeCriticalSection(&object->cs); object->cs.DebugInfo->Spare[0] = (DWORD_PTR)(__FILE__ ": color_converter_lock");
+ if (FAILED(hr = MFCreateAttributes(&object->attributes, 0))) + { + IMFTransform_Release(&object->IMFTransform_iface); + return hr; + } + + if (FAILED(hr = MFCreateAttributes(&object->output_attributes, 0))) + { + IMFTransform_Release(&object->IMFTransform_iface); + return hr; + } + object->container = gst_bin_new(NULL);
if (!(object->appsrc = gst_element_factory_make("appsrc", NULL)))