[vlc-commits] [Git][videolan/vlc][3.0.x] 3 commits: demux: mkv: use "eng" as the default language.

Felix Paul Kühne (@fkuehne) gitlab at videolan.org
Thu Mar 19 09:23:06 UTC 2026



Felix Paul Kühne pushed to branch 3.0.x at VideoLAN / VLC


Commits:
a064b6c8 by Steve Lhomme at 2026-03-19T09:55:22+01:00
demux: mkv: use "eng" as the default language.

For each track the language element needs to be present of the default value is "eng" [^1].

[^1]: https://www.rfc-editor.org/rfc/rfc9559#section-5.1.4.1.19

(cherry picked from commit e99cddb6e79a0c0be7ae6eece846f15c4d7bf228)

- - - - -
10c2a884 by Steve Lhomme at 2026-03-19T09:55:22+01:00
demux: mkv: handle the IETF language with more priority than the old language element

See [^1].

[^1]: https://www.rfc-editor.org/rfc/rfc9559#language-codes

(cherry picked from commit 686d636a9ebdd9cd47b9ae6ba16c84d7a0fc99bf) (edited)
edited:
- VLC 3 doesn't handle the pose value
- VLC 3 doesn't have the zlib fix

- - - - -
f2c38408 by Steve Lhomme at 2026-03-19T09:55:22+01:00
demux: mkv: fix default language leak

Regression from 686d636a9ebdd9cd47b9ae6ba16c84d7a0fc99bf

(cherry picked from commit 1ffcd7d86ba4ce246563d71069227aa5dff0257f) (rebased)
rebased:
- VLC 3 doesn't have the patch that requires vlc_find_iso639()

- - - - -


2 changed files:

- modules/demux/mkv/matroska_segment_parse.cpp
- modules/demux/mkv/mkv.cpp


Changes:

=====================================
modules/demux/mkv/matroska_segment_parse.cpp
=====================================
@@ -242,6 +242,8 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
       demux_t            * p_demuxer;
       bool&                bSupported;
       int                  level;
+      std::string          lang;
+      bool                 lang_is_ietf;
       struct {
         unsigned int i_crop_right;
         unsigned int i_crop_left;
@@ -253,7 +255,7 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
       } track_video_info;
 
     } metadata_payload = {
-      this, p_track, &sys.demuxer, bSupported, 3, { }
+      this, p_track, &sys.demuxer, bSupported, 3, "eng", false, { }
     };
 
     MKV_SWITCH_CREATE( EbmlTypeDispatcher, MetaDataHandlers, MetaDataCapture )
@@ -352,12 +354,25 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
         }
         E_CASE( KaxTrackLanguage, lang )
         {
-            free( vars.tk->fmt.psz_language );
             const std::string slang ( lang );
             size_t pos = slang.find_first_of( '-' );
-            vars.tk->fmt.psz_language = pos != std::string::npos ? strndup( slang.c_str (), pos ) : strdup( slang.c_str() );
-            debug( vars, "Track Language=`%s'", vars.tk->fmt.psz_language ? vars.tk->fmt.psz_language : "(null)" );
+            const std::string l = std::string::npos ? slang.substr(0, pos) : slang;
+            debug( vars, "Track Language=`%s'", !l.empty() ? l.c_str() : "(null)" );
+            if (!vars.lang_is_ietf)
+            {
+                vars.lang = l;
+            }
         }
+#if LIBMATROSKA_VERSION >= 0x010406
+        E_CASE( KaxLanguageIETF, lang )
+        {
+            vars.lang_is_ietf = true;
+            const std::string slang ( lang );
+            size_t pos = slang.find_first_of( '-' );
+            vars.lang = pos != std::string::npos ? slang.substr(0, pos) : slang;
+            debug( vars, "IETF Track Language=`%s'", !vars.lang.empty() ? vars.lang.c_str() : "(null)" );
+        }
+#endif
         E_CASE( KaxCodecID, codecid )
         {
             vars.tk->codec = std::string( codecid );
@@ -893,6 +908,9 @@ void matroska_segment_c::ParseTrackEntry( const KaxTrackEntry *m )
 
     if ( bSupported )
     {
+        free(p_track->fmt.psz_language);
+        p_track->fmt.psz_language = strdup(metadata_payload.lang.c_str());
+
 #ifdef HAVE_ZLIB_H
         if( p_track->i_compression_type == MATROSKA_COMPRESSION_ZLIB &&
             p_track->i_encoding_scope & MATROSKA_ENCODING_SCOPE_PRIVATE &&


=====================================
modules/demux/mkv/mkv.cpp
=====================================
@@ -853,7 +853,7 @@ mkv_track_t::mkv_track_t(enum es_format_category_e es_cat) :
             /* fall through */
         case VIDEO_ES:
         case SPU_ES:
-            fmt.psz_language = strdup("English");
+            fmt.psz_language = strdup("eng");
             break;
         default:
             // no language needed



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/217bbf046d702f431f7e8923cc94372819b090b1...f2c3840867ec58a98bc37ca8a975e7c7e5c5e437

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/217bbf046d702f431f7e8923cc94372819b090b1...f2c3840867ec58a98bc37ca8a975e7c7e5c5e437
You're receiving this email because of your account on code.videolan.org.




More information about the vlc-commits mailing list