[vlc-devel] [PATCH 7/7] libvlc: add libvlc_media_get_type
Thomas Guillem
thomas at gllm.fr
Wed Mar 25 16:30:20 CET 2015
On Wed, Mar 25, 2015, at 15:57, Rémi Denis-Courmont wrote:
> Le 2015-03-24 20:22, Thomas Guillem a écrit :
> > Get the type of the media.
> > ---
> > NEWS | 1 +
> > include/vlc/libvlc_media.h | 35 +++++++++++++++++++++++++++++++++++
> > lib/libvlc.sym | 1 +
> > lib/media.c | 32 ++++++++++++++++++++++++++++++++
> > 4 files changed, 69 insertions(+)
> >
> > diff --git a/NEWS b/NEWS
> > index 3daee6e..b2e443b 100644
> > --- a/NEWS
> > +++ b/NEWS
> > @@ -105,6 +105,7 @@ libVLC:
> > * Add libvlc_media_parse_with_options that uses a flag to specify
> > parse options
> > * Add libvlc_audio_output_device_get to get the currently selected
> > audio output device
> > identifier (if there is one available)
> > + * Add libvlc_media_get_type to get the type of the media
> >
> > Logging
> > * Support for the SystemD Journal
> > diff --git a/include/vlc/libvlc_media.h b/include/vlc/libvlc_media.h
> > index 7fc718a..18cb500 100644
> > --- a/include/vlc/libvlc_media.h
> > +++ b/include/vlc/libvlc_media.h
> > @@ -223,6 +223,27 @@ typedef struct libvlc_media_track_t
> >
> > } libvlc_media_track_t;
> >
> > +/** defgroup libvlc_media_type LibVLC media type
> > + * \ingroup libvlc_media
> > + * @{
> > + */
> > +
> > +/**
> > + * Media type
> > + *
> > + * \see libvlc_media_get_type
> > + */
> > +typedef enum libvlc_media_type_t {
> > + libvlc_media_type_unknown,
> > + libvlc_media_type_file,
> > + libvlc_media_type_directory,
> > + libvlc_media_type_disc,
> > + libvlc_media_type_stream,
> > + libvlc_media_type_playlist,
> > +} libvlc_media_type_t;
> > +
> > +/** @}*/
> > +
> > /**
> > * Parse flags used by libvlc_media_parse_with_options()
> > *
> > @@ -669,6 +690,20 @@ LIBVLC_API
> > void libvlc_media_tracks_release( libvlc_media_track_t **p_tracks,
> > unsigned i_count );
> >
> > +/**
> > + * Get the media type of the media descriptor object
> > + *
> > + * \version LibVLC 3.0.0 and later.
> > + *
> > + * \see libvlc_media_type_t
> > + *
> > + * \param p_md media descriptor object
> > + *
> > + * \return media type
> > + */
> > +LIBVLC_API
> > +libvlc_media_type_t libvlc_media_get_type( libvlc_media_t *p_md );
> > +
> > /** @}*/
> >
> > # ifdef __cplusplus
> > diff --git a/lib/libvlc.sym b/lib/libvlc.sym
> > index 4fd2378..1e241e7 100644
> > --- a/lib/libvlc.sym
> > +++ b/lib/libvlc.sym
> > @@ -90,6 +90,7 @@ libvlc_media_get_meta
> > libvlc_media_get_mrl
> > libvlc_media_get_state
> > libvlc_media_get_stats
> > +libvlc_media_get_type
> > libvlc_media_get_user_data
> > libvlc_media_get_tracks_info
> > libvlc_media_is_parsed
> > diff --git a/lib/media.c b/lib/media.c
> > index 9ccfb25..1d01c11 100644
> > --- a/lib/media.c
> > +++ b/lib/media.c
> > @@ -999,3 +999,35 @@ void libvlc_media_tracks_release(
> > libvlc_media_track_t **p_tracks, unsigned i_co
> > }
> > free( p_tracks );
> > }
> > +
> >
> > +/**************************************************************************
> > + * Get the media type of the media descriptor object
> > +
> > **************************************************************************/
> > +libvlc_media_type_t libvlc_media_get_type( libvlc_media_t *p_md )
>
> Not very future proof ABI-wise...
Ah, Why ? Maybe it is better to return an int for error/success, and set
libvlc_media_type_t in argument.
>
> > +{
> > + assert( p_md );
> > +
> > + int i_type;
> > + input_item_t *p_input_item = p_md->p_input_item;
> > +
> > + vlc_mutex_lock( &p_input_item->lock );
> > + i_type = p_md->p_input_item->i_type;
> > + vlc_mutex_unlock( &p_input_item->lock );
>
> Can the type of an item even change? If it can't, there is no need to
> lock, and the item should be const-qualified. And if it can, then this
> does not really work.
i_type is set when we create the item, but there is one place that
change the type to a ITEM_TYPE_NODE, in ChangeToNode from
src/playlist/item.c.
Maybe I should replace ITEM_TYPE_NODE with a new variable in item,
b_node. That way, I will be able to set i_type const. Furthermore, it's
more coherent since a file, a playlist or directory can be a node too.
> > +
> > + switch( i_type )
> > + {
> > + case ITEM_TYPE_FILE:
> > + return libvlc_media_type_file;
> > + case ITEM_TYPE_NODE:
> > + case ITEM_TYPE_DIRECTORY:
> > + return libvlc_media_type_directory;
> > + case ITEM_TYPE_DISC:
> > + return libvlc_media_type_disc;
> > + case ITEM_TYPE_STREAM:
> > + return libvlc_media_type_stream;
> > + case ITEM_TYPE_PLAYLIST:
> > + return libvlc_media_type_playlist;
> > + default:
> > + return libvlc_media_type_unknown;
> > + }
> > +}
>
> --
> Rémi Denis-Courmont
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
More information about the vlc-devel
mailing list