avcodecmap: Increase max AAC channels to 16

This is the maximum amount supported by aacenc. 8-channel output fully works.
16-channel also encodes fine, but codec-utils isn't able to parse its channel config,
so output level will not be shown in caps. For that to work, GASpecificConfig parsing
needs to be implemented. It's not a critical issue and can be worked on at a later date.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6375>
This commit is contained in:
Piotr Brzeziński 2024-03-12 12:18:50 +01:00 committed by Tim-Philipp Müller
parent 615b7ca7ca
commit 9048bea3d3
2 changed files with 26 additions and 22 deletions

View file

@ -30510,12 +30510,12 @@
"long-name": "libav AAC (Advanced Audio Coding) encoder", "long-name": "libav AAC (Advanced Audio Coding) encoder",
"pad-templates": { "pad-templates": {
"sink": { "sink": {
"caps": "audio/x-raw:\n channels: [ 1, 6 ]\n rate: { (int)96000, (int)88200, (int)64000, (int)48000, (int)44100, (int)32000, (int)24000, (int)22050, (int)16000, (int)12000, (int)11025, (int)8000, (int)7350 }\n format: F32LE\n layout: interleaved\n", "caps": "audio/x-raw:\n channels: [ 1, 16 ]\n rate: { (int)96000, (int)88200, (int)64000, (int)48000, (int)44100, (int)32000, (int)24000, (int)22050, (int)16000, (int)12000, (int)11025, (int)8000, (int)7350 }\n format: F32LE\n layout: interleaved\n",
"direction": "sink", "direction": "sink",
"presence": "always" "presence": "always"
}, },
"src": { "src": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "src", "direction": "src",
"presence": "always" "presence": "always"
} }
@ -135463,7 +135463,7 @@
"long-name": "libav 3GP2 (3GPP2 file format) muxer", "long-name": "libav 3GP2 (3GPP2 file format) muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/AMR:\n channels: 1\n rate: { (int)8000 }\naudio/AMR-WB:\n channels: 1\n rate: { (int)16000 }\naudio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/AMR:\n channels: 1\n rate: { (int)8000 }\naudio/AMR-WB:\n channels: 1\n rate: { (int)16000 }\naudio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -135527,7 +135527,7 @@
"long-name": "libav 3GP (3GPP file format) muxer (not recommended, use gppmux instead)", "long-name": "libav 3GP (3GPP file format) muxer (not recommended, use gppmux instead)",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/AMR:\n channels: 1\n rate: { (int)8000 }\naudio/AMR-WB:\n channels: 1\n rate: { (int)16000 }\naudio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/AMR:\n channels: 1\n rate: { (int)8000 }\naudio/AMR-WB:\n channels: 1\n rate: { (int)16000 }\naudio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -135645,7 +135645,7 @@
"long-name": "libav ADTS AAC (Advanced Audio Coding) muxer (not recommended, use aacparse instead)", "long-name": "libav ADTS AAC (Advanced Audio Coding) muxer (not recommended, use aacparse instead)",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -136766,7 +136766,7 @@
"long-name": "libav DASH Muxer muxer", "long-name": "libav DASH Muxer muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -137012,7 +137012,7 @@
"long-name": "libav F4V Adobe Flash Video muxer", "long-name": "libav F4V Adobe Flash Video muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -137440,7 +137440,7 @@
"long-name": "libav HDS Muxer muxer", "long-name": "libav HDS Muxer muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -137504,7 +137504,7 @@
"long-name": "libav Apple HTTP Live Streaming muxer", "long-name": "libav Apple HTTP Live Streaming muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -137681,7 +137681,7 @@
"long-name": "libav iPod H.264 MP4 (MPEG-4 Part 14) muxer", "long-name": "libav iPod H.264 MP4 (MPEG-4 Part 14) muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -137804,7 +137804,7 @@
"long-name": "libav ISMV/ISMA (Smooth Streaming) muxer", "long-name": "libav ISMV/ISMA (Smooth Streaming) muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -137981,7 +137981,7 @@
"long-name": "libav LOAS/LATM muxer", "long-name": "libav LOAS/LATM muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -138281,7 +138281,7 @@
"long-name": "libav QuickTime / MOV muxer (not recommended, use qtmux instead)", "long-name": "libav QuickTime / MOV muxer (not recommended, use qtmux instead)",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/x-mulaw:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\naudio/x-alaw:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\naudio/x-adpcm:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n layout: quicktime\naudio/x-mace:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n maceversion: 3\naudio/x-mace:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n maceversion: 6\naudio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\naudio/AMR:\n channels: 1\n rate: { (int)8000 }\naudio/AMR-WB:\n channels: 1\n rate: { (int)16000 }\naudio/x-raw:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n format: S16BE\n layout: interleaved\naudio/x-raw:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n format: S16LE\n layout: interleaved\naudio/mpeg:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n mpegversion: 1\n layer: 3\n", "caps": "audio/x-mulaw:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\naudio/x-alaw:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\naudio/x-adpcm:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n layout: quicktime\naudio/x-mace:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n maceversion: 3\naudio/x-mace:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n maceversion: 6\naudio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\naudio/AMR:\n channels: 1\n rate: { (int)8000 }\naudio/AMR-WB:\n channels: 1\n rate: { (int)16000 }\naudio/x-raw:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n format: S16BE\n layout: interleaved\naudio/x-raw:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n format: S16LE\n layout: interleaved\naudio/mpeg:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n mpegversion: 1\n layer: 3\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -138468,7 +138468,7 @@
"long-name": "libav MP4 (MPEG-4 Part 14) muxer (not recommended, use mp4mux instead)", "long-name": "libav MP4 (MPEG-4 Part 14) muxer (not recommended, use mp4mux instead)",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\naudio/mpeg:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n mpegversion: 1\n layer: 3\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\naudio/mpeg:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n mpegversion: 1\n layer: 3\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -138596,7 +138596,7 @@
"long-name": "libav MPEG-TS (MPEG-2 Transport Stream) muxer (not recommended, use mpegtsmux instead)", "long-name": "libav MPEG-TS (MPEG-2 Transport Stream) muxer (not recommended, use mpegtsmux instead)",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 2 ]\n rate: { (int)48000, (int)44100, (int)32000, (int)24000, (int)22050, (int)16000 }\n mpegversion: 1\n layer: 2\naudio/mpeg:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n mpegversion: 1\n layer: 3\naudio/x-ac3:\n channels: [ 1, 6 ]\n rate: { (int)48000, (int)44100, (int)32000 }\naudio/x-dts:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\naudio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 2 ]\n rate: { (int)48000, (int)44100, (int)32000, (int)24000, (int)22050, (int)16000 }\n mpegversion: 1\n layer: 2\naudio/mpeg:\n channels: [ 1, 2 ]\n rate: [ 4000, 96000 ]\n mpegversion: 1\n layer: 3\naudio/x-ac3:\n channels: [ 1, 6 ]\n rate: { (int)48000, (int)44100, (int)32000 }\naudio/x-dts:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\naudio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -139255,7 +139255,7 @@
"long-name": "libav PSP MP4 (MPEG-4 Part 14) muxer", "long-name": "libav PSP MP4 (MPEG-4 Part 14) muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -139442,7 +139442,7 @@
"long-name": "libav RTSP output muxer", "long-name": "libav RTSP output muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -139506,7 +139506,7 @@
"long-name": "libav SAP output muxer", "long-name": "libav SAP output muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },
@ -139693,7 +139693,7 @@
"long-name": "libav Smooth Streaming Muxer muxer", "long-name": "libav Smooth Streaming Muxer muxer",
"pad-templates": { "pad-templates": {
"audio_%%u": { "audio_%%u": {
"caps": "audio/mpeg:\n channels: [ 1, 6 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n", "caps": "audio/mpeg:\n channels: [ 1, 16 ]\n rate: [ 4000, 96000 ]\n mpegversion: 4\n base-profile: lc\n",
"direction": "sink", "direction": "sink",
"presence": "request" "presence": "request"
}, },

View file

@ -65,7 +65,9 @@ static const struct
AV_CH_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER}, { AV_CH_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_TOP_REAR_CENTER}, {
AV_CH_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT}, { AV_CH_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_TOP_REAR_RIGHT}, {
AV_CH_STEREO_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, { AV_CH_STEREO_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
AV_CH_STEREO_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT} AV_CH_STEREO_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
AV_CH_WIDE_LEFT, GST_AUDIO_CHANNEL_POSITION_WIDE_LEFT}, {
AV_CH_WIDE_RIGHT, GST_AUDIO_CHANNEL_POSITION_WIDE_RIGHT},
}; };
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 28, 100) #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(57, 28, 100)
@ -673,11 +675,13 @@ gst_ff_aud_caps_new (AVCodecContext * context, AVCodec * codec,
/* so we must be after restricted caps in this case */ /* so we must be after restricted caps in this case */
switch (codec_id) { switch (codec_id) {
case AV_CODEC_ID_AAC:
case AV_CODEC_ID_AAC_LATM:
case AV_CODEC_ID_DTS: case AV_CODEC_ID_DTS:
maxchannels = 6; maxchannels = 6;
break; break;
case AV_CODEC_ID_AAC:
case AV_CODEC_ID_AAC_LATM:
maxchannels = 16;
break;
case AV_CODEC_ID_MP2: case AV_CODEC_ID_MP2:
{ {
const static gint l_rates[] = const static gint l_rates[] =