vlc | branch: master | Francois Cartegnie <[email protected]> | Mon Nov 28 
11:03:35 2016 +0100| [bd9218a1689b5a09b9b309e5d504f4d396a2503a] | committer: 
Francois Cartegnie

vout: decklink: incref on decklink_sys getter

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=bd9218a1689b5a09b9b309e5d504f4d396a2503a
---

 modules/video_output/decklink.cpp | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/modules/video_output/decklink.cpp 
b/modules/video_output/decklink.cpp
index 1b2da70..483e70b 100644
--- a/modules/video_output/decklink.cpp
+++ b/modules/video_output/decklink.cpp
@@ -254,7 +254,7 @@ vlc_module_end ()
 /* Protects decklink_sys_t creation/deletion */
 static vlc_mutex_t sys_lock = VLC_STATIC_MUTEX;
 
-static struct decklink_sys_t *GetDLSys(vlc_object_t *obj)
+static struct decklink_sys_t *GetDLSys(vlc_object_t *obj, bool b_hold = false)
 {
     vlc_object_t *libvlc = VLC_OBJECT(obj->obj.libvlc);
     struct decklink_sys_t *sys;
@@ -279,6 +279,9 @@ static struct decklink_sys_t *GetDLSys(vlc_object_t *obj)
         }
     }
 
+    if(sys && b_hold)
+        sys->users++;
+
     vlc_mutex_unlock(&sys_lock);
     return sys;
 }
@@ -452,7 +455,7 @@ static IDeckLinkDisplayMode * 
MatchDisplayMode(vout_display_t *vd,
     return p_selected;
 }
 
-static struct decklink_sys_t *OpenDecklink(vout_display_t *vd)
+static struct decklink_sys_t *OpenDecklink(vout_display_t *vd, struct 
decklink_sys_t *)
 {
     vout_display_sys_t *sys = vd->sys;
     video_format_t *fmt = &vd->fmt;
@@ -475,9 +478,8 @@ static struct decklink_sys_t *OpenDecklink(vout_display_t 
*vd)
     IDeckLink *p_card = NULL;
     BMDDisplayMode wanted_mode_id = bmdDisplayModeNotSupported;
 
-    struct decklink_sys_t *decklink_sys = GetDLSys(VLC_OBJECT(vd));
+    struct decklink_sys_t *decklink_sys = GetDLSys(VLC_OBJECT(vd), true);
     vlc_mutex_lock(&decklink_sys->lock);
-    decklink_sys->users++;
 
     /* wait until aout is ready */
     msg_Info(vd, "Waiting for DeckLink audio input module to start");
@@ -932,7 +934,7 @@ static int OpenVideo(vlc_object_t *p_this)
     sys->ar = var_InheritInteger(p_this, VIDEO_CFG_PREFIX "ar");
     sys->pic_nosignal = NULL;
 
-    decklink_sys = OpenDecklink(vd);
+    decklink_sys = OpenDecklink(vd, decklink_sys);
     if (!decklink_sys) {
         if (sys->pic_nosignal)
             picture_Release(sys->pic_nosignal);
@@ -1074,12 +1076,11 @@ static void PlayAudio(audio_output_t *aout, block_t 
*audio)
 static int OpenAudio(vlc_object_t *p_this)
 {
     audio_output_t *aout = (audio_output_t *)p_this;
-    struct decklink_sys_t *decklink_sys = GetDLSys(VLC_OBJECT(aout));
+    struct decklink_sys_t *decklink_sys = GetDLSys(VLC_OBJECT(aout), true);
 
     vlc_mutex_lock(&decklink_sys->lock);
     //decklink_sys->i_channels = var_InheritInteger(vd, AUDIO_CFG_PREFIX 
"audio-channels");
     decklink_sys->i_rate = var_InheritInteger(aout, AUDIO_CFG_PREFIX 
"audio-rate");
-    decklink_sys->users++;
     vlc_cond_signal(&decklink_sys->cond);
     vlc_mutex_unlock(&decklink_sys->lock);
 

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to