diff --git a/command.c b/command.c index c10ee903ca..0157f971b3 100644 --- a/command.c +++ b/command.c @@ -810,8 +810,9 @@ static int mp_property_audio(m_option_t * prop, int action, void *arg, *(char **) arg = strdup(MSGTR_Disabled); else { char lang[40] = MSGTR_Unknown; - if (mpctx->demuxer->type == DEMUXER_TYPE_MATROSKA) - demux_mkv_get_audio_lang(mpctx->demuxer, audio_id, lang, 9); + sh_audio_t* sh = mpctx->sh_audio; + if (sh && sh->lang) + av_strlcpy(lang, sh->lang, 40); #ifdef USE_DVDREAD else if (mpctx->stream->type == STREAMTYPE_DVD) { int code = dvd_lang_from_aid(mpctx->stream, audio_id); diff --git a/libmpdemux/demux_lavf.c b/libmpdemux/demux_lavf.c index bd3e0cb8cd..c7eeae7fbb 100644 --- a/libmpdemux/demux_lavf.c +++ b/libmpdemux/demux_lavf.c @@ -335,6 +335,8 @@ static void handle_stream(demuxer_t *demuxer, AVFormatContext *avfc, int i) { sh_audio->format = 0x7; break; } + if (st->language) + sh_audio->lang = strdup(st->language); if(mp_msg_test(MSGT_HEADER,MSGL_V) ) print_wave_header(sh_audio->wf, MSGL_V); if((audio_lang && st->language[0] && !strncmp(audio_lang, st->language, 3)) || (demuxer->audio->id == i || demuxer->audio->id == -1)) { diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c index 70c8b89f4d..c0ac842eca 100644 --- a/libmpdemux/demux_mkv.c +++ b/libmpdemux/demux_mkv.c @@ -1873,6 +1873,8 @@ demux_mkv_open_audio (demuxer_t *demuxer, mkv_track_t *track, int aid) if(!sh_a) return 1; mkv_d->audio_tracks[mkv_d->last_aid] = track->tnum; + if (track->language && (strcmp(track->language, "und") != 0)) + sh_a->lang = strdup(track->language); sh_a->ds = demuxer->audio; sh_a->wf = malloc (sizeof (WAVEFORMATEX)); if (track->ms_compat && (track->private_size >= sizeof(WAVEFORMATEX))) @@ -3502,27 +3504,6 @@ demux_mkv_get_sub_lang(demuxer_t *demuxer, int track_num, char *lang, av_strlcpy(lang, track->language, maxlen); } -/** \brief Get the language code for an audio track. - - Retrieves the language code for an audio track if it is known. - If the language code is "und" then do not copy it ("und" = "undefined"). - - \param demuxer The demuxer to work on - \param track_num The n'th audio track to get the language from - \param lang Store the language here - \param maxlen The maximum number of characters to copy into lang -*/ -void -demux_mkv_get_audio_lang(demuxer_t *demuxer, int track_num, char *lang, - int maxlen) -{ - mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv; - mkv_track_t *track = demux_mkv_find_track_by_num (mkv_d, track_num, MATROSKA_TRACK_AUDIO); - if (track && track->language && strcmp(track->language, "und")) - av_strlcpy(lang, track->language, maxlen); -} - - const demuxer_desc_t demuxer_desc_matroska = { "Matroska demuxer", "mkv", diff --git a/libmpdemux/matroska.h b/libmpdemux/matroska.h index d4238ff90c..bbdc9d8424 100644 --- a/libmpdemux/matroska.h +++ b/libmpdemux/matroska.h @@ -62,8 +62,6 @@ #define MKV_S_ASS "S_ASS" // Deprecated int demux_mkv_change_subs(demuxer_t *demuxer, int new_num); -void demux_mkv_get_audio_lang(demuxer_t *demuxer, int track_num, char *lang, - int maxlen); void demux_mkv_get_sub_lang(demuxer_t *demuxer, int track_num, char *lang, int maxlen);