diff --git a/src/misc/coders/Decoders/audio/default.js b/src/misc/coders/Decoders/audio/default.js index 4a47958..2b7a145 100644 --- a/src/misc/coders/Decoders/audio/default.js +++ b/src/misc/coders/Decoders/audio/default.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: [], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/av1_cuvid.js b/src/misc/coders/Decoders/video/av1_cuvid.js index d068401..bba6403 100644 --- a/src/misc/coders/Decoders/video/av1_cuvid.js +++ b/src/misc/coders/Decoders/video/av1_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-hwaccel', 'cuda', '-c:v', 'av1_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/default.js b/src/misc/coders/Decoders/video/default.js index 5c7ec89..18b665d 100644 --- a/src/misc/coders/Decoders/video/default.js +++ b/src/misc/coders/Decoders/video/default.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: [], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/h264_cuvid.js b/src/misc/coders/Decoders/video/h264_cuvid.js index ac5a3d0..b64f25f 100644 --- a/src/misc/coders/Decoders/video/h264_cuvid.js +++ b/src/misc/coders/Decoders/video/h264_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'h264_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/h264_mmal.js b/src/misc/coders/Decoders/video/h264_mmal.js index c62ea64..767cdec 100644 --- a/src/misc/coders/Decoders/video/h264_mmal.js +++ b/src/misc/coders/Decoders/video/h264_mmal.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'h264_mmal'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/hevc_cuvid.js b/src/misc/coders/Decoders/video/hevc_cuvid.js index 51b2079..efe80c4 100644 --- a/src/misc/coders/Decoders/video/hevc_cuvid.js +++ b/src/misc/coders/Decoders/video/hevc_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'hevc_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/mjpeg_cuvid.js b/src/misc/coders/Decoders/video/mjpeg_cuvid.js index 6210c64..6f8a71f 100644 --- a/src/misc/coders/Decoders/video/mjpeg_cuvid.js +++ b/src/misc/coders/Decoders/video/mjpeg_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'mjpeg_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/mpeg1_cuvid.js b/src/misc/coders/Decoders/video/mpeg1_cuvid.js index 57e2f45..3a1e359 100644 --- a/src/misc/coders/Decoders/video/mpeg1_cuvid.js +++ b/src/misc/coders/Decoders/video/mpeg1_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'mpeg1_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/mpeg2_cuvid.js b/src/misc/coders/Decoders/video/mpeg2_cuvid.js index 4ae3263..617a7cb 100644 --- a/src/misc/coders/Decoders/video/mpeg2_cuvid.js +++ b/src/misc/coders/Decoders/video/mpeg2_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'mpeg2_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/mpeg2_mmal.js b/src/misc/coders/Decoders/video/mpeg2_mmal.js index 4e8f103..d53b02c 100644 --- a/src/misc/coders/Decoders/video/mpeg2_mmal.js +++ b/src/misc/coders/Decoders/video/mpeg2_mmal.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'mpeg2_mmal'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/mpeg4_cuvid.js b/src/misc/coders/Decoders/video/mpeg4_cuvid.js index 42f299b..a18a06b 100644 --- a/src/misc/coders/Decoders/video/mpeg4_cuvid.js +++ b/src/misc/coders/Decoders/video/mpeg4_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'mpeg4_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/mpeg4_mmal.js b/src/misc/coders/Decoders/video/mpeg4_mmal.js index 949ab01..314463d 100644 --- a/src/misc/coders/Decoders/video/mpeg4_mmal.js +++ b/src/misc/coders/Decoders/video/mpeg4_mmal.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'mpeg4_mmal'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/nvdec.js b/src/misc/coders/Decoders/video/nvdec.js index 8e92653..9b0b96a 100644 --- a/src/misc/coders/Decoders/video/nvdec.js +++ b/src/misc/coders/Decoders/video/nvdec.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-hwaccel', 'cuda', '-hwaccel_output_format', 'cuda'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/vc1_cuvid.js b/src/misc/coders/Decoders/video/vc1_cuvid.js index 8feec38..cf5df1c 100644 --- a/src/misc/coders/Decoders/video/vc1_cuvid.js +++ b/src/misc/coders/Decoders/video/vc1_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'vc1_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/vc1_mmal.js b/src/misc/coders/Decoders/video/vc1_mmal.js index 614cddd..efa1375 100644 --- a/src/misc/coders/Decoders/video/vc1_mmal.js +++ b/src/misc/coders/Decoders/video/vc1_mmal.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'vc1_mmal'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/videotoolbox.js b/src/misc/coders/Decoders/video/videotoolbox.js index 3bca8d4..b339717 100644 --- a/src/misc/coders/Decoders/video/videotoolbox.js +++ b/src/misc/coders/Decoders/video/videotoolbox.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-hwaccel', 'videotoolbox'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/vp8_cuvid.js b/src/misc/coders/Decoders/video/vp8_cuvid.js index 4ce6c5a..d304200 100644 --- a/src/misc/coders/Decoders/video/vp8_cuvid.js +++ b/src/misc/coders/Decoders/video/vp8_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'vp8_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Decoders/video/vp9_cuvid.js b/src/misc/coders/Decoders/video/vp9_cuvid.js index 9202566..4e0ee52 100644 --- a/src/misc/coders/Decoders/video/vp9_cuvid.js +++ b/src/misc/coders/Decoders/video/vp9_cuvid.js @@ -17,6 +17,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: ['-c:v', 'vp9_cuvid'], + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/audio/aac.js b/src/misc/coders/Encoders/audio/aac.js index 8362a79..b31b899 100644 --- a/src/misc/coders/Encoders/audio/aac.js +++ b/src/misc/coders/Encoders/audio/aac.js @@ -27,6 +27,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/audio/aac_audiotoolbox.js b/src/misc/coders/Encoders/audio/aac_audiotoolbox.js index 81914d7..469e354 100644 --- a/src/misc/coders/Encoders/audio/aac_audiotoolbox.js +++ b/src/misc/coders/Encoders/audio/aac_audiotoolbox.js @@ -27,6 +27,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [['-vsync', 'drop']], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/audio/copy.js b/src/misc/coders/Encoders/audio/copy.js index 7fed3a8..57053c7 100644 --- a/src/misc/coders/Encoders/audio/copy.js +++ b/src/misc/coders/Encoders/audio/copy.js @@ -15,6 +15,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/audio/mp3_libmp3lame.js b/src/misc/coders/Encoders/audio/mp3_libmp3lame.js index 9088751..f784e77 100644 --- a/src/misc/coders/Encoders/audio/mp3_libmp3lame.js +++ b/src/misc/coders/Encoders/audio/mp3_libmp3lame.js @@ -24,6 +24,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [['-vsync', 'drop']], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/audio/none.js b/src/misc/coders/Encoders/audio/none.js index fefae37..a83dd7a 100644 --- a/src/misc/coders/Encoders/audio/none.js +++ b/src/misc/coders/Encoders/audio/none.js @@ -11,6 +11,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/audio/opus.js b/src/misc/coders/Encoders/audio/opus.js index 3237d7b..e46c5c6 100644 --- a/src/misc/coders/Encoders/audio/opus.js +++ b/src/misc/coders/Encoders/audio/opus.js @@ -44,6 +44,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [['-vsync', 'drop']], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/audio/opus_libopus.js b/src/misc/coders/Encoders/audio/opus_libopus.js index 35b2b58..f1ce58a 100644 --- a/src/misc/coders/Encoders/audio/opus_libopus.js +++ b/src/misc/coders/Encoders/audio/opus_libopus.js @@ -23,6 +23,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/audio/vorbis.js b/src/misc/coders/Encoders/audio/vorbis.js index 0d50549..f5db446 100644 --- a/src/misc/coders/Encoders/audio/vorbis.js +++ b/src/misc/coders/Encoders/audio/vorbis.js @@ -23,6 +23,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [['-vsync', 'drop']], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/audio/vorbis_libvorbis.js b/src/misc/coders/Encoders/audio/vorbis_libvorbis.js index f1f4059..7a573c1 100644 --- a/src/misc/coders/Encoders/audio/vorbis_libvorbis.js +++ b/src/misc/coders/Encoders/audio/vorbis_libvorbis.js @@ -23,6 +23,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [['-vsync', 'drop']], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/av1_librav1e.js b/src/misc/coders/Encoders/video/av1_librav1e.js index 0c8db86..b350d85 100644 --- a/src/misc/coders/Encoders/video/av1_librav1e.js +++ b/src/misc/coders/Encoders/video/av1_librav1e.js @@ -78,6 +78,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/copy.js b/src/misc/coders/Encoders/video/copy.js index f538c6b..4dbb5df 100644 --- a/src/misc/coders/Encoders/video/copy.js +++ b/src/misc/coders/Encoders/video/copy.js @@ -11,6 +11,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/h264_libx264.js b/src/misc/coders/Encoders/video/h264_libx264.js index 920891c..35c3602 100644 --- a/src/misc/coders/Encoders/video/h264_libx264.js +++ b/src/misc/coders/Encoders/video/h264_libx264.js @@ -71,6 +71,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: ['erosion'], }; return mapping; diff --git a/src/misc/coders/Encoders/video/h264_nvenc.js b/src/misc/coders/Encoders/video/h264_nvenc.js index 02bd6de..27e4758 100644 --- a/src/misc/coders/Encoders/video/h264_nvenc.js +++ b/src/misc/coders/Encoders/video/h264_nvenc.js @@ -64,6 +64,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/h264_omx.js b/src/misc/coders/Encoders/video/h264_omx.js index 7ef1a86..1152e93 100644 --- a/src/misc/coders/Encoders/video/h264_omx.js +++ b/src/misc/coders/Encoders/video/h264_omx.js @@ -47,6 +47,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/h264_v4l2m2m.js b/src/misc/coders/Encoders/video/h264_v4l2m2m.js index 9f36211..8f70b18 100644 --- a/src/misc/coders/Encoders/video/h264_v4l2m2m.js +++ b/src/misc/coders/Encoders/video/h264_v4l2m2m.js @@ -125,6 +125,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/h264_vaapi.js b/src/misc/coders/Encoders/video/h264_vaapi.js index 0fd4601..e417198 100644 --- a/src/misc/coders/Encoders/video/h264_vaapi.js +++ b/src/misc/coders/Encoders/video/h264_vaapi.js @@ -30,13 +30,12 @@ function createMapping(settings, stream, skills) { const global = []; const local = []; + const filter = []; // https://trac.ffmpeg.org/wiki/Hardware/VAAPI global.push(['-vaapi_device', '/dev/dri/renderD128']); local.push( - '-vf', - 'format=nv12,hwupload', '-codec:v', 'h264_vaapi', '-profile:v', @@ -51,17 +50,18 @@ function createMapping(settings, stream, skills) { `${settings.bitrate}k`, '-r', `${settings.fps}`, - '-g', - `${settings.gop}` ); if (settings.gop !== 'auto') { local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); } + filter.push('format=nv12', 'hwupload'); + return { global: global, local: local, + filter: filter, }; } diff --git a/src/misc/coders/Encoders/video/h264_videotoolbox.js b/src/misc/coders/Encoders/video/h264_videotoolbox.js index c3777ec..53dd587 100644 --- a/src/misc/coders/Encoders/video/h264_videotoolbox.js +++ b/src/misc/coders/Encoders/video/h264_videotoolbox.js @@ -58,6 +58,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/hevc_libx265.js b/src/misc/coders/Encoders/video/hevc_libx265.js index fd83cbd..ec63211 100644 --- a/src/misc/coders/Encoders/video/hevc_libx265.js +++ b/src/misc/coders/Encoders/video/hevc_libx265.js @@ -71,6 +71,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/hevc_vaapi.js b/src/misc/coders/Encoders/video/hevc_vaapi.js index fbd228f..0989d0b 100644 --- a/src/misc/coders/Encoders/video/hevc_vaapi.js +++ b/src/misc/coders/Encoders/video/hevc_vaapi.js @@ -30,13 +30,12 @@ function createMapping(settings, stream, skills) { const global = []; const local = []; + const filter = []; // https://trac.ffmpeg.org/wiki/Hardware/VAAPI global.push(['-vaapi_device', '/dev/dri/renderD128']); local.push( - '-vf', - 'format=nv12,hwupload', '-codec:v', 'hevc_vaapi', '-profile:v', @@ -59,9 +58,12 @@ function createMapping(settings, stream, skills) { local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); } + filter.push('format=nv12', 'hwupload'); + return { global: global, local: local, + filter: filter, }; } diff --git a/src/misc/coders/Encoders/video/hevc_videotoolbox.js b/src/misc/coders/Encoders/video/hevc_videotoolbox.js index d8cd20f..24cf454 100644 --- a/src/misc/coders/Encoders/video/hevc_videotoolbox.js +++ b/src/misc/coders/Encoders/video/hevc_videotoolbox.js @@ -53,6 +53,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/none.js b/src/misc/coders/Encoders/video/none.js index 4935a4a..5242c2c 100644 --- a/src/misc/coders/Encoders/video/none.js +++ b/src/misc/coders/Encoders/video/none.js @@ -11,6 +11,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/rawvideo.js b/src/misc/coders/Encoders/video/rawvideo.js index 9f70cae..947b226 100644 --- a/src/misc/coders/Encoders/video/rawvideo.js +++ b/src/misc/coders/Encoders/video/rawvideo.js @@ -11,6 +11,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/vp9_libvpx.js b/src/misc/coders/Encoders/video/vp9_libvpx.js index 32cf359..42d95c4 100644 --- a/src/misc/coders/Encoders/video/vp9_libvpx.js +++ b/src/misc/coders/Encoders/video/vp9_libvpx.js @@ -54,6 +54,7 @@ function createMapping(settings, stream, skills) { const mapping = { global: [], local: local, + filter: [], }; return mapping; diff --git a/src/misc/coders/Encoders/video/vp9_vaapi.js b/src/misc/coders/Encoders/video/vp9_vaapi.js index b673a84..74a7fd9 100644 --- a/src/misc/coders/Encoders/video/vp9_vaapi.js +++ b/src/misc/coders/Encoders/video/vp9_vaapi.js @@ -30,13 +30,12 @@ function createMapping(settings, stream, skills) { const global = []; const local = []; + const filter = []; // https://trac.ffmpeg.org/wiki/Hardware/VAAPI global.push(['-vaapi_device', '/dev/dri/renderD128']); local.push( - '-vf', - 'format=nv12,hwupload', '-codec:v', 'vp9_vaapi', '-profile:v', @@ -52,16 +51,19 @@ function createMapping(settings, stream, skills) { '-r', `${settings.fps}`, '-g', - `${settings.gop}` + `${settings.gop}`, ); if (settings.gop !== 'auto') { local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); } + filter.push('format=nv12', 'hwupload'); + return { global: global, local: local, + filter: filter, }; } diff --git a/src/utils/metadata.js b/src/utils/metadata.js index 0f54ba2..fc0eea0 100644 --- a/src/utils/metadata.js +++ b/src/utils/metadata.js @@ -662,14 +662,17 @@ const createInputsOutputs = (sources, profiles, requireVideo = true) => { const local = profile.video.encoder.mapping.local.slice(); - if (profile.video.encoder.coder !== 'copy' && profile.video.filter.graph.length !== 0) { - // Check if there's already a video filter in the local mapping - let filterIndex = local.indexOf('-filter:v'); - if (filterIndex !== -1) { - local[filterIndex + 1] += ',' + profile.video.filter.graph; - } else { - local.unshift('-filter:v', profile.video.filter.graph); + if (profile.video.encoder.coder !== 'copy' && (profile.video.filter.graph.length !== 0 || profile.video.encoder.mapping.filter.length !== 0)) { + let filter = profile.video.filter.graph; + if (profile.video.encoder.mapping.filter.length !== 0) { + if (filter.length !== 0) { + filter += ','; + } + + filter += profile.video.encoder.mapping.filter.join(','); } + + local.unshift('-filter:v', filter); } const options = ['-map', index + ':' + stream.stream, ...local]; @@ -696,14 +699,17 @@ const createInputsOutputs = (sources, profiles, requireVideo = true) => { const local = profile.audio.encoder.mapping.local.slice(); - if (profile.audio.encoder.coder !== 'copy' && profile.audio.filter.graph.length !== 0) { - // Check if there's already a audio filter in the local mapping - let filterIndex = local.indexOf('-filter:a'); - if (filterIndex !== -1) { - local[filterIndex + 1] += ',' + profile.audio.filter.graph; - } else { - local.unshift('-filter:a', profile.audio.filter.graph); + if (profile.audio.encoder.coder !== 'copy' && (profile.audio.filter.graph.length !== 0 || profile.audio.encoder.mapping.filter.length !== 0)) { + let filter = profile.audio.filter.graph; + if (profile.audio.encoder.mapping.filter.length !== 0) { + if (filter.length !== 0) { + filter += ','; + } + + filter += profile.audio.encoder.mapping.filter.join(','); } + + local.unshift('-filter:a', filter); } options.push('-map', index + ':' + stream.stream, ...local); @@ -844,11 +850,13 @@ const initProfile = (initialProfile) => { profile.video.encoder.mapping = { global: [], local: profile.video.encoder.mapping, + filter: [], }; } else { profile.video.encoder.mapping = { global: [], local: [], + filter: [], ...profile.video.encoder.mapping, }; } @@ -864,11 +872,13 @@ const initProfile = (initialProfile) => { profile.video.decoder.mapping = { global: [], local: profile.video.decoder.mapping, + filter: [], }; } else { profile.video.decoder.mapping = { global: [], local: [], + filter: [], ...profile.video.decoder.mapping, }; } @@ -899,11 +909,13 @@ const initProfile = (initialProfile) => { profile.audio.encoder.mapping = { global: [], local: profile.audio.encoder.mapping, + filter: [], }; } else { profile.audio.encoder.mapping = { global: [], local: [], + filter: [], ...profile.audio.encoder.mapping, }; } @@ -919,11 +931,13 @@ const initProfile = (initialProfile) => { profile.audio.decoder.mapping = { global: [], local: profile.audio.decoder.mapping, + filter: [], }; } else { profile.audio.decoder.mapping = { global: [], local: [], + filter: [], ...profile.audio.decoder.mapping, }; }