From: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Gabriel Ivăncescu <gabrielopcode(a)gmail.com>
Signed-off-by: Zebediah Figura <z.figura12(a)gmail.com>
---
dlls/qedit/mediadet.c | 22 ++++++++++++++++++----
dlls/qedit/tests/mediadet.c | 19 +++++++++++++++++++
2 files changed, 37 insertions(+), 4 deletions(-)
diff --git a/dlls/qedit/mediadet.c b/dlls/qedit/mediadet.c
index ecfafc44cbb..92c154a50a5 100644
--- a/dlls/qedit/mediadet.c
+++ b/dlls/qedit/mediadet.c
@@ -28,6 +28,7 @@
#include "ole2.h"
#include "qedit_private.h"
+#include "wine/strmbase.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(qedit);
@@ -280,11 +281,24 @@ static HRESULT WINAPI MediaDet_put_CurrentStream(IMediaDet* iface, LONG newVal)
return S_OK;
}
-static HRESULT WINAPI MediaDet_get_StreamType(IMediaDet* iface, GUID *pVal)
+static HRESULT WINAPI MediaDet_get_StreamType(IMediaDet *iface, GUID *majortype)
{
- MediaDetImpl *This = impl_from_IMediaDet(iface);
- FIXME("(%p)->(%s): not implemented!\n", This, debugstr_guid(pVal));
- return E_NOTIMPL;
+ MediaDetImpl *detector = impl_from_IMediaDet(iface);
+ AM_MEDIA_TYPE mt;
+ HRESULT hr;
+
+ TRACE("detector %p, majortype %p.\n", detector, majortype);
+
+ if (!majortype)
+ return E_POINTER;
+
+ if (SUCCEEDED(hr = IMediaDet_get_StreamMediaType(iface, &mt)))
+ {
+ *majortype = mt.majortype;
+ FreeMediaType(&mt);
+ }
+
+ return hr;
}
static HRESULT WINAPI MediaDet_get_StreamTypeB(IMediaDet* iface, BSTR *pVal)
diff --git a/dlls/qedit/tests/mediadet.c b/dlls/qedit/tests/mediadet.c
index 65f5af79c7e..1d8db732c88 100644
--- a/dlls/qedit/tests/mediadet.c
+++ b/dlls/qedit/tests/mediadet.c
@@ -192,6 +192,7 @@ static void test_mediadet(void)
BSTR filename = NULL;
LONG nstrms = 0;
LONG strm;
+ GUID guid;
AM_MEDIA_TYPE mt;
double fps;
int flags;
@@ -242,6 +243,12 @@ static void test_mediadet(void)
hr = IMediaDet_get_StreamMediaType(pM, NULL);
ok(hr == E_POINTER, "IMediaDet_get_StreamMediaType failed: %08x\n", hr);
+ hr = IMediaDet_get_StreamType(pM, &guid);
+ ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+
+ hr = IMediaDet_get_StreamType(pM, NULL);
+ ok(hr == E_POINTER, "Got hr %#x.\n", hr);
+
filename = SysAllocString(test_avi_filename);
hr = IMediaDet_put_Filename(pM, filename);
ok(hr == S_OK, "IMediaDet_put_Filename failed: %08x\n", hr);
@@ -258,6 +265,10 @@ static void test_mediadet(void)
ok(hr == S_OK, "IMediaDet_get_StreamMediaType failed: %08x\n", hr);
CoTaskMemFree(mt.pbFormat);
+ hr = IMediaDet_get_StreamType(pM, &guid);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(IsEqualGUID(&guid, &MEDIATYPE_Video), "Got major type %s.\n", debugstr_guid(&guid));
+
/* Even before get_OutputStreams. */
hr = IMediaDet_put_CurrentStream(pM, 1);
ok(hr == E_INVALIDARG, "IMediaDet_put_CurrentStream failed: %08x\n", hr);
@@ -311,6 +322,10 @@ static void test_mediadet(void)
"IMediaDet_get_StreamMediaType\n");
CoTaskMemFree(mt.pbFormat);
+ hr = IMediaDet_get_StreamType(pM, &guid);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(IsEqualGUID(&guid, &MEDIATYPE_Video), "Got major type %s.\n", debugstr_guid(&guid));
+
hr = IMediaDet_get_FrameRate(pM, NULL);
ok(hr == E_POINTER, "IMediaDet_get_FrameRate failed: %08x\n", hr);
@@ -370,6 +385,10 @@ static void test_mediadet(void)
if (IsEqualGUID(&mt.majortype, &MEDIATYPE_Audio))
{
+ hr = IMediaDet_get_StreamType(pM, &guid);
+ ok(hr == S_OK, "Got hr %#x.\n", hr);
+ ok(IsEqualGUID(&guid, &MEDIATYPE_Audio), "Got major type %s.\n", debugstr_guid(&guid));
+
hr = IMediaDet_get_FrameRate(pM, &fps);
ok(hr == VFW_E_INVALIDMEDIATYPE, "IMediaDet_get_FrameRate failed: %08x\n", hr);
}
--
2.26.0