[PATCH 5/7] amstream: Retreive some interfaces needed to control the stream.
Christian Costa
titan.costa at gmail.com
Wed Mar 14 15:51:27 CDT 2012
---
dlls/amstream/amstream.c | 22 ++++++++++++++++++++++
1 files changed, 22 insertions(+), 0 deletions(-)
diff --git a/dlls/amstream/amstream.c b/dlls/amstream/amstream.c
index 2f64689..516f2ba 100644
--- a/dlls/amstream/amstream.c
+++ b/dlls/amstream/amstream.c
@@ -35,6 +35,8 @@ typedef struct {
IAMMultiMediaStream IAMMultiMediaStream_iface;
LONG ref;
IGraphBuilder* pFilterGraph;
+ IMediaSeeking* media_seeking;
+ IMediaControl* media_control;
IPin* ipin;
ULONG nbStreams;
IMediaStream** pStreams;
@@ -116,6 +118,10 @@ static ULONG WINAPI IAMMultiMediaStreamImpl_Release(IAMMultiMediaStream* iface)
IMediaStream_Release(This->pStreams[i]);
if (This->ipin)
IPin_Release(This->ipin);
+ if (This->media_seeking)
+ IMediaSeeking_Release(This->media_seeking);
+ if (This->media_control)
+ IMediaControl_Release(This->media_control);
if (This->pFilterGraph)
IGraphBuilder_Release(This->pFilterGraph);
HeapFree(GetProcessHeap(), 0, This);
@@ -240,6 +246,22 @@ static HRESULT WINAPI IAMMultiMediaStreamImpl_Initialize(IAMMultiMediaStream* if
if (SUCCEEDED(hr))
{
This->StreamType = StreamType;
+ hr = IGraphBuilder_QueryInterface(This->pFilterGraph, &IID_IMediaSeeking, (void**)&This->media_seeking);
+ if (SUCCEEDED(hr))
+ IGraphBuilder_QueryInterface(This->pFilterGraph, &IID_IMediaControl, (void**)&This->media_control);
+ }
+
+ if (FAILED(hr))
+ {
+ if (This->media_seeking)
+ IMediaSeeking_Release(This->media_seeking);
+ This->media_seeking = NULL;
+ if (This->media_control)
+ IMediaControl_Release(This->media_control);
+ This->media_control = NULL;
+ if (This->pFilterGraph)
+ IGraphBuilder_Release(This->pFilterGraph);
+ This->pFilterGraph = NULL;
}
return hr;
More information about the wine-patches
mailing list