Rebase against b793799d3d5facb765d97041669da4bc159b860b.

This commit is contained in:
Alistair Leslie-Hughes
2020-11-05 11:02:49 +11:00
parent 786cac8be4
commit 4130b2a71c
3 changed files with 8 additions and 82 deletions

View File

@@ -1,72 +0,0 @@
From f2c8482489046a0623ef3d011ac7373209eef09a Mon Sep 17 00:00:00 2001
From: Derek Lesho <dlesho@codeweavers.com>
Date: Fri, 16 Oct 2020 16:59:32 -0500
Subject: [PATCH] mfmediaengine: Implement GetNativeVideoSize.
Signed-off-by: Derek Lesho <dlesho@codeweavers.com>
---
dlls/mfmediaengine/main.c | 30 ++++++++++++++++++++++++++++--
1 file changed, 28 insertions(+), 2 deletions(-)
diff --git a/dlls/mfmediaengine/main.c b/dlls/mfmediaengine/main.c
index e126a925b67..974e11296e9 100644
--- a/dlls/mfmediaengine/main.c
+++ b/dlls/mfmediaengine/main.c
@@ -91,6 +91,7 @@ struct media_engine
double default_playback_rate;
double volume;
double duration;
+ DWORD vid_width, vid_height;
MF_MEDIA_ENGINE_ERR error_code;
HRESULT extended_code;
MF_MEDIA_ENGINE_READY ready_state;
@@ -496,9 +497,23 @@ static HRESULT media_engine_create_topology(struct media_engine *engine, IMFMedi
}
else if (IsEqualGUID(&major, &MFMediaType_Video) && !sd_video && !(engine->flags & MF_MEDIA_ENGINE_AUDIOONLY))
{
+ IMFMediaType *video_type;
+ UINT64 frame_size;
+
sd_video = sd;
IMFStreamDescriptor_AddRef(sd_video);
IMFPresentationDescriptor_SelectStream(pd, i);
+
+ engine->vid_width = 0;
+ engine->vid_height = 0;
+ if (SUCCEEDED(IMFMediaTypeHandler_GetCurrentMediaType(type_handler, &video_type)))
+ {
+ if (SUCCEEDED(IMFMediaType_GetUINT64(video_type, &MF_MT_FRAME_SIZE, &frame_size)))
+ {
+ engine->vid_width = frame_size >> 32;
+ engine->vid_height = frame_size;
+ }
+ }
}
IMFMediaTypeHandler_Release(type_handler);
@@ -1230,9 +1245,20 @@ static BOOL WINAPI media_engine_HasAudio(IMFMediaEngine *iface)
static HRESULT WINAPI media_engine_GetNativeVideoSize(IMFMediaEngine *iface, DWORD *cx, DWORD *cy)
{
- FIXME("(%p, %p, %p): stub.\n", iface, cx, cy);
+ struct media_engine *engine = impl_from_IMFMediaEngine(iface);
- return E_NOTIMPL;
+ TRACE("(%p, %p, %p)\n", iface, cx, cy);
+
+ if (!(engine->flags & FLAGS_ENGINE_HAS_VIDEO))
+ return E_INVALIDARG;
+
+ if (!engine->vid_width || !engine->vid_height)
+ return E_FAIL;
+
+ *cx = engine->vid_width;
+ *cy = engine->vid_height;
+
+ return S_OK;
}
static HRESULT WINAPI media_engine_GetVideoAspectRatio(IMFMediaEngine *iface, DWORD *cx, DWORD *cy)
--
2.28.0