[vlc-commits] caca: use the queue API, avoid block_t

Rémi Denis-Courmont git at videolan.org
Mon Apr 13 13:05:23 CEST 2020


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sat Apr 11 21:56:24 2020 +0300| [71460358f41fc8a0e5a6ac02b66c24e01bb6b263] | committer: Rémi Denis-Courmont

caca: use the queue API, avoid block_t

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

 modules/video_output/caca.c | 61 +++++++++++++++++++++------------------------
 1 file changed, 29 insertions(+), 32 deletions(-)

diff --git a/modules/video_output/caca.c b/modules/video_output/caca.c
index f95d985034..c5ae54fc67 100644
--- a/modules/video_output/caca.c
+++ b/modules/video_output/caca.c
@@ -29,11 +29,12 @@
 # include "config.h"
 #endif
 
-#include <stdnoreturn.h>
+#include <stdbool.h>
+#include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
 #include <vlc_common.h>
-#include <vlc_block.h>
+#include <vlc_queue.h>
 #include <vlc_plugin.h>
 #include <vlc_vout_display.h>
 #if !defined(_WIN32) && !defined(__APPLE__)
@@ -51,7 +52,8 @@ struct vout_display_sys_t {
     caca_display_t *dp;
     cucul_dither_t *dither;
 
-    block_fifo_t *fifo;
+    bool dead;
+    vlc_queue_t q;
     vlc_thread_t thread;
     vout_window_t *window;
     vout_display_place_t place;
@@ -60,31 +62,32 @@ struct vout_display_sys_t {
     vlc_tick_t cursor_deadline;
 };
 
-noreturn static void *VoutDisplayEventKeyDispatch(void *data)
+typedef struct vlc_caca_event {
+    struct vlc_caca_event *next;
+    int key;
+} vlc_caca_event_t;
+
+static void *VoutDisplayEventKeyDispatch(void *data)
 {
     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);
-
-        int cancel = vlc_savecancel();
-        int key;
+    vlc_caca_event_t *event;
 
-        memcpy(&key, event->p_buffer, sizeof (key));
-        block_Release(event);
-        vout_window_ReportKeyPress(sys->window, key);
-        vlc_restorecancel(cancel);
+    while ((event = vlc_queue_DequeueKillable(&sys->q, &sys->dead)) != NULL) {
+        vout_window_ReportKeyPress(sys->window, event->key);
+        free(event);
     }
+
+    return NULL;
 }
 
 static void VoutDisplayEventKey(vout_display_sys_t *sys, int key)
 {
-    block_t *event = block_Alloc(sizeof (key));
+    vlc_caca_event_t *event = malloc(sizeof (*event));
+
     if (likely(event != NULL)) {
-        memcpy(event->p_buffer, &key, sizeof (key));
-        block_FifoPut(sys->fifo, event);
+        event->key = key;
+        vlc_queue_Enqueue(&sys->q, event);
     }
 }
 
@@ -356,11 +359,9 @@ static void Close(vout_display_t *vd)
 {
     vout_display_sys_t *sys = vd->sys;
 
-    if (sys->fifo != NULL) {
-        vlc_cancel(sys->thread);
-        vlc_join(sys->thread, NULL);
-        block_FifoRelease(sys->fifo);
-    }
+    vlc_queue_Kill(&sys->q, &sys->dead);
+    vlc_join(sys->thread, NULL);
+
     if (sys->dither)
         cucul_free_dither(sys->dither);
     caca_free_display(sys->dp);
@@ -470,16 +471,12 @@ static int Open(vout_display_t *vd, const vout_display_cfg_t *cfg,
         (title != NULL) ? title : VOUT_TITLE "(Colour AsCii Art)");
     free(title);
 
-    block_fifo_t *fifo = block_FifoNew();
-    if (likely(fifo != NULL)) {
-        sys->fifo = fifo;
+    sys->dead = false;
+    vlc_queue_Init(&sys->q, offsetof (vlc_caca_event_t, next));
 
-        if (vlc_clone(&sys->thread, VoutDisplayEventKeyDispatch, vd,
-                      VLC_THREAD_PRIORITY_LOW)) {
-            block_FifoRelease(fifo);
-            sys->fifo = NULL;
-        }
-    }
+    if (vlc_clone(&sys->thread, VoutDisplayEventKeyDispatch, vd,
+                  VLC_THREAD_PRIORITY_LOW))
+        goto error;
 
     sys->cursor_timeout = VLC_TICK_FROM_MS( var_InheritInteger(vd, "mouse-hide-timeout") );
     sys->cursor_deadline = INVALID_DEADLINE;



More information about the vlc-commits mailing list