Commit 43e70580 authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

mfplat/tests: Add some tests for legacy media type conersion functions.

parent 9eaeebf0
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
@ stub MFCreateVideoMediaTypeFromBitMapInfoHeader @ stub MFCreateVideoMediaTypeFromBitMapInfoHeader
@ stdcall -import MFCreateVideoMediaTypeFromSubtype(ptr ptr) @ stdcall -import MFCreateVideoMediaTypeFromSubtype(ptr ptr)
@ stub MFCreateVideoMediaTypeFromVideoInfoHeader2 @ stub MFCreateVideoMediaTypeFromVideoInfoHeader2
@ stub MFCreateVideoMediaTypeFromVideoInfoHeader @ stdcall -import MFCreateVideoMediaTypeFromVideoInfoHeader(ptr long long long long int64 ptr ptr)
@ stdcall MFCreateVideoMixer(ptr ptr ptr ptr) @ stdcall MFCreateVideoMixer(ptr ptr ptr ptr)
@ stdcall MFCreateVideoMixerAndPresenter(ptr ptr ptr ptr ptr ptr) @ stdcall MFCreateVideoMixerAndPresenter(ptr ptr ptr ptr ptr ptr)
@ stub MFCreateVideoOTA @ stub MFCreateVideoOTA
......
...@@ -3557,3 +3557,37 @@ HRESULT WINAPI MFInitVideoFormat_RGB(MFVIDEOFORMAT *format, DWORD width, DWORD h ...@@ -3557,3 +3557,37 @@ HRESULT WINAPI MFInitVideoFormat_RGB(MFVIDEOFORMAT *format, DWORD width, DWORD h
return S_OK; return S_OK;
} }
/***********************************************************************
* MFCreateVideoMediaTypeFromVideoInfoHeader (mfplat.@)
*/
HRESULT WINAPI MFCreateVideoMediaTypeFromVideoInfoHeader(const KS_VIDEOINFOHEADER *vih, DWORD size, DWORD pixel_aspect_ratio_x,
DWORD pixel_aspect_ratio_y, MFVideoInterlaceMode interlace_mode, QWORD video_flags, const GUID *subtype,
IMFVideoMediaType **ret)
{
FIXME("%p, %lu, %lu, %lu, %d, %I64x, %s, %p.\n", vih, size, pixel_aspect_ratio_x, pixel_aspect_ratio_y, interlace_mode,
video_flags, debugstr_guid(subtype), ret);
return E_NOTIMPL;
}
/***********************************************************************
* MFInitMediaTypeFromVideoInfoHeader (mfplat.@)
*/
HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader(IMFMediaType *media_type, const VIDEOINFOHEADER *vih, UINT32 size,
const GUID *subtype)
{
FIXME("%p, %p, %u, %s.\n", media_type, vih, size, debugstr_guid(subtype));
return E_NOTIMPL;
}
/***********************************************************************
* MFInitMediaTypeFromAMMediaType (mfplat.@)
*/
HRESULT WINAPI MFInitMediaTypeFromAMMediaType(IMFMediaType *media_type, const AM_MEDIA_TYPE *am_type)
{
FIXME("%p, %p.\n", media_type, am_type);
return E_NOTIMPL;
}
...@@ -81,7 +81,7 @@ ...@@ -81,7 +81,7 @@
@ stub MFCreateVideoMediaTypeFromBitMapInfoHeaderEx @ stub MFCreateVideoMediaTypeFromBitMapInfoHeaderEx
@ stdcall MFCreateVideoMediaTypeFromSubtype(ptr ptr) @ stdcall MFCreateVideoMediaTypeFromSubtype(ptr ptr)
@ stub MFCreateVideoMediaTypeFromVideoInfoHeader2 @ stub MFCreateVideoMediaTypeFromVideoInfoHeader2
@ stub MFCreateVideoMediaTypeFromVideoInfoHeader @ stdcall MFCreateVideoMediaTypeFromVideoInfoHeader(ptr long long long long int64 ptr ptr)
@ stdcall MFCreateVideoSampleAllocatorEx(ptr ptr) @ stdcall MFCreateVideoSampleAllocatorEx(ptr ptr)
@ stdcall MFCreateWaveFormatExFromMFMediaType(ptr ptr ptr long) @ stdcall MFCreateWaveFormatExFromMFMediaType(ptr ptr ptr long)
@ stub MFDeserializeAttributesFromStream @ stub MFDeserializeAttributesFromStream
...@@ -119,12 +119,12 @@ ...@@ -119,12 +119,12 @@
@ stdcall MFHeapFree(ptr) @ stdcall MFHeapFree(ptr)
@ stub MFInitAMMediaTypeFromMFMediaType @ stub MFInitAMMediaTypeFromMFMediaType
@ stdcall MFInitAttributesFromBlob(ptr ptr long) @ stdcall MFInitAttributesFromBlob(ptr ptr long)
@ stub MFInitMediaTypeFromAMMediaType @ stdcall MFInitMediaTypeFromAMMediaType(ptr ptr)
@ stub MFInitMediaTypeFromMFVideoFormat @ stub MFInitMediaTypeFromMFVideoFormat
@ stub MFInitMediaTypeFromMPEG1VideoInfo @ stub MFInitMediaTypeFromMPEG1VideoInfo
@ stub MFInitMediaTypeFromMPEG2VideoInfo @ stub MFInitMediaTypeFromMPEG2VideoInfo
@ stub MFInitMediaTypeFromVideoInfoHeader2 @ stub MFInitMediaTypeFromVideoInfoHeader2
@ stub MFInitMediaTypeFromVideoInfoHeader @ stdcall MFInitMediaTypeFromVideoInfoHeader(ptr ptr long ptr)
@ stdcall MFInitMediaTypeFromWaveFormatEx(ptr ptr long) @ stdcall MFInitMediaTypeFromWaveFormatEx(ptr ptr long)
@ stub MFInitVideoFormat @ stub MFInitVideoFormat
@ stdcall MFInitVideoFormat_RGB(ptr long long long) @ stdcall MFInitVideoFormat_RGB(ptr long long long)
......
...@@ -29,13 +29,18 @@ ...@@ -29,13 +29,18 @@
#include "winuser.h" #include "winuser.h"
#include "winreg.h" #include "winreg.h"
#include "ole2.h" #include "ole2.h"
#include "ks.h"
#include "ksmedia.h"
#include "amvideo.h"
#include "mfapi.h" #include "mfapi.h"
#include "mfidl.h" #include "mfidl.h"
#include "mferror.h" #include "mferror.h"
#include "mfreadwrite.h" #include "mfreadwrite.h"
#include "propvarutil.h" #include "propvarutil.h"
#include "strsafe.h" #include "strsafe.h"
#include "uuids.h"
#include "evr.h" #include "evr.h"
#include "mfmediaengine.h"
#include "wine/test.h" #include "wine/test.h"
...@@ -8142,6 +8147,353 @@ static void test_MFInitVideoFormat_RGB(void) ...@@ -8142,6 +8147,353 @@ static void test_MFInitVideoFormat_RGB(void)
} }
} }
static void test_MFCreateVideoMediaTypeFromVideoInfoHeader(void)
{
IMFVideoMediaType *media_type;
KS_VIDEOINFOHEADER vih;
UINT32 value32;
UINT64 value64;
HRESULT hr;
GUID guid;
hr = MFCreateVideoMediaTypeFromVideoInfoHeader(NULL, 0, 0, 0, MFVideoInterlace_Unknown, 0, NULL, &media_type);
todo_wine
ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
memset(&vih, 0, sizeof(vih));
hr = MFCreateVideoMediaTypeFromVideoInfoHeader(&vih, 0, 0, 0, MFVideoInterlace_Unknown, 0, NULL, &media_type);
todo_wine
ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
hr = MFCreateVideoMediaTypeFromVideoInfoHeader(&vih, sizeof(vih), 0, 0, MFVideoInterlace_Unknown, 0, NULL, &media_type);
todo_wine
ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
vih.bmiHeader.biSize = sizeof(vih.bmiHeader);
hr = MFCreateVideoMediaTypeFromVideoInfoHeader(&vih, sizeof(vih), 0, 0, MFVideoInterlace_Unknown, 0, NULL, &media_type);
todo_wine
ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
vih.bmiHeader.biSize = sizeof(vih.bmiHeader);
vih.bmiHeader.biPlanes = 1;
vih.bmiHeader.biWidth = 16;
vih.bmiHeader.biHeight = 32;
vih.bmiHeader.biBitCount = 32;
hr = MFCreateVideoMediaTypeFromVideoInfoHeader(&vih, sizeof(vih), 3, 2, MFVideoInterlace_Progressive,
MFVideoFlag_AnalogProtected, &GUID_NULL, &media_type);
todo_wine
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
if (FAILED(hr)) return;
IMFVideoMediaType_Release(media_type);
hr = MFCreateVideoMediaTypeFromVideoInfoHeader(&vih, sizeof(vih), 3, 2, MFVideoInterlace_Progressive,
MFVideoFlag_AnalogProtected, NULL, &media_type);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFVideoMediaType_GetGUID(media_type, &MF_MT_MAJOR_TYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &MFMediaType_Video), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFVideoMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &MFVideoFormat_RGB32), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFVideoMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)16 << 32 | 32), "Unexpected value %#I64x.\n", value64);
hr = IMFVideoMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)3 << 32 | 2), "Unexpected value %#I64x.\n", value64);
hr = IMFVideoMediaType_GetUINT32(media_type, &MF_MT_DRM_FLAGS, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == MFVideoDRMFlag_AnalogProtected, "Unexpected value %#x.\n", value32);
hr = IMFVideoMediaType_GetUINT32(media_type, &MF_MT_INTERLACE_MODE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == MFVideoInterlace_Progressive, "Unexpected value %#x.\n", value32);
hr = IMFVideoMediaType_GetUINT32(media_type, &MF_MT_SAMPLE_SIZE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == 2048, "Unexpected value %u.\n", value32);
hr = IMFVideoMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == -64, "Unexpected value %d.\n", value32);
hr = IMFVideoMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!value32, "Unexpected value %#x.\n", value32);
hr = IMFVideoMediaType_GetUINT32(media_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!value32, "Unexpected value %#x.\n", value32);
IMFVideoMediaType_Release(media_type);
/* Negative height. */
vih.bmiHeader.biHeight = -32;
hr = MFCreateVideoMediaTypeFromVideoInfoHeader(&vih, sizeof(vih), 3, 2, MFVideoInterlace_Progressive,
MFVideoFlag_AnalogProtected, NULL, &media_type);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFVideoMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)16 << 32 | 32), "Unexpected value %#I64x.\n", value64);
hr = IMFVideoMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == 64, "Unexpected value %d.\n", value32);
IMFVideoMediaType_Release(media_type);
}
static void test_MFInitMediaTypeFromVideoInfoHeader(void)
{
IMFMediaType *media_type;
VIDEOINFOHEADER vih;
UINT32 value32;
UINT64 value64;
HRESULT hr;
GUID guid;
hr = MFCreateMediaType(&media_type);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
memset(&vih, 0, sizeof(vih));
hr = MFInitMediaTypeFromVideoInfoHeader(media_type, &vih, 0, NULL);
todo_wine
ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
hr = MFInitMediaTypeFromVideoInfoHeader(media_type, &vih, sizeof(vih), NULL);
todo_wine
ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
vih.bmiHeader.biSize = sizeof(vih.bmiHeader);
vih.bmiHeader.biPlanes = 1;
vih.bmiHeader.biWidth = 16;
vih.bmiHeader.biHeight = 32;
vih.bmiHeader.biBitCount = 32;
hr = MFInitMediaTypeFromVideoInfoHeader(media_type, &vih, sizeof(vih), &GUID_NULL);
todo_wine
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
if (FAILED(hr))
{
IMFMediaType_Release(media_type);
return;
}
hr = IMFMediaType_GetGUID(media_type, &MF_MT_MAJOR_TYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &MFMediaType_Video), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &GUID_NULL), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)16 << 32 | 32), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)1 << 32 | 1), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_INTERLACE_MODE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == MFVideoInterlace_Progressive, "Unexpected value %#x.\n", value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value32);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SAMPLE_SIZE, &value32);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value32);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
vih.bmiHeader.biHeight = -32;
hr = MFInitMediaTypeFromVideoInfoHeader(media_type, &vih, sizeof(vih), &GUID_NULL);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)16 << 32 | 32), "Unexpected value %#I64x.\n", value64);
vih.bmiHeader.biHeight = 32;
hr = MFInitMediaTypeFromVideoInfoHeader(media_type, &vih, sizeof(vih), NULL);
todo_wine
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
if (FAILED(hr)) goto failed;
hr = IMFMediaType_GetGUID(media_type, &MF_MT_MAJOR_TYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &MFMediaType_Video), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
todo_wine
ok(IsEqualGUID(&guid, &MFVideoFormat_RGB32), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)16 << 32 | 32), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)1 << 32 | 1), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_INTERLACE_MODE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == MFVideoInterlace_Progressive, "Unexpected value %#x.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SAMPLE_SIZE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == 2048, "Unexpected value %u.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == -64, "Unexpected value %d.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!value32, "Unexpected value %#x.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!value32, "Unexpected value %#x.\n", value32);
/* Negative height. */
vih.bmiHeader.biHeight = -32;
hr = MFInitMediaTypeFromVideoInfoHeader(media_type, &vih, sizeof(vih), NULL);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == 64, "Unexpected value %d.\n", value32);
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)16 << 32 | 32), "Unexpected value %#I64x.\n", value64);
failed:
IMFMediaType_Release(media_type);
}
static void test_MFInitMediaTypeFromAMMediaType(void)
{
IMFMediaType *media_type;
AM_MEDIA_TYPE mt;
UINT32 value32;
UINT64 value64;
HRESULT hr;
GUID guid;
VIDEOINFOHEADER vih =
{
{0}, {0}, 0, 0, 0,
{sizeof(BITMAPINFOHEADER), 32, 24, 1, 0, 0xdeadbeef}
};
hr = MFCreateMediaType(&media_type);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
memset(&mt, 0, sizeof(mt));
mt.majortype = MEDIATYPE_Video;
mt.formattype = FORMAT_VideoInfo;
mt.cbFormat = sizeof(VIDEOINFOHEADER);
mt.pbFormat = (BYTE *)&vih;
hr = IMFMediaType_SetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, 123);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = MFInitMediaTypeFromAMMediaType(media_type, &mt);
todo_wine
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
if (FAILED(hr))
{
IMFMediaType_Release(media_type);
return;
}
hr = IMFMediaType_GetGUID(media_type, &MF_MT_MAJOR_TYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &MFMediaType_Video), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &GUID_NULL), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)32 << 32 | 24), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)1 << 32 | 1), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_INTERLACE_MODE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == MFVideoInterlace_Progressive, "Unexpected value %#x.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!value32, "Unexpected value %#x.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value32);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SAMPLE_SIZE, &value32);
ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr);
vih.bmiHeader.biHeight = -24;
hr = MFInitMediaTypeFromAMMediaType(media_type, &mt);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)32 << 32 | 24), "Unexpected value %#I64x.\n", value64);
memcpy(&mt.subtype, &MEDIASUBTYPE_RGB32, sizeof(GUID));
vih.bmiHeader.biHeight = 24;
hr = MFInitMediaTypeFromAMMediaType(media_type, &mt);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetGUID(media_type, &MF_MT_MAJOR_TYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &MFMediaType_Video), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &MFVideoFormat_RGB32), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)32 << 32 | 24), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)1 << 32 | 1), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_INTERLACE_MODE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == MFVideoInterlace_Progressive, "Unexpected value %#x.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SAMPLE_SIZE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == 3072, "Unexpected value %u.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!value32, "Unexpected value %#x.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!value32, "Unexpected value %u.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == -128, "Unexpected value %d.\n", value32);
/* Negative height. */
vih.bmiHeader.biHeight = -24;
hr = MFInitMediaTypeFromAMMediaType(media_type, &mt);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = IMFMediaType_GetGUID(media_type, &MF_MT_MAJOR_TYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &MFMediaType_Video), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &guid);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(IsEqualGUID(&guid, &MFVideoFormat_RGB32), "Unexpected guid %s.\n", debugstr_guid(&guid));
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)32 << 32 | 24), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &value64);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value64 == ((UINT64)1 << 32 | 1), "Unexpected value %#I64x.\n", value64);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_INTERLACE_MODE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == MFVideoInterlace_Progressive, "Unexpected value %#x.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SAMPLE_SIZE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == 3072, "Unexpected value %u.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!value32, "Unexpected value %#x.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(!!value32, "Unexpected value %u.\n", value32);
hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32);
ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
ok(value32 == 128, "Unexpected value %d.\n", value32);
IMFMediaType_Release(media_type);
}
START_TEST(mfplat) START_TEST(mfplat)
{ {
char **argv; char **argv;
...@@ -8222,6 +8574,9 @@ START_TEST(mfplat) ...@@ -8222,6 +8574,9 @@ START_TEST(mfplat)
test_MFllMulDiv(); test_MFllMulDiv();
test_shared_dxgi_device_manager(); test_shared_dxgi_device_manager();
test_MFInitVideoFormat_RGB(); test_MFInitVideoFormat_RGB();
test_MFCreateVideoMediaTypeFromVideoInfoHeader();
test_MFInitMediaTypeFromVideoInfoHeader();
test_MFInitMediaTypeFromAMMediaType();
CoUninitialize(); CoUninitialize();
} }
...@@ -143,4 +143,29 @@ typedef struct _tagKSJACK_DESCRIPTION2 ...@@ -143,4 +143,29 @@ typedef struct _tagKSJACK_DESCRIPTION2
typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2; typedef struct _tagKSJACK_DESCRIPTION2 *PKSJACK_DESCRIPTION2;
typedef struct tagKS_BITMAPINFOHEADER
{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} KS_BITMAPINFOHEADER, *PKS_BITMAPINFOHEADER;
typedef struct tagKS_VIDEOINFOHEADER
{
RECT rcSource;
RECT rcTarget;
DWORD dwBitRate;
DWORD dwBitErrorRate;
REFERENCE_TIME AvgTimePerFrame;
KS_BITMAPINFOHEADER bmiHeader;
} KS_VIDEOINFOHEADER, *PKS_VIDEOINFOHEADER;
#endif /* _KSMEDIA_ */ #endif /* _KSMEDIA_ */
...@@ -222,6 +222,13 @@ typedef enum _EAllocationType ...@@ -222,6 +222,13 @@ typedef enum _EAllocationType
eAllocationTypeIgnore eAllocationTypeIgnore
} EAllocationType; } EAllocationType;
typedef enum _MFVideoDRMFlags
{
MFVideoDRMFlag_None = 0,
MFVideoDRMFlag_AnalogProtected,
MFVideoDRMFlag_DigitallyProtected,
} MFVideoDRMFlags;
#ifdef MF_INIT_GUIDS #ifdef MF_INIT_GUIDS
#include <initguid.h> #include <initguid.h>
#endif #endif
...@@ -497,6 +504,9 @@ typedef enum ...@@ -497,6 +504,9 @@ typedef enum
#define MF_E_DXGI_NEW_VIDEO_DEVICE ((HRESULT)0x80041001) #define MF_E_DXGI_NEW_VIDEO_DEVICE ((HRESULT)0x80041001)
#define MF_E_DXGI_VIDEO_DEVICE_LOCKED ((HRESULT)0x80041002) #define MF_E_DXGI_VIDEO_DEVICE_LOCKED ((HRESULT)0x80041002)
struct tagVIDEOINFOHEADER;
typedef struct tagVIDEOINFOHEADER VIDEOINFOHEADER;
HRESULT WINAPI MFAddPeriodicCallback(MFPERIODICCALLBACK callback, IUnknown *context, DWORD *key); HRESULT WINAPI MFAddPeriodicCallback(MFPERIODICCALLBACK callback, IUnknown *context, DWORD *key);
HRESULT WINAPI MFAllocateSerialWorkQueue(DWORD target_queue, DWORD *queue); HRESULT WINAPI MFAllocateSerialWorkQueue(DWORD target_queue, DWORD *queue);
HRESULT WINAPI MFAllocateWorkQueue(DWORD *queue); HRESULT WINAPI MFAllocateWorkQueue(DWORD *queue);
...@@ -538,6 +548,13 @@ HRESULT WINAPI MFCreateSample(IMFSample **sample); ...@@ -538,6 +548,13 @@ HRESULT WINAPI MFCreateSample(IMFSample **sample);
HRESULT WINAPI MFCreateTempFile(MF_FILE_ACCESSMODE accessmode, MF_FILE_OPENMODE openmode, MF_FILE_FLAGS flags, HRESULT WINAPI MFCreateTempFile(MF_FILE_ACCESSMODE accessmode, MF_FILE_OPENMODE openmode, MF_FILE_FLAGS flags,
IMFByteStream **bytestream); IMFByteStream **bytestream);
HRESULT WINAPI MFCreateVideoMediaTypeFromSubtype(const GUID *subtype, IMFVideoMediaType **media_type); HRESULT WINAPI MFCreateVideoMediaTypeFromSubtype(const GUID *subtype, IMFVideoMediaType **media_type);
#ifdef _KSMEDIA_
HRESULT WINAPI MFCreateVideoMediaTypeFromVideoInfoHeader(const KS_VIDEOINFOHEADER *vih, DWORD size, DWORD pixel_aspect_ratio_x,
DWORD pixel_aspect_ratio_y, MFVideoInterlaceMode interlace_mode, QWORD video_flags, const GUID *subtype,
IMFVideoMediaType **media_type);
#endif
HRESULT WINAPI MFCreateVideoSampleAllocatorEx(REFIID riid, void **allocator); HRESULT WINAPI MFCreateVideoSampleAllocatorEx(REFIID riid, void **allocator);
HRESULT WINAPI MFCreateMemoryBuffer(DWORD max_length, IMFMediaBuffer **buffer); HRESULT WINAPI MFCreateMemoryBuffer(DWORD max_length, IMFMediaBuffer **buffer);
HRESULT WINAPI MFCreateWaveFormatExFromMFMediaType(IMFMediaType *type, WAVEFORMATEX **format, UINT32 *size, UINT32 flags); HRESULT WINAPI MFCreateWaveFormatExFromMFMediaType(IMFMediaType *type, WAVEFORMATEX **format, UINT32 *size, UINT32 flags);
...@@ -567,6 +584,9 @@ HRESULT WINAPI MFTGetInfo(CLSID clsid, WCHAR **name, MFT_REGISTER_TYPE_INFO **in ...@@ -567,6 +584,9 @@ HRESULT WINAPI MFTGetInfo(CLSID clsid, WCHAR **name, MFT_REGISTER_TYPE_INFO **in
MFT_REGISTER_TYPE_INFO **output_types, UINT32 *output_types_count, IMFAttributes **attributes); MFT_REGISTER_TYPE_INFO **output_types, UINT32 *output_types_count, IMFAttributes **attributes);
BOOL WINAPI MFIsFormatYUV(DWORD format); BOOL WINAPI MFIsFormatYUV(DWORD format);
HRESULT WINAPI MFInitAttributesFromBlob(IMFAttributes *attributes, const UINT8 *buffer, UINT size); HRESULT WINAPI MFInitAttributesFromBlob(IMFAttributes *attributes, const UINT8 *buffer, UINT size);
HRESULT WINAPI MFInitMediaTypeFromAMMediaType(IMFMediaType *mediatype, const AM_MEDIA_TYPE *am_type);
HRESULT WINAPI MFInitMediaTypeFromVideoInfoHeader(IMFMediaType *media_type, const VIDEOINFOHEADER *vih,
UINT32 size, const GUID *subtype);
HRESULT WINAPI MFInitMediaTypeFromWaveFormatEx(IMFMediaType *mediatype, const WAVEFORMATEX *format, UINT32 size); HRESULT WINAPI MFInitMediaTypeFromWaveFormatEx(IMFMediaType *mediatype, const WAVEFORMATEX *format, UINT32 size);
HRESULT WINAPI MFInitVideoFormat_RGB(MFVIDEOFORMAT *format, DWORD width, DWORD height, DWORD d3dformat); HRESULT WINAPI MFInitVideoFormat_RGB(MFVIDEOFORMAT *format, DWORD width, DWORD height, DWORD d3dformat);
HRESULT WINAPI MFInvokeCallback(IMFAsyncResult *result); HRESULT WINAPI MFInvokeCallback(IMFAsyncResult *result);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment