From 8db285fe89d0dc809896e887a2e44a17bc1ae5ad Mon Sep 17 00:00:00 2001 From: Ingo Oppermann Date: Fri, 20 Sep 2024 16:38:06 +0200 Subject: [PATCH] Add libfdk_aac support --- src/misc/coders/Encoders/audio/aac_libfdk.js | 102 +++++++++++++++++++ src/misc/coders/Encoders/index.js | 2 + 2 files changed, 104 insertions(+) create mode 100644 src/misc/coders/Encoders/audio/aac_libfdk.js diff --git a/src/misc/coders/Encoders/audio/aac_libfdk.js b/src/misc/coders/Encoders/audio/aac_libfdk.js new file mode 100644 index 0000000..5555687 --- /dev/null +++ b/src/misc/coders/Encoders/audio/aac_libfdk.js @@ -0,0 +1,102 @@ +import React from 'react'; + +import Grid from '@mui/material/Grid'; + +import Audio from '../../settings/Audio'; +import Helper from '../../helper'; + +function init(initialState) { + const state = { + bitrate: '64', + ...initialState, + }; + + return state; +} + +function createMapping(settings, stream, skills) { + stream = Helper.InitStream(stream); + skills = Helper.InitSkills(skills); + + const local = ['-codec:a', 'libfdk_aac', '-b:a', `${settings.bitrate}k`, '-shortest']; + + if (stream.codec === 'aac') { + local.push('-bsf:a', 'aac_adtstoasc'); + } + + const mapping = { + global: [], + local: local, + filter: [], + }; + + return mapping; +} + +function Coder(props) { + const settings = init(props.settings); + const stream = Helper.InitStream(props.stream); + const skills = Helper.InitSkills(props.skills); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createMapping(newSettings, stream, skills), automatic); + }; + + const update = (what) => (event) => { + const value = event.target.value; + + const newSettings = { + ...settings, + [what]: value, + }; + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + + + + ); +} + +Coder.defaultProps = { + stream: {}, + settings: {}, + skills: {}, + onChange: function (settings, mapping) {}, +}; + +const coder = 'libfdk_aac'; +const name = 'AAC (libfdk)'; +const codec = 'aac'; +const type = 'audio'; +const hwaccel = false; + +function summarize(settings) { + return `${name}, ${settings.bitrate} kbit/s`; +} + +function defaults(stream, skills) { + const settings = init({}); + + return { + settings: settings, + mapping: createMapping(settings, stream, skills), + }; +} + +export { coder, name, codec, type, hwaccel, summarize, defaults, Coder as component }; diff --git a/src/misc/coders/Encoders/index.js b/src/misc/coders/Encoders/index.js index 8853715..e6bf7ee 100644 --- a/src/misc/coders/Encoders/index.js +++ b/src/misc/coders/Encoders/index.js @@ -2,6 +2,7 @@ import * as AudioCopy from './audio/copy'; import * as AudioNone from './audio/none'; import * as AAC from './audio/aac'; import * as AACAudioToolbox from './audio/aac_audiotoolbox'; +import * as AACFDK from './audio/aac_libfdk'; import * as Libopus from './audio/opus_libopus'; import * as Libvorbis from './audio/vorbis_libvorbis'; import * as MP3 from './audio/mp3_libmp3lame'; @@ -115,6 +116,7 @@ audioRegistry.Register(AudioCopy); audioRegistry.Register(AudioNone); audioRegistry.Register(AAC); audioRegistry.Register(AACAudioToolbox); +audioRegistry.Register(AACFDK); audioRegistry.Register(MP3); audioRegistry.Register(Opus); audioRegistry.Register(Libopus);