use single lock for all players - avoid multithreaded access to omplrlib
[melted_gui] / src / omnplay.h
index 123d6a1..ae33769 100644 (file)
@@ -51,35 +51,36 @@ typedef enum control_buttons
     BUTTON_LAST
 } control_buttons_t;
 
-#define OMNPLAY_PLAYLIST_BLOCK_BEGIN    (1 << 0)        // 1
-#define OMNPLAY_PLAYLIST_BLOCK_BODY     0               // 0
-#define OMNPLAY_PLAYLIST_BLOCK_END      (1 << 1)        // 2
-#define OMNPLAY_PLAYLIST_BLOCK_LOOP     (1 << 2)        // 4
+#define OMNPLAY_PLAYLIST_BLOCK_BEGIN    1
+#define OMNPLAY_PLAYLIST_BLOCK_BODY     0
+#define OMNPLAY_PLAYLIST_BLOCK_END      2
+#define OMNPLAY_PLAYLIST_BLOCK_LOOP     4
 
 typedef enum playlist_item_type
 {
+    // 1
     OMNPLAY_PLAYLIST_ITEM_BLOCK_BEGIN   =       OMNPLAY_PLAYLIST_BLOCK_BEGIN,
-
+    // 0
     OMNPLAY_PLAYLIST_ITEM_BLOCK_BODY    =       OMNPLAY_PLAYLIST_BLOCK_BODY,
-
+    // 2
     OMNPLAY_PLAYLIST_ITEM_BLOCK_END     =       OMNPLAY_PLAYLIST_BLOCK_END,
-
-    OMNPLAY_PLAYLIST_ITEM_BLOCK_SINGLE  =       OMNPLAY_PLAYLIST_BLOCK_END      | \
-                                                OMNPLAY_PLAYLIST_BLOCK_BODY     | \
+    // 3
+    OMNPLAY_PLAYLIST_ITEM_BLOCK_SINGLE  =       OMNPLAY_PLAYLIST_BLOCK_BEGIN    |
+                                                OMNPLAY_PLAYLIST_BLOCK_BODY     |
                                                 OMNPLAY_PLAYLIST_BLOCK_END,
-
-    OMNPLAY_PLAYLIST_ITEM_LOOP_BEGIN    =       OMNPLAY_PLAYLIST_BLOCK_BEGIN    | \
+    // 5
+    OMNPLAY_PLAYLIST_ITEM_LOOP_BEGIN    =       OMNPLAY_PLAYLIST_BLOCK_BEGIN    |
                                                 OMNPLAY_PLAYLIST_BLOCK_LOOP,
-
-    OMNPLAY_PLAYLIST_ITEM_LOOP_BODY     =       OMNPLAY_PLAYLIST_BLOCK_BODY     | \
+    // 4
+    OMNPLAY_PLAYLIST_ITEM_LOOP_BODY     =       OMNPLAY_PLAYLIST_BLOCK_BODY     |
                                                 OMNPLAY_PLAYLIST_BLOCK_LOOP,
-
-    OMNPLAY_PLAYLIST_ITEM_LOOP_END      =       OMNPLAY_PLAYLIST_BLOCK_END      | \
+    // 6
+    OMNPLAY_PLAYLIST_ITEM_LOOP_END      =       OMNPLAY_PLAYLIST_BLOCK_END      |
                                                 OMNPLAY_PLAYLIST_BLOCK_LOOP,
-
-    OMNPLAY_PLAYLIST_ITEM_LOOP_SINGLE   =       OMNPLAY_PLAYLIST_BLOCK_END      | \
-                                                OMNPLAY_PLAYLIST_BLOCK_BODY     | \
-                                                OMNPLAY_PLAYLIST_BLOCK_END      | \
+    // 7
+    OMNPLAY_PLAYLIST_ITEM_LOOP_SINGLE   =       OMNPLAY_PLAYLIST_BLOCK_BEGIN    |
+                                                OMNPLAY_PLAYLIST_BLOCK_BODY     |
+                                                OMNPLAY_PLAYLIST_BLOCK_END      |
                                                 OMNPLAY_PLAYLIST_BLOCK_LOOP,
 } playlist_item_type_t;
 
@@ -106,7 +107,6 @@ typedef struct omnplay_player
     char host[PATH_MAX];
     void* handle;
     pthread_t thread;
-    pthread_mutex_t lock;
     GtkWidget *label_status, *label_state, *label_tc_cur, *label_tc_rem, *label_clip;
     struct omnplay_instance *app;
     int playlist_start;
@@ -124,6 +124,7 @@ typedef struct omnplay_instance
         omnplay_player_t item[MAX_PLAYERS];
         int count;
         char path[PATH_MAX];
+        pthread_mutex_t lock;
     } players;
     int f_exit;
     struct
@@ -134,6 +135,7 @@ typedef struct omnplay_instance
         int ver_prev;
         pthread_mutex_t lock;
         char* path;
+        GdkPixbuf *block_icons[8];
     } playlist;
 } omnplay_instance_t;