libvlc: libvlc_media_get_es->libvlc_media_get_tracks_info.
authorPierre d'Herbemont <pdherbemont@free.fr>
Mon, 22 Feb 2010 16:51:35 +0000 (17:51 +0100)
committerPierre d'Herbemont <pdherbemont@free.fr>
Mon, 22 Feb 2010 17:19:30 +0000 (18:19 +0100)
include/vlc/libvlc_media.h
src/control/media.c
src/libvlc.sym
test/libvlc/media.c

index 0468940..233dfb1 100644 (file)
@@ -100,13 +100,13 @@ enum
     libvlc_media_option_unique = 0x100
 };
 
-typedef enum libvlc_es_type_t
+typedef enum libvlc_track_type_t
 {
-    libvlc_es_unknown   = -1,
-    libvlc_es_audio     = 0,
-    libvlc_es_video     = 1,
-    libvlc_es_text      = 2,
-} libvlc_es_type_t;
+    libvlc_track_unknown   = -1,
+    libvlc_track_audio     = 0,
+    libvlc_track_video     = 1,
+    libvlc_track_text      = 2,
+} libvlc_track_type_t;
 
 /** defgroup libvlc_media_stats_t LibVLC media statistics
  * \ingroup libvlc_media
@@ -143,12 +143,12 @@ typedef struct libvlc_media_stats_t
 } libvlc_media_stats_t;
 /** @}*/
 
-typedef struct libvlc_media_es_t
+typedef struct libvlc_media_track_info_t
 {
     /* Codec fourcc */
     uint32_t    i_codec;
     int         i_id;
-    libvlc_es_type_t i_type;
+    libvlc_track_type_t i_type;
 
     /* Codec specific */
     int         i_profile;
@@ -162,7 +162,7 @@ typedef struct libvlc_media_es_t
     unsigned    i_height;
     unsigned    i_width;
 
-} libvlc_media_es_t;
+} libvlc_media_track_info_t;
 
 
 /**
@@ -385,7 +385,7 @@ VLC_PUBLIC_API libvlc_time_t
  *
  * \see libvlc_media_parse_async
  * \see libvlc_media_get_meta
- * \see libvlc_media_get_es
+ * \see libvlc_media_get_tracks_info
  *
  * \param media media descriptor object
  */
@@ -405,7 +405,7 @@ libvlc_media_parse(libvlc_media_t *media);
  * \see libvlc_media_parse
  * \see libvlc_MediaPreparsedChanged
  * \see libvlc_media_get_meta
- * \see libvlc_media_get_es
+ * \see libvlc_media_get_tracks_info
  *
  * \param media media descriptor object
  */
@@ -448,15 +448,28 @@ VLC_PUBLIC_API void *
  *
  * Note, you need to play the media _one_ time with --sout="#description"
  * Not doing this will result in an empty array, and doing it more than once
- * will duplicate the entries in the array each time.
+ * will duplicate the entries in the array each time. Something like this:
  *
- * \param p_md media descriptor object
- * \param pp_es address to store an allocated array of Elementary Streams descriptions (must be freed by the caller)
+ * @begincode
+ * libvlc_media_player_t *player = libvlc_media_player_new_from_media(media);
+ * libvlc_media_add_option_flag(media, "sout=\"#description\"");
+ * libvlc_media_player_play(player);
+ * // ... wait until playing
+ * libvlc_media_player_release(player);
+ * @endcode
+ *
+ * This is very likely to change in next release, and be done at the parsing
+ * phase.
+ *
+ * \param media media descriptor object
+ * \param tracks address to store an allocated array of Elementary Streams
+ * descriptions (must be freed by the caller)
  *
  * return the number of Elementary Streams
  */
-VLC_PUBLIC_API int
-    libvlc_media_get_es( libvlc_media_t * p_md, libvlc_media_es_t ** pp_es );
+VLC_PUBLIC_API
+int libvlc_media_get_tracks_info(libvlc_media_t *media,
+                                 libvlc_media_track_info_t **tracks );
 
 /** @}*/
 
index 3313a05..dca579a 100644 (file)
@@ -682,7 +682,7 @@ libvlc_media_get_user_data( libvlc_media_t * p_md )
  * Get media descriptor's elementary streams description
  **************************************************************************/
 int
-libvlc_media_get_es( libvlc_media_t *p_md, libvlc_media_es_t ** pp_es )
+libvlc_media_get_tracks_info( libvlc_media_t *p_md, libvlc_media_track_info_t ** pp_es )
 {
     assert( p_md );
 
@@ -690,7 +690,7 @@ libvlc_media_get_es( libvlc_media_t *p_md, libvlc_media_es_t ** pp_es )
     vlc_mutex_lock( &p_input_item->lock );
 
     const int i_es = p_input_item->i_es;
-    *pp_es = (i_es > 0) ? malloc( i_es * sizeof(libvlc_media_es_t) ) : NULL;
+    *pp_es = (i_es > 0) ? malloc( i_es * sizeof(libvlc_media_track_info_t) ) : NULL;
 
     if( !pp_es ) /* no ES, or OOM */
     {
@@ -701,7 +701,7 @@ libvlc_media_get_es( libvlc_media_t *p_md, libvlc_media_es_t ** pp_es )
     /* Fill array */
     for( int i = 0; i < i_es; i++ )
     {
-        libvlc_media_es_t *p_mes = *pp_es+i;
+        libvlc_media_track_info_t *p_mes = *pp_es+i;
         const es_format_t *p_es = p_input_item->es[i];
 
         p_mes->i_channels = p_mes->i_rate = 0;
@@ -718,20 +718,20 @@ libvlc_media_get_es( libvlc_media_t *p_md, libvlc_media_es_t ** pp_es )
         {
         case UNKNOWN_ES:
         default:
-            p_mes->i_type = libvlc_es_unknown;
+            p_mes->i_type = libvlc_track_unknown;
             break;
         case VIDEO_ES:
-            p_mes->i_type = libvlc_es_video;
+            p_mes->i_type = libvlc_track_video;
             p_mes->i_height = p_es->video.i_height;
             p_mes->i_width = p_es->video.i_width;
             break;
         case AUDIO_ES:
-            p_mes->i_type = libvlc_es_audio;
+            p_mes->i_type = libvlc_track_audio;
             p_mes->i_channels = p_es->audio.i_channels;
             p_mes->i_rate = p_es->audio.i_rate;
             break;
         case SPU_ES:
-            p_mes->i_type = libvlc_es_text;
+            p_mes->i_type = libvlc_track_text;
             break;
         }
     }
index 369f49c..d919e74 100644 (file)
@@ -55,12 +55,12 @@ libvlc_media_discoverer_release
 libvlc_media_duplicate
 libvlc_media_event_manager
 libvlc_media_get_duration
-libvlc_media_get_es
 libvlc_media_get_meta
 libvlc_media_get_mrl
 libvlc_media_get_state
 libvlc_media_get_stats
 libvlc_media_get_user_data
+libvlc_media_get_tracks_info
 libvlc_media_is_preparsed
 libvlc_media_library_load
 libvlc_media_library_media_list
index 5ac5ec6..94e8a79 100644 (file)
@@ -47,7 +47,7 @@ static void test_media_preparsed(const char** argv, int argc)
 
     // Check to see if we are properly receiving the event.
     libvlc_event_manager_t *em = libvlc_media_event_manager (media);
-    libvlc_event_attach (em, libvlc_MediaPreparsedChanged, preparsed_changed, &received);
+    libvlc_event_attach (em, libvlc_MediaPreparsedChanged, preparsed_changed, (void*)&received);
 
     // Parse the media. This is synchronous.
     libvlc_media_parse(media);
@@ -56,10 +56,10 @@ static void test_media_preparsed(const char** argv, int argc)
     while (!received);
 
     // We are good, now check Elementary Stream info.
-    libvlc_media_es_t *es;
-    int num = libvlc_media_get_es(media, &es);
+    libvlc_media_track_info_t *tracks;
+    int num = libvlc_media_get_es(media, &tracks);
     assert(num > 0);
-    free(es);
+    free(tracks);
 
     libvlc_media_release (media);
     libvlc_release (vlc);