예제 #1
0
static gboolean
gst_dshowaudiosrc_close (GstAudioSrc * asrc)
{
  GstDshowAudioSrc *src = GST_DSHOWAUDIOSRC (asrc);

  if (!src->filter_graph)
    return TRUE;

  /*remove filters from the graph */
  IFilterGraph_RemoveFilter (src->filter_graph, src->audio_cap_filter);
  IFilterGraph_RemoveFilter (src->filter_graph, src->dshow_fakesink);

  /*release our gstreamer dshow sink */
  IBaseFilter_Release (src->dshow_fakesink);
  src->dshow_fakesink = NULL;

  /*release media filter interface */
  IMediaFilter_Release (src->media_filter);
  src->media_filter = NULL;

  /*release the filter graph manager */
  IFilterGraph_Release (src->filter_graph);
  src->filter_graph = NULL;

  return TRUE;
}
예제 #2
0
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;
}