]> git.sesse.net Git - vlc/blobdiff - src/control/media.c
Move LibVLC error messages to libvlc_printerr().
[vlc] / src / control / media.c
index c7e64d4db42658d216f2ecaba942585ce81069b5..38c64d68aef69db22e71b5a1ecc24ded6e955baa 100644 (file)
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
-#include "libvlc_internal.h"
-#include "libvlc.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
 #include <vlc/libvlc.h>
+#include <vlc/libvlc_media.h>
+#include <vlc/libvlc_media_list.h> // For the subitems, here for convenience
+#include <vlc/libvlc_events.h>
+
+#include <vlc_common.h>
 #include <vlc_input.h>
 #include <vlc_meta.h>
+#include <vlc_playlist.h> /* For the preparser */
 
-/* For the preparser */
-#include <vlc_playlist.h>
+#include "libvlc.h"
+
+#include "libvlc_internal.h"
+#include "media_internal.h"
 
 static const vlc_meta_type_t libvlc_to_vlc_meta[] =
 {
@@ -216,7 +226,7 @@ static void preparse_if_needed( libvlc_media_t *p_md )
     {
         playlist_PreparseEnqueue(
                 libvlc_priv (p_md->p_libvlc_instance->p_libvlc_int)->p_playlist,
-                p_md->p_input_item );
+                p_md->p_input_item, pl_Unlocked );
         p_md->b_preparsed = true;
     }
 }
@@ -235,14 +245,16 @@ libvlc_media_t * libvlc_media_new_from_input_item(
 
     if (!p_input_item)
     {
-        libvlc_exception_raise( p_e, "No input item given" );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "No input item given" );
         return NULL;
     }
 
     p_md = malloc( sizeof(libvlc_media_t) );
     if( !p_md )
     {
-        libvlc_exception_raise( p_e, "Not enough memory" );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "Not enough memory" );
         return NULL;
     }
 
@@ -288,11 +300,12 @@ libvlc_media_t * libvlc_media_new(
     input_item_t * p_input_item;
     libvlc_media_t * p_md;
 
-    p_input_item = input_ItemNew( p_instance->p_libvlc_int, psz_mrl, NULL );
+    p_input_item = input_item_New( p_instance->p_libvlc_int, psz_mrl, NULL );
 
     if (!p_input_item)
     {
-        libvlc_exception_raise( p_e, "Can't create md's input_item" );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "Not enough memory" );
         return NULL;
     }
 
@@ -316,11 +329,12 @@ libvlc_media_t * libvlc_media_new_as_node(
     input_item_t * p_input_item;
     libvlc_media_t * p_md;
 
-    p_input_item = input_ItemNew( p_instance->p_libvlc_int, "vlc://nop", psz_name );
+    p_input_item = input_item_New( p_instance->p_libvlc_int, "vlc://nop", psz_name );
 
     if (!p_input_item)
     {
-        libvlc_exception_raise( p_e, "Can't create md's input_item" );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "Not enough memory" );
         return NULL;
     }
 
@@ -341,13 +355,27 @@ libvlc_media_t * libvlc_media_new_as_node(
  * The options are detailled in vlc --long-help, for instance "--sout-all"
  **************************************************************************/
 void libvlc_media_add_option(
+                                   libvlc_media_t * p_md,
+                                   const char * psz_option,
+                                   libvlc_exception_t *p_e )
+{
+    VLC_UNUSED(p_e);
+    input_item_AddOption( p_md->p_input_item, psz_option,
+                          VLC_INPUT_OPTION_UNIQUE|VLC_INPUT_OPTION_TRUSTED );
+}
+
+/**************************************************************************
+ * Same as libvlc_media_add_option but with configurable flags.
+ **************************************************************************/
+void libvlc_media_add_option_flag(
                                    libvlc_media_t * p_md,
                                    const char * ppsz_option,
+                                   libvlc_media_option_t i_flags,
                                    libvlc_exception_t *p_e )
 {
     VLC_UNUSED(p_e);
-    input_ItemAddOpt( p_md->p_input_item, ppsz_option,
-                      VLC_INPUT_OPTION_UNIQUE|VLC_INPUT_OPTION_TRUSTED );
+    input_item_AddOption( p_md->p_input_item, ppsz_option,
+                          i_flags );
 }
 
 /**************************************************************************
@@ -436,7 +464,7 @@ char * libvlc_media_get_meta( libvlc_media_t *p_md,
     {
         playlist_AskForArtEnqueue(
                 libvlc_priv(p_md->p_libvlc_instance->p_libvlc_int)->p_playlist,
-                p_md->p_input_item );
+                p_md->p_input_item, pl_Unlocked );
     }
 
     /* Should be integrated in core */
@@ -511,7 +539,7 @@ libvlc_media_event_manager( libvlc_media_t * p_md,
 }
 
 /**************************************************************************
- * Get duration of media object.
+ * Get duration of media object (in ms)
  **************************************************************************/
 int64_t
 libvlc_media_get_duration( libvlc_media_t * p_md,
@@ -521,11 +549,12 @@ libvlc_media_get_duration( libvlc_media_t * p_md,
 
     if( !p_md || !p_md->p_input_item)
     {
-        libvlc_exception_raise( p_e, "No input item" );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "No input item" );
         return -1;
     }
 
-    return input_item_GetDuration( p_md->p_input_item );
+    return input_item_GetDuration( p_md->p_input_item ) / 1000;
 }
 
 /**************************************************************************
@@ -539,7 +568,8 @@ libvlc_media_is_preparsed( libvlc_media_t * p_md,
 
     if( !p_md || !p_md->p_input_item)
     {
-        libvlc_exception_raise( p_e, "No input item" );
+        libvlc_exception_raise( p_e );
+        libvlc_printerr( "No input item" );
         return false;
     }
 
@@ -574,13 +604,5 @@ libvlc_media_get_user_data( libvlc_media_t * p_md,
                                        libvlc_exception_t * p_e )
 {
     VLC_UNUSED(p_e);
-
-    if( p_md )
-    {
-        return p_md->p_user_data;
-    }
-    else
-    {
-        return NULL;
-    }
+    return p_md ? p_md->p_user_data : NULL;
 }