[vlc-devel] [PATCH 2/2] demux: asf: do ES audio selection for mms (fix #8797, #3400, #3797)

David Glaude david.glaude at gmail.com
Sun Feb 15 17:38:10 CET 2015


Dear,

I am afraid this or some other change in modules/access/mms/mmsh.c or
 modules/demux/asf/asf.c


David Glaude

2013-12-03 19:05 GMT+01:00 Francois Cartegnie <fcvlcdev at free.fr>:

> ---
>  modules/access/mms/mmsh.c | 20 ++++++++++++++++++++
>  modules/demux/asf/asf.c   | 34 ++++++++++++++++++++++++++--------
>  2 files changed, 46 insertions(+), 8 deletions(-)
>
> diff --git a/modules/access/mms/mmsh.c b/modules/access/mms/mmsh.c
> index d354d28..414dfd4 100644
> --- a/modules/access/mms/mmsh.c
> +++ b/modules/access/mms/mmsh.c
> @@ -261,6 +261,26 @@ static int Control( access_t *p_access, int i_query,
> va_list args )
>              *pb_bool =  p_sys->asfh.stream[i_int].i_selected ? true :
> false;
>              break;
>
> +        case ACCESS_SET_PRIVATE_ID_STATE:
> +            i_int = (int)va_arg( args, int );
> +            b_bool = (bool)va_arg( args, int );
> +            if( (i_int < 0) || (i_int > 127) )
> +                return VLC_EGENERIC;
> +            else
> +            {
> +                int i_cat = p_sys->asfh.stream[i_int].i_cat;
> +                for ( int i=0; i< 128; i++ )
> +                {
> +                    /* First unselect all streams from the same cat */
> +                    if ( i_cat == p_sys->asfh.stream[i].i_cat )
> +                        p_sys->asfh.stream[i].i_selected = false;
> +                }
> +                p_sys->asfh.stream[i_int].i_selected = true;
> +                Stop( p_access );
> +                Seek( p_access, p_access->info.i_pos );
> +                return VLC_SUCCESS;
> +            }
> +
>          case ACCESS_SET_PAUSE_STATE:
>              b_bool = (bool)va_arg( args, int );
>              if( b_bool )
> diff --git a/modules/demux/asf/asf.c b/modules/demux/asf/asf.c
> index f169d37..bde94e6 100644
> --- a/modules/demux/asf/asf.c
> +++ b/modules/demux/asf/asf.c
> @@ -354,6 +354,7 @@ static int Control( demux_t *p_demux, int i_query,
> va_list args )
>      demux_sys_t *p_sys = p_demux->p_sys;
>      vlc_meta_t  *p_meta;
>      int64_t     i64, *pi64;
> +    int         i;
>      double      f, *pf;
>
>      switch( i_query )
> @@ -388,6 +389,20 @@ static int Control( demux_t *p_demux, int i_query,
> va_list args )
>          }
>          return SeekPercent( p_demux, i_query, args );
>
> +    case DEMUX_SET_ES:
> +    {
> +        i = (int)va_arg( args, int );
> +        int i_ret = stream_Control( p_demux->s,
> +                                    STREAM_SET_PRIVATE_ID_STATE, i, true
> );
> +        if ( i_ret == VLC_SUCCESS )
> +        {
> +            SeekPrepare( p_demux );
> +            p_sys->i_seek_track = 0;
> +            WaitKeyframe( p_demux );
> +        }
> +        return i_ret;
> +    }
> +
>      case DEMUX_GET_POSITION:
>          if( p_sys->i_time < 0 ) return VLC_EGENERIC;
>          if( p_sys->i_length > 0 )
> @@ -1003,15 +1018,18 @@ static int DemuxInit( demux_t *p_demux )
>          tk->p_esp = NULL;
>          tk->p_frame = NULL;
>
> -        /* Check (in case of mms) if this track is selected (ie will
> receive data) */
> -        if( !stream_Control( p_demux->s, STREAM_GET_PRIVATE_ID_STATE,
> -                             (int) p_sp->i_stream_number,
> &b_access_selected ) &&
> -            !b_access_selected )
> +        if ( strncmp( p_demux->psz_access, "mms", 3 ) )
>          {
> -            tk->i_cat = UNKNOWN_ES;
> -            msg_Dbg( p_demux, "ignoring not selected stream(ID:%u) (by
> access)",
> -                     p_sp->i_stream_number );
> -            continue;
> +            /* Check (not mms) if this track is selected (ie will receive
> data) */
> +            if( !stream_Control( p_demux->s, STREAM_GET_PRIVATE_ID_STATE,
> +                                 (int) p_sp->i_stream_number,
> &b_access_selected ) &&
> +                !b_access_selected )
> +            {
> +                tk->i_cat = UNKNOWN_ES;
> +                msg_Dbg( p_demux, "ignoring not selected stream(ID:%u)
> (by access)",
> +                         p_sp->i_stream_number );
> +                continue;
> +            }
>          }
>
>          /* Find the associated extended_stream_properties if any */
> --
> 1.8.3.1
>
> _______________________________________________
> vlc-devel mailing list
> To unsubscribe or modify your subscription options:
> https://mailman.videolan.org/listinfo/vlc-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20150215/d951bec0/attachment.html>


More information about the vlc-devel mailing list