[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