From: Rémi Bernon rbernon@codeweavers.com
--- dlls/mfplat/mediatype.c | 93 ++++++++++++++++++++++++++++++- dlls/mfplat/tests/mfplat.c | 109 ------------------------------------- 2 files changed, 90 insertions(+), 112 deletions(-)
diff --git a/dlls/mfplat/mediatype.c b/dlls/mfplat/mediatype.c index 66fb2f69c07..383242e671d 100644 --- a/dlls/mfplat/mediatype.c +++ b/dlls/mfplat/mediatype.c @@ -3249,8 +3249,8 @@ HRESULT WINAPI MFCreateMFVideoFormatFromMFMediaType(IMFMediaType *media_type, MF { UINT32 format_stride, palette_size = 0, user_data_size = 0; MFVIDEOFORMAT *format; + BOOL is_yuv = FALSE; INT32 stride; - BOOL is_yuv; GUID guid;
TRACE("%p, %p, %p.\n", media_type, video_format, size); @@ -3765,8 +3765,95 @@ HRESULT WINAPI MFCreateVideoMediaTypeFromVideoInfoHeader(const KS_VIDEOINFOHEADE */ HRESULT WINAPI MFInitMediaTypeFromMFVideoFormat(IMFMediaType *media_type, const MFVIDEOFORMAT *format, UINT32 size) { - FIXME("%p, %p, %u\n", media_type, format, size); - return E_NOTIMPL; + UINT32 stride, sample_size, palette_size, user_data_size, value; + struct uncompressed_video_format *video_format; + const void *user_data; + HRESULT hr = S_OK; + + TRACE("%p, %p, %u\n", media_type, format, size); + + if (!format || size < sizeof(*format) || format->dwSize != size) + return E_INVALIDARG; + if (size < offsetof(MFVIDEOFORMAT, surfaceInfo.Palette[format->surfaceInfo.PaletteEntries + 1])) + return E_INVALIDARG; + + mediatype_set_guid(media_type, &MF_MT_MAJOR_TYPE, &MFMediaType_Video, &hr); + if (!IsEqualGUID(&format->guidFormat, &GUID_NULL)) + mediatype_set_guid(media_type, &MF_MT_SUBTYPE, &format->guidFormat, &hr); + if ((video_format = mf_get_video_format(&format->guidFormat))) + { + mediatype_set_uint32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, 1, &hr); + mediatype_set_uint32(media_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, 1, &hr); + } + + if (format->videoInfo.dwWidth && format->videoInfo.dwHeight) + { + mediatype_set_uint64(media_type, &MF_MT_FRAME_SIZE, format->videoInfo.dwWidth, format->videoInfo.dwHeight, &hr); + + if (video_format && (stride = mf_get_stride_for_format(video_format, format->videoInfo.dwWidth))) + { + if (!video_format->yuv && (format->videoInfo.VideoFlags & MFVideoFlag_BottomUpLinearRep)) + stride = -stride; + mediatype_set_uint32(media_type, &MF_MT_DEFAULT_STRIDE, stride, &hr); + } + + if (SUCCEEDED(MFCalculateImageSize(&format->guidFormat, format->videoInfo.dwWidth, format->videoInfo.dwHeight, &sample_size))) + mediatype_set_uint32(media_type, &MF_MT_SAMPLE_SIZE, sample_size, &hr); + } + + if (format->videoInfo.PixelAspectRatio.Denominator) + mediatype_set_uint64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, format->videoInfo.PixelAspectRatio.Numerator, + format->videoInfo.PixelAspectRatio.Denominator, &hr); + if (format->videoInfo.SourceChromaSubsampling) + mediatype_set_uint32(media_type, &MF_MT_VIDEO_CHROMA_SITING, format->videoInfo.SourceChromaSubsampling, &hr); + if (format->videoInfo.InterlaceMode) + mediatype_set_uint32(media_type, &MF_MT_INTERLACE_MODE, format->videoInfo.InterlaceMode, &hr); + if (format->videoInfo.TransferFunction) + mediatype_set_uint32(media_type, &MF_MT_TRANSFER_FUNCTION, format->videoInfo.TransferFunction, &hr); + if (format->videoInfo.ColorPrimaries) + mediatype_set_uint32(media_type, &MF_MT_VIDEO_PRIMARIES, format->videoInfo.ColorPrimaries, &hr); + if (format->videoInfo.TransferMatrix) + mediatype_set_uint32(media_type, &MF_MT_YUV_MATRIX, format->videoInfo.TransferMatrix, &hr); + if (format->videoInfo.SourceLighting) + mediatype_set_uint32(media_type, &MF_MT_VIDEO_LIGHTING, format->videoInfo.SourceLighting, &hr); + if (format->videoInfo.FramesPerSecond.Denominator) + mediatype_set_uint64(media_type, &MF_MT_FRAME_RATE, format->videoInfo.FramesPerSecond.Numerator, + format->videoInfo.FramesPerSecond.Denominator, &hr); + if (format->videoInfo.NominalRange) + mediatype_set_uint32(media_type, &MF_MT_VIDEO_NOMINAL_RANGE, format->videoInfo.NominalRange, &hr); + if (format->videoInfo.GeometricAperture.Area.cx && format->videoInfo.GeometricAperture.Area.cy) + mediatype_set_blob(media_type, &MF_MT_GEOMETRIC_APERTURE, (BYTE *)&format->videoInfo.GeometricAperture, + sizeof(format->videoInfo.GeometricAperture), &hr); + if (format->videoInfo.MinimumDisplayAperture.Area.cx && format->videoInfo.MinimumDisplayAperture.Area.cy) + mediatype_set_blob(media_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (BYTE *)&format->videoInfo.MinimumDisplayAperture, + sizeof(format->videoInfo.MinimumDisplayAperture), &hr); + if (format->videoInfo.PanScanAperture.Area.cx && format->videoInfo.PanScanAperture.Area.cy) + mediatype_set_blob(media_type, &MF_MT_PAN_SCAN_APERTURE, (BYTE *)&format->videoInfo.PanScanAperture, + sizeof(format->videoInfo.PanScanAperture), &hr); + if ((value = !!(format->videoInfo.VideoFlags & MFVideoFlag_PanScanEnabled))) + mediatype_set_uint32(media_type, &MF_MT_PAN_SCAN_ENABLED, value, &hr); + if ((value = format->videoInfo.VideoFlags & MFVideoFlag_PAD_TO_Mask)) + mediatype_set_uint32(media_type, &MF_MT_PAD_CONTROL_FLAGS, value, &hr); + if ((value = format->videoInfo.VideoFlags & MFVideoFlag_SrcContentHintMask)) + mediatype_set_uint32(media_type, &MF_MT_SOURCE_CONTENT_HINT, value >> 2, &hr); + if ((value = format->videoInfo.VideoFlags & (MFVideoFlag_AnalogProtected | MFVideoFlag_DigitallyProtected))) + mediatype_set_uint32(media_type, &MF_MT_DRM_FLAGS, value >> 5, &hr); + + if (format->compressedInfo.AvgBitrate) + mediatype_set_uint32(media_type, &MF_MT_AVG_BITRATE, format->compressedInfo.AvgBitrate, &hr); + if (format->compressedInfo.AvgBitErrorRate) + mediatype_set_uint32(media_type, &MF_MT_AVG_BIT_ERROR_RATE, format->compressedInfo.AvgBitErrorRate, &hr); + if (format->compressedInfo.MaxKeyFrameSpacing) + mediatype_set_uint32(media_type, &MF_MT_MAX_KEYFRAME_SPACING, format->compressedInfo.MaxKeyFrameSpacing, &hr); + + if ((palette_size = format->surfaceInfo.PaletteEntries * sizeof(*format->surfaceInfo.Palette))) + mediatype_set_blob(media_type, &MF_MT_PALETTE, (BYTE *)format->surfaceInfo.Palette, palette_size, &hr); + + user_data = &format->surfaceInfo.Palette[format->surfaceInfo.PaletteEntries + 1]; + if ((user_data_size = (BYTE *)format + format->dwSize - (BYTE *)user_data)) + mediatype_set_blob(media_type, &MF_MT_USER_DATA, user_data, user_data_size, &hr); + + return hr; }
/*********************************************************************** diff --git a/dlls/mfplat/tests/mfplat.c b/dlls/mfplat/tests/mfplat.c index 59813d608a5..a68cbba7241 100644 --- a/dlls/mfplat/tests/mfplat.c +++ b/dlls/mfplat/tests/mfplat.c @@ -7843,27 +7843,21 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) ok(hr == S_OK, "Unexpected hr %#lx.\n", hr);
hr = MFInitMediaTypeFromMFVideoFormat(media_type, NULL, 0); - todo_wine ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
memset(&format, 0, sizeof(format)); format.dwSize = sizeof(format) - 1; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format) - 1); - todo_wine ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr); format.dwSize = sizeof(format); hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format) - 1); - todo_wine ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); memset(&guid, 0xcd, sizeof(guid)); hr = IMFMediaType_GetGUID(media_type, &MF_MT_MAJOR_TYPE, &guid); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(IsEqualGUID(&guid, &MFMediaType_Video), "got %s.\n", debugstr_guid(&guid)); hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &guid); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -7871,13 +7865,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.guidFormat = MFVideoFormat_H264; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); memset(&guid, 0xcd, sizeof(guid)); hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &guid); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(IsEqualGUID(&guid, &MFVideoFormat_H264), "got %s.\n", debugstr_guid(&guid)); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -7887,25 +7878,18 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.guidFormat = MFVideoFormat_RGB32; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); memset(&guid, 0xcd, sizeof(guid)); hr = IMFMediaType_GetGUID(media_type, &MF_MT_SUBTYPE, &guid); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(IsEqualGUID(&guid, &MFVideoFormat_RGB32), "got %s.\n", debugstr_guid(&guid)); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_FIXED_SIZE_SAMPLES, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 1, "got %u.\n", value32); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_ALL_SAMPLES_INDEPENDENT, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 1, "got %u.\n", value32); hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -7921,7 +7905,6 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) ok(hr == HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW), "Unexpected hr %#lx.\n", hr); format.videoInfo.dwWidth = 123; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -7932,25 +7915,18 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) ok(hr == HRESULT_FROM_WIN32(ERROR_ARITHMETIC_OVERFLOW), "Unexpected hr %#lx.\n", hr); format.videoInfo.dwHeight = 456; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value64 = 0xdeadbeef; hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_SIZE, &value64); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value64 == (((UINT64)123 << 32) | 456), "got %#I64x.\n", value64); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 123 * 4, "got %u.\n", value32); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SAMPLE_SIZE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 123 * 4 * 456, "got %u.\n", value32); hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &value64); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -7959,26 +7935,20 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) /* MFVideoFlag_BottomUpLinearRep flag inverts the stride */ format.videoInfo.VideoFlags = MFVideoFlag_BottomUpLinearRep; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == -123 * 4, "got %u.\n", value32); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SAMPLE_SIZE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 123 * 4 * 456, "got %u.\n", value32); IMFMediaType_DeleteAllItems(media_type);
/* MFVideoFlag_BottomUpLinearRep flag only works with RGB formats */ format.guidFormat = MFVideoFormat_H264; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine 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); @@ -7988,38 +7958,30 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.guidFormat = MFVideoFormat_NV12; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DEFAULT_STRIDE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); todo_wine ok(value32 == 124, "got %u.\n", value32); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SAMPLE_SIZE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 124 * 456 * 3 / 2, "got %u.\n", value32); IMFMediaType_DeleteAllItems(media_type);
format.videoInfo.PixelAspectRatio.Numerator = 7; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &value64); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); IMFMediaType_DeleteAllItems(media_type); format.videoInfo.PixelAspectRatio.Denominator = 8; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value64 = 0xdeadbeef; hr = IMFMediaType_GetUINT64(media_type, &MF_MT_PIXEL_ASPECT_RATIO, &value64); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value64 == (((UINT64)7 << 32) | 8), "got %#I64x.\n", value64); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_VIDEO_CHROMA_SITING, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8027,13 +7989,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.SourceChromaSubsampling = MFVideoChromaSubsampling_MPEG2; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_VIDEO_CHROMA_SITING, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == MFVideoChromaSubsampling_MPEG2, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_INTERLACE_MODE, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8041,13 +8000,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.InterlaceMode = MFVideoInterlace_MixedInterlaceOrProgressive; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_INTERLACE_MODE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == MFVideoInterlace_MixedInterlaceOrProgressive, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_TRANSFER_FUNCTION, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8055,13 +8011,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.TransferFunction = MFVideoTransFunc_709; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_TRANSFER_FUNCTION, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == MFVideoTransFunc_709, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_VIDEO_PRIMARIES, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8069,13 +8022,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.ColorPrimaries = MFVideoPrimaries_BT709; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_VIDEO_PRIMARIES, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == MFVideoPrimaries_BT709, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_YUV_MATRIX, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8083,13 +8033,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.TransferMatrix = MFVideoTransferMatrix_BT709; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_YUV_MATRIX, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == MFVideoTransferMatrix_BT709, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_VIDEO_LIGHTING, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8097,13 +8044,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.SourceLighting = MFVideoLighting_bright; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_VIDEO_LIGHTING, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == MFVideoLighting_bright, "got %u.\n", value32); hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_RATE, &value64); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8111,20 +8055,16 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.FramesPerSecond.Numerator = 30000; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_RATE, &value64); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); IMFMediaType_DeleteAllItems(media_type); format.videoInfo.FramesPerSecond.Denominator = 1001; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value64 = 0xdeadbeef; hr = IMFMediaType_GetUINT64(media_type, &MF_MT_FRAME_RATE, &value64); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value64 == (((UINT64)30000 << 32) | 1001), "got %#I64x.\n", value64); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_VIDEO_NOMINAL_RANGE, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8132,13 +8072,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.NominalRange = MFNominalRange_Wide; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_VIDEO_NOMINAL_RANGE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == MFNominalRange_Wide, "got %u.\n", value32); hr = IMFMediaType_GetBlobSize(media_type, &MF_MT_GEOMETRIC_APERTURE, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8150,22 +8087,17 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) format.videoInfo.GeometricAperture.OffsetY.fract = 4; format.videoInfo.GeometricAperture.Area.cx = -120; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaType_GetBlob(media_type, &MF_MT_GEOMETRIC_APERTURE, (BYTE *)&aperture, sizeof(aperture), &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); format.videoInfo.GeometricAperture.Area.cy = -450; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; memset(&aperture, 0xcd, sizeof(aperture)); hr = IMFMediaType_GetBlob(media_type, &MF_MT_GEOMETRIC_APERTURE, (BYTE *)&aperture, sizeof(aperture), &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == sizeof(aperture), "got %u.\n", value32); - todo_wine ok(!memcmp(&format.videoInfo.GeometricAperture, &aperture, sizeof(aperture)), "Unexpected aperture.\n"); hr = IMFMediaType_GetBlobSize(media_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8177,22 +8109,17 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) format.videoInfo.MinimumDisplayAperture.OffsetY.fract = 4; format.videoInfo.MinimumDisplayAperture.Area.cx = 120; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaType_GetBlob(media_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (BYTE *)&aperture, sizeof(aperture), &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); format.videoInfo.MinimumDisplayAperture.Area.cy = 450; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; memset(&aperture, 0xcd, sizeof(aperture)); hr = IMFMediaType_GetBlob(media_type, &MF_MT_MINIMUM_DISPLAY_APERTURE, (BYTE *)&aperture, sizeof(aperture), &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == sizeof(aperture), "got %u.\n", value32); - todo_wine ok(!memcmp(&format.videoInfo.MinimumDisplayAperture, &aperture, sizeof(aperture)), "Unexpected aperture.\n"); hr = IMFMediaType_GetBlobSize(media_type, &MF_MT_PAN_SCAN_APERTURE, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8204,22 +8131,17 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) format.videoInfo.PanScanAperture.OffsetY.fract = 4; format.videoInfo.PanScanAperture.Area.cx = 120; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaType_GetBlob(media_type, &MF_MT_PAN_SCAN_APERTURE, (BYTE *)&aperture, sizeof(aperture), &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); format.videoInfo.PanScanAperture.Area.cy = 450; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; memset(&aperture, 0xcd, sizeof(aperture)); hr = IMFMediaType_GetBlob(media_type, &MF_MT_PAN_SCAN_APERTURE, (BYTE *)&aperture, sizeof(aperture), &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == sizeof(aperture), "got %u.\n", value32); - todo_wine ok(!memcmp(&format.videoInfo.PanScanAperture, &aperture, sizeof(aperture)), "Unexpected aperture.\n"); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_PAN_SCAN_ENABLED, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8227,13 +8149,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.VideoFlags |= MFVideoFlag_PanScanEnabled; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_PAN_SCAN_ENABLED, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 1, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_PAD_CONTROL_FLAGS, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8241,13 +8160,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.VideoFlags |= MFVideoFlag_PAD_TO_16x9; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_PAD_CONTROL_FLAGS, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 2, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SOURCE_CONTENT_HINT, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8255,13 +8171,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.VideoFlags |= MFVideoFlag_SrcContentHint16x9; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_SOURCE_CONTENT_HINT, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 1, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DRM_FLAGS, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8269,13 +8182,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.videoInfo.VideoFlags |= MFVideoFlag_DigitallyProtected; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_DRM_FLAGS, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 2, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_AVG_BITRATE, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8283,13 +8193,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.compressedInfo.AvgBitrate = 123456; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_AVG_BITRATE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 123456, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_AVG_BIT_ERROR_RATE, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8297,13 +8204,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.compressedInfo.AvgBitErrorRate = 654321; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_AVG_BIT_ERROR_RATE, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == 654321, "got %u.\n", value32); hr = IMFMediaType_GetUINT32(media_type, &MF_MT_MAX_KEYFRAME_SPACING, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8311,13 +8215,10 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void)
format.compressedInfo.MaxKeyFrameSpacing = -123; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; hr = IMFMediaType_GetUINT32(media_type, &MF_MT_MAX_KEYFRAME_SPACING, &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == -123, "got %u.\n", value32); hr = IMFMediaType_GetBlobSize(media_type, &MF_MT_PALETTE, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8327,7 +8228,6 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) format.guidFormat = MFVideoFormat_H264; format.surfaceInfo.Format = MFVideoFormat_H264.Data1; hr = MFInitMediaTypeFromMFVideoFormat(media_type, &format, sizeof(format)); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); hr = IMFMediaType_GetBlobSize(media_type, &MF_MT_PALETTE, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8341,21 +8241,16 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) /* format sizes needs to include an extra palette entry */ format_buf->dwSize = offsetof(MFVIDEOFORMAT, surfaceInfo.Palette[ARRAY_SIZE(expect_palette)]); hr = MFInitMediaTypeFromMFVideoFormat(media_type, format_buf, sizeof(format)); - todo_wine ok(hr == E_INVALIDARG, "Unexpected hr %#lx.\n", hr);
format_buf->dwSize = offsetof(MFVIDEOFORMAT, surfaceInfo.Palette[ARRAY_SIZE(expect_palette) + 1]); hr = MFInitMediaTypeFromMFVideoFormat(media_type, format_buf, format_buf->dwSize); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; memset(&palette, 0xcd, sizeof(palette)); hr = IMFMediaType_GetBlob(media_type, &MF_MT_PALETTE, (BYTE *)&palette, sizeof(palette), &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == sizeof(expect_palette), "got %u.\n", value32); - todo_wine ok(!memcmp(palette, expect_palette, value32), "Unexpected palette.\n"); hr = IMFMediaType_GetBlobSize(media_type, &MF_MT_USER_DATA, &value32); ok(hr == MF_E_ATTRIBUTENOTFOUND, "Unexpected hr %#lx.\n", hr); @@ -8364,16 +8259,12 @@ static void test_MFInitMediaTypeFromMFVideoFormat(void) memcpy(buffer + format_buf->dwSize, expect_user_data, sizeof(expect_user_data)); format_buf->dwSize += sizeof(expect_user_data); hr = MFInitMediaTypeFromMFVideoFormat(media_type, format_buf, format_buf->dwSize); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); value32 = 0xdeadbeef; memset(&user_data, 0xcd, sizeof(user_data)); hr = IMFMediaType_GetBlob(media_type, &MF_MT_USER_DATA, (BYTE *)user_data, sizeof(user_data), &value32); - todo_wine ok(hr == S_OK, "Unexpected hr %#lx.\n", hr); - todo_wine ok(value32 == sizeof(expect_user_data), "got %u.\n", value32); - todo_wine ok(!memcmp(user_data, expect_user_data, value32), "Unexpected user data.\n"); IMFMediaType_DeleteAllItems(media_type);