]> git.sesse.net Git - vlc/blobdiff - src/control/media_player.c
libvlc: remove dead initialization and factorize.
[vlc] / src / control / media_player.c
index 85547ac515ca2d1c287fc28dd051c15e2d42e6c9..2fec2ae9a476f968b9f7c43226d80f5cbe6a218a 100644 (file)
@@ -82,8 +82,14 @@ static void release_input_thread( libvlc_media_player_t *p_mi, bool b_input_abor
 
     /* We owned this one */
     input_Stop( p_input_thread, b_input_abort );
+
     vlc_thread_join( p_input_thread );
 
+    assert( p_mi->p_input_resource == NULL );
+    assert( p_input_thread->b_dead );
+    /* Store the input resource for future use. */
+    p_mi->p_input_resource = input_DetachResource( p_input_thread );
+
     var_Destroy( p_input_thread, "drawable-hwnd" );
     var_Destroy( p_input_thread, "drawable-xid" );
     var_Destroy( p_input_thread, "drawable-agl" );
@@ -288,6 +294,7 @@ libvlc_media_player_new( libvlc_instance_t * p_libvlc_instance,
     p_mi->drawable.nsobject = NULL;
     p_mi->p_libvlc_instance = p_libvlc_instance;
     p_mi->p_input_thread = NULL;
+    p_mi->p_input_resource = NULL;
     p_mi->i_refcount = 1;
     vlc_mutex_init( &p_mi->object_lock );
     p_mi->p_event_manager = libvlc_event_manager_new( p_mi,
@@ -382,9 +389,15 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi )
     var_DelCallback( p_mi->p_libvlc_instance->p_libvlc_int,
                      "vout-snapshottaken", SnapshotTakenCallback, p_mi );
 
-    /* Realease the input thread */
+    /* Release the input thread */
     release_input_thread( p_mi, true );
 
+    if( p_mi->p_input_resource )
+    {
+        input_resource_Delete( p_mi->p_input_resource );
+        p_mi->p_input_resource = NULL;    
+    }
+
     libvlc_event_manager_release( p_mi->p_event_manager );
     libvlc_media_release( p_mi->p_md );
     vlc_mutex_destroy( &p_mi->object_lock );
@@ -553,7 +566,7 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi,
     }
 
     p_mi->p_input_thread = input_Create( p_mi->p_libvlc_instance->p_libvlc_int,
-                                         p_mi->p_md->p_input_item, NULL, NULL );
+                                         p_mi->p_md->p_input_item, NULL, p_mi->p_input_resource );
 
     if( !p_mi->p_input_thread )
     {
@@ -561,6 +574,7 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi,
         return;
     }
 
+    p_mi->p_input_resource = NULL;
     p_input_thread = p_mi->p_input_thread;
 
     var_Create( p_input_thread, "drawable-agl", VLC_VAR_INTEGER );
@@ -844,16 +858,16 @@ float libvlc_media_player_get_position(
                                  libvlc_exception_t *p_e )
 {
     input_thread_t *p_input_thread;
-    vlc_value_t val;
+    float f_position;
 
     p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
     if( !p_input_thread )
         return -1.0;
 
-    var_Get( p_input_thread, "position", &val );
+    f_position = var_GetFloat( p_input_thread, "position" );
     vlc_object_release( p_input_thread );
 
-    return val.f_float;
+    return f_position;
 }
 
 void libvlc_media_player_set_chapter(
@@ -876,16 +890,16 @@ int libvlc_media_player_get_chapter(
                                  libvlc_exception_t *p_e )
 {
     input_thread_t *p_input_thread;
-    vlc_value_t val;
+    int i_chapter;
 
     p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
     if( !p_input_thread )
         return -1;
 
-    var_Get( p_input_thread, "chapter", &val );
+    i_chapter = var_GetInteger( p_input_thread, "chapter" );
     vlc_object_release( p_input_thread );
 
-    return val.i_int;
+    return i_chapter;
 }
 
 int libvlc_media_player_get_chapter_count(
@@ -956,16 +970,16 @@ int libvlc_media_player_get_title(
                                  libvlc_exception_t *p_e )
 {
     input_thread_t *p_input_thread;
-    vlc_value_t val;
+    int i_title;
 
     p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
     if( !p_input_thread )
         return -1;
 
-    var_Get( p_input_thread, "title", &val );
+    i_title = var_GetInteger( p_input_thread, "title" );
     vlc_object_release( p_input_thread );
 
-    return val.i_int;
+    return i_title;
 }
 
 int libvlc_media_player_get_title_count(
@@ -1081,16 +1095,16 @@ float libvlc_media_player_get_rate(
                                  libvlc_exception_t *p_e )
 {
     input_thread_t *p_input_thread;
-    vlc_value_t val;
+    int i_rate;
     bool b_can_rewind;
 
     p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
     if( !p_input_thread )
         return 0.0;  /* rate < 0 indicates rewind */
 
-    var_Get( p_input_thread, "rate", &val );
+    i_rate = var_GetInteger( p_input_thread, "rate" );
     b_can_rewind = var_GetBool( p_input_thread, "can-rewind" );
-    if( (val.i_int < 0) && !b_can_rewind )
+    if( i_rate < 0 && !b_can_rewind )
     {
         vlc_object_release( p_input_thread );
         libvlc_exception_raise( p_e, "invalid rate" );
@@ -1098,7 +1112,7 @@ float libvlc_media_player_get_rate(
     }
     vlc_object_release( p_input_thread );
 
-    return (float)1000.0f/val.i_int;
+    return (float)1000.0f/i_rate;
 }
 
 libvlc_state_t libvlc_media_player_get_state(
@@ -1107,7 +1121,6 @@ libvlc_state_t libvlc_media_player_get_state(
 {
     input_thread_t *p_input_thread;
     libvlc_state_t state = libvlc_Ended;
-    vlc_value_t val;
 
     p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
     if( !p_input_thread )
@@ -1134,7 +1147,7 @@ int libvlc_media_player_is_seekable( libvlc_media_player_t *p_mi,
                                        libvlc_exception_t *p_e )
 {
     input_thread_t *p_input_thread;
-    vlc_value_t val;
+    bool b_seekable;
 
     p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
     if ( !p_input_thread )
@@ -1144,10 +1157,10 @@ int libvlc_media_player_is_seekable( libvlc_media_player_t *p_mi,
             libvlc_exception_clear( p_e );
         return false;
     }
-    var_Get( p_input_thread, "can-seek", &val );
+    b_seekable = var_GetBool( p_input_thread, "can-seek" );
     vlc_object_release( p_input_thread );
 
-    return val.b_bool;
+    return b_seekable;
 }
 
 /* internal function, used by audio, video */
@@ -1226,7 +1239,7 @@ int libvlc_media_player_can_pause( libvlc_media_player_t *p_mi,
                                      libvlc_exception_t *p_e )
 {
     input_thread_t *p_input_thread;
-    vlc_value_t val;
+    bool b_can_pause;
 
     p_input_thread = libvlc_get_input_thread ( p_mi, p_e );
     if ( !p_input_thread )
@@ -1236,10 +1249,10 @@ int libvlc_media_player_can_pause( libvlc_media_player_t *p_mi,
             libvlc_exception_clear( p_e );
         return false;
     }
-    var_Get( p_input_thread, "can-pause", &val );
+    b_can_pause = var_GetBool( p_input_thread, "can-pause" );
     vlc_object_release( p_input_thread );
 
-    return val.b_bool;
+    return b_can_pause;
 }
 
 void libvlc_media_player_next_frame( libvlc_media_player_t *p_mi, libvlc_exception_t *p_e )