[vlc-devel] [PATCH 11/20] input: pass vout and spu_order via events

Rémi Denis-Courmont remi at remlab.net
Thu Jun 20 17:54:03 CEST 2019


Hi,

This conflicts with Romain's series. I don't have an opinion, but someone will need to yield.

Le 20 juin 2019 18:23:54 GMT+03:00, Thomas Guillem <thomas at gllm.fr> a écrit :
>---
> src/input/decoder.c        | 39 +++++++++++++++++++++++++++++++-------
> src/input/event.h          |  9 +++++++++
> src/input/input_internal.h | 12 ++++++++++++
> 3 files changed, 53 insertions(+), 7 deletions(-)
>
>diff --git a/src/input/decoder.c b/src/input/decoder.c
>index 3a47c01ddf..ea9373975b 100644
>--- a/src/input/decoder.c
>+++ b/src/input/decoder.c
>@@ -611,12 +611,19 @@ static subpicture_t *spu_new_buffer( decoder_t
>*p_dec,
>         msg_Warn( p_dec, "no vout found, dropping subpicture" );
>         if( p_owner->p_vout )
>         {
>-            if (p_owner->i_spu_channel != -1)
>-            {
>-                vout_UnregisterSubpictureChannel(p_owner->p_vout,
>-                                                
>p_owner->i_spu_channel);
>-                p_owner->i_spu_channel = -1;
>-            }
>+            assert(p_owner->i_spu_channel != -1);
>+
>+            if (p_owner->p_input)
>+                input_SendEventSpu(p_owner->p_input,
>+                    &(struct vlc_input_event_spu) {
>+                        .vout = p_owner->p_vout,
>+                        .channel_order = VLC_SPU_CHANNEL_ORDER_NONE,
>+                        .id = p_owner->id,
>+                    });
>+
>+            vout_UnregisterSubpictureChannel(p_owner->p_vout,
>+                                             p_owner->i_spu_channel);
>+            p_owner->i_spu_channel = -1;
> 
>             vlc_mutex_lock( &p_owner->lock );
>             vout_Release(p_owner->p_vout);
>@@ -629,13 +636,15 @@ static subpicture_t *spu_new_buffer( decoder_t
>*p_dec,
>     if( p_owner->p_vout != p_vout )
>     {
>         ssize_t old_spu_channel = p_owner->i_spu_channel;
>+        enum vlc_spu_channel_order channel_order;
>         p_owner->i_spu_channel =
>       vout_RegisterSubpictureChannelInternal(p_vout, p_owner->p_clock,
>-                                                   NULL);
>+                                                   &channel_order);
>         p_owner->i_spu_order = 0;
> 
>         if (p_owner->i_spu_channel != -1)
>         {
>+            assert(channel_order != VLC_SPU_CHANNEL_ORDER_NONE);
>             if (p_owner->p_vout && old_spu_channel != -1)
>                 vout_UnregisterSubpictureChannel(p_owner->p_vout,
>                                                  old_spu_channel);
>@@ -644,6 +653,14 @@ static subpicture_t *spu_new_buffer( decoder_t
>*p_dec,
>                 vout_Release(p_owner->p_vout);
>             p_owner->p_vout = p_vout;
>             vlc_mutex_unlock(&p_owner->lock);
>+
>+            if (p_owner->p_input)
>+                input_SendEventSpu(p_owner->p_input,
>+                    &(struct vlc_input_event_spu) {
>+                        .vout = p_vout,
>+                        .channel_order = channel_order,
>+                        .id = p_owner->id,
>+                    });
>         }
>     }
>     else
>@@ -1991,6 +2008,14 @@ static void DeleteDecoder( decoder_t * p_dec )
>             if( p_owner->p_vout )
>             {
>                 assert( p_owner->i_spu_channel > 0 );
>+                if (p_owner->p_input)
>+                    input_SendEventSpu(p_owner->p_input,
>+                        &(struct vlc_input_event_spu) {
>+                            .vout = p_owner->p_vout,
>+                            .channel_order =
>VLC_SPU_CHANNEL_ORDER_NONE,
>+                            .id = p_owner->id,
>+                        });
>+
>                 vout_UnregisterSubpictureChannel( p_owner->p_vout,
>                                              p_owner->i_spu_channel );
>                 vout_Release(p_owner->p_vout);
>diff --git a/src/input/event.h b/src/input/event.h
>index 01163c479a..467d4ee799 100644
>--- a/src/input/event.h
>+++ b/src/input/event.h
>@@ -281,6 +281,15 @@ static inline void
>input_SendEventVout(input_thread_t *p_input,
>     });
> }
> 
>+static inline void input_SendEventSpu(input_thread_t *p_input,
>+                                       const struct
>vlc_input_event_spu *event)
>+{
>+    input_SendEvent(p_input, &(struct vlc_input_event) {
>+        .type = INPUT_EVENT_SPU,
>+        .spu = *event,
>+    });
>+}
>+
>/*****************************************************************************
>  * Event for control.c/input.c
>*****************************************************************************/
>diff --git a/src/input/input_internal.h b/src/input/input_internal.h
>index b159033b1c..b68ad77b4f 100644
>--- a/src/input/input_internal.h
>+++ b/src/input/input_internal.h
>@@ -169,6 +169,9 @@ typedef enum input_event_type_e
>   /* A vout_thread_t object has been created/deleted by *the input* */
>     INPUT_EVENT_VOUT,
> 
>+    /* A new SPU channel has been registered/unregistered */
>+    INPUT_EVENT_SPU,
>+
>     /* (pre-)parsing events */
>     INPUT_EVENT_SUBITEMS,
> 
>@@ -271,6 +274,13 @@ struct vlc_input_event_vout
>     vlc_es_id_t *id;
> };
> 
>+struct vlc_input_event_spu
>+{
>+    vout_thread_t *vout;
>+    enum vlc_spu_channel_order channel_order;
>+    vlc_es_id_t *id;
>+};
>+
> struct vlc_input_event
> {
>     input_event_type_e type;
>@@ -304,6 +314,8 @@ struct vlc_input_event
>         float cache;
>         /* INPUT_EVENT_VOUT */
>         struct vlc_input_event_vout vout;
>+        /* INPUT_EVENT_SPU */
>+        struct vlc_input_event_spu spu;
>         /* INPUT_EVENT_SUBITEMS */
>         input_item_node_t *subitems;
>         /* INPUT_EVENT_VBI_PAGE */
>-- 
>2.20.1
>
>_______________________________________________
>vlc-devel mailing list
>To unsubscribe or modify your subscription options:
>https://mailman.videolan.org/listinfo/vlc-devel

-- 
Envoyé de mon appareil Android avec Courriel K-9 Mail. Veuillez excuser ma brièveté.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20190620/8714950b/attachment.html>


More information about the vlc-devel mailing list