Nikolay Sivov : mf: Add default attributes for sample copier.

Alexandre Julliard julliard at winehq.org
Fri Oct 23 14:27:19 CDT 2020


Module: wine
Branch: master
Commit: d063fff62e1ab7c91b5e5b192ac98eca94504e9a
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=d063fff62e1ab7c91b5e5b192ac98eca94504e9a

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Fri Oct 23 14:33:28 2020 +0300

mf: Add default attributes for sample copier.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mf/main.c     | 16 ++++++++++++++--
 dlls/mf/tests/mf.c | 15 +++++++++++++--
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/dlls/mf/main.c b/dlls/mf/main.c
index 53264258137..c48fc81a1d2 100644
--- a/dlls/mf/main.c
+++ b/dlls/mf/main.c
@@ -1523,7 +1523,8 @@ static ULONG WINAPI sample_copier_transform_Release(IMFTransform *iface)
 
     if (!refcount)
     {
-        IMFAttributes_Release(transform->attributes);
+        if (transform->attributes)
+            IMFAttributes_Release(transform->attributes);
         if (transform->buffer_type)
             IMFMediaType_Release(transform->buffer_type);
         DeleteCriticalSection(&transform->cs);
@@ -1999,6 +2000,7 @@ static const IMFTransformVtbl sample_copier_transform_vtbl =
 HRESULT WINAPI MFCreateSampleCopierMFT(IMFTransform **transform)
 {
     struct sample_copier *object;
+    HRESULT hr;
 
     TRACE("%p.\n", transform);
 
@@ -2008,10 +2010,20 @@ HRESULT WINAPI MFCreateSampleCopierMFT(IMFTransform **transform)
 
     object->IMFTransform_iface.lpVtbl = &sample_copier_transform_vtbl;
     object->refcount = 1;
-    MFCreateAttributes(&object->attributes, 0);
     InitializeCriticalSection(&object->cs);
 
+    if (FAILED(hr = MFCreateAttributes(&object->attributes, 0)))
+        goto failed;
+
+    IMFAttributes_SetUINT32(object->attributes, &MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE, 1);
+
     *transform = &object->IMFTransform_iface;
 
     return S_OK;
+
+failed:
+
+    IMFTransform_Release(&object->IMFTransform_iface);
+
+    return hr;
 }
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index 6699c1ca9d1..b110c0ec9ef 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -3660,6 +3660,7 @@ static BOOL is_sample_copier_available_type(IMFMediaType *type)
 
 static void test_sample_copier(void)
 {
+    IMFAttributes *attributes, *attributes2;
     DWORD in_min, in_max, out_min, out_max;
     IMFMediaType *mediatype, *mediatype2;
     MFT_OUTPUT_STREAM_INFO output_info;
@@ -3668,9 +3669,9 @@ static void test_sample_copier(void)
     DWORD input_count, output_count;
     MFT_OUTPUT_DATA_BUFFER buffer;
     IMFMediaBuffer *media_buffer;
-    IMFAttributes *attributes;
+    DWORD count, flags, status;
     IMFTransform *copier;
-    DWORD flags, status;
+    UINT32 value;
     HRESULT hr;
 
     hr = MFCreateSampleCopierMFT(&copier);
@@ -3678,6 +3679,16 @@ static void test_sample_copier(void)
 
     hr = IMFTransform_GetAttributes(copier, &attributes);
     ok(hr == S_OK, "Failed to get transform attributes, hr %#x.\n", hr);
+    hr = IMFTransform_GetAttributes(copier, &attributes2);
+    ok(hr == S_OK, "Failed to get transform attributes, hr %#x.\n", hr);
+    ok(attributes == attributes2, "Unexpected instance.\n");
+    IMFAttributes_Release(attributes2);
+    hr = IMFAttributes_GetCount(attributes, &count);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(count == 1, "Unexpected attribute count %u.\n", count);
+    hr = IMFAttributes_GetUINT32(attributes, &MFT_SUPPORT_DYNAMIC_FORMAT_CHANGE, &value);
+    ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+    ok(!!value, "Unexpected value %u.\n", value);
     IMFAttributes_Release(attributes);
 
     hr = IMFTransform_GetInputStreamAttributes(copier, 0, &attributes);




More information about the wine-cvs mailing list