[vlc-devel] [PATCH] stream: remove anonymous union

Thomas Guillem thomas at gllm.fr
Sun Oct 4 21:08:06 CEST 2020


LGTM

On Sat, Oct 3, 2020, at 12:04, Romain Vimont wrote:
> The two fields of the union have types demux_t and stream_t, which are
> the same type (demux_t is a typedef of stream_t).
> ---
>  include/vlc_stream.h                          | 27 ++++-------
>  modules/demux/filter/noseek.c                 |  6 +--
>  .../chromecast/chromecast_demux.cpp           | 46 +++++++++----------
>  src/input/demux.c                             |  2 +-
>  4 files changed, 36 insertions(+), 45 deletions(-)
> 
> diff --git a/include/vlc_stream.h b/include/vlc_stream.h
> index 5627545df5..2eb56868ca 100644
> --- a/include/vlc_stream.h
> +++ b/include/vlc_stream.h
> @@ -53,24 +53,15 @@ struct stream_t
>      bool         b_preparsing; /**< True if this access is used to preparse */
>      input_item_t *p_input_item;/**< Input item (can be NULL) */
>  
> -    union {
> -        /**
> -         * Input stream
> -         *
> -         * Depending on the module capability:
> -         * - "stream filter" or "demux": input byte stream (not NULL)
> -         * - "access": a NULL pointer
> -         * - "demux_filter": undefined
> -         */
> -        stream_t    *s;
> -        /**
> -         * Input demuxer
> -         *
> -         * If the module capability is "demux_filter", this is the upstream
> -         * demuxer or demux filter. Otherwise, this is undefined.
> -         */
> -        demux_t *p_next;
> -    };
> +    /**
> +     * Input stream
> +     *
> +     * Depending on the module capability:
> +     * - "stream filter" or "demux": input byte stream (not NULL)
> +     * - "access": a NULL pointer
> +     * - "demux_filter": upstream demuxer or demux filter
> +     */
> +    stream_t *s;
>  
>      /* es output */
>      es_out_t    *out;   /* our p_es_out */
> diff --git a/modules/demux/filter/noseek.c b/modules/demux/filter/noseek.c
> index 906da61f78..ed6d9ba151 100644
> --- a/modules/demux/filter/noseek.c
> +++ b/modules/demux/filter/noseek.c
> @@ -28,7 +28,7 @@
>  
>  static int Demux(demux_t *demux)
>  {
> -    return demux_Demux(demux->p_next);
> +    return demux_Demux(demux->s);
>  }
>  
>  static int Control(demux_t *demux, int query, va_list args)
> @@ -48,7 +48,7 @@ static int Control(demux_t *demux, int query, va_list args)
>          {
>              unsigned *restrict pf = va_arg(args, unsigned *);
>  
> -            if (demux_Control(demux->p_next, DEMUX_TEST_AND_CLEAR_FLAGS, pf))
> +            if (demux_Control(demux->s, DEMUX_TEST_AND_CLEAR_FLAGS, pf))
>                  *pf = 0;
>              *pf &= ~(INPUT_UPDATE_TITLE|INPUT_UPDATE_SEEKPOINT|
>                       INPUT_UPDATE_TITLE_LIST);
> @@ -56,7 +56,7 @@ static int Control(demux_t *demux, int query, va_list args)
>          }
>  
>          default:
> -            return demux_vaControl(demux->p_next, query, args);
> +            return demux_vaControl(demux->s, query, args);
>      }
>  
>      return VLC_SUCCESS;
> diff --git a/modules/stream_out/chromecast/chromecast_demux.cpp 
> b/modules/stream_out/chromecast/chromecast_demux.cpp
> index 6bfc4fa9b0..79c87136ba 100644
> --- a/modules/stream_out/chromecast/chromecast_demux.cpp
> +++ b/modules/stream_out/chromecast/chromecast_demux.cpp
> @@ -56,7 +56,7 @@ struct demux_cc
>          vlc_meta_t *p_meta = vlc_meta_New();
>          if( likely(p_meta != NULL) )
>          {
> -            input_item_t *p_item = p_demux->p_next->p_input_item;
> +            input_item_t *p_item = p_demux->s->p_input_item;
>              if( p_item )
>              {
>                  /* Favor Meta from the input item of the input_thread 
> since
> @@ -81,24 +81,24 @@ struct demux_cc
>                  }
>                  p_renderer->pf_set_meta( p_renderer->p_opaque, p_meta 
> );
>              }
> -            else if (demux_Control( p_demux->p_next, DEMUX_GET_META, 
> p_meta) == VLC_SUCCESS)
> +            else if (demux_Control( p_demux->s, DEMUX_GET_META, 
> p_meta) == VLC_SUCCESS)
>                  p_renderer->pf_set_meta( p_renderer->p_opaque, p_meta 
> );
>              else
>                  vlc_meta_Delete( p_meta );
>          }
>  
> -        if (demux_Control( p_demux->p_next, DEMUX_CAN_SEEK, 
> &m_can_seek ) != VLC_SUCCESS)
> +        if (demux_Control( p_demux->s, DEMUX_CAN_SEEK, &m_can_seek ) 
> != VLC_SUCCESS)
>              m_can_seek = false;
> -        if (demux_Control( p_demux->p_next, DEMUX_GET_LENGTH, 
> &m_length ) != VLC_SUCCESS)
> +        if (demux_Control( p_demux->s, DEMUX_GET_LENGTH, &m_length ) 
> != VLC_SUCCESS)
>              m_length = -1;
>  
>          int i_current_title;
> -        if( demux_Control( p_demux->p_next, DEMUX_GET_TITLE,
> +        if( demux_Control( p_demux->s, DEMUX_GET_TITLE,
>                             &i_current_title ) == VLC_SUCCESS )
>          {
>              input_title_t** pp_titles;
>              int i_nb_titles, i_title_offset, i_chapter_offset;
> -            if( demux_Control( p_demux->p_next, DEMUX_GET_TITLE_INFO, 
> &pp_titles,
> +            if( demux_Control( p_demux->s, DEMUX_GET_TITLE_INFO, 
> &pp_titles,
>                                &i_nb_titles, &i_title_offset,
>                                &i_chapter_offset ) == VLC_SUCCESS )
>              {
> @@ -123,13 +123,13 @@ struct demux_cc
>  
>                  if( b_is_interactive == true )
>                  {
> -                    demux_Control( p_demux->p_next, DEMUX_SET_TITLE,
> +                    demux_Control( p_demux->s, DEMUX_SET_TITLE,
>                                     i_longest_title );
>                  }
>              }
>          }
>  
> -        es_out_Control( p_demux->p_next->out, ES_OUT_RESET_PCR );
> +        es_out_Control( p_demux->s->out, ES_OUT_RESET_PCR );
>  
>          p_renderer->pf_set_demux_enabled(p_renderer->p_opaque, true,
>                                           on_paused_changed_cb, p_demux);
> @@ -152,10 +152,10 @@ struct demux_cc
>  
>      void initTimes()
>      {
> -        if( demux_Control( p_demux->p_next, DEMUX_GET_TIME, 
> &m_start_time ) != VLC_SUCCESS )
> +        if( demux_Control( p_demux->s, DEMUX_GET_TIME, &m_start_time ) 
> != VLC_SUCCESS )
>              m_start_time = -1;
>  
> -        if( demux_Control( p_demux->p_next, DEMUX_GET_POSITION, 
> &m_start_pos ) != VLC_SUCCESS )
> +        if( demux_Control( p_demux->s, DEMUX_GET_POSITION, 
> &m_start_pos ) != VLC_SUCCESS )
>              m_start_pos = -1.0f;
>  
>          m_last_time = m_start_time;
> @@ -212,23 +212,23 @@ struct demux_cc
>  
>      void seekBack( vlc_tick_t time, double pos )
>      {
> -        es_out_Control( p_demux->p_next->out, ES_OUT_RESET_PCR );
> +        es_out_Control( p_demux->s->out, ES_OUT_RESET_PCR );
>  
>          if( m_can_seek )
>          {
>              int ret = VLC_EGENERIC;
>              if( time >= 0 )
> -                ret = demux_Control( p_demux->p_next, DEMUX_SET_TIME, 
> time, false );
> +                ret = demux_Control( p_demux->s, DEMUX_SET_TIME, time, 
> false );
>  
>              if( ret != VLC_SUCCESS && pos >= 0 )
> -                demux_Control( p_demux->p_next, DEMUX_SET_POSITION, 
> pos, false );
> +                demux_Control( p_demux->s, DEMUX_SET_POSITION, pos, 
> false );
>          }
>      }
>  
>      int Demux()
>      {
>          if ( !m_enabled )
> -            return demux_Demux( p_demux->p_next );
> +            return demux_Demux( p_demux->s );
>  
>          /* The CC sout is not pacing, so we pace here */
>          int pace = p_renderer->pf_pace( p_renderer->p_opaque );
> @@ -260,7 +260,7 @@ struct demux_cc
>          int ret = VLC_DEMUXER_SUCCESS;
>          if( !m_demux_eof )
>          {
> -            ret = demux_Demux( p_demux->p_next );
> +            ret = demux_Demux( p_demux->s );
>              if( ret != VLC_DEMUXER_EGENERIC
>               && ( m_start_time < 0 || m_start_pos < 0.0f ) )
>                  initTimes();
> @@ -273,7 +273,7 @@ struct demux_cc
>              /* Signal EOF to the sout when the es_out is empty (so when the
>               * DecoderThread fifo are empty) */
>              bool b_empty;
> -            es_out_Control( p_demux->p_next->out, ES_OUT_GET_EMPTY, &b_empty );
> +            es_out_Control( p_demux->s->out, ES_OUT_GET_EMPTY, &b_empty );
>              if( b_empty )
>                  p_renderer->pf_send_input_event( p_renderer->p_opaque,
>                                                   CC_INPUT_EVENT_EOF,
> @@ -292,7 +292,7 @@ struct demux_cc
>      int Control( demux_t *p_demux_filter, int i_query, va_list args )
>      {
>          if( !m_enabled && i_query != DEMUX_FILTER_ENABLE )
> -            return demux_vaControl( p_demux_filter->p_next, i_query, args );
> +            return demux_vaControl( p_demux->s, i_query, args );
>  
>          switch (i_query)
>          {
> @@ -322,7 +322,7 @@ struct demux_cc
>              va_list ap;
>  
>              va_copy( ap, args );
> -            ret = demux_vaControl( p_demux_filter->p_next, i_query, args );
> +            ret = demux_vaControl( p_demux->s, i_query, args );
>              if( ret == VLC_SUCCESS )
>                  m_length = *va_arg( ap, vlc_tick_t * );
>              va_end( ap );
> @@ -335,7 +335,7 @@ struct demux_cc
>              va_list ap;
>  
>              va_copy( ap, args );
> -            ret = demux_vaControl( p_demux_filter->p_next, i_query, 
> args );
> +            ret = demux_vaControl( p_demux->s, i_query, args );
>              if( ret == VLC_SUCCESS )
>                  m_can_seek = *va_arg( ap, bool* );
>              va_end( ap );
> @@ -346,7 +346,7 @@ struct demux_cc
>          {
>              double pos = va_arg( args, double );
>              /* Force unprecise seek */
> -            int ret = demux_Control( p_demux->p_next, 
> DEMUX_SET_POSITION, pos, false );
> +            int ret = demux_Control( p_demux->s, DEMUX_SET_POSITION, 
> pos, false );
>              if( ret != VLC_SUCCESS )
>                  return ret;
>  
> @@ -358,7 +358,7 @@ struct demux_cc
>          {
>              vlc_tick_t time = va_arg( args, vlc_tick_t );
>              /* Force unprecise seek */
> -            int ret = demux_Control( p_demux->p_next, DEMUX_SET_TIME, 
> time, false );
> +            int ret = demux_Control( p_demux->s, DEMUX_SET_TIME, time, 
> false );
>              if( ret != VLC_SUCCESS )
>                  return ret;
>  
> @@ -409,7 +409,7 @@ struct demux_cc
>              return VLC_SUCCESS;
>          }
>  
> -        return demux_vaControl( p_demux_filter->p_next, i_query, args );
> +        return demux_vaControl( p_demux->s, i_query, args );
>      }
>  
>  protected:
> @@ -428,7 +428,7 @@ protected:
>  static void on_paused_changed_cb( void *data, bool paused )
>  {
>      demux_t *p_demux = reinterpret_cast<demux_t*>(data);
> -    vlc_object_t *obj = vlc_object_parent(p_demux->p_next);
> +    vlc_object_t *obj = vlc_object_parent(p_demux->s);
>  
>      /* XXX: Ugly: Notify the parent of the input_thread_t that the 
> corks state
>       * changed */
> diff --git a/src/input/demux.c b/src/input/demux.c
> index 44a7c440e7..a1e081b957 100644
> --- a/src/input/demux.c
> +++ b/src/input/demux.c
> @@ -448,7 +448,7 @@ static demux_t *demux_FilterNew( demux_t *p_next, 
> const char *p_name )
>          return NULL;
>  
>      priv = vlc_stream_Private(p_demux);
> -    p_demux->p_next       = p_next;
> +    p_demux->s            = p_next;
>      p_demux->p_input_item = NULL;
>      p_demux->p_sys        = NULL;
>      p_demux->psz_name     = NULL;
> -- 
> 2.28.0
> 
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel


More information about the vlc-devel mailing list