diff --git a/sys/decklink/capture.h b/sys/decklink/capture.h index 029500f2cf..e6c5846486 100644 --- a/sys/decklink/capture.h +++ b/sys/decklink/capture.h @@ -7,7 +7,7 @@ class DeckLinkCaptureDelegate : public IDeckLinkInputCallback { public: DeckLinkCaptureDelegate(); - ~DeckLinkCaptureDelegate(); + virtual ~DeckLinkCaptureDelegate(); virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid, LPVOID *ppv) { return E_NOINTERFACE; } virtual ULONG STDMETHODCALLTYPE AddRef(void); diff --git a/sys/decklink/gstdecklinksrc.cpp b/sys/decklink/gstdecklinksrc.cpp index 5769c174a8..939fb8b8eb 100644 --- a/sys/decklink/gstdecklinksrc.cpp +++ b/sys/decklink/gstdecklinksrc.cpp @@ -408,7 +408,6 @@ static gboolean gst_decklink_src_start (GstElement * element) { GstDecklinkSrc *decklinksrc = GST_DECKLINK_SRC (element); - DeckLinkCaptureDelegate *delegate; BMDAudioSampleType sample_depth; int channels; HRESULT ret; @@ -431,9 +430,9 @@ gst_decklink_src_start (GstElement * element) return FALSE; } - delegate = new DeckLinkCaptureDelegate (); - delegate->priv = decklinksrc; - ret = decklinksrc->input->SetCallback (delegate); + decklinksrc->delegate = new DeckLinkCaptureDelegate (); + decklinksrc->delegate->priv = decklinksrc; + ret = decklinksrc->input->SetCallback (decklinksrc->delegate); if (ret != S_OK) { GST_ERROR ("set callback failed (input source)"); return FALSE; @@ -559,6 +558,10 @@ gst_decklink_src_stop (GstElement * element) decklinksrc->input->DisableVideoInput (); decklinksrc->input->DisableAudioInput (); + decklinksrc->input->SetCallback (NULL); + delete decklinksrc->delegate; + decklinksrc->delegate = NULL; + g_list_free_full (decklinksrc->pending_events, (GDestroyNotify) gst_mini_object_unref); decklinksrc->pending_events = NULL; diff --git a/sys/decklink/gstdecklinksrc.h b/sys/decklink/gstdecklinksrc.h index f071b662b2..eb7a252c28 100644 --- a/sys/decklink/gstdecklinksrc.h +++ b/sys/decklink/gstdecklinksrc.h @@ -22,6 +22,7 @@ #include #include "gstdecklink.h" +#include "capture.h" G_BEGIN_DECLS @@ -52,6 +53,7 @@ struct _GstDecklinkSrc IDeckLink *decklink; IDeckLinkInput *input; IDeckLinkConfiguration *config; + DeckLinkCaptureDelegate *delegate; GMutex mutex; GCond cond;