[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