]> git.sesse.net Git - vlc/blobdiff - src/playlist/engine.c
Clean up a bit unused playlist functions and added lock asserts.
[vlc] / src / playlist / engine.c
index 2c2f57c6104bea27a8ea20fedb8d850ec3d282c7..14a62437ca960f1ed8212011a6d40b63dcf0b783 100644 (file)
@@ -44,9 +44,14 @@ static int RandomCallback( vlc_object_t *p_this, char const *psz_cmd,
                            vlc_value_t oldval, vlc_value_t newval, void *a )
 {
     (void)psz_cmd; (void)oldval; (void)newval; (void)a;
+    playlist_t *p_playlist = (playlist_t*)p_this;
 
-    pl_priv((playlist_t*)p_this)->b_reset_currently_playing = true;
-    playlist_Signal( ((playlist_t*)p_this) );
+    PL_LOCK;
+
+    pl_priv(p_playlist)->b_reset_currently_playing = true;
+    vlc_object_signal_unlocked( p_playlist );
+
+    PL_UNLOCK;
     return VLC_SUCCESS;
 }
 
@@ -62,7 +67,6 @@ playlist_t * playlist_Create( vlc_object_t *p_parent )
     static const char playlist_name[] = "playlist";
     playlist_t *p_playlist;
     playlist_private_t *p;
-    bool b_save;
 
     /* Allocate structure */
     p = vlc_custom_create( p_parent, sizeof( *p ),
@@ -151,7 +155,6 @@ playlist_t * playlist_Create( vlc_object_t *p_parent )
     pl_priv(p_playlist)->request.b_request = false;
     pl_priv(p_playlist)->status.i_status = PLAYLIST_STOPPED;
 
-    b_save = pl_priv(p_playlist)->b_auto_preparse;
     pl_priv(p_playlist)->b_auto_preparse = false;
     playlist_MLLoad( p_playlist );
     pl_priv(p_playlist)->b_auto_preparse = true;
@@ -224,22 +227,25 @@ static void ObjectGarbageCollector( playlist_t *p_playlist, bool b_force )
 }
 
 /* Input Callback */
-static void input_state_changed( const vlc_event_t * event, void * data )
+static int InputEvent( vlc_object_t *p_this, char const *psz_cmd,
+                       vlc_value_t oldval, vlc_value_t newval, void *p_data )
 {
-    (void)event;
-    playlist_t * p_playlist = data;
-    playlist_Signal( p_playlist );
-}
+    VLC_UNUSED(p_this); VLC_UNUSED(psz_cmd); VLC_UNUSED(oldval);
+    playlist_t *p_playlist = p_data;
+
+    if( newval.i_int != INPUT_EVENT_STATE &&
+        newval.i_int != INPUT_EVENT_ES )
+        return VLC_SUCCESS;
 
-/* Input Callback */
-static void input_selected_stream_changed( const vlc_event_t * event, void * data )
-{
-    (void)event;
-    playlist_t * p_playlist = data;
     PL_LOCK;
-    pl_priv(p_playlist)->gc_date = mdate();
+
+    if( newval.i_int == INPUT_EVENT_ES )
+        pl_priv(p_playlist)->gc_date = mdate();
+
     vlc_object_signal_unlocked( p_playlist );
+
     PL_UNLOCK;
+    return VLC_SUCCESS;
 }
 
 /* Internals */
@@ -250,12 +256,8 @@ void playlist_release_current_input( playlist_t * p_playlist )
     if( !pl_priv(p_playlist)->p_input ) return;
 
     input_thread_t * p_input = pl_priv(p_playlist)->p_input;
-    vlc_event_manager_t * p_em = input_get_event_manager( p_input );
 
-    vlc_event_detach( p_em, vlc_InputStateChanged,
-                      input_state_changed, p_playlist );
-    vlc_event_detach( p_em, vlc_InputSelectedStreamChanged,
-                      input_selected_stream_changed, p_playlist );
+    var_DelCallback( p_input, "intf-event", InputEvent, p_playlist );
     pl_priv(p_playlist)->p_input = NULL;
 
     /* Release the playlist lock, because we may get stuck
@@ -277,11 +279,8 @@ void playlist_set_current_input(
     {
         vlc_object_hold( p_input );
         pl_priv(p_playlist)->p_input = p_input;
-        vlc_event_manager_t * p_em = input_get_event_manager( p_input );
-        vlc_event_attach( p_em, vlc_InputStateChanged,
-                          input_state_changed, p_playlist );
-        vlc_event_attach( p_em, vlc_InputSelectedStreamChanged,
-                          input_selected_stream_changed, p_playlist );
+
+        var_AddCallback( p_input, "intf-event", InputEvent, p_playlist );
     }
 }