Module: wine Branch: master Commit: 6010ebb22f8f783e5802e691ed7b1b6f0eb88969 URL: http://source.winehq.org/git/wine.git/?a=commit;h=6010ebb22f8f783e5802e691ed...
Author: Anton Baskanov baskanov@gmail.com Date: Thu Jul 28 21:59:52 2016 +0600
amstream: Implement AMAudioData::GetInfo.
Signed-off-by: Anton Baskanov baskanov@gmail.com Signed-off-by: Alexandre Julliard julliard@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(); }