[vlc-devel] [V3 13/13] lib: Expose a new libvlc_MediaAttachedThumbnailsFound event

Hugo Beauzée-Luyssen hugo at beauzee.fr
Wed Nov 18 15:23:59 CET 2020


---
 include/vlc/libvlc_events.h |  5 +++++
 lib/media.c                 | 29 +++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/include/vlc/libvlc_events.h b/include/vlc/libvlc_events.h
index 85483555ac..91a6d8fbfa 100644
--- a/include/vlc/libvlc_events.h
+++ b/include/vlc/libvlc_events.h
@@ -89,6 +89,7 @@ enum libvlc_event_e {
      * \see libvlc_media_get_thumbnail()
      */
     libvlc_MediaThumbnailGenerated,
+    libvlc_MediaAttachedThumbnailsFound,
 
     libvlc_MediaPlayerMediaChanged=0x100,
     libvlc_MediaPlayerNothingSpecial,
@@ -272,6 +273,10 @@ typedef struct libvlc_event_t
         {
             libvlc_media_t * item;
         } media_subitemtree_added;
+        struct
+        {
+            libvlc_picture_list_t* thumbnails;
+        } media_attached_thumbnails_found;
 
         /* media instance */
         struct
diff --git a/lib/media.c b/lib/media.c
index 346809f93b..227bba3d0b 100644
--- a/lib/media.c
+++ b/lib/media.c
@@ -332,6 +332,27 @@ static void input_item_duration_changed( const vlc_event_t *p_event,
     libvlc_event_send( &p_md->event_manager, &event );
 }
 
+static void input_item_attachments_found( const vlc_event_t *p_event,
+                                                 void * user_data )
+{
+    libvlc_media_t * p_md = user_data;
+    libvlc_event_t event;
+
+    libvlc_picture_list_t* list = libvlc_picture_list_from_attachments(
+                p_event->u.input_item_attachments_found.attachments,
+                p_event->u.input_item_attachments_found.count );
+
+    /* Construct the event */
+    event.type = libvlc_MediaAttachedThumbnailsFound;
+    event.u.media_attached_thumbnails_found.thumbnails = list;
+
+
+    /* Send the event */
+    libvlc_event_send( &p_md->event_manager, &event );
+
+    libvlc_picture_list_destroy( list );
+}
+
 static void send_parsed_changed( libvlc_media_t *p_md,
                                  libvlc_media_parsed_status_t new_status )
 {
@@ -421,6 +442,10 @@ static void install_input_item_observer( libvlc_media_t *p_md )
                       vlc_InputItemDurationChanged,
                       input_item_duration_changed,
                       p_md );
+    vlc_event_attach( &p_md->p_input_item->event_manager,
+                      vlc_InputItemAttachmentsFound,
+                      input_item_attachments_found,
+                      p_md );
 }
 
 /**
@@ -437,6 +462,10 @@ static void uninstall_input_item_observer( libvlc_media_t *p_md )
                       vlc_InputItemDurationChanged,
                       input_item_duration_changed,
                       p_md );
+    vlc_event_detach( &p_md->p_input_item->event_manager,
+                      vlc_InputItemAttachmentsFound,
+                      input_item_attachments_found,
+                      p_md );
 }
 
 /**
-- 
2.29.2



More information about the vlc-devel mailing list