mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-15 04:59:26 +00:00
mfmediaengine: Implement audio renderer configuration methods.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
9bf8fdaa8e
commit
6938f9b903
|
@ -29,6 +29,8 @@
|
||||||
#include "mferror.h"
|
#include "mferror.h"
|
||||||
#include "dxgi.h"
|
#include "dxgi.h"
|
||||||
#include "d3d11.h"
|
#include "d3d11.h"
|
||||||
|
#include "mmdeviceapi.h"
|
||||||
|
#include "audiosessiontypes.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
|
@ -2495,30 +2497,78 @@ static HRESULT WINAPI media_engine_EnableHorizontalMirrorMode(IMFMediaEngineEx *
|
||||||
|
|
||||||
static HRESULT WINAPI media_engine_GetAudioStreamCategory(IMFMediaEngineEx *iface, UINT32 *category)
|
static HRESULT WINAPI media_engine_GetAudioStreamCategory(IMFMediaEngineEx *iface, UINT32 *category)
|
||||||
{
|
{
|
||||||
FIXME("%p, %p stub.\n", iface, category);
|
struct media_engine *engine = impl_from_IMFMediaEngineEx(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("%p, %p.\n", iface, category);
|
||||||
|
|
||||||
|
EnterCriticalSection(&engine->cs);
|
||||||
|
|
||||||
|
if (engine->flags & FLAGS_ENGINE_SHUT_DOWN)
|
||||||
|
hr = MF_E_SHUTDOWN;
|
||||||
|
else
|
||||||
|
hr = IMFAttributes_GetUINT32(engine->attributes, &MF_MEDIA_ENGINE_AUDIO_CATEGORY, category);
|
||||||
|
|
||||||
|
LeaveCriticalSection(&engine->cs);
|
||||||
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI media_engine_SetAudioStreamCategory(IMFMediaEngineEx *iface, UINT32 category)
|
static HRESULT WINAPI media_engine_SetAudioStreamCategory(IMFMediaEngineEx *iface, UINT32 category)
|
||||||
{
|
{
|
||||||
FIXME("%p, %u stub.\n", iface, category);
|
struct media_engine *engine = impl_from_IMFMediaEngineEx(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("%p, %u.\n", iface, category);
|
||||||
|
|
||||||
|
EnterCriticalSection(&engine->cs);
|
||||||
|
|
||||||
|
if (engine->flags & FLAGS_ENGINE_SHUT_DOWN)
|
||||||
|
hr = MF_E_SHUTDOWN;
|
||||||
|
else
|
||||||
|
hr = IMFAttributes_SetUINT32(engine->attributes, &MF_MEDIA_ENGINE_AUDIO_CATEGORY, category);
|
||||||
|
|
||||||
|
LeaveCriticalSection(&engine->cs);
|
||||||
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI media_engine_GetAudioEndpointRole(IMFMediaEngineEx *iface, UINT32 *role)
|
static HRESULT WINAPI media_engine_GetAudioEndpointRole(IMFMediaEngineEx *iface, UINT32 *role)
|
||||||
{
|
{
|
||||||
FIXME("%p, %p stub.\n", iface, role);
|
struct media_engine *engine = impl_from_IMFMediaEngineEx(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("%p, %p.\n", iface, role);
|
||||||
|
|
||||||
|
EnterCriticalSection(&engine->cs);
|
||||||
|
|
||||||
|
if (engine->flags & FLAGS_ENGINE_SHUT_DOWN)
|
||||||
|
hr = MF_E_SHUTDOWN;
|
||||||
|
else
|
||||||
|
hr = IMFAttributes_GetUINT32(engine->attributes, &MF_MEDIA_ENGINE_AUDIO_ENDPOINT_ROLE, role);
|
||||||
|
|
||||||
|
LeaveCriticalSection(&engine->cs);
|
||||||
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI media_engine_SetAudioEndpointRole(IMFMediaEngineEx *iface, UINT32 role)
|
static HRESULT WINAPI media_engine_SetAudioEndpointRole(IMFMediaEngineEx *iface, UINT32 role)
|
||||||
{
|
{
|
||||||
FIXME("%p, %u stub.\n", iface, role);
|
struct media_engine *engine = impl_from_IMFMediaEngineEx(iface);
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
return E_NOTIMPL;
|
TRACE("%p, %u.\n", iface, role);
|
||||||
|
|
||||||
|
EnterCriticalSection(&engine->cs);
|
||||||
|
|
||||||
|
if (engine->flags & FLAGS_ENGINE_SHUT_DOWN)
|
||||||
|
hr = MF_E_SHUTDOWN;
|
||||||
|
else
|
||||||
|
hr = IMFAttributes_SetUINT32(engine->attributes, &MF_MEDIA_ENGINE_AUDIO_ENDPOINT_ROLE, role);
|
||||||
|
|
||||||
|
LeaveCriticalSection(&engine->cs);
|
||||||
|
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI media_engine_GetRealTimeMode(IMFMediaEngineEx *iface, BOOL *enabled)
|
static HRESULT WINAPI media_engine_GetRealTimeMode(IMFMediaEngineEx *iface, BOOL *enabled)
|
||||||
|
@ -2867,6 +2917,12 @@ static HRESULT init_media_engine(DWORD flags, IMFAttributes *attributes, struct
|
||||||
if (FAILED(hr = IMFAttributes_CopyAllItems(attributes, engine->attributes)))
|
if (FAILED(hr = IMFAttributes_CopyAllItems(attributes, engine->attributes)))
|
||||||
return hr;
|
return hr;
|
||||||
|
|
||||||
|
/* Set default audio configuration */
|
||||||
|
if (FAILED(IMFAttributes_GetItem(engine->attributes, &MF_MEDIA_ENGINE_AUDIO_CATEGORY, NULL)))
|
||||||
|
IMFAttributes_SetUINT32(engine->attributes, &MF_MEDIA_ENGINE_AUDIO_CATEGORY, AudioCategory_Other);
|
||||||
|
if (FAILED(IMFAttributes_GetItem(engine->attributes, &MF_MEDIA_ENGINE_AUDIO_ENDPOINT_ROLE, NULL)))
|
||||||
|
IMFAttributes_SetUINT32(engine->attributes, &MF_MEDIA_ENGINE_AUDIO_ENDPOINT_ROLE, eMultimedia);
|
||||||
|
|
||||||
IMFAttributes_GetUINT64(attributes, &MF_MEDIA_ENGINE_PLAYBACK_HWND, &playback_hwnd);
|
IMFAttributes_GetUINT64(attributes, &MF_MEDIA_ENGINE_PLAYBACK_HWND, &playback_hwnd);
|
||||||
hr = IMFAttributes_GetUINT32(attributes, &MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT, &output_format);
|
hr = IMFAttributes_GetUINT32(attributes, &MF_MEDIA_ENGINE_VIDEO_OUTPUT_FORMAT, &output_format);
|
||||||
if (playback_hwnd) /* FIXME: handle MF_MEDIA_ENGINE_PLAYBACK_VISUAL */
|
if (playback_hwnd) /* FIXME: handle MF_MEDIA_ENGINE_PLAYBACK_VISUAL */
|
||||||
|
|
|
@ -29,6 +29,8 @@
|
||||||
#include "mferror.h"
|
#include "mferror.h"
|
||||||
#include "dxgi.h"
|
#include "dxgi.h"
|
||||||
#include "initguid.h"
|
#include "initguid.h"
|
||||||
|
#include "mmdeviceapi.h"
|
||||||
|
#include "audiosessiontypes.h"
|
||||||
|
|
||||||
#include "wine/heap.h"
|
#include "wine/heap.h"
|
||||||
#include "wine/test.h"
|
#include "wine/test.h"
|
||||||
|
@ -297,6 +299,7 @@ static void test_Shutdown(void)
|
||||||
IMFMediaTimeRange *time_range;
|
IMFMediaTimeRange *time_range;
|
||||||
IMFMediaEngine *media_engine;
|
IMFMediaEngine *media_engine;
|
||||||
unsigned int state;
|
unsigned int state;
|
||||||
|
UINT32 value;
|
||||||
DWORD cx, cy;
|
DWORD cx, cy;
|
||||||
double val;
|
double val;
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -448,6 +451,18 @@ todo_wine
|
||||||
hr = IMFMediaEngineEx_SetSourceFromByteStream(media_engine_ex, NULL, NULL);
|
hr = IMFMediaEngineEx_SetSourceFromByteStream(media_engine_ex, NULL, NULL);
|
||||||
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
|
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMFMediaEngineEx_GetAudioStreamCategory(media_engine_ex, &value);
|
||||||
|
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMFMediaEngineEx_GetAudioEndpointRole(media_engine_ex, &value);
|
||||||
|
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMFMediaEngineEx_SetAudioStreamCategory(media_engine_ex, AudioCategory_ForegroundOnlyMedia);
|
||||||
|
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
|
hr = IMFMediaEngineEx_SetAudioEndpointRole(media_engine_ex, eConsole);
|
||||||
|
ok(hr == MF_E_SHUTDOWN, "Unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
IMFMediaEngineEx_Release(media_engine_ex);
|
IMFMediaEngineEx_Release(media_engine_ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -800,6 +815,34 @@ static void test_SetSourceFromByteStream(void)
|
||||||
IMFMediaEngineNotify_Release(¬ify->IMFMediaEngineNotify_iface);
|
IMFMediaEngineNotify_Release(¬ify->IMFMediaEngineNotify_iface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_audio_configuration(void)
|
||||||
|
{
|
||||||
|
struct media_engine_notify *notify;
|
||||||
|
IMFMediaEngineEx *media_engine;
|
||||||
|
UINT32 value;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
notify = create_callback();
|
||||||
|
|
||||||
|
media_engine = create_media_engine_ex(¬ify->IMFMediaEngineNotify_iface);
|
||||||
|
if (!media_engine)
|
||||||
|
{
|
||||||
|
IMFMediaEngineNotify_Release(¬ify->IMFMediaEngineNotify_iface);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr = IMFMediaEngineEx_GetAudioStreamCategory(media_engine, &value);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
ok(value == AudioCategory_Other, "Unexpected value %u.\n", value);
|
||||||
|
|
||||||
|
hr = IMFMediaEngineEx_GetAudioEndpointRole(media_engine, &value);
|
||||||
|
ok(hr == S_OK, "Unexpected hr %#x.\n", hr);
|
||||||
|
ok(value == eMultimedia, "Unexpected value %u.\n", value);
|
||||||
|
|
||||||
|
IMFMediaEngineEx_Release(media_engine);
|
||||||
|
IMFMediaEngineNotify_Release(¬ify->IMFMediaEngineNotify_iface);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(mfmediaengine)
|
START_TEST(mfmediaengine)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
@ -829,6 +872,7 @@ START_TEST(mfmediaengine)
|
||||||
test_error();
|
test_error();
|
||||||
test_time_range();
|
test_time_range();
|
||||||
test_SetSourceFromByteStream();
|
test_SetSourceFromByteStream();
|
||||||
|
test_audio_configuration();
|
||||||
|
|
||||||
IMFMediaEngineClassFactory_Release(factory);
|
IMFMediaEngineClassFactory_Release(factory);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue