Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mf/evr.c | 39 ++------------------------------------- 1 file changed, 2 insertions(+), 37 deletions(-)
diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c index c3548170afb..298d320ec0c 100644 --- a/dlls/mf/evr.c +++ b/dlls/mf/evr.c @@ -362,35 +362,10 @@ static ULONG WINAPI video_stream_typehandler_Release(IMFMediaTypeHandler *iface) return IMFStreamSink_Release(&stream->IMFStreamSink_iface); }
-/* Mixer expects special video media type instance. */ -static HRESULT video_renderer_create_video_type(IMFMediaType *media_type, IMFVideoMediaType **video_type) -{ - GUID subtype; - HRESULT hr; - - *video_type = NULL; - - if (FAILED(hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &subtype))) - return hr; - - if (FAILED(hr = MFCreateVideoMediaTypeFromSubtype(&subtype, video_type))) - return hr; - - hr = IMFMediaType_CopyAllItems(media_type, (IMFAttributes *)*video_type); - if (FAILED(hr)) - { - IMFVideoMediaType_Release(*video_type); - *video_type = NULL; - } - - return hr; -} - static HRESULT WINAPI video_stream_typehandler_IsMediaTypeSupported(IMFMediaTypeHandler *iface, IMFMediaType *in_type, IMFMediaType **out_type) { struct video_stream *stream = impl_from_IMFMediaTypeHandler(iface); - IMFVideoMediaType *video_type; HRESULT hr;
TRACE("%p, %p, %p.\n", iface, in_type, out_type); @@ -401,17 +376,12 @@ static HRESULT WINAPI video_stream_typehandler_IsMediaTypeSupported(IMFMediaType if (!stream->parent) return MF_E_INVALIDMEDIATYPE;
- if (FAILED(hr = video_renderer_create_video_type(in_type, &video_type))) - return hr; - - if (SUCCEEDED(hr = IMFTransform_SetInputType(stream->parent->mixer, stream->id, (IMFMediaType *)video_type, + if (SUCCEEDED(hr = IMFTransform_SetInputType(stream->parent->mixer, stream->id, in_type, MFT_SET_TYPE_TEST_ONLY))) { if (out_type) *out_type = NULL; }
- IMFVideoMediaType_Release(video_type); - return hr; }
@@ -438,7 +408,6 @@ static HRESULT WINAPI video_stream_typehandler_GetMediaTypeByIndex(IMFMediaTypeH static HRESULT WINAPI video_stream_typehandler_SetCurrentMediaType(IMFMediaTypeHandler *iface, IMFMediaType *type) { struct video_stream *stream = impl_from_IMFMediaTypeHandler(iface); - IMFVideoMediaType *video_type; HRESULT hr;
TRACE("%p, %p.\n", iface, type); @@ -449,11 +418,7 @@ static HRESULT WINAPI video_stream_typehandler_SetCurrentMediaType(IMFMediaTypeH if (!stream->parent) return MF_E_STREAMSINK_REMOVED;
- if (FAILED(hr = video_renderer_create_video_type(type, &video_type))) - return hr; - - hr = IMFTransform_SetInputType(stream->parent->mixer, stream->id, (IMFMediaType *)video_type, 0); - IMFVideoMediaType_Release(video_type); + hr = IMFTransform_SetInputType(stream->parent->mixer, stream->id, type, 0);
return hr; }
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/mf/evr.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/dlls/mf/evr.c b/dlls/mf/evr.c index 298d320ec0c..1d55344fe16 100644 --- a/dlls/mf/evr.c +++ b/dlls/mf/evr.c @@ -419,6 +419,8 @@ static HRESULT WINAPI video_stream_typehandler_SetCurrentMediaType(IMFMediaTypeH return MF_E_STREAMSINK_REMOVED;
hr = IMFTransform_SetInputType(stream->parent->mixer, stream->id, type, 0); + if (SUCCEEDED(hr) && !stream->id) + hr = IMFVideoPresenter_ProcessMessage(stream->parent->presenter, MFVP_MESSAGE_INVALIDATEMEDIATYPE, 0);
return hr; }
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/tests/evr.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 7a51b3c17db..72642110a78 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -658,6 +658,12 @@ todo_wine attributes = NULL; hr = IMFTransform_GetInputStreamAttributes(transform, 0, &attributes); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + hr = IMFAttributes_GetCount(attributes, &count); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(count == 1, "Unexpected count %u.\n", count); + hr = IMFAttributes_GetUINT32(attributes, &MF_SA_REQUIRED_SAMPLE_COUNT, &count); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + ok(count == 1, "Unexpected count %u.\n", count); ok(!!attributes, "Unexpected attributes.\n");
attributes2 = NULL;
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/mixer.c | 6 ++-- dlls/evr/tests/evr.c | 79 +++++++++++++++++++++++--------------------- 2 files changed, 45 insertions(+), 40 deletions(-)
diff --git a/dlls/evr/mixer.c b/dlls/evr/mixer.c index 7cb35983f7b..f199aaee110 100644 --- a/dlls/evr/mixer.c +++ b/dlls/evr/mixer.c @@ -714,8 +714,10 @@ static HRESULT WINAPI video_mixer_transform_SetInputType(IMFTransform *iface, DW if (SUCCEEDED(hr = video_mixer_collect_output_types(mixer, &video_desc, service, count, guids, flags)) && !(flags & MFT_SET_TYPE_TEST_ONLY)) { - if (SUCCEEDED(hr = MFCreateMediaType(&mixer->inputs[0].media_type))) - hr = IMFMediaType_CopyAllItems(media_type, (IMFAttributes *)mixer->inputs[0].media_type); + if (mixer->inputs[0].media_type) + IMFMediaType_Release(mixer->inputs[0].media_type); + mixer->inputs[0].media_type = media_type; + IMFMediaType_AddRef(mixer->inputs[0].media_type); } CoTaskMemFree(guids); } diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index 72642110a78..ff17f57b7ef 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -31,8 +31,6 @@
static const WCHAR sink_id[] = {'E','V','R',' ','I','n','p','u','t','0',0};
-static HRESULT (WINAPI *pMFCreateVideoMediaTypeFromSubtype)(const GUID *subtype, IMFVideoMediaType **video_type); - static void set_rect(MFVideoNormalizedRect *rect, float left, float top, float right, float bottom) { rect->left = left; @@ -418,6 +416,23 @@ static void test_pin_info(void) ok(!ref, "Got outstanding refcount %d.\n", ref); }
+static IMFMediaType * create_video_type(const GUID *subtype) +{ + IMFMediaType *video_type; + HRESULT hr; + + hr = MFCreateMediaType(&video_type); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaType_SetGUID(video_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Video); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + hr = IMFMediaType_SetGUID(video_type, &MF_MT_SUBTYPE, subtype); + ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + + return video_type; +} + static void test_default_mixer(void) { DWORD input_min, input_max, output_min, output_max; @@ -829,9 +844,9 @@ static void test_default_mixer_type_negotiation(void) IMFMediaType *media_type, *media_type2; IDirect3DDeviceManager9 *manager; DXVA2_VideoProcessorCaps caps; - IMFVideoMediaType *video_type; IMFVideoProcessor *processor; IDirect3DDevice9 *device; + IMFMediaType *video_type; IMFTransform *transform; GUID guid, *guids; IDirect3D9 *d3d; @@ -841,12 +856,6 @@ static void test_default_mixer_type_negotiation(void) HRESULT hr; UINT token;
- if (!pMFCreateVideoMediaTypeFromSubtype) - { - win_skip("Skipping mixer types tests.\n"); - return; - } - hr = MFCreateVideoMixer(NULL, &IID_IDirect3DDevice9, &IID_IMFTransform, (void **)&transform); ok(hr == S_OK, "Failed to create default mixer, hr %#x.\n", hr);
@@ -906,31 +915,30 @@ static void test_default_mixer_type_negotiation(void) ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#x.\n", hr); IMFMediaType_Release(media_type);
- hr = pMFCreateVideoMediaTypeFromSubtype(&MFVideoFormat_RGB32, &video_type); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + video_type = create_video_type(&MFVideoFormat_RGB32);
/* Partially initialized type. */ - hr = IMFTransform_SetInputType(transform, 0, (IMFMediaType *)video_type, 0); + hr = IMFTransform_SetInputType(transform, 0, video_type, 0); ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#x.\n", hr);
/* Only required data - frame size and uncompressed marker. */ - hr = IMFVideoMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64)640 << 32 | 480); + hr = IMFMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64)640 << 32 | 480); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - hr = IMFVideoMediaType_SetUINT32(video_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, TRUE); + hr = IMFMediaType_SetUINT32(video_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, TRUE); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFTransform_SetInputType(transform, 0, (IMFMediaType *)video_type, MFT_SET_TYPE_TEST_ONLY); + hr = IMFTransform_SetInputType(transform, 0, video_type, MFT_SET_TYPE_TEST_ONLY); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetInputCurrentType(transform, 0, &media_type); ok(hr == MF_E_TRANSFORM_TYPE_NOT_SET, "Unexpected hr %#x.\n", hr);
- hr = IMFTransform_SetInputType(transform, 0, (IMFMediaType *)video_type, 0); + hr = IMFTransform_SetInputType(transform, 0, video_type, 0); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_GetInputCurrentType(transform, 0, &media_type); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - ok(media_type != (IMFMediaType *)video_type, "Unexpected media type instance.\n"); + ok(media_type == video_type, "Unexpected media type instance.\n");
hr = IMFTransform_GetInputCurrentType(transform, 0, &media_type2); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); @@ -951,7 +959,7 @@ todo_wine
hr = IMFTransform_GetInputCurrentType(transform, 0, &media_type); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - ok(media_type != (IMFMediaType *)video_type, "Unexpected pointer.\n"); + ok(media_type == video_type, "Unexpected pointer.\n"); hr = IMFMediaType_QueryInterface(media_type, &IID_IMFVideoMediaType, (void **)&unk); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); IUnknown_Release(unk); @@ -988,7 +996,7 @@ todo_wine
IMFVideoProcessor_Release(processor);
- IMFVideoMediaType_Release(video_type); + IMFMediaType_Release(video_type);
IDirect3DDeviceManager9_Release(manager);
@@ -1217,11 +1225,10 @@ static void test_MFCreateVideoSampleAllocator(void) { IMFVideoSampleAllocatorNotify test_notify = { &test_notify_callback_vtbl }; IMFVideoSampleAllocatorCallback *allocator_cb; + IMFMediaType *media_type, *video_type; IMFVideoSampleAllocator *allocator; - IMFVideoMediaType *video_type; IMFSample *sample, *sample2; IDirect3DSurface9 *surface; - IMFMediaType *media_type; IMFMediaBuffer *buffer; IMFGetService *gs; IUnknown *unk; @@ -1271,17 +1278,16 @@ todo_wine todo_wine ok(hr == E_NOINTERFACE, "Unexpected hr %#x.\n", hr);
- hr = MFCreateVideoMediaTypeFromSubtype(&MFVideoFormat_RGB32, &video_type); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + video_type = create_video_type(&MFVideoFormat_RGB32);
- hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 2, (IMFMediaType *)video_type); + hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 2, video_type); todo_wine ok(hr == MF_E_INVALIDMEDIATYPE, "Unexpected hr %#x.\n", hr);
/* Frame size is required. */ - hr = IMFVideoMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64) 320 << 32 | 240); + hr = IMFMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64) 320 << 32 | 240); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 0, (IMFMediaType *)video_type); + hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 0, video_type); todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
@@ -1302,7 +1308,7 @@ todo_wine ok(hr == MF_E_SAMPLEALLOCATOR_EMPTY, "Unexpected hr %#x.\n", hr);
/* Reinitialize with active sample. */ - hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 4, (IMFMediaType *)video_type); + hr = IMFVideoSampleAllocator_InitializeSampleAllocator(allocator, 4, video_type); todo_wine ok(hr == S_OK, "Unexpected hr %#x.\n", hr); if (sample) @@ -1640,7 +1646,7 @@ static void test_presenter_native_video_size(void) IMFTransform *mixer; SIZE size, ratio; HRESULT hr; - IMFVideoMediaType *video_type; + IMFMediaType *video_type; IDirect3DDeviceManager9 *dm;
hr = MFCreateVideoMixer(NULL, &IID_IDirect3DDevice9, &IID_IMFTransform, (void **)&mixer); @@ -1680,15 +1686,14 @@ static void test_presenter_native_video_size(void)
IDirect3DDeviceManager9_Release(dm);
- hr = pMFCreateVideoMediaTypeFromSubtype(&MFVideoFormat_RGB32, &video_type); - ok(hr == S_OK, "Unexpected hr %#x.\n", hr); + video_type = create_video_type(&MFVideoFormat_RGB32);
- hr = IMFVideoMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64)640 << 32 | 480); + hr = IMFMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64)640 << 32 | 480); ok(hr == S_OK, "Unexpected hr %#x.\n", hr); - hr = IMFVideoMediaType_SetUINT32(video_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, TRUE); + hr = IMFMediaType_SetUINT32(video_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, TRUE); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFTransform_SetInputType(mixer, 0, (IMFMediaType *)video_type, 0); + hr = IMFTransform_SetInputType(mixer, 0, video_type, 0); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
/* Native video size is cached on initialization. */ @@ -1704,10 +1709,10 @@ static void test_presenter_native_video_size(void) "Unexpected ratio %u x %u.\n", ratio.cx, ratio.cy);
/* Update input type. */ - hr = IMFVideoMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64)320 << 32 | 240); + hr = IMFMediaType_SetUINT64(video_type, &MF_MT_FRAME_SIZE, (UINT64)320 << 32 | 240); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
- hr = IMFTransform_SetInputType(mixer, 0, (IMFMediaType *)video_type, 0); + hr = IMFTransform_SetInputType(mixer, 0, video_type, 0); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hr = IMFVideoDisplayControl_GetNativeVideoSize(display_control, &size, &ratio); @@ -1726,7 +1731,7 @@ static void test_presenter_native_video_size(void) ok((ratio.cx == 4 && ratio.cy == 3) || broken(!memcmp(&ratio, &size, sizeof(ratio))) /* < Win10 */, "Unexpected ratio %u x %u.\n", ratio.cx, ratio.cy);
- IMFVideoMediaType_Release(video_type); + IMFMediaType_Release(video_type); IMFVideoDisplayControl_Release(display_control); IMFVideoPresenter_Release(presenter); IMFTransform_Release(mixer); @@ -1930,8 +1935,6 @@ START_TEST(evr) { CoInitialize(NULL);
- pMFCreateVideoMediaTypeFromSubtype = (void *)GetProcAddress(GetModuleHandleA("mfplat.dll"), "MFCreateVideoMediaTypeFromSubtype"); - test_aggregation(); test_interfaces(); test_enum_pins();
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=80329
Your paranoid android.
=== debiant (32 bit French report) ===
evr: evr: Timeout
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/evr/tests/evr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/evr/tests/evr.c b/dlls/evr/tests/evr.c index ff17f57b7ef..6a69305c9e5 100644 --- a/dlls/evr/tests/evr.c +++ b/dlls/evr/tests/evr.c @@ -29,7 +29,7 @@ #include "initguid.h" #include "evr9.h"
-static const WCHAR sink_id[] = {'E','V','R',' ','I','n','p','u','t','0',0}; +static const WCHAR sink_id[] = L"EVR Input0";
static void set_rect(MFVideoNormalizedRect *rect, float left, float top, float right, float bottom) {