Signed-off-by: Anton Baskanov baskanov@gmail.com --- dlls/amstream/ddrawstream.c | 4 ++++ dlls/amstream/tests/amstream.c | 2 ++ 2 files changed, 6 insertions(+)
diff --git a/dlls/amstream/ddrawstream.c b/dlls/amstream/ddrawstream.c index 6ea99d4915e..509e489435b 100644 --- a/dlls/amstream/ddrawstream.c +++ b/dlls/amstream/ddrawstream.c @@ -69,6 +69,7 @@ struct ddraw_sample { IDirectDrawStreamSample IDirectDrawStreamSample_iface; LONG ref; + IMultiMediaStream *mmstream; struct ddraw_stream *parent; IDirectDrawSurface *surface; RECT rect; @@ -1462,6 +1463,8 @@ static ULONG WINAPI ddraw_sample_Release(IDirectDrawStreamSample *iface) --sample->parent->sample_refs; LeaveCriticalSection(&sample->parent->cs);
+ if (sample->mmstream) + IMultiMediaStream_Release(sample->mmstream); IAMMediaStream_Release(&sample->parent->IAMMediaStream_iface);
if (sample->surface) @@ -1680,6 +1683,7 @@ static HRESULT ddrawstreamsample_create(struct ddraw_stream *parent, IDirectDraw object->parent = parent; InitializeConditionVariable(&object->update_cv); IAMMediaStream_AddRef(&parent->IAMMediaStream_iface); + IAMMediaStream_GetMultiMediaStream(&parent->IAMMediaStream_iface, &object->mmstream); ++parent->sample_refs;
if (surface) diff --git a/dlls/amstream/tests/amstream.c b/dlls/amstream/tests/amstream.c index 285dc0f0547..9dda5882a4f 100644 --- a/dlls/amstream/tests/amstream.c +++ b/dlls/amstream/tests/amstream.c @@ -6904,9 +6904,11 @@ static void test_ddrawstream_create_sample(void) hr = IDirectDrawMediaStream_CreateSample(ddraw_stream, NULL, &rect, 0, &sample); ok(hr == E_INVALIDARG, "Got hr %#x.\n", hr);
+ EXPECT_REF(mmstream, 1); EXPECT_REF(stream, 3); hr = IDirectDrawMediaStream_CreateSample(ddraw_stream, NULL, NULL, 0, &sample); ok(hr == S_OK, "Got hr %#x.\n", hr); + EXPECT_REF(mmstream, 2); EXPECT_REF(stream, 4);
hr = IDirectDrawStreamSample_GetSurface(sample, NULL, NULL);