[vlc-commits] TS mux: simplify language setup
Rafaël Carré
git at videolan.org
Fri Feb 10 08:26:39 CET 2012
vlc | branch: master | Rafaël Carré <funman at videolan.org> | 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] );
}
}
More information about the vlc-commits
mailing list