mirror of
https://code.videolan.org/videolan/vlc
synced 2024-08-27 04:21:53 +02:00
libvlc: libvlc_media_get_es->libvlc_media_get_tracks_info.
This commit is contained in:
parent
ad91605615
commit
8211292f1c
@ -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 );
|
||||
|
||||
/** @}*/
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user