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