Anton Baskanov : amstream: Implement AMAudioData::GetInfo.
Module: wine Branch: master Commit: 6010ebb22f8f783e5802e691ed7b1b6f0eb88969 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6010ebb22f8f783e5802e691ed... Author: Anton Baskanov <baskanov(a)gmail.com> Date: Thu Jul 28 21:59:52 2016 +0600 amstream: Implement AMAudioData::GetInfo. Signed-off-by: Anton Baskanov <baskanov(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/amstream/audiodata.c | 27 +++++++++++++++++++++++++-- dlls/amstream/tests/amstream.c | 25 +++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/dlls/amstream/audiodata.c b/dlls/amstream/audiodata.c index 7adb0c2..842fc95 100644 --- a/dlls/amstream/audiodata.c +++ b/dlls/amstream/audiodata.c @@ -30,6 +30,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(amstream); typedef struct { IAudioData IAudioData_iface; LONG ref; + DWORD size; + BYTE *data; + DWORD actual_data; } AMAudioDataImpl; static inline AMAudioDataImpl *impl_from_IAudioData(IAudioData *iface) @@ -87,9 +90,29 @@ static HRESULT WINAPI IAudioDataImpl_SetBuffer(IAudioData* iface, DWORD size, BY static HRESULT WINAPI IAudioDataImpl_GetInfo(IAudioData* iface, DWORD *length, BYTE **data, DWORD *actual_data) { - FIXME("(%p)->(%p,%p,%p): stub\n", iface, length, data, actual_data); + AMAudioDataImpl *This = impl_from_IAudioData(iface); - return E_NOTIMPL; + TRACE("(%p)->(%p,%p,%p)\n", iface, length, data, actual_data); + + if (!This->data) + { + return MS_E_NOTINIT; + } + + if (length) + { + *length = This->size; + } + if (data) + { + *data = This->data; + } + if (actual_data) + { + *actual_data = This->actual_data; + } + + return S_OK; } static HRESULT WINAPI IAudioDataImpl_SetActual(IAudioData* iface, DWORD data_valid) diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c index b4ead56..307868d 100644 --- a/dlls/amstream/tests/amstream.c +++ b/dlls/amstream/tests/amstream.c @@ -626,6 +626,30 @@ static void test_audiodata_query_interface(void) IUnknown_Release(unknown); } +static void test_audiodata_get_info(void) +{ + IUnknown *unknown = create_audio_data(); + IAudioData *audio_data = NULL; + + HRESULT result; + + result = IUnknown_QueryInterface(unknown, &IID_IAudioData, (void **)&audio_data); + if (FAILED(result)) + { + /* test_audiodata_query_interface handles this case */ + skip("No IAudioData\n"); + goto out_unknown; + } + + result = IAudioData_GetInfo(audio_data, NULL, NULL, NULL); + ok(MS_E_NOTINIT == result, "got 0x%08x\n", result); + + IAudioData_Release(audio_data); + +out_unknown: + IUnknown_Release(unknown); +} + START_TEST(amstream) { HANDLE file; @@ -645,6 +669,7 @@ START_TEST(amstream) } test_audiodata_query_interface(); + test_audiodata_get_info(); CoUninitialize(); }
participants (1)
-
Alexandre Julliard