mfplat: Implement MFCreateAMMediaTypeFromMFMediaType.

This commit is contained in:
Rémi Bernon 2023-11-20 10:32:51 +01:00 committed by Alexandre Julliard
parent 7f1eef65bf
commit 77a71bc43b
2 changed files with 20 additions and 8 deletions

View file

@ -3178,8 +3178,22 @@ static void media_type_get_ratio(IMFMediaType *media_type, const GUID *attr, DWO
*/
HRESULT WINAPI MFCreateAMMediaTypeFromMFMediaType(IMFMediaType *media_type, GUID format, AM_MEDIA_TYPE **am_type)
{
FIXME("%p, %s, %p stub!\n", media_type, debugstr_mf_guid(&format), am_type);
return E_NOTIMPL;
AM_MEDIA_TYPE *mt;
HRESULT hr;
TRACE("%p, %s, %p.\n", media_type, debugstr_mf_guid(&format), am_type);
*am_type = NULL;
if (!(mt = CoTaskMemAlloc(sizeof(*mt))))
return E_OUTOFMEMORY;
if (FAILED(hr = MFInitAMMediaTypeFromMFMediaType(media_type, format, mt)))
{
CoTaskMemFree(mt);
return hr;
}
*am_type = mt;
return hr;
}
/***********************************************************************

View file

@ -7566,23 +7566,22 @@ static void test_MFCreateAMMediaTypeFromMFMediaType(void)
ok(hr == S_OK, "Failed to create media type, hr %#lx.\n", hr);
hr = MFCreateAMMediaTypeFromMFMediaType(media_type, GUID_NULL, &am_type);
todo_wine ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_SetGUID(media_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = MFCreateAMMediaTypeFromMFMediaType(media_type, GUID_NULL, &am_type);
todo_wine ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_SetGUID(media_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Video);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = MFCreateAMMediaTypeFromMFMediaType(media_type, GUID_NULL, &am_type);
todo_wine ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_SetGUID(media_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Audio);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_SetGUID(media_type, &MF_MT_SUBTYPE, &MFAudioFormat_PCM);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = MFCreateAMMediaTypeFromMFMediaType(media_type, GUID_NULL, &am_type);
todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
if (hr != S_OK) goto skip_tests;
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&am_type->majortype, &MFMediaType_Audio), "got %s.\n", debugstr_guid(&am_type->majortype));
ok(IsEqualGUID(&am_type->subtype, &MFAudioFormat_PCM), "got %s.\n", debugstr_guid(&am_type->subtype));
ok(IsEqualGUID(&am_type->formattype, &FORMAT_WaveFormatEx), "got %s.\n", debugstr_guid(&am_type->formattype));
@ -7590,7 +7589,6 @@ static void test_MFCreateAMMediaTypeFromMFMediaType(void)
CoTaskMemFree(am_type->pbFormat);
CoTaskMemFree(am_type);
skip_tests:
IMFMediaType_Release(media_type);
}