Nikolay Sivov : mf: Add MFRequireProtectedEnvironment().
Alexandre Julliard
julliard at winehq.org
Mon Apr 5 16:28:24 CDT 2021
Module: wine
Branch: master
Commit: c3c0e2a440fab099a81461b24fc19f2b223e525a
URL: https://source.winehq.org/git/wine.git/?a=commit;h=c3c0e2a440fab099a81461b24fc19f2b223e525a
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Apr 5 09:10:56 2021 +0300
mf: Add MFRequireProtectedEnvironment().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mf/main.c | 19 +++++++++++++++++++
dlls/mf/mf.spec | 2 +-
dlls/mf/tests/mf.c | 39 +++++++++++++++++++++++++++++++++++++++
include/mfidl.idl | 1 +
4 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/dlls/mf/main.c b/dlls/mf/main.c
index bf7066ad032..b59ad466c73 100644
--- a/dlls/mf/main.c
+++ b/dlls/mf/main.c
@@ -1460,3 +1460,22 @@ HRESULT WINAPI MFCreateSimpleTypeHandler(IMFMediaTypeHandler **handler)
return S_OK;
}
+
+HRESULT WINAPI MFRequireProtectedEnvironment(IMFPresentationDescriptor *pd)
+{
+ BOOL selected, protected = FALSE;
+ unsigned int i = 0, value;
+ IMFStreamDescriptor *sd;
+
+ TRACE("%p.\n", pd);
+
+ while (SUCCEEDED(IMFPresentationDescriptor_GetStreamDescriptorByIndex(pd, i++, &selected, &sd)))
+ {
+ value = 0;
+ protected = SUCCEEDED(IMFStreamDescriptor_GetUINT32(sd, &MF_SD_PROTECTED, &value)) && value;
+ IMFStreamDescriptor_Release(sd);
+ if (protected) break;
+ }
+
+ return protected ? S_OK : S_FALSE;
+}
diff --git a/dlls/mf/mf.spec b/dlls/mf/mf.spec
index 2927d9f8a88..8f340243fc2 100644
--- a/dlls/mf/mf.spec
+++ b/dlls/mf/mf.spec
@@ -77,7 +77,7 @@
@ stdcall MFGetSupportedSchemes(ptr)
@ stdcall MFGetTopoNodeCurrentType(ptr long long ptr)
@ stub MFReadSequencerSegmentOffset
-@ stub MFRequireProtectedEnvironment
+@ stdcall MFRequireProtectedEnvironment(ptr)
@ stdcall MFShutdownObject(ptr)
@ stub MFTranscodeGetAudioOutputAvailableTypes
@ stub MergePropertyStore
diff --git a/dlls/mf/tests/mf.c b/dlls/mf/tests/mf.c
index 40d8561bb06..df286db6385 100644
--- a/dlls/mf/tests/mf.c
+++ b/dlls/mf/tests/mf.c
@@ -5185,6 +5185,44 @@ static void init_functions(void)
#undef X
}
+static void test_MFRequireProtectedEnvironment(void)
+{
+ IMFPresentationDescriptor *pd;
+ IMFMediaType *mediatype;
+ IMFStreamDescriptor *sd;
+ HRESULT hr;
+
+ hr = MFCreateMediaType(&mediatype);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = MFCreateStreamDescriptor(0, 1, &mediatype, &sd);
+ ok(hr == S_OK, "Failed to create stream descriptor, hr %#x.\n", hr);
+
+ hr = MFCreatePresentationDescriptor(1, &sd, &pd);
+ ok(hr == S_OK, "Failed to create presentation descriptor, hr %#x.\n", hr);
+
+ hr = IMFPresentationDescriptor_SelectStream(pd, 0);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = MFRequireProtectedEnvironment(pd);
+ ok(hr == S_FALSE, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFStreamDescriptor_SetUINT32(sd, &MF_SD_PROTECTED, 1);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = MFRequireProtectedEnvironment(pd);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = IMFPresentationDescriptor_DeselectStream(pd, 0);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ hr = MFRequireProtectedEnvironment(pd);
+ ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
+
+ IMFStreamDescriptor_Release(sd);
+ IMFPresentationDescriptor_Release(pd);
+}
+
START_TEST(mf)
{
init_functions();
@@ -5216,4 +5254,5 @@ START_TEST(mf)
test_sample_copier();
test_sample_copier_output_processing();
test_MFGetTopoNodeCurrentType();
+ test_MFRequireProtectedEnvironment();
}
diff --git a/include/mfidl.idl b/include/mfidl.idl
index 46c715a3752..138b899ffdb 100644
--- a/include/mfidl.idl
+++ b/include/mfidl.idl
@@ -698,6 +698,7 @@ cpp_quote("MFTIME WINAPI MFGetSystemTime(void);")
cpp_quote("HRESULT WINAPI MFGetTopoNodeCurrentType(IMFTopologyNode *node, DWORD stream, BOOL output, IMFMediaType **type);")
cpp_quote("HRESULT WINAPI MFShutdownObject(IUnknown *object);")
cpp_quote("HRESULT WINAPI MFCreateTrackedSample(IMFTrackedSample **sample);")
+cpp_quote("HRESULT WINAPI MFRequireProtectedEnvironment(IMFPresentationDescriptor *pd);")
typedef enum _MFMEDIASOURCE_CHARACTERISTICS
{
More information about the wine-cvs
mailing list