]> git.sesse.net Git - vlc/blobdiff - src/control/media_player.c
Move LibVLC error messages to libvlc_printerr().
[vlc] / src / control / media_player.c
index 290155f1722b60aa6942dd5eebd6fc127e9cbb7e..0b7d9c4be50bfa6e2418c232768c58a0347f1e4f 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" );
@@ -269,16 +275,13 @@ libvlc_media_player_new( libvlc_instance_t * p_libvlc_instance,
 {
     libvlc_media_player_t * p_mi;
 
-    if( !p_libvlc_instance )
-    {
-        libvlc_exception_raise( p_e, "invalid libvlc instance" );
-        return NULL;
-    }
+    assert( p_libvlc_instance );
 
     p_mi = malloc( sizeof(libvlc_media_player_t) );
     if( !p_mi )
     {
-        libvlc_exception_raise( p_e, "not enough memory" );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "Not enough memory" );
         return NULL;
     }
     p_mi->p_md = NULL;
@@ -288,6 +291,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,
@@ -341,9 +345,7 @@ libvlc_media_player_new( libvlc_instance_t * p_libvlc_instance,
         vout_thread that generates the event and media_player that re-emits it
         with its own event manager
     */
-    var_Create( p_libvlc_instance->p_libvlc_int, "vout-snapshottaken",
-                VLC_VAR_STRING | VLC_VAR_ISCOMMAND );
-    var_AddCallback( p_libvlc_instance->p_libvlc_int, "vout-snapshottaken",
+    var_AddCallback( p_libvlc_instance->p_libvlc_int, "snapshot-file",
                      SnapshotTakenCallback, p_mi );
 
     return p_mi;
@@ -380,11 +382,17 @@ static void libvlc_media_player_destroy( libvlc_media_player_t *p_mi )
 
     /* Detach Callback from the main libvlc object */
     var_DelCallback( p_mi->p_libvlc_instance->p_libvlc_int,
-                     "vout-snapshottaken", SnapshotTakenCallback, p_mi );
+                     "snapshot-file", 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 );
@@ -547,13 +555,14 @@ void libvlc_media_player_play( libvlc_media_player_t *p_mi,
 
     if( !p_mi->p_md )
     {
-        libvlc_exception_raise( p_e, "no associated media descriptor" );
         vlc_mutex_unlock( &p_mi->object_lock );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "No associated media descriptor" );
         return;
     }
 
     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 +570,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 );
@@ -731,48 +741,6 @@ void *libvlc_media_player_get_hwnd( libvlc_media_player_t *p_mi )
     return p_mi->drawable.hwnd;
 }
 
-/**************************************************************************
- * Set Drawable
- **************************************************************************/
-void libvlc_media_player_set_drawable( libvlc_media_player_t *p_mi,
-                                       libvlc_drawable_t drawable,
-                                       libvlc_exception_t *p_e )
-{
-#ifdef WIN32
-    if (sizeof (HWND) <= sizeof (libvlc_drawable_t))
-        p_mi->drawable.hwnd = (HWND)drawable;
-    else
-        libvlc_exception_raise(p_e, "Operation not supported");
-#elif defined(__APPLE__)
-    p_mi->drawable.agl = drawable;
-    (void) p_e;
-#else
-    p_mi->drawable.xid = drawable;
-    (void) p_e;
-#endif
-}
-
-/**************************************************************************
- * Get Drawable
- **************************************************************************/
-libvlc_drawable_t
-libvlc_media_player_get_drawable ( libvlc_media_player_t *p_mi,
-                                   libvlc_exception_t *p_e )
-{
-    VLC_UNUSED(p_e);
-
-#ifdef WIN32
-    if (sizeof (HWND) <= sizeof (libvlc_drawable_t))
-        return (libvlc_drawable_t)p_mi->drawable.hwnd;
-    else
-        return 0;
-#elif defined(__APPLE__)
-    return p_mi->drawable.agl;
-#else
-    return p_mi->drawable.xid;
-#endif
-}
-
 /**************************************************************************
  * Getters for stream information
  **************************************************************************/
@@ -1068,7 +1036,8 @@ void libvlc_media_player_set_rate(
     if( (rate < 0.0) && !b_can_rewind )
     {
         vlc_object_release( p_input_thread );
-        libvlc_exception_raise( p_e, "Rate value is invalid" );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "Invalid playback rate" );
         return;
     }
 
@@ -1093,7 +1062,6 @@ float libvlc_media_player_get_rate(
     if( i_rate < 0 && !b_can_rewind )
     {
         vlc_object_release( p_input_thread );
-        libvlc_exception_raise( p_e, "invalid rate" );
         return 0.0;
     }
     vlc_object_release( p_input_thread );
@@ -1173,7 +1141,8 @@ libvlc_track_description_t *
         malloc( sizeof( libvlc_track_description_t ) );
     if ( !p_track_description )
     {
-        libvlc_exception_raise( p_e, "not enough memory" );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "Not enough memory" );
         goto end;
     }
     p_actual = p_track_description;
@@ -1187,7 +1156,8 @@ libvlc_track_description_t *
             if ( !p_actual )
             {
                 libvlc_track_description_release( p_track_description );
-                libvlc_exception_raise( p_e, "not enough memory" );
+                libvlc_exception_raise( p_e );
+                libvlc_printerr( "Not enough memory" );
                 goto end;
             }
         }
@@ -1250,5 +1220,8 @@ void libvlc_media_player_next_frame( libvlc_media_player_t *p_mi, libvlc_excepti
         vlc_object_release( p_input_thread );
     }
     else
-        libvlc_exception_raise( p_e, "Input thread is NULL" );
+    {
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "No active input" );
+    }
 }