From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/aac_decoder.c | 38 ++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+)
diff --git a/dlls/winegstreamer/aac_decoder.c b/dlls/winegstreamer/aac_decoder.c index 2cf605bc56c..d8e8246e1ca 100644 --- a/dlls/winegstreamer/aac_decoder.c +++ b/dlls/winegstreamer/aac_decoder.c @@ -324,6 +324,27 @@ static HRESULT WINAPI transform_SetInputType(IMFTransform *iface, DWORD id, IMFM if (id) return MF_E_INVALIDSTREAMNUMBER;
+ if (!type) + { + if (decoder->input_type) + { + IMFMediaType_Release(decoder->input_type); + decoder->input_type = NULL; + } + if (decoder->output_type) + { + IMFMediaType_Release(decoder->output_type); + decoder->output_type = NULL; + } + if (decoder->wg_transform) + { + wg_transform_destroy(decoder->wg_transform); + decoder->wg_transform = 0; + } + + return S_OK; + } + if (FAILED(hr = MFCreateWaveFormatExFromMFMediaType(type, (WAVEFORMATEX **)&format, &size, MFWaveFormatExConvertFlag_ForceExtensible))) return hr; @@ -364,6 +385,23 @@ static HRESULT WINAPI transform_SetOutputType(IMFTransform *iface, DWORD id, IMF
if (id) return MF_E_INVALIDSTREAMNUMBER; + + if (!type) + { + if (decoder->output_type) + { + IMFMediaType_Release(decoder->output_type); + decoder->input_type = NULL; + } + if (decoder->wg_transform) + { + wg_transform_destroy(decoder->wg_transform); + decoder->wg_transform = 0; + } + + return S_OK; + } + if (!decoder->input_type) return MF_E_TRANSFORM_TYPE_NOT_SET;
From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/color_convert.c | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+)
diff --git a/dlls/winegstreamer/color_convert.c b/dlls/winegstreamer/color_convert.c index 4b60628e8ba..21d2aa67e64 100644 --- a/dlls/winegstreamer/color_convert.c +++ b/dlls/winegstreamer/color_convert.c @@ -360,6 +360,22 @@ static HRESULT WINAPI transform_SetInputType(IMFTransform *iface, DWORD id, IMFM
TRACE("iface %p, id %#lx, type %p, flags %#lx.\n", iface, id, type, flags);
+ if (!type) + { + if (impl->input_type) + { + IMFMediaType_Release(impl->input_type); + impl->input_type = NULL; + } + if (impl->wg_transform) + { + wg_transform_destroy(impl->wg_transform); + impl->wg_transform = 0; + } + + return S_OK; + } + if (FAILED(hr = IMFMediaType_GetGUID(type, &MF_MT_MAJOR_TYPE, &major)) || FAILED(hr = IMFMediaType_GetGUID(type, &MF_MT_SUBTYPE, &subtype))) return MF_E_ATTRIBUTENOTFOUND; @@ -422,6 +438,22 @@ static HRESULT WINAPI transform_SetOutputType(IMFTransform *iface, DWORD id, IMF
TRACE("iface %p, id %#lx, type %p, flags %#lx.\n", iface, id, type, flags);
+ if (!type) + { + if (impl->output_type) + { + IMFMediaType_Release(impl->output_type); + impl->output_type = NULL; + } + if (impl->wg_transform) + { + wg_transform_destroy(impl->wg_transform); + impl->wg_transform = 0; + } + + return S_OK; + } + if (FAILED(hr = IMFMediaType_GetGUID(type, &MF_MT_MAJOR_TYPE, &major)) || FAILED(hr = IMFMediaType_GetGUID(type, &MF_MT_SUBTYPE, &subtype))) return MF_E_ATTRIBUTENOTFOUND;
From: Ziqing Hui zhui@codeweavers.com
--- dlls/mf/tests/mf_test.h | 1 + dlls/mf/tests/transform.c | 82 +++++++++++++++++++++++++++------------ 2 files changed, 58 insertions(+), 25 deletions(-)
diff --git a/dlls/mf/tests/mf_test.h b/dlls/mf/tests/mf_test.h index b3247ba00cc..9fa5d4fef41 100644 --- a/dlls/mf/tests/mf_test.h +++ b/dlls/mf/tests/mf_test.h @@ -58,6 +58,7 @@ struct attribute_desc PROPVARIANT value; BOOL ratio; BOOL required; + BOOL required_set; BOOL todo; BOOL todo_value; }; diff --git a/dlls/mf/tests/transform.c b/dlls/mf/tests/transform.c index 262e3bc4726..deec2c7dd92 100644 --- a/dlls/mf/tests/transform.c +++ b/dlls/mf/tests/transform.c @@ -63,6 +63,8 @@ DEFINE_MEDIATYPE_GUID(MEDIASUBTYPE_IV50,MAKEFOURCC('I','V','5','0'));
DEFINE_GUID(mft_output_sample_incomplete,0xffffff,0xffff,0xffff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff);
+static const GUID test_attr_guid = {0xdeadbeef}; + struct media_buffer { IMediaBuffer IMediaBuffer_iface; @@ -678,13 +680,25 @@ static void check_mft_set_input_type_required_(int line, IMFTransform *transform for (attr = attributes; attr && attr->key; attr++) { winetest_push_context("%s", debugstr_a(attr->name)); + hr = IMFMediaType_DeleteItem(media_type, attr->key); ok_(__FILE__, line)(hr == S_OK, "DeleteItem returned %#lx\n", hr); + hr = IMFTransform_SetInputType(transform, 0, media_type, MFT_SET_TYPE_TEST_ONLY); todo_wine_if(attr->todo) ok_(__FILE__, line)(FAILED(hr) == attr->required, "SetInputType returned %#lx.\n", hr); + + if (attr->required_set) + { + hr = IMFTransform_SetInputType(transform, 0, media_type, 0); + ok_(__FILE__, line)(FAILED(hr), "SetInputType Succeeded.\n"); + hr = IMFTransform_SetInputType(transform, 0, NULL, 0); + ok_(__FILE__, line)(hr == S_OK, "Failed to clear input type.\n"); + } + hr = IMFMediaType_SetItem(media_type, attr->key, &attr->value); ok_(__FILE__, line)(hr == S_OK, "SetItem returned %#lx\n", hr); + winetest_pop_context(); }
@@ -759,12 +773,24 @@ static void check_mft_set_output_type_required_(int line, IMFTransform *transfor for (attr = attributes; attr && attr->key; attr++) { winetest_push_context("%s", debugstr_a(attr->name)); + hr = IMFMediaType_DeleteItem(media_type, attr->key); ok_(__FILE__, line)(hr == S_OK, "DeleteItem returned %#lx\n", hr); + hr = IMFTransform_SetOutputType(transform, 0, media_type, MFT_SET_TYPE_TEST_ONLY); ok_(__FILE__, line)(FAILED(hr) == attr->required, "SetOutputType returned %#lx.\n", hr); + + if (attr->required_set) + { + hr = IMFTransform_SetOutputType(transform, 0, media_type, 0); + ok_(__FILE__, line)(FAILED(hr), "SetOutputType Succeeded.\n"); + hr = IMFTransform_SetOutputType(transform, 0, NULL, 0); + ok_(__FILE__, line)(hr == S_OK, "Failed to clear output type.\n"); + } + hr = IMFMediaType_SetItem(media_type, attr->key, &attr->value); ok_(__FILE__, line)(hr == S_OK, "SetItem returned %#lx\n", hr); + winetest_pop_context(); }
@@ -3810,43 +3836,43 @@ static void test_h264_encoder(void) {.subtype = &MFVideoFormat_H264}, }, }; - static const media_type_desc default_outputs[] = + static const media_type_desc default_inputs[] = { - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_H264), - }, + {ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_IYUV)}, + {ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_YV12)}, + {ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_NV12)}, + {ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_YUY2)}, }; - static const media_type_desc default_inputs[] = + static const media_type_desc default_outputs[] = { - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_IYUV), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_YV12), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_NV12), - }, - { - ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), - ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_YUY2), - }, + {ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_H264)}, }; static const struct attribute_desc expect_transform_attributes[] = { ATTR_UINT32(MFT_ENCODER_SUPPORTS_CONFIG_EVENT, 1), {0}, }; + static const struct attribute_desc expect_common_attributes[] = + { + ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video), + {0}, + }; + static const struct attribute_desc expect_available_input_attributes[] = + { + ATTR_RATIO(MF_MT_FRAME_SIZE, actual_width, actual_height), + ATTR_RATIO(MF_MT_FRAME_RATE, 30000, 1001), + ATTR_UINT32(MF_MT_VIDEO_NOMINAL_RANGE, MFNominalRange_Wide), + ATTR_UINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive), + ATTR_RATIO(MF_MT_PIXEL_ASPECT_RATIO, 1, 1), + {0}, + }; const struct attribute_desc input_type_desc[] = { ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video, .required = TRUE), ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_NV12, .required = TRUE), ATTR_RATIO(MF_MT_FRAME_RATE, 30000, 1001, .required = TRUE), ATTR_RATIO(MF_MT_FRAME_SIZE, actual_width, actual_height, .required = TRUE), + ATTR_UINT32(test_attr_guid, 0), {0}, }; const struct attribute_desc output_type_desc[] = @@ -3854,9 +3880,10 @@ static void test_h264_encoder(void) ATTR_GUID(MF_MT_MAJOR_TYPE, MFMediaType_Video, .required = TRUE), ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_H264, .required = TRUE), ATTR_RATIO(MF_MT_FRAME_SIZE, actual_width, actual_height, .required = TRUE), - ATTR_RATIO(MF_MT_FRAME_RATE, 30000, 1001), - ATTR_UINT32(MF_MT_AVG_BITRATE, 193540), - ATTR_UINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive), + ATTR_RATIO(MF_MT_FRAME_RATE, 30000, 1001, .required_set = TRUE), + ATTR_UINT32(MF_MT_AVG_BITRATE, 193540, .required_set = TRUE), + ATTR_UINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive, .required_set = TRUE), + ATTR_UINT32(test_attr_guid, 0), {0}, }; const struct attribute_desc expect_input_type_desc[] = @@ -3865,6 +3892,7 @@ static void test_h264_encoder(void) ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_NV12), ATTR_RATIO(MF_MT_FRAME_SIZE, actual_width, actual_height), ATTR_RATIO(MF_MT_FRAME_RATE, 30000, 1001), + ATTR_UINT32(test_attr_guid, 0), {0}, }; const struct attribute_desc expect_output_type_desc[] = @@ -3876,6 +3904,7 @@ static void test_h264_encoder(void) ATTR_UINT32(MF_MT_AVG_BITRATE, 193540), ATTR_BLOB(MF_MT_MPEG_SEQUENCE_HEADER, test_h264_sequence_header, sizeof(test_h264_sequence_header)), ATTR_UINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive), + ATTR_UINT32(test_attr_guid, 0), {0}, }; static const MFT_OUTPUT_STREAM_INFO expect_output_info = {.cbSize = 0x8000}; @@ -3929,6 +3958,7 @@ static void test_h264_encoder(void) { winetest_push_context("out %lu", i); ok(hr == S_OK, "GetOutputAvailableType returned %#lx.\n", hr); + check_media_type(media_type, expect_common_attributes, -1); check_media_type(media_type, default_outputs[i], -1); ret = IMFMediaType_Release(media_type); ok(ret == 0, "Release returned %lu\n", ret); @@ -3948,6 +3978,8 @@ static void test_h264_encoder(void) { winetest_push_context("out %lu", i); ok(hr == S_OK, "IMFTransform_GetInputAvailableType returned %#lx\n", hr); + check_media_type(media_type, expect_common_attributes, -1); + check_media_type(media_type, expect_available_input_attributes, -1); check_media_type(media_type, default_inputs[i], -1); ret = IMFMediaType_Release(media_type); ok(ret == 0, "Release returned %lu\n", ret);
From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/video_encoder.c | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/dlls/winegstreamer/video_encoder.c b/dlls/winegstreamer/video_encoder.c index beb74003d64..73d3f757ff9 100644 --- a/dlls/winegstreamer/video_encoder.c +++ b/dlls/winegstreamer/video_encoder.c @@ -38,6 +38,9 @@ struct video_encoder IMFTransform IMFTransform_iface; LONG refcount;
+ const GUID *const *output_types; + UINT output_type_count; + IMFAttributes *attributes; };
@@ -174,8 +177,14 @@ static HRESULT WINAPI transform_GetInputAvailableType(IMFTransform *iface, DWORD static HRESULT WINAPI transform_GetOutputAvailableType(IMFTransform *iface, DWORD id, DWORD index, IMFMediaType **type) { - FIXME("iface %p, id %#lx, index %#lx, type %p.\n", iface, id, index, type); - return E_NOTIMPL; + struct video_encoder *encoder = impl_from_IMFTransform(iface); + + TRACE("iface %p, id %#lx, index %#lx, type %p.\n", iface, id, index, type); + + *type = NULL; + if (index >= encoder->output_type_count) + return MF_E_NO_MORE_TYPES; + return MFCreateVideoMediaTypeFromSubtype(encoder->output_types[index], (IMFVideoMediaType **)type); }
static HRESULT WINAPI transform_SetInputType(IMFTransform *iface, DWORD id, IMFMediaType *type, DWORD flags) @@ -275,7 +284,8 @@ static const IMFTransformVtbl transform_vtbl = transform_ProcessOutput, };
-static HRESULT video_encoder_create(struct video_encoder **out) +static HRESULT video_encoder_create(const GUID *const *output_types, UINT output_type_count, + struct video_encoder **out) { struct video_encoder *encoder; HRESULT hr; @@ -286,6 +296,9 @@ static HRESULT video_encoder_create(struct video_encoder **out) encoder->IMFTransform_iface.lpVtbl = &transform_vtbl; encoder->refcount = 1;
+ encoder->output_types = output_types; + encoder->output_type_count = output_type_count; + if (FAILED(hr = MFCreateAttributes(&encoder->attributes, 16))) goto failed; if (FAILED(hr = IMFAttributes_SetUINT32(encoder->attributes, &MFT_ENCODER_SUPPORTS_CONFIG_EVENT, TRUE))) @@ -302,6 +315,11 @@ failed: return hr; }
+static const GUID *const h264_encoder_output_types[] = +{ + &MFVideoFormat_H264, +}; + HRESULT h264_encoder_create(REFIID riid, void **out) { const MFVIDEOFORMAT input_format = @@ -327,7 +345,8 @@ HRESULT h264_encoder_create(REFIID riid, void **out) return hr; }
- if (FAILED(hr = video_encoder_create(&encoder))) + if (FAILED(hr = video_encoder_create(h264_encoder_output_types, ARRAY_SIZE(h264_encoder_output_types), + &encoder))) return hr;
TRACE("Created h264 encoder transform %p.\n", &encoder->IMFTransform_iface);
From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/video_encoder.c | 55 ++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-)
diff --git a/dlls/winegstreamer/video_encoder.c b/dlls/winegstreamer/video_encoder.c index 73d3f757ff9..e1e4e6c5e0d 100644 --- a/dlls/winegstreamer/video_encoder.c +++ b/dlls/winegstreamer/video_encoder.c @@ -41,6 +41,8 @@ struct video_encoder const GUID *const *output_types; UINT output_type_count;
+ IMFMediaType *output_type; + IMFAttributes *attributes; };
@@ -87,6 +89,8 @@ static ULONG WINAPI transform_Release(IMFTransform *iface)
if (!refcount) { + if (encoder->output_type) + IMFMediaType_Release(encoder->output_type); IMFAttributes_Release(encoder->attributes); free(encoder); } @@ -195,8 +199,55 @@ static HRESULT WINAPI transform_SetInputType(IMFTransform *iface, DWORD id, IMFM
static HRESULT WINAPI transform_SetOutputType(IMFTransform *iface, DWORD id, IMFMediaType *type, DWORD flags) { - FIXME("iface %p, id %#lx, type %p, flags %#lx.\n", iface, id, type, flags); - return E_NOTIMPL; + struct video_encoder *encoder = impl_from_IMFTransform(iface); + UINT32 uint32_value; + UINT64 uint64_value; + GUID major, subtype; + ULONG i; + + TRACE("iface %p, id %#lx, type %p, flags %#lx.\n", iface, id, type, flags); + + if (!type) + { + if (encoder->output_type) + { + IMFMediaType_Release(encoder->output_type); + encoder->output_type = NULL; + } + return S_OK; + } + + if (FAILED(IMFMediaType_GetGUID(type, &MF_MT_MAJOR_TYPE, &major)) || + FAILED(IMFMediaType_GetGUID(type, &MF_MT_SUBTYPE, &subtype))) + return E_INVALIDARG; + + if (!IsEqualGUID(&major, &MFMediaType_Video)) + return MF_E_INVALIDMEDIATYPE; + + for (i = 0; i < encoder->output_type_count; ++i) + if (IsEqualGUID(&subtype, encoder->output_types[i])) + break; + if (i == encoder->output_type_count) + return MF_E_INVALIDMEDIATYPE; + + if (FAILED(IMFMediaType_GetUINT64(type, &MF_MT_FRAME_SIZE, &uint64_value))) + return MF_E_INVALIDMEDIATYPE; + + if (flags & MFT_SET_TYPE_TEST_ONLY) + return S_OK; + + if (FAILED(IMFMediaType_GetUINT64(type, &MF_MT_FRAME_RATE, &uint64_value)) + || FAILED(IMFMediaType_GetUINT32(type, &MF_MT_AVG_BITRATE, &uint32_value)) + || FAILED(IMFMediaType_GetUINT32(type, &MF_MT_INTERLACE_MODE, &uint32_value))) + return MF_E_INVALIDMEDIATYPE; + + if (encoder->output_type) + IMFMediaType_Release(encoder->output_type); + IMFMediaType_AddRef((encoder->output_type = type)); + + /* FIXME: Add MF_MT_MPEG_SEQUENCE_HEADER attribute. */ + + return S_OK; }
static HRESULT WINAPI transform_GetInputCurrentType(IMFTransform *iface, DWORD id, IMFMediaType **type)
From: Ziqing Hui zhui@codeweavers.com
--- dlls/winegstreamer/video_encoder.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/winegstreamer/video_encoder.c b/dlls/winegstreamer/video_encoder.c index e1e4e6c5e0d..f7c9392d6d5 100644 --- a/dlls/winegstreamer/video_encoder.c +++ b/dlls/winegstreamer/video_encoder.c @@ -258,8 +258,18 @@ static HRESULT WINAPI transform_GetInputCurrentType(IMFTransform *iface, DWORD i
static HRESULT WINAPI transform_GetOutputCurrentType(IMFTransform *iface, DWORD id, IMFMediaType **type) { - FIXME("iface %p, id %#lx, type %p\n", iface, id, type); - return E_NOTIMPL; + struct video_encoder *encoder = impl_from_IMFTransform(iface); + HRESULT hr; + + TRACE("iface %p, id %#lx, type %p\n", iface, id, type); + + if (!encoder->output_type) + return MF_E_TRANSFORM_TYPE_NOT_SET; + + if (FAILED(hr = MFCreateMediaType(type))) + return hr; + + return IMFMediaType_CopyAllItems(encoder->output_type, (IMFAttributes *)*type); }
static HRESULT WINAPI transform_GetInputStatus(IMFTransform *iface, DWORD id, DWORD *flags)
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=146573
Your paranoid android.
=== w7u_2qxl (32 bit report) ===
mf: mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf.c:6336: Test failed: WaitForSingleObject returned 258 mf.c:6336: Test failed: Unexpected hr 0xd36d8. mf: Timeout
=== debian11 (build log) ===
01d4:err:winediag:h264_encoder_create GStreamer doesn't support H.264 encoding, please install appropriate plugins 01d8:err:winediag:h264_encoder_create GStreamer doesn't support H.264 encoding, please install appropriate plugins 01d4:err:winediag:h264_encoder_create GStreamer doesn't support H.264 encoding, please install appropriate plugins 01d4:err:winediag:h264_encoder_create GStreamer doesn't support H.264 encoding, please install appropriate plugins 01d4:err:winediag:h264_encoder_create GStreamer doesn't support H.264 encoding, please install appropriate plugins 01d4:err:winediag:h264_encoder_create GStreamer doesn't support H.264 encoding, please install appropriate plugins 01d8:err:winediag:h264_encoder_create GStreamer doesn't support H.264 encoding, please install appropriate plugins
=== debian11b (build log) ===
01d4:err:winediag:h264_encoder_create GStreamer doesn't support H.264 encoding, please install appropriate plugins
Rémi Bernon (@rbernon) commented about dlls/mf/tests/transform.c:
winetest_push_context("%s", debugstr_a(attr->name));
hr = IMFMediaType_DeleteItem(media_type, attr->key); ok_(__FILE__, line)(hr == S_OK, "DeleteItem returned %#lx\n", hr);
hr = IMFTransform_SetInputType(transform, 0, media_type, MFT_SET_TYPE_TEST_ONLY); todo_wine_if(attr->todo) ok_(__FILE__, line)(FAILED(hr) == attr->required, "SetInputType returned %#lx.\n", hr);
if (attr->required_set)
{
hr = IMFTransform_SetInputType(transform, 0, media_type, 0);
ok_(__FILE__, line)(FAILED(hr), "SetInputType Succeeded.\n");
hr = IMFTransform_SetInputType(transform, 0, NULL, 0);
ok_(__FILE__, line)(hr == S_OK, "Failed to clear input type.\n");
}
So, I understand this is to check that after a media type has been set with some specific attribute you cannot unset the media type? But can you still change it? Change the value of the attribute?
I'm a bit unsure that doing this check here is safe. I think it might have side effects on other attribute, and makes the later iteration results less reliable.
Maybe a separate helper to check that would be better?
Rémi Bernon (@rbernon) commented about dlls/mf/tests/transform.c:
ATTR_GUID(MF_MT_SUBTYPE, MFVideoFormat_NV12, .required = TRUE), ATTR_RATIO(MF_MT_FRAME_RATE, 30000, 1001, .required = TRUE), ATTR_RATIO(MF_MT_FRAME_SIZE, actual_width, actual_height, .required = TRUE),
ATTR_UINT32(test_attr_guid, 0),
I'm not sure to understand what this attribute is here for?
Rémi Bernon (@rbernon) commented about dlls/winegstreamer/video_encoder.c:
- ULONG i;
- TRACE("iface %p, id %#lx, type %p, flags %#lx.\n", iface, id, type, flags);
- if (!type)
- {
if (encoder->output_type)
{
IMFMediaType_Release(encoder->output_type);
encoder->output_type = NULL;
}
return S_OK;
- }
- if (FAILED(IMFMediaType_GetGUID(type, &MF_MT_MAJOR_TYPE, &major)) ||
FAILED(IMFMediaType_GetGUID(type, &MF_MT_SUBTYPE, &subtype)))
```suggestion:-1+0 if (FAILED(IMFMediaType_GetGUID(type, &MF_MT_MAJOR_TYPE, &major)) || FAILED(IMFMediaType_GetGUID(type, &MF_MT_SUBTYPE, &subtype))) ```
On Wed Jun 26 12:47:04 2024 +0000, Rémi Bernon wrote:
So, I understand this is to check that after a media type has been set with some specific attribute you cannot unset the media type? But can you still change it? Change the value of the attribute? I'm a bit unsure that doing this check here is safe. I think it might have side effects on other attribute, and makes the later iteration results less reliable. Maybe a separate helper to check that would be better?
This is to check some attritube can be set with MFT_SET_TYPE_TEST_ONLY flag, but failed with 0 flag, which means it passes the "test" but fails when actually set it.
On Wed Jun 26 12:47:04 2024 +0000, Rémi Bernon wrote:
I'm not sure to understand what this attribute is here for?
This trivial attritube appears in the result from GetOutputCurrentType(), it means that all attritubes in the type set by SetOutputType() will be copied to the result GetOutputCurrentType() even if it's useless.
On Fri Jun 28 07:01:57 2024 +0000, Ziqing Hui wrote:
This is to check some attritube is not required by MFT_SET_TYPE_TEST_ONLY, but required by 0 flag, which means we can pass the "test" without this attribute, but fail when actually set without it. `required` member only test the `MFT_SET_TYPE_TEST_ONLY` situation. `required_set` means this attr is required when actually set it (flag is 0).
Right, of course, sorry that I can't read.
This merge request was approved by Rémi Bernon.