mf: Add default attributes for sample copier.

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2020-10-23 14:33:28 +03:00 committed by Alexandre Julliard
parent 267b365f4a
commit d063fff62e
2 changed files with 27 additions and 4 deletions

View File

@ -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;
}

View File

@ -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);