From: Santino Mazza smazza@codeweavers.com
--- dlls/amstream/tests/amstream.c | 65 ++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+)
diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c index 759c4b75fda..f043ed1eb7e 100644 --- a/dlls/amstream/tests/amstream.c +++ b/dlls/amstream/tests/amstream.c @@ -8485,6 +8485,70 @@ static void test_ddrawstream_qc(void) ok(!ref, "Got outstanding refcount %ld.\n", ref); }
+static void test_ddrawstream_mem_allocator(void) { + IAMMultiMediaStream *mmstream = create_ammultimediastream(); + IDirectDrawMediaStream *ddraw_stream; + IMemAllocator *ddraw_allocator, *mem_allocator, *new_allocator; + ALLOCATOR_PROPERTIES props, props2; + IMemInputPin *mem_input; + IMediaStream *stream; + HRESULT hr; + + hr = IAMMultiMediaStream_Initialize(mmstream, STREAMTYPE_READ, 0, NULL); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IAMMultiMediaStream_AddMediaStream(mmstream, NULL, &MSPID_PrimaryVideo, 0, &stream); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMediaStream_QueryInterface(stream, &IID_IDirectDrawMediaStream, (void**)&ddraw_stream); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IDirectDrawMediaStream_QueryInterface(ddraw_stream, &IID_IMemInputPin, (void**)&mem_input); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + ddraw_allocator = NULL; + hr = IDirectDrawMediaStream_QueryInterface(ddraw_stream, &IID_IMemAllocator, (void**)&ddraw_allocator); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + mem_allocator = NULL; + hr = IMemInputPin_GetAllocator(mem_input, &mem_allocator); + todo_wine ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine ok (mem_allocator == ddraw_allocator, "Expected GetAllocator to return ddraw allocator.\n"); + if (mem_allocator) + { + check_interface(mem_allocator, &IID_IDirectDrawMediaStream, TRUE); + IMemAllocator_Release(mem_allocator); + } + + hr = CoCreateInstance(&CLSID_MemoryAllocator, NULL, CLSCTX_INPROC_SERVER, + &IID_IMemAllocator, (void **)&new_allocator); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + props.cbAlign = 1; + props.cbBuffer = 10000; + props.cBuffers = 0; + props.cbPrefix = 0; + hr = IMemAllocator_SetProperties(new_allocator, &props, &props2); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = IMemInputPin_NotifyAllocator(mem_input, new_allocator, TRUE); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + mem_allocator = NULL; + hr = IMemInputPin_GetAllocator(mem_input, &mem_allocator); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + todo_wine ok (mem_allocator == ddraw_allocator, "Expected GetAllocator to return ddraw allocator.\n"); + todo_wine check_interface(mem_allocator, &IID_IDirectDrawMediaStream, TRUE); + IMemAllocator_Release(mem_allocator); + + IMemAllocator_Release(new_allocator); + IMemAllocator_Release(ddraw_allocator); + IDirectDrawMediaStream_Release(ddraw_stream); + IMediaStream_Release(stream); + IAMMultiMediaStream_Release(mmstream); +} + + static void test_ddrawstreamsample_get_media_stream(void) { IAMMultiMediaStream *mmstream = create_ammultimediastream(); @@ -9812,6 +9876,7 @@ START_TEST(amstream) test_ddrawstream_new_segment(); test_ddrawstream_get_time_per_frame(); test_ddrawstream_qc(); + test_ddrawstream_mem_allocator();
test_ddrawstreamsample_get_media_stream(); test_ddrawstreamsample_update();