vlc | branch: master | Rafaël Carré <[email protected]> | Thu Feb 9 22:58:00 2012 -0500| [b8774b3c1a183e41dc8b9e7be55e48cc10ddac91] | committer: Rafaël Carré
TS mux: simplify language setup > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b8774b3c1a183e41dc8b9e7be55e48cc10ddac91 --- modules/mux/mpeg/ts.c | 86 +++++++++++++++++-------------------------------- 1 files changed, 30 insertions(+), 56 deletions(-) diff --git a/modules/mux/mpeg/ts.c b/modules/mux/mpeg/ts.c index a42c892..83cb031 100644 --- a/modules/mux/mpeg/ts.c +++ b/modules/mux/mpeg/ts.c @@ -903,6 +903,26 @@ static int Control( sout_mux_t *p_mux, int i_query, va_list args ) } } +/* returns a pointer to a valid string, with length 0 or 3 */ +static const char *GetIso639_2LangCode(const char *lang) +{ + const iso639_lang_t *pl; + + if (strlen(lang) == 2) + { + pl = GetLang_1(lang); + } + else + { + pl = GetLang_2B(lang); /* try native code first */ + if (!*pl->psz_iso639_2T) + pl = GetLang_2T(lang); /* else fallback to english code */ + + } + + return pl->psz_iso639_2T; /* returns the english code */ +} + /***************************************************************************** * AddStream: called for each stream addition *****************************************************************************/ @@ -1029,72 +1049,26 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input ) } p_stream->i_langs = 1+p_input->p_fmt->i_extra_languages; - p_stream->lang = malloc(p_stream->i_langs*3); + p_stream->lang = calloc(1, p_stream->i_langs*3); if( !p_stream->lang ) { free( p_stream ); return VLC_ENOMEM; } - p_stream->lang[0] = - p_stream->lang[1] = - p_stream->lang[2] = '\0'; - if( p_input->p_fmt->psz_language ) - { - char *psz = p_input->p_fmt->psz_language; - const iso639_lang_t *pl = NULL; - - if( strlen( psz ) == 2 ) - { - pl = GetLang_1( psz ); - } - else if( strlen( psz ) == 3 ) - { - pl = GetLang_2B( psz ); - if( !strcmp( pl->psz_iso639_1, "??" ) ) - { - pl = GetLang_2T( psz ); - } - } - if( pl && strcmp( pl->psz_iso639_1, "??" ) ) - { - p_stream->lang[0] = pl->psz_iso639_2T[0]; - p_stream->lang[1] = pl->psz_iso639_2T[1]; - p_stream->lang[2] = pl->psz_iso639_2T[2]; + for (int i = 0; i < p_stream->i_langs; i++) { + char *lang = (i == 0) + ? p_input->p_fmt->psz_language + : p_input->p_fmt->p_extra_languages[i-1].psz_language; - msg_Dbg( p_mux, " - lang=%c%c%c", - p_stream->lang[0], p_stream->lang[1], - p_stream->lang[2] ); - } - } - for (int i = 1; i < p_stream->i_langs; i++) { - char *psz = p_input->p_fmt->p_extra_languages[i-1].psz_language; - if (!psz) + if (!lang) continue; - const iso639_lang_t *pl = NULL; - - if( strlen( psz ) == 2 ) + const char *code = GetIso639_2LangCode(lang); + if (*code) { - pl = GetLang_1( psz ); - } - else if( strlen( psz ) == 3 ) - { - pl = GetLang_2B( psz ); - if( !strcmp( pl->psz_iso639_1, "??" ) ) - { - pl = GetLang_2T( psz ); - } - } - if( pl && strcmp( pl->psz_iso639_1, "??" ) ) - { - p_stream->lang[i*3+0] = pl->psz_iso639_2T[0]; - p_stream->lang[i*3+1] = pl->psz_iso639_2T[1]; - p_stream->lang[i*3+2] = pl->psz_iso639_2T[2]; - - msg_Dbg( p_mux, " - lang=%c%c%c", - p_stream->lang[i*3+0], p_stream->lang[i*3+1], - p_stream->lang[i*3+2] ); + memcpy(&p_stream->lang[i*3], code, 3); + msg_Dbg( p_mux, " - lang=%3.3s", &p_stream->lang[i*3] ); } } _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
