[vlc-commits] [Git][videolan/vlc][3.0.x] 17 commits: demux: mp3: set fourcc to layer

François Cartegnie (@fcartegnie) gitlab at videolan.org
Tue Sep 1 10:30:04 UTC 2026



François Cartegnie pushed to branch 3.0.x at VideoLAN / VLC


Commits:
55f230bc by François Cartegnie at 2026-09-01T10:34:20+02:00
demux: mp3: set fourcc to layer

(adapted from commit c9c65f479b30c442364c996049f8c1cbdc2f3c6c)

- - - - -
d30f606c by François Cartegnie at 2026-09-01T10:34:20+02:00
packetizer: mpegaudio: set fourcc to source

(adapted from commit b10157962bc8f60059350663e90f6d69cb997512)

- - - - -
8ab0daf3 by François Cartegnie at 2026-09-01T10:34:20+02:00
packetizer: mpegaudio: add layer 2 as input

currently can be output by mp4.
mp4->sout

(adapted from commit ff6bd8f227e22939bf166339d58175ee1131882c)

- - - - -
84d04c7f by François Cartegnie at 2026-09-01T10:34:20+02:00
codec: mad: handle MP2 fourcc

(adapted from commit f8bc4734de9a02b1c7a0781f698b9c0e98658cdb)

- - - - -
64bd167f by François Cartegnie at 2026-09-01T10:34:20+02:00
codec: mpg123: handle MP2 fourcc

(adapted from commit 463b4d92eca8c1e6b238dd102e98c4faed145ea8)

- - - - -
2e9ac415 by François Cartegnie at 2026-09-01T10:34:20+02:00
codec: shine: handle MP2 fourcc

(cherry picked from commit acedf1b08cb1259708dd24d8ce876caf65decf0f)

- - - - -
30029275 by François Cartegnie at 2026-09-01T10:34:20+02:00
codec: spdif: handle layer 2

(cherry picked from commit 6fe6385c46077b81c872a5d50e9969a240370406)

- - - - -
39139d9b by François Cartegnie at 2026-09-01T10:34:20+02:00
mux: asf: handle mpeg layer 2

(cherry picked from commit b4b88178a6c19ace0f24c3079a02aab0ee3aaa1d)

- - - - -
2a37c7aa by François Cartegnie at 2026-09-01T10:34:20+02:00
mux: avi: handle lower mpeg audio layers

(cherry picked from commit 292da5cc7af0995de57a3318116ee1cd7c5032db)

- - - - -
ff518dec by François Cartegnie at 2026-09-01T10:34:20+02:00
mux: mp4: handle MP2 fourcc

(adapted from commit 3611c3e837614a405d074ff15bf0f69b51fa7be3)

- - - - -
04a78a37 by François Cartegnie at 2026-09-01T10:34:20+02:00
mux: ts: handle MP2 fourcc

(cherry picked from commit f280ac029598f26b362aaf32abba9290c1e2a16c)

- - - - -
116102e5 by François Cartegnie at 2026-09-01T10:34:20+02:00
sout: chromecast: use switch for codecs list

(cherry picked from commit 5f3170c2f101be283ecb8260a94a982e52262856)
(adapted from commit 8aa667ee32a3b65c401c2d563f33ed47e7c5e3c1)

- - - - -
8a81a3f9 by François Cartegnie at 2026-09-01T10:34:20+02:00
sout: chromecast: handle MP2/MPGA fourcc

(cherry picked from commit ea80086999670e30fc2785e9de64e698f9ba4f92)

- - - - -
fcafd130 by François Cartegnie at 2026-09-01T10:34:20+02:00
mux: ps: map mpeg layer 2/3

- - - - -
7d6b6e31 by François Cartegnie at 2026-09-01T10:34:20+02:00
sout: rtp: map mpeg audio layer 2/3

- - - - -
17a3da79 by François Cartegnie at 2026-09-01T10:34:20+02:00
rtsp vod: map mpeg audio layer 2/3

- - - - -
2d3243f2 by François Cartegnie at 2026-09-01T10:34:20+02:00
sout: record: map mpeg layer audio 2/3

- - - - -


15 changed files:

- modules/codec/mad.c
- modules/codec/mpg123.c
- modules/codec/shine.c
- modules/codec/spdif.c
- modules/demux/mpeg/es.c
- modules/misc/rtsp.c
- modules/mux/asf.c
- modules/mux/avi.c
- modules/mux/mp4/libmp4mux.c
- modules/mux/mpeg/ps.c
- modules/mux/mpeg/ts.c
- modules/packetizer/mpegaudio.c
- modules/stream_out/chromecast/cast.cpp
- modules/stream_out/record.c
- modules/stream_out/rtpfmt.c


Changes:

=====================================
modules/codec/mad.c
=====================================
@@ -245,6 +245,7 @@ static int Open( vlc_object_t *p_this )
     decoder_sys_t *p_sys;
 
     if( ( p_dec->fmt_in.i_codec != VLC_CODEC_MPGA
+     && p_dec->fmt_in.i_codec != VLC_CODEC_MP2
      && p_dec->fmt_in.i_codec != VLC_CODEC_MP3
      && p_dec->fmt_in.i_codec != VLC_FOURCC('m','p','g','3') )
      || p_dec->fmt_in.audio.i_rate == 0


=====================================
modules/codec/mpg123.c
=====================================
@@ -383,6 +383,7 @@ static int OpenDecoder( vlc_object_t *p_this )
     decoder_sys_t *p_sys;
 
     if( p_dec->fmt_in.i_codec != VLC_CODEC_MPGA &&
+        p_dec->fmt_in.i_codec != VLC_CODEC_MP2 &&
         p_dec->fmt_in.i_codec != VLC_CODEC_MP3 )
         return VLC_EGENERIC;
 


=====================================
modules/codec/shine.c
=====================================
@@ -78,7 +78,9 @@ static int OpenEncoder( vlc_object_t *p_this )
     encoder_sys_t *p_sys;
 
     /* shine is an 'MP3' encoder */
-    if( (p_enc->fmt_out.i_codec != VLC_CODEC_MP3 && p_enc->fmt_out.i_codec != VLC_CODEC_MPGA) ||
+    if( (p_enc->fmt_out.i_codec != VLC_CODEC_MP3 &&
+         p_enc->fmt_out.i_codec != VLC_CODEC_MP2 &&
+         p_enc->fmt_out.i_codec != VLC_CODEC_MPGA) ||
         p_enc->fmt_out.audio.i_channels > 2 )
         return VLC_EGENERIC;
 


=====================================
modules/codec/spdif.c
=====================================
@@ -54,6 +54,7 @@ OpenDecoder(vlc_object_t *p_this)
     switch (p_dec->fmt_in.i_codec)
     {
     case VLC_CODEC_MPGA:
+    case VLC_CODEC_MP2:
     case VLC_CODEC_MP3:
         /* Disabled by default */
         if (!p_dec->obj.force)


=====================================
modules/demux/mpeg/es.c
=====================================
@@ -766,10 +766,10 @@ static int MpgaCheckSync( const uint8_t *p_peek )
 
 #define MPGA_VERSION( h )   ( 1 - (((h)>>19)&0x01) )
 #define MPGA_MODE(h)        (((h)>> 6)&0x03)
-
+#define MPGA_LAYER(h)       ( 3 - (((h)>>17)&0x03) )
 static int MpgaGetFrameSamples( uint32_t h )
 {
-    const int i_layer = 3 - (((h)>>17)&0x03);
+    const int i_layer = MPGA_LAYER( h );
     switch( i_layer )
     {
     case 0:
@@ -1017,6 +1017,9 @@ static int MpgaInit( demux_t *p_demux )
     if( !MpgaCheckSync( p_peek ) )
         return VLC_SUCCESS;
 
+    if( MPGA_LAYER( header ) == 2 )
+        p_sys->codec.i_codec = VLC_CODEC_MP3;
+
     /* Xing header */
     const uint8_t *p_xing = p_peek;
     int i_xing = i_peek;


=====================================
modules/misc/rtsp.c
=====================================
@@ -517,6 +517,8 @@ static int MediaAddES( vod_t *p_vod, vod_media_t *p_media, const es_format_t *p_
             p_es->i_channels = p_fmt->audio.i_channels;
             break;
         case VLC_CODEC_MPGA:
+        case VLC_CODEC_MP2:
+        case VLC_CODEC_MP3:
             p_es->i_payload_type = 14;
             p_es->psz_ptname = "MPA";
             break;


=====================================
modules/mux/asf.c
=====================================
@@ -381,6 +381,7 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
                     i_blockalign = 1;
                     i_extra = 12;
                     break;
+                case VLC_CODEC_MP2:
                 case VLC_CODEC_MPGA:
                     tk->psz_name = "MPEG Audio Layer 1/2";
                     tk->i_tag = WAVE_FORMAT_MPEG;


=====================================
modules/mux/avi.c
=====================================
@@ -356,6 +356,11 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
                     p_wf->wFormatTag = WAVE_FORMAT_MPEGLAYER3;
                     p_wf->nBlockAlign= 1;
                     break;
+                case VLC_CODEC_MPGA:
+                case VLC_CODEC_MP2:
+                    p_wf->wFormatTag = WAVE_FORMAT_MPEG;
+                    p_wf->nBlockAlign= 1;
+                    break;
                 case VLC_CODEC_WMA1:
                     p_wf->wFormatTag = WAVE_FORMAT_WMA1;
                     break;


=====================================
modules/mux/mp4/libmp4mux.c
=====================================
@@ -282,6 +282,7 @@ static bo_t *GetESDS(mp4mux_trackinfo_t *p_track)
         i_object_type_indication = 0x40;
         break;
     case VLC_CODEC_MP3:
+    case VLC_CODEC_MP2:
     case VLC_CODEC_MPGA:
         i_object_type_indication =
             p_track->fmt.audio.i_rate < 32000 ? 0x69 : 0x6b;
@@ -858,6 +859,7 @@ static bo_t *GetSounBox(vlc_object_t *p_obj, mp4mux_trackinfo_t *p_track, bool b
     char fcc[4];
 
     if (codec == VLC_CODEC_MPGA ||
+        codec == VLC_CODEC_MP2 ||
         codec == VLC_CODEC_MP3) {
         if (b_mov) {
             b_descr = false;
@@ -1737,6 +1739,7 @@ bool mp4mux_CanMux(vlc_object_t *p_obj, const es_format_t *p_fmt)
     case VLC_CODEC_MP4A:
     case VLC_CODEC_MP4V:
     case VLC_CODEC_MPGA:
+    case VLC_CODEC_MP2:
     case VLC_CODEC_MP3:
     case VLC_CODEC_MPGV:
     case VLC_CODEC_MP2V:


=====================================
modules/mux/mpeg/ps.c
=====================================
@@ -307,6 +307,8 @@ static int AddStream( sout_mux_t *p_mux, sout_input_t *p_input )
                 0xbd00 | StreamIdGet( p_sys->stream_id_a52, 0x80, 0x87 );
             break;
         case VLC_CODEC_MPGA:
+        case VLC_CODEC_MP2:
+        case VLC_CODEC_MP3:
             p_stream->i_stream_id =
                 StreamIdGet( p_sys->stream_id_mpga, 0xc0, 0xcf );
             p_stream->i_stream_type = 0x03; /* ISO/IEC 11172 Audio */
@@ -413,6 +415,8 @@ static void DelStream( sout_mux_t *p_mux, sout_input_t *p_input )
                              p_stream->i_stream_id&0xff );
             break;
         case VLC_CODEC_MPGA:
+        case VLC_CODEC_MP2:
+        case VLC_CODEC_MP3:
             StreamIdRelease( p_sys->stream_id_mpga, 0xc0,
                              p_stream->i_stream_id  );
             break;


=====================================
modules/mux/mpeg/ts.c
=====================================
@@ -1270,8 +1270,9 @@ static bool MuxStreams(sout_mux_t *p_mux )
 
         block_t *p_data;
         if( p_stream == p_pcr_stream || p_sys->b_data_alignment
-             || ((p_input->p_fmt->i_codec != VLC_CODEC_MPGA ) &&
-                 (p_input->p_fmt->i_codec != VLC_CODEC_MP3) ) )
+             || (p_input->p_fmt->i_codec != VLC_CODEC_MPGA &&
+                 p_input->p_fmt->i_codec != VLC_CODEC_MP2 &&
+                 p_input->p_fmt->i_codec != VLC_CODEC_MP3 ) )
         {
             p_data = block_FifoGet( p_input->p_fifo );
             if( p_data->i_dts <= VLC_TICK_INVALID )


=====================================
modules/packetizer/mpegaudio.c
=====================================
@@ -618,8 +618,9 @@ static int Open( vlc_object_t *p_this )
     if( p_dec->fmt_in.i_cat != AUDIO_ES )
         return VLC_EGENERIC;
 
-    if(( p_dec->fmt_in.i_codec != VLC_CODEC_MPGA ) &&
-       ( p_dec->fmt_in.i_codec != VLC_CODEC_MP3 ) )
+    if( p_dec->fmt_in.i_codec != VLC_CODEC_MPGA &&
+        p_dec->fmt_in.i_codec != VLC_CODEC_MP2 &&
+        p_dec->fmt_in.i_codec != VLC_CODEC_MP3 )
     {
         return VLC_EGENERIC;
     }
@@ -643,7 +644,7 @@ static int Open( vlc_object_t *p_this )
     p_sys->i_layer = p_sys->i_bit_rate = 0;
 
     /* Set output properties */
-    p_dec->fmt_out.i_codec = VLC_CODEC_MPGA;
+    p_dec->fmt_out.i_codec = p_dec->fmt_in.i_codec;
     p_dec->fmt_out.audio.i_rate = 0; /* So end_date gets initialized */
 
     /* Set callback */


=====================================
modules/stream_out/chromecast/cast.cpp
=====================================
@@ -794,15 +794,17 @@ bool sout_stream_sys_t::canDecodeVideo( vlc_fourcc_t i_codec ) const
     const bool original_chromecast = name.size() >= suffix.size() &&
         std::equal(suffix.rbegin(), suffix.rend(), name.rbegin());
 
-    if( i_codec == VLC_CODEC_HEVC )
+    switch( i_codec )
     {
-        if( original_chromecast )
-            // Original Chromecasts do not support HEVC
+        case VLC_CODEC_HEVC:
+            return !original_chromecast; // Original Chromecasts do not support HEVC
+        case VLC_CODEC_H264:
+        case VLC_CODEC_VP8:
+        case VLC_CODEC_VP9:
+            return true;
+        default:
             return false;
-        return true;
     }
-    return i_codec == VLC_CODEC_H264
-        || i_codec == VLC_CODEC_VP8 || i_codec == VLC_CODEC_VP9;
 }
 
 bool sout_stream_sys_t::canDecodeAudio( sout_stream_t *p_stream,
@@ -811,19 +813,25 @@ bool sout_stream_sys_t::canDecodeAudio( sout_stream_t *p_stream,
 {
     if( transcoding_state & TRANSCODING_AUDIO )
         return false;
-    if ( i_codec == VLC_CODEC_A52 || i_codec == VLC_CODEC_EAC3 )
-    {
-        return var_InheritBool( p_stream, SOUT_CFG_PREFIX "audio-passthrough" );
-    }
-    if ( i_codec == VLC_FOURCC('h', 'a', 'a', 'c') ||
-            i_codec == VLC_FOURCC('l', 'a', 'a', 'c') ||
-            i_codec == VLC_FOURCC('s', 'a', 'a', 'c') ||
-            i_codec == VLC_CODEC_MP4A )
+    switch( i_codec )
     {
-        return p_fmt->i_channels <= 2;
+        case VLC_CODEC_A52:
+        case VLC_CODEC_EAC3:
+            return var_InheritBool( p_stream, SOUT_CFG_PREFIX "audio-passthrough" );
+        case VLC_FOURCC('h', 'a', 'a', 'c'):
+        case VLC_FOURCC('l', 'a', 'a', 'c'):
+        case VLC_FOURCC('s', 'a', 'a', 'c'):
+        case VLC_CODEC_MP4A:
+            return p_fmt->i_channels <= 2;
+        case VLC_CODEC_VORBIS:
+        case VLC_CODEC_OPUS:
+        case VLC_CODEC_MP3:
+        case VLC_CODEC_MP2:
+        case VLC_CODEC_MPGA:
+            return true;
+        default:
+            return false;
     }
-    return i_codec == VLC_CODEC_VORBIS || i_codec == VLC_CODEC_OPUS ||
-           i_codec == VLC_CODEC_MP3;
 }
 
 void sout_stream_sys_t::stopSoutChain(sout_stream_t *p_stream)


=====================================
modules/stream_out/record.c
=====================================
@@ -265,7 +265,7 @@ typedef struct
  * Do not do non native and non standard association !
  * Muxer will be probe if no entry found */
 static const muxer_properties_t p_muxers[] = {
-    M( "raw", "mp3", 1,         VLC_CODEC_MPGA ),
+    M( "raw", "mp3", 1,         VLC_CODEC_MPGA, VLC_CODEC_MP2, VLC_CODEC_MP3 ),
     M( "raw", "a52", 1,         VLC_CODEC_A52 ),
     M( "raw", "dts", 1,         VLC_CODEC_DTS ),
     M( "raw", "mpc", 1,         VLC_CODEC_MUSEPACK7, VLC_CODEC_MUSEPACK8 ),
@@ -287,7 +287,7 @@ static const muxer_properties_t p_muxers[] = {
                                 VLC_CODEC_SUBT ),
 
     M( "ps", "mpg", 16/* FIXME*/,VLC_CODEC_MPGV,
-                                VLC_CODEC_MPGA, VLC_CODEC_DVD_LPCM, VLC_CODEC_A52,
+                                VLC_CODEC_MPGA, VLC_CODEC_MP2, VLC_CODEC_MP3, VLC_CODEC_DVD_LPCM, VLC_CODEC_A52,
                                 VLC_CODEC_DTS,
                                 VLC_CODEC_SPU ),
 
@@ -298,7 +298,7 @@ static const muxer_properties_t p_muxers[] = {
 
     M( "ts", "ts", 8000,        VLC_CODEC_MPGV,
                                 VLC_CODEC_H264, VLC_CODEC_HEVC,
-                                VLC_CODEC_MPGA, VLC_CODEC_DVD_LPCM, VLC_CODEC_A52,
+                                VLC_CODEC_MPGA, VLC_CODEC_MP2, VLC_CODEC_MP3, VLC_CODEC_DVD_LPCM, VLC_CODEC_A52,
                                 VLC_CODEC_DTS,  VLC_CODEC_MP4A,
                                 VLC_CODEC_DVBS, VLC_CODEC_TELETEXT ),
 


=====================================
modules/stream_out/rtpfmt.c
=====================================
@@ -240,6 +240,8 @@ int rtp_get_fmt( vlc_object_t *obj, const es_format_t *p_fmt, const char *mux,
             rtp_fmt->pf_packetize = rtp_packetize_pcm;
             break;
         case VLC_CODEC_MPGA:
+        case VLC_CODEC_MP2:
+        case VLC_CODEC_MP3:
             rtp_fmt->payload_type = 14;
             rtp_fmt->ptname = "MPA";
             rtp_fmt->clock_rate = 90000; /* not 44100 */



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/5c5212f01b69f5fdd85f672d0cadc7fffb97379b...2d3243f27302c6d296bfa97a2752821f64e2908c

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/5c5212f01b69f5fdd85f672d0cadc7fffb97379b...2d3243f27302c6d296bfa97a2752821f64e2908c
You're receiving this email because of your account on code.videolan.org. Manage all notifications: https://code.videolan.org/-/profile/notifications | Help: https://code.videolan.org/help




More information about the vlc-commits mailing list