static GstStateChangeReturn gst_dshowaudiosrc_change_state (GstElement * element, GstStateChange transition) { HRESULT hres = S_FALSE; GstDshowAudioSrc *src = GST_DSHOWAUDIOSRC (element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: break; case GST_STATE_CHANGE_READY_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_PLAYING: if (src->media_filter) hres = IMediaFilter_Run (src->media_filter, 0); if (hres != S_OK) { GST_CAT_ERROR (dshowaudiosrc_debug, "Can't RUN the directshow capture graph (error=%d)", hres); src->is_running = FALSE; return GST_STATE_CHANGE_FAILURE; } else { src->is_running = TRUE; } break; case GST_STATE_CHANGE_PLAYING_TO_PAUSED: if (src->media_filter) hres = IMediaFilter_Stop (src->media_filter); if (hres != S_OK) { GST_CAT_ERROR (dshowaudiosrc_debug, "Can't STOP the directshow capture graph (error=%d)", hres); return GST_STATE_CHANGE_FAILURE; } src->is_running = FALSE; break; case GST_STATE_CHANGE_PAUSED_TO_READY: break; case GST_STATE_CHANGE_READY_TO_NULL: break; default: break; } return GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); }
static gboolean gst_dshowvideodec_destroy_graph_and_filters (GstDshowVideoDec * vdec) { if (vdec->mediafilter) { IMediaFilter_Stop (vdec->mediafilter); } if (vdec->gstdshowsrcfilter) { IGstDshowInterface_Release (vdec->gstdshowsrcfilter); vdec->gstdshowsrcfilter = NULL; } if (vdec->srcfilter) { if (vdec->filtergraph) IFilterGraph_RemoveFilter (vdec->filtergraph, vdec->srcfilter); IBaseFilter_Release (vdec->srcfilter); vdec->srcfilter = NULL; } if (vdec->decfilter) { if (vdec->filtergraph) IFilterGraph_RemoveFilter (vdec->filtergraph, vdec->decfilter); IBaseFilter_Release (vdec->decfilter); vdec->decfilter = NULL; } if (vdec->sinkfilter) { if (vdec->filtergraph) IFilterGraph_RemoveFilter (vdec->filtergraph, vdec->sinkfilter); IBaseFilter_Release (vdec->sinkfilter); vdec->sinkfilter = NULL; } if (vdec->mediafilter) { IMediaFilter_Release (vdec->mediafilter); vdec->mediafilter = NULL; } if (vdec->filtergraph) { IFilterGraph_Release (vdec->filtergraph); vdec->filtergraph = NULL; } return TRUE; }
static void QUARTZ_DestroyFilterGraph(IUnknown* punk) { CFilterGraph_THIS(punk,unk); int i; TRACE( "(%p)\n", punk ); /* At first, call Stop. */ IMediaControl_Stop( CFilterGraph_IMediaControl(This) ); TRACE(" sent Stop 1\n"); IMediaFilter_Stop( CFilterGraph_IMediaFilter(This) ); TRACE(" sent Stop 2\n"); i = 0; while ( FGRAPH_Init[i].pInit != NULL ) { FGRAPH_Init[i].pUninit( This ); i++; } TRACE( "succeeded.\n" ); }