[vlc-commits] caca: inline event thread

Rémi Denis-Courmont git at videolan.org
Fri Feb 2 16:44:03 CET 2018


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Feb  2 17:42:38 2018 +0200| [ca60ed72872ad7d13c9091076750d89c715d0e79] | committer: Rémi Denis-Courmont

caca: inline event thread

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

 modules/video_output/caca.c | 86 ++++++++++++++++-----------------------------
 1 file changed, 30 insertions(+), 56 deletions(-)

diff --git a/modules/video_output/caca.c b/modules/video_output/caca.c
index 23c5d4e675..ffea9625cc 100644
--- a/modules/video_output/caca.c
+++ b/modules/video_output/caca.c
@@ -47,17 +47,22 @@
 
 #include <caca.h>
 
-typedef struct vout_display_event_thread {
-    vout_display_t *vd;
+/* */
+struct vout_display_sys_t {
+    cucul_canvas_t *cv;
+    caca_display_t *dp;
+    cucul_dither_t *dither;
+
+    picture_pool_t *pool;
     block_fifo_t *fifo;
     vlc_thread_t thread;
-} vout_display_event_thread_t;
+};
 
 noreturn static void *VoutDisplayEventKeyDispatch(void *data)
 {
-    vout_display_event_thread_t *vdet = data;
-    vout_display_t *vd = vdet->vd;
-    block_fifo_t *fifo = vdet->fifo;
+    vout_display_t *vd = data;
+    vout_display_sys_t *sys = vd->sys;
+    block_fifo_t *fifo = sys->fifo;
 
     for (;;) {
         block_t *event = block_FifoGet(fifo);
@@ -72,59 +77,15 @@ noreturn static void *VoutDisplayEventKeyDispatch(void *data)
     }
 }
 
-static void VoutDisplayEventKey(vout_display_event_thread_t *vdet, int key)
+static void VoutDisplayEventKey(vout_display_sys_t *sys, int key)
 {
-    if (unlikely(vdet == NULL))
-        return;
-
     block_t *event = block_Alloc(sizeof (key));
     if (likely(event != NULL)) {
         memcpy(event->p_buffer, &key, sizeof (key));
-        block_FifoPut(vdet->fifo, event);
-    }
-}
-
-static struct vout_display_event_thread *
-VoutDisplayEventCreateThread(vout_display_t *vd)
-{
-    vout_display_event_thread_t *vdet = malloc(sizeof (*vdet));
-    if (unlikely(vdet == NULL))
-        return NULL;
-
-    vdet->vd = vd;
-    vdet->fifo = block_FifoNew();
-    if (unlikely(vdet->fifo == NULL)) {
-        free(vdet);
-        return NULL;
-    }
-
-    if (vlc_clone(&vdet->thread, VoutDisplayEventKeyDispatch, vdet,
-                  VLC_THREAD_PRIORITY_LOW)) {
-        block_FifoRelease(vdet->fifo);
-        free(vdet);
-        return NULL;
+        block_FifoPut(sys->fifo, event);
     }
-    return vdet;
 }
 
-static void VoutDisplayEventKillThread(vout_display_event_thread_t *vdet)
-{
-    vlc_cancel(vdet->thread);
-    vlc_join(vdet->thread, NULL);
-    block_FifoRelease(vdet->fifo);
-    free(vdet);
-}
-
-/* */
-struct vout_display_sys_t {
-    cucul_canvas_t *cv;
-    caca_display_t *dp;
-    cucul_dither_t *dither;
-
-    picture_pool_t *pool;
-    vout_display_event_thread_t *et;
-};
-
 /**
  * Return a pool of direct buffers
  */
@@ -364,12 +325,12 @@ static void Manage(vout_display_t *vd)
                     const int vlc = keys[i].vlc;
 
                     if (vlc >= 0)
-                        VoutDisplayEventKey(sys->et, vlc);
+                        VoutDisplayEventKey(sys, vlc);
                     return;
                 }
             }
             if (caca >= 0x20 && caca <= 0x7f) {
-                VoutDisplayEventKey(sys->et, caca);
+                VoutDisplayEventKey(sys, caca);
                 return;
             }
             break;
@@ -513,7 +474,16 @@ static int Open(vlc_object_t *object)
         caca_set_display_title(sys->dp,
                                VOUT_TITLE "(Colour AsCii Art)");
 
-    sys->et = VoutDisplayEventCreateThread(vd);
+    block_fifo_t *fifo = block_FifoNew();
+    if (likely(fifo != NULL)) {
+        sys->fifo = fifo;
+
+        if (vlc_clone(&sys->thread, VoutDisplayEventKeyDispatch, vd,
+                      VLC_THREAD_PRIORITY_LOW)) {
+            block_FifoRelease(fifo);
+            sys->fifo = NULL;
+        }
+    }
 
     /* Fix format */
     video_format_t fmt = vd->fmt;
@@ -566,7 +536,11 @@ static void Close(vlc_object_t *object)
     vout_display_t *vd = (vout_display_t *)object;
     vout_display_sys_t *sys = vd->sys;
 
-    VoutDisplayEventKillThread(sys->et);
+    if (sys->fifo != NULL) {
+        vlc_cancel(sys->thread);
+        vlc_join(sys->thread, NULL);
+        block_FifoRelease(sys->fifo);
+    }
     if (sys->pool)
         picture_pool_Release(sys->pool);
     if (sys->dither)



More information about the vlc-commits mailing list