evr/mixer: Add SetOutputBounds().

Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Nikolay Sivov 2020-10-12 14:17:25 +03:00 committed by Alexandre Julliard
parent ad65d03013
commit 14d2b04478
4 changed files with 23 additions and 2 deletions

View File

@ -79,6 +79,8 @@ struct video_mixer
IMFAttributes *attributes; IMFAttributes *attributes;
IMFAttributes *internal_attributes; IMFAttributes *internal_attributes;
unsigned int mixing_flags; unsigned int mixing_flags;
LONGLONG lower_bound;
LONGLONG upper_bound;
CRITICAL_SECTION cs; CRITICAL_SECTION cs;
}; };
@ -814,9 +816,18 @@ static HRESULT WINAPI video_mixer_transform_GetOutputStatus(IMFTransform *iface,
static HRESULT WINAPI video_mixer_transform_SetOutputBounds(IMFTransform *iface, LONGLONG lower, LONGLONG upper) static HRESULT WINAPI video_mixer_transform_SetOutputBounds(IMFTransform *iface, LONGLONG lower, LONGLONG upper)
{ {
FIXME("%p, %s, %s.\n", iface, wine_dbgstr_longlong(lower), wine_dbgstr_longlong(upper)); struct video_mixer *mixer = impl_from_IMFTransform(iface);
return E_NOTIMPL; TRACE("%p, %s, %s.\n", iface, wine_dbgstr_longlong(lower), wine_dbgstr_longlong(upper));
EnterCriticalSection(&mixer->cs);
mixer->lower_bound = lower;
mixer->upper_bound = upper;
LeaveCriticalSection(&mixer->cs);
return S_OK;
} }
static HRESULT WINAPI video_mixer_transform_ProcessEvent(IMFTransform *iface, DWORD id, IMFMediaEvent *event) static HRESULT WINAPI video_mixer_transform_ProcessEvent(IMFTransform *iface, DWORD id, IMFMediaEvent *event)
@ -1879,6 +1890,8 @@ HRESULT evr_mixer_create(IUnknown *outer, void **out)
object->outer_unk = outer ? outer : &object->IUnknown_inner; object->outer_unk = outer ? outer : &object->IUnknown_inner;
object->refcount = 1; object->refcount = 1;
object->input_count = 1; object->input_count = 1;
object->lower_bound = MFT_OUTPUT_BOUND_LOWER_UNBOUNDED;
object->upper_bound = MFT_OUTPUT_BOUND_UPPER_UNBOUNDED;
video_mixer_init_input(&object->inputs[0]); video_mixer_init_input(&object->inputs[0]);
InitializeCriticalSection(&object->cs); InitializeCriticalSection(&object->cs);
if (FAILED(hr = MFCreateAttributes(&object->attributes, 0))) if (FAILED(hr = MFCreateAttributes(&object->attributes, 0)))

View File

@ -531,6 +531,9 @@ todo_wine
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
IUnknown_Release(unk); IUnknown_Release(unk);
hr = IMFTransform_SetOutputBounds(transform, 100, 10);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
hr = IMFTransform_QueryInterface(transform, &IID_IMFVideoDeviceID, (void **)&deviceid); hr = IMFTransform_QueryInterface(transform, &IID_IMFVideoDeviceID, (void **)&deviceid);
ok(hr == S_OK, "Unexpected hr %#x.\n", hr); ok(hr == S_OK, "Unexpected hr %#x.\n", hr);

View File

@ -265,6 +265,8 @@ typedef ULONG_PTR SIZE_T, *PSIZE_T;
typedef ULONG_PTR KAFFINITY, *PKAFFINITY; typedef ULONG_PTR KAFFINITY, *PKAFFINITY;
#define MINLONGLONG ((LONGLONG)~MAXLONGLONG)
/* Some Wine-specific definitions */ /* Some Wine-specific definitions */
/* Architecture dependent settings. */ /* Architecture dependent settings. */

View File

@ -18,6 +18,9 @@
import "mfobjects.idl"; import "mfobjects.idl";
cpp_quote("#define MFT_OUTPUT_BOUND_LOWER_UNBOUNDED MINLONGLONG")
cpp_quote("#define MFT_OUTPUT_BOUND_UPPER_UNBOUNDED MAXLONGLONG")
typedef [v1_enum] enum _MFT_MESSAGE_TYPE typedef [v1_enum] enum _MFT_MESSAGE_TYPE
{ {
MFT_MESSAGE_COMMAND_FLUSH = 0x00000000, MFT_MESSAGE_COMMAND_FLUSH = 0x00000000,