[vlc-devel] [PATCH 06/15] libvlc: add libvlc_MediaParsedStatus event
Thomas Guillem
thomas at gllm.fr
Thu Apr 14 17:44:55 CEST 2016
This event is always sent after libvlc_media_parse_with_options is successfuly
called.
---
include/vlc/libvlc_events.h | 5 +++++
include/vlc/libvlc_media.h | 21 +++++++++++++++++----
lib/media.c | 22 ++++++++++++++++++++++
lib/media_internal.h | 1 +
4 files changed, 45 insertions(+), 4 deletions(-)
diff --git a/include/vlc/libvlc_events.h b/include/vlc/libvlc_events.h
index 4da43f6..45ce86e 100644
--- a/include/vlc/libvlc_events.h
+++ b/include/vlc/libvlc_events.h
@@ -53,6 +53,7 @@ enum libvlc_event_e {
libvlc_MediaFreed,
libvlc_MediaStateChanged,
libvlc_MediaSubItemTreeAdded,
+ libvlc_MediaParsedStatus,
libvlc_MediaPlayerMediaChanged=0x100,
libvlc_MediaPlayerNothingSpecial,
@@ -154,6 +155,10 @@ typedef struct libvlc_event_t
{
libvlc_media_t * item;
} media_subitemtree_added;
+ struct
+ {
+ int new_status;
+ } media_parsed_status;
/* media instance */
struct
diff --git a/include/vlc/libvlc_media.h b/include/vlc/libvlc_media.h
index 20b28c6..7f74228 100644
--- a/include/vlc/libvlc_media.h
+++ b/include/vlc/libvlc_media.h
@@ -276,6 +276,19 @@ typedef enum libvlc_media_parse_flag_t
} libvlc_media_parse_flag_t;
/**
+ * Parse status used sent by libvlc_media_parse_with_options()
+ *
+ * \see libvlc_media_parse_with_options
+ */
+typedef enum libvlc_media_parsed_status_t
+{
+ libvlc_media_parse_init,
+ libvlc_media_parse_skipped,
+ libvlc_media_parse_failed,
+ libvlc_media_parse_done,
+} libvlc_media_parsed_status_t;
+
+/**
* Callback prototype to open a custom bitstream input media.
*
* The same media item can be opened multiple times. Each time, this callback
@@ -665,15 +678,15 @@ libvlc_media_parse_async( libvlc_media_t *p_md );
* This fetches (local or network) art, meta data and/or tracks information.
* This method is the extended version of libvlc_media_parse_async().
*
- * To track when this is over you can listen to libvlc_MediaParsedChanged
- * event. However if this functions returns an error, you will not receive this
- * event.
+ * To track when this is over you can listen to libvlc_MediaParsedStatus
+ * event. However if this functions returns an error, you will not receive any
+ * events.
*
* It uses a flag to specify parse options (see libvlc_media_parse_flag_t). All
* these flags can be combined. By default, media is parsed if it's a local
* file.
*
- * \see libvlc_MediaParsedChanged
+ * \see libvlc_MediaParsedStatus
* \see libvlc_media_get_meta
* \see libvlc_media_tracks_get
* \see libvlc_media_parse_flag_t
diff --git a/lib/media.c b/lib/media.c
index f3259ea..c4e799f 100644
--- a/lib/media.c
+++ b/lib/media.c
@@ -257,6 +257,26 @@ static void input_item_preparse_ended( const vlc_event_t * p_event,
VLC_UNUSED( p_event );
libvlc_media_t * p_md = user_data;
libvlc_media_list_t *p_subitems = media_get_subitems( p_md, false );
+ libvlc_event_t event;
+
+ event.type = libvlc_MediaParsedStatus;
+
+ vlc_mutex_lock(&p_md->parsed_lock);
+ switch (p_event->u.input_item_preparse_ended.new_status)
+ {
+ case ITEM_PREPARSE_SKIPPED:
+ p_md->parsed_status = libvlc_media_parse_skipped;
+ p_md->has_asked_preparse = false;
+ break;
+ case ITEM_PREPARSE_FAILED:
+ p_md->parsed_status = libvlc_media_parse_failed;
+ break;
+ case ITEM_PREPARSE_DONE:
+ p_md->parsed_status = libvlc_media_parse_done;
+ break;
+ }
+ event.u.media_parsed_status.new_status = p_md->parsed_status;
+ vlc_mutex_unlock(&p_md->parsed_lock);
if( p_subitems != NULL )
{
@@ -270,6 +290,8 @@ static void input_item_preparse_ended( const vlc_event_t * p_event,
* libvlc_MediaParsedChanged was sent with a true status. Therefore, send
* this event if it was not previously sent */
send_preparsed_event(p_md);
+
+ libvlc_event_send(p_md->p_event_manager, &event);
}
/**************************************************************************
diff --git a/lib/media_internal.h b/lib/media_internal.h
index 35f06a4..dd12176 100644
--- a/lib/media_internal.h
+++ b/lib/media_internal.h
@@ -45,6 +45,7 @@ struct libvlc_media_t
vlc_mutex_t parsed_lock;
vlc_mutex_t subitems_lock;
+ int parsed_status;
bool is_parsed;
bool has_asked_preparse;
};
--
2.8.0.rc3
More information about the vlc-devel
mailing list