<!DOCTYPE html><html><head><title></title><style type="text/css">p.MsoNormal,p.MsoNoSpacing{margin:0}
p.MsoNormal,p.MsoNoSpacing{margin:0}</style></head><body><div>On Thu, Jun 20, 2019, at 17:54, Rémi Denis-Courmont wrote:<br></div><blockquote id="qt" type="cite"><div>Hi,<br></div><div><br></div><div>This conflicts with Romain's series. I don't have an opinion, but someone will need to yield.<br></div></blockquote><div><br></div><div>I will merge Roman's patches first, then add spu_added/removed callbacks.<br></div><div><br></div><blockquote id="qt" type="cite"><div><br></div><div class="qt-gmail_quote"><div>Le 20 juin 2019 18:23:54 GMT+03:00, Thomas Guillem <thomas@gllm.fr> a écrit :<br></div><blockquote class="qt-gmail_quote" style="margin-top:0pt;margin-right:0pt;margin-bottom:0pt;margin-left:0.8ex;border-left-color:rgb(204, 204, 204);border-left-style:solid;border-left-width:1px;padding-left:1ex;"><pre class="qt-k9mail"><div><hr> src/input/decoder.c        | 39 +++++++++++++++++++++++++++++++-------<br></div><div> src/input/event.h          |  9 +++++++++<br></div><div> src/input/input_internal.h | 12 ++++++++++++<br></div><div> 3 files changed, 53 insertions(+), 7 deletions(-)<br></div><div><br></div><div>diff --git a/src/input/decoder.c b/src/input/decoder.c<br></div><div>index 3a47c01ddf..ea9373975b 100644<br></div><div>--- a/src/input/decoder.c<br></div><div>+++ b/src/input/decoder.c<br></div><div>@@ -611,12 +611,19 @@ static subpicture_t *spu_new_buffer( decoder_t *p_dec,<br></div><div>         msg_Warn( p_dec, "no vout found, dropping subpicture" );<br></div><div>         if( p_owner->p_vout )<br></div><div>         {<br></div><div>-            if (p_owner->i_spu_channel != -1)<br></div><div>-            {<br></div><div>-                vout_UnregisterSubpictureChannel(p_owner->p_vout,<br></div><div>-                                                 p_owner->i_spu_channel);<br></div><div>-                p_owner->i_spu_channel = -1;<br></div><div>-            }<br></div><div>+            assert(p_owner->i_spu_channel != -1);<br></div><div>+<br></div><div>+            if (p_owner->p_input)<br></div><div>+                input_SendEventSpu(p_owner->p_input,<br></div><div>+                    &(struct vlc_input_event_spu) {<br></div><div>+                        .vout = p_owner->p_vout,<br></div><div>+                        .channel_order = VLC_SPU_CHANNEL_ORDER_NONE,<br></div><div>+                        .id = p_owner->id,<br></div><div>+                    });<br></div><div>+<br></div><div>+            vout_UnregisterSubpictureChannel(p_owner->p_vout,<br></div><div>+                                             p_owner->i_spu_channel);<br></div><div>+            p_owner->i_spu_channel = -1;<br></div><div> <br></div><div>             vlc_mutex_lock( &p_owner->lock );<br></div><div>             vout_Release(p_owner->p_vout);<br></div><div>@@ -629,13 +636,15 @@ static subpicture_t *spu_new_buffer( decoder_t *p_dec,<br></div><div>     if( p_owner->p_vout != p_vout )<br></div><div>     {<br></div><div>         ssize_t old_spu_channel = p_owner->i_spu_channel;<br></div><div>+        enum vlc_spu_channel_order channel_order;<br></div><div>         p_owner->i_spu_channel =<br></div><div>             vout_RegisterSubpictureChannelInternal(p_vout, p_owner->p_clock,<br></div><div>-                                                   NULL);<br></div><div>+                                                   &channel_order);<br></div><div>         p_owner->i_spu_order = 0;<br></div><div> <br></div><div>         if (p_owner->i_spu_channel != -1)<br></div><div>         {<br></div><div>+            assert(channel_order != VLC_SPU_CHANNEL_ORDER_NONE);<br></div><div>             if (p_owner->p_vout && old_spu_channel != -1)<br></div><div>                 vout_UnregisterSubpictureChannel(p_owner->p_vout,<br></div><div>                                                  old_spu_channel);<br></div><div>@@ -644,6 +653,14 @@ static subpicture_t *spu_new_buffer( decoder_t *p_dec,<br></div><div>                 vout_Release(p_owner->p_vout);<br></div><div>             p_owner->p_vout = p_vout;<br></div><div>             vlc_mutex_unlock(&p_owner->lock);<br></div><div>+<br></div><div>+            if (p_owner->p_input)<br></div><div>+                input_SendEventSpu(p_owner->p_input,<br></div><div>+                    &(struct vlc_input_event_spu) {<br></div><div>+                        .vout = p_vout,<br></div><div>+                        .channel_order = channel_order,<br></div><div>+                        .id = p_owner->id,<br></div><div>+                    });<br></div><div>         }<br></div><div>     }<br></div><div>     else<br></div><div>@@ -1991,6 +2008,14 @@ static void DeleteDecoder( decoder_t * p_dec )<br></div><div>             if( p_owner->p_vout )<br></div><div>             {<br></div><div>                 assert( p_owner->i_spu_channel > 0 );<br></div><div>+                if (p_owner->p_input)<br></div><div>+                    input_SendEventSpu(p_owner->p_input,<br></div><div>+                        &(struct vlc_input_event_spu) {<br></div><div>+                            .vout = p_owner->p_vout,<br></div><div>+                            .channel_order = VLC_SPU_CHANNEL_ORDER_NONE,<br></div><div>+                            .id = p_owner->id,<br></div><div>+                        });<br></div><div>+<br></div><div>                 vout_UnregisterSubpictureChannel( p_owner->p_vout,<br></div><div>                                                   p_owner->i_spu_channel );<br></div><div>                 vout_Release(p_owner->p_vout);<br></div><div>diff --git a/src/input/event.h b/src/input/event.h<br></div><div>index 01163c479a..467d4ee799 100644<br></div><div>--- a/src/input/event.h<br></div><div>+++ b/src/input/event.h<br></div><div>@@ -281,6 +281,15 @@ static inline void input_SendEventVout(input_thread_t *p_input,<br></div><div>     });<br></div><div> }<br></div><div> <br></div><div>+static inline void input_SendEventSpu(input_thread_t *p_input,<br></div><div>+                                       const struct vlc_input_event_spu *event)<br></div><div>+{<br></div><div>+    input_SendEvent(p_input, &(struct vlc_input_event) {<br></div><div>+        .type = INPUT_EVENT_SPU,<br></div><div>+        .spu = *event,<br></div><div>+    });<br></div><div>+}<br></div><div>+<br></div><div> /*****************************************************************************<br></div><div>  * Event for control.c/input.c<br></div><div>  *****************************************************************************/<br></div><div>diff --git a/src/input/input_internal.h b/src/input/input_internal.h<br></div><div>index b159033b1c..b68ad77b4f 100644<br></div><div>--- a/src/input/input_internal.h<br></div><div>+++ b/src/input/input_internal.h<br></div><div>@@ -169,6 +169,9 @@ typedef enum input_event_type_e<br></div><div>     /* A vout_thread_t object has been created/deleted by *the input* */<br></div><div>     INPUT_EVENT_VOUT,<br></div><div> <br></div><div>+    /* A new SPU channel has been registered/unregistered */<br></div><div>+    INPUT_EVENT_SPU,<br></div><div>+<br></div><div>     /* (pre-)parsing events */<br></div><div>     INPUT_EVENT_SUBITEMS,<br></div><div> <br></div><div>@@ -271,6 +274,13 @@ struct vlc_input_event_vout<br></div><div>     vlc_es_id_t *id;<br></div><div> };<br></div><div> <br></div><div>+struct vlc_input_event_spu<br></div><div>+{<br></div><div>+    vout_thread_t *vout;<br></div><div>+    enum vlc_spu_channel_order channel_order;<br></div><div>+    vlc_es_id_t *id;<br></div><div>+};<br></div><div>+<br></div><div> struct vlc_input_event<br></div><div> {<br></div><div>     input_event_type_e type;<br></div><div>@@ -304,6 +314,8 @@ struct vlc_input_event<br></div><div>         float cache;<br></div><div>         /* INPUT_EVENT_VOUT */<br></div><div>         struct vlc_input_event_vout vout;<br></div><div>+        /* INPUT_EVENT_SPU */<br></div><div>+        struct vlc_input_event_spu spu;<br></div><div>         /* INPUT_EVENT_SUBITEMS */<br></div><div>         input_item_node_t *subitems;<br></div><div>         /* INPUT_EVENT_VBI_PAGE */<br></div></pre></blockquote></div><div><br></div><div>-- <br></div><div>Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté. <br></div><div>_______________________________________________<br></div><div>vlc-devel mailing list<br></div><div>To unsubscribe or modify your subscription options:<br></div><div>https://mailman.videolan.org/listinfo/vlc-devel<br></div></blockquote><div><br></div></body></html>