From: Pierre d'Herbemont Date: Mon, 22 Feb 2010 16:51:35 +0000 (+0100) Subject: libvlc: libvlc_media_get_es->libvlc_media_get_tracks_info. X-Git-Tag: 1.1.0-pre1~741 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=8211292f1c6339fd716831be155cdf1374cc2997;p=vlc libvlc: libvlc_media_get_es->libvlc_media_get_tracks_info. --- diff --git a/include/vlc/libvlc_media.h b/include/vlc/libvlc_media.h index 0468940e40..233dfb1f52 100644 --- a/include/vlc/libvlc_media.h +++ b/include/vlc/libvlc_media.h @@ -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 ); /** @}*/ diff --git a/src/control/media.c b/src/control/media.c index 3313a057a9..dca579a3d6 100644 --- a/src/control/media.c +++ b/src/control/media.c @@ -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; } } diff --git a/src/libvlc.sym b/src/libvlc.sym index 369f49c1ff..d919e74e11 100644 --- a/src/libvlc.sym +++ b/src/libvlc.sym @@ -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 diff --git a/test/libvlc/media.c b/test/libvlc/media.c index 5ac5ec6a90..94e8a793a0 100644 --- a/test/libvlc/media.c +++ b/test/libvlc/media.c @@ -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);