[vlc-devel] [PATCH] bluray: set audio/spu stream languages

Rémi Denis-Courmont remi at remlab.net
Wed Feb 5 23:15:59 CET 2014


Le mercredi 5 février 2014, 01:30:12 Petri Hintukainen a écrit :
> ---
>  modules/access/bluray.c | 26 ++++++++++++++++++++++++++
>  1 file changed, 26 insertions(+)
> 
> diff --git a/modules/access/bluray.c b/modules/access/bluray.c
> index 71278ee..a358f5a 100644
> --- a/modules/access/bluray.c
> +++ b/modules/access/bluray.c
> @@ -507,11 +507,30 @@ static int  findEsPairIndexByEs(demux_sys_t *p_sys,
> es_out_id_t *p_es) return -1;
>  }
> 
> +static void setStreamLang(es_format_t *p_fmt,
> +                          BLURAY_STREAM_INFO *p_streams, int

const?

> i_stream_count)
> +{
> +    for (int i = 0; i < i_stream_count; i++) {
> +        if (p_fmt->i_id == p_streams[i].pid) {
> +            free(p_fmt->psz_language);
> +            p_fmt->psz_language = malloc( 4 );
> +            memcpy(p_fmt->psz_language, p_streams[i].lang, 4);

strndup() is your ystäväsi.

> +            return;
> +        }
> +    }
> +}
> +
>  static es_out_id_t *esOutAdd(es_out_t *p_out, const es_format_t *p_fmt)
>  {
>      demux_sys_t *p_sys = p_out->p_sys->p_demux->p_sys;
> +    BLURAY_TITLE_INFO *title_info = bd_get_playlist_info(p_sys->bluray,
> p_sys->i_playlist, 0);
> +    BLURAY_CLIP_INFO *clip_info = NULL;
>      es_format_t fmt;
> 
> +    if (title_info && p_sys->i_current_clip < title_info->clip_count) {
> +        clip_info = &title_info->clips[p_sys->i_current_clip];
> +    }
> +
>      es_format_Copy(&fmt, p_fmt);
>      switch (fmt.i_cat) {
>      case VIDEO_ES:
> @@ -521,11 +540,18 @@ static es_out_id_t *esOutAdd(es_out_t *p_out, const
> es_format_t *p_fmt) case AUDIO_ES:
>          if (p_sys->i_audio_stream != -1 && p_sys->i_audio_stream !=
> p_fmt->i_id) fmt.i_priority = ES_PRIORITY_NOT_SELECTABLE;
> +        if (clip_info)
> +            setStreamLang(&fmt, clip_info->audio_streams,
> clip_info->audio_stream_count); break ;
>      case SPU_ES:
> +        if (clip_info)
> +            setStreamLang(&fmt, clip_info->pg_streams,
> clip_info->pg_stream_count); break ;
>      }
> 
> +    if (title_info)
> +        bd_free_title_info(title_info);
> +
>      es_out_id_t *p_es = es_out_Add(p_out->p_sys->p_demux->out, &fmt);
>      if (p_fmt->i_id >= 0) {
>          /* Ensure we are not overriding anything */

-- 
Rémi Denis-Courmont
http://www.remlab.net/




More information about the vlc-devel mailing list