Module: wine Branch: master Commit: 634deaf874ca2b7b279f748cc1677f6bfbb11e4e URL: http://source.winehq.org/git/wine.git/?a=commit;h=634deaf874ca2b7b279f748cc1...
Author: Anton Baskanov baskanov@gmail.com Date: Thu Jul 28 21:59:54 2016 +0600
amstream: Implement AMAudioData::SetActual.
Signed-off-by: Anton Baskanov baskanov@gmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/amstream/audiodata.c | 13 +++++++++-- dlls/amstream/tests/amstream.c | 49 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 2 deletions(-)
diff --git a/dlls/amstream/audiodata.c b/dlls/amstream/audiodata.c index 6ffd1df..78a4fc7 100644 --- a/dlls/amstream/audiodata.c +++ b/dlls/amstream/audiodata.c @@ -151,9 +151,18 @@ static HRESULT WINAPI IAudioDataImpl_GetInfo(IAudioData* iface, DWORD *length, B
static HRESULT WINAPI IAudioDataImpl_SetActual(IAudioData* iface, DWORD data_valid) { - FIXME("(%p)->(%u): stub\n", iface, data_valid); + AMAudioDataImpl *This = impl_from_IAudioData(iface);
- return E_NOTIMPL; + TRACE("(%p)->(%u)\n", iface, data_valid); + + if (data_valid > This->size) + { + return E_INVALIDARG; + } + + This->actual_data = data_valid; + + return S_OK; }
/*** IAudioData methods ***/ diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c index a38ae64..893894c 100644 --- a/dlls/amstream/tests/amstream.c +++ b/dlls/amstream/tests/amstream.c @@ -697,6 +697,54 @@ out_unknown: IUnknown_Release(unknown); }
+static void test_audiodata_set_actual(void) +{ + IUnknown *unknown = create_audio_data(); + IAudioData *audio_data = NULL; + BYTE buffer[100] = {0}; + DWORD actual_data = 0; + + 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_SetActual(audio_data, 0); + ok(S_OK == result, "got 0x%08x\n", result); + + result = IAudioData_SetBuffer(audio_data, sizeof(buffer), buffer, 0); + ok(S_OK == result, "got 0x%08x\n", result); + + result = IAudioData_SetActual(audio_data, sizeof(buffer) + 1); + ok(E_INVALIDARG == result, "got 0x%08x\n", result); + + result = IAudioData_SetActual(audio_data, sizeof(buffer)); + ok(S_OK == result, "got 0x%08x\n", result); + + actual_data = 0xdeadbeef; + result = IAudioData_GetInfo(audio_data, NULL, NULL, &actual_data); + ok(S_OK == result, "got 0x%08x\n", result); + ok(sizeof(buffer) == actual_data, "got %u\n", actual_data); + + result = IAudioData_SetActual(audio_data, 0); + ok(S_OK == result, "got 0x%08x\n", result); + + actual_data = 0xdeadbeef; + result = IAudioData_GetInfo(audio_data, NULL, NULL, &actual_data); + ok(S_OK == result, "got 0x%08x\n", result); + ok(0 == actual_data, "got %u\n", actual_data); + + IAudioData_Release(audio_data); + +out_unknown: + IUnknown_Release(unknown); +} + START_TEST(amstream) { HANDLE file; @@ -718,6 +766,7 @@ START_TEST(amstream) test_audiodata_query_interface(); test_audiodata_get_info(); test_audiodata_set_buffer(); + test_audiodata_set_actual();
CoUninitialize(); }