diff --git a/src/misc/coders/Encoders/audio/AAC.js b/src/misc/coders/Encoders/audio/AAC.js
index 4784c7b..98687d5 100644
--- a/src/misc/coders/Encoders/audio/AAC.js
+++ b/src/misc/coders/Encoders/audio/AAC.js
@@ -7,9 +7,6 @@ import Audio from '../../settings/Audio';
function init(initialState) {
const state = {
bitrate: '64',
- channels: '2',
- layout: 'stereo',
- sampling: '44100',
...initialState,
};
@@ -17,18 +14,7 @@ function init(initialState) {
}
function createMapping(settings, stream) {
- let sampling = settings.sampling;
- let layout = settings.layout;
-
- if (sampling === 'inherit') {
- sampling = stream.sampling_hz;
- }
-
- if (layout === 'inherit') {
- layout = stream.layout;
- }
-
- const local = ['-codec:a', 'aac', '-b:a', `${settings.bitrate}k`, '-shortest', '-filter:a', `aresample=osr=${sampling}:ocl=${layout}`];
+ const local = ['-codec:a', 'aac', '-b:a', `${settings.bitrate}k`, '-shortest'];
if (stream.codec === 'aac') {
local.push('-bsf:a', 'aac_adtstoasc');
@@ -64,23 +50,6 @@ function Coder(props) {
[what]: value,
};
- if (what === 'layout') {
- let channels = stream.channels;
-
- switch (value) {
- case 'mono':
- channels = 1;
- break;
- case 'stereo':
- channels = 2;
- break;
- default:
- break;
- }
-
- newSettings.channels = channels;
- }
-
handleChange(newSettings);
};
@@ -94,12 +63,6 @@ function Coder(props) {
-
-
-
-
-
-
);
}
@@ -117,7 +80,7 @@ const type = 'audio';
const hwaccel = false;
function summarize(settings) {
- return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`;
+ return `${name}, ${settings.bitrate} kbit/s`;
}
function defaults(stream) {
diff --git a/src/misc/coders/Encoders/audio/AACAudioToolbox.js b/src/misc/coders/Encoders/audio/AACAudioToolbox.js
index 94fe217..63e4c90 100644
--- a/src/misc/coders/Encoders/audio/AACAudioToolbox.js
+++ b/src/misc/coders/Encoders/audio/AACAudioToolbox.js
@@ -7,9 +7,6 @@ import Audio from '../../settings/Audio';
function init(initialState) {
const state = {
bitrate: '64',
- channels: '2',
- layout: 'stereo',
- sampling: '44100',
...initialState,
};
@@ -17,18 +14,7 @@ function init(initialState) {
}
function createMapping(settings, stream) {
- let sampling = settings.sampling;
- let layout = settings.layout;
-
- if (sampling === 'inherit') {
- sampling = stream.sampling_hz;
- }
-
- if (layout === 'inherit') {
- layout = stream.layout;
- }
-
- const local = ['-codec:a', 'aac_at', '-b:a', `${settings.bitrate}k`, '-shortest', '-filter:a', `aresample=osr=${sampling}:ocl=${layout}`];
+ const local = ['-codec:a', 'aac_at', '-b:a', `${settings.bitrate}k`, '-shortest'];
if (stream.codec === 'aac') {
local.push('-bsf:a', 'aac_adtstoasc');
@@ -64,23 +50,6 @@ function Coder(props) {
[what]: value,
};
- if (what === 'layout') {
- let channels = stream.channels;
-
- switch (value) {
- case 'mono':
- channels = 1;
- break;
- case 'stereo':
- channels = 2;
- break;
- default:
- break;
- }
-
- newSettings.channels = channels;
- }
-
handleChange(newSettings);
};
@@ -94,12 +63,6 @@ function Coder(props) {
-
-
-
-
-
-
);
}
@@ -117,7 +80,7 @@ const type = 'audio';
const hwaccel = true;
function summarize(settings) {
- return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`;
+ return `${name}, ${settings.bitrate} kbit/s`;
}
function defaults(stream) {
diff --git a/src/misc/coders/Encoders/audio/Libopus.js b/src/misc/coders/Encoders/audio/Libopus.js
index a7bd2ce..6ab9b25 100644
--- a/src/misc/coders/Encoders/audio/Libopus.js
+++ b/src/misc/coders/Encoders/audio/Libopus.js
@@ -7,9 +7,6 @@ import Audio from '../../settings/Audio';
function init(initialState) {
const state = {
bitrate: '64',
- channels: '2',
- layout: 'stereo',
- sampling: '44100',
...initialState,
};
@@ -17,18 +14,7 @@ function init(initialState) {
}
function createMapping(settings, stream) {
- let sampling = settings.sampling;
- let layout = settings.layout;
-
- if (sampling === 'inherit') {
- sampling = stream.sampling_hz;
- }
-
- if (layout === 'inherit') {
- layout = stream.layout;
- }
-
- const local = ['-codec:a', 'libopus', '-b:a', `${settings.bitrate}k`, '-shortest', '-filter:a', `aresample=osr=${sampling}:ocl=${layout}`];
+ const local = ['-codec:a', 'libopus', '-b:a', `${settings.bitrate}k`, '-shortest'];
const mapping = {
global: [],
@@ -60,23 +46,6 @@ function Coder(props) {
[what]: value,
};
- if (what === 'layout') {
- let channels = stream.channels;
-
- switch (value) {
- case 'mono':
- channels = 1;
- break;
- case 'stereo':
- channels = 2;
- break;
- default:
- break;
- }
-
- newSettings.channels = channels;
- }
-
handleChange(newSettings);
};
@@ -90,12 +59,6 @@ function Coder(props) {
-
-
-
-
-
-
);
}
@@ -113,7 +76,7 @@ const type = 'audio';
const hwaccel = false;
function summarize(settings) {
- return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`;
+ return `${name}, ${settings.bitrate} kbit/s`;
}
function defaults(stream) {
diff --git a/src/misc/coders/Encoders/audio/Libvorbis.js b/src/misc/coders/Encoders/audio/Libvorbis.js
index bb7aa4b..42e3b46 100644
--- a/src/misc/coders/Encoders/audio/Libvorbis.js
+++ b/src/misc/coders/Encoders/audio/Libvorbis.js
@@ -7,9 +7,6 @@ import Audio from '../../settings/Audio';
function init(initialState) {
const state = {
bitrate: '64',
- channels: '2',
- layout: 'stereo',
- sampling: '44100',
...initialState,
};
@@ -17,18 +14,7 @@ function init(initialState) {
}
function createMapping(settings, stream) {
- let sampling = settings.sampling;
- let layout = settings.layout;
-
- if (sampling === 'inherit') {
- sampling = stream.sampling_hz;
- }
-
- if (layout === 'inherit') {
- layout = stream.layout;
- }
-
- const local = ['-codec:a', 'libvorbis', '-b:a', `${settings.bitrate}k`, '-shortest', '-filter:a', `aresample=osr=${sampling}:ocl=${layout}`];
+ const local = ['-codec:a', 'libvorbis', '-b:a', `${settings.bitrate}k`, '-shortest'];
const mapping = {
global: [],
@@ -60,23 +46,6 @@ function Coder(props) {
[what]: value,
};
- if (what === 'layout') {
- let channels = stream.channels;
-
- switch (value) {
- case 'mono':
- channels = 1;
- break;
- case 'stereo':
- channels = 2;
- break;
- default:
- break;
- }
-
- newSettings.channels = channels;
- }
-
handleChange(newSettings);
};
@@ -90,12 +59,6 @@ function Coder(props) {
-
-
-
-
-
-
);
}
@@ -113,7 +76,7 @@ const type = 'audio';
const hwaccel = false;
function summarize(settings) {
- return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`;
+ return `${name}, ${settings.bitrate} kbit/s`;
}
function defaults(stream) {
diff --git a/src/misc/coders/Encoders/audio/MP3.js b/src/misc/coders/Encoders/audio/MP3.js
index 0e7fc49..5543eef 100644
--- a/src/misc/coders/Encoders/audio/MP3.js
+++ b/src/misc/coders/Encoders/audio/MP3.js
@@ -7,9 +7,6 @@ import Audio from '../../settings/Audio';
function init(initialState) {
const state = {
bitrate: '64',
- channels: '2',
- layout: 'stereo',
- sampling: '44100',
...initialState,
};
@@ -17,19 +14,8 @@ function init(initialState) {
}
function createMapping(settings, stream) {
- let sampling = settings.sampling;
- let layout = settings.layout;
-
- if (sampling === 'inherit') {
- sampling = stream.sampling_hz;
- }
-
- if (layout === 'inherit') {
- layout = stream.layout;
- }
-
// '-qscale:a', '6'
- const local = ['-codec:a', 'libmp3lame', '-b:a', `${settings.bitrate}k`, '-shortest', '-filter:a', `aresample=osr=${sampling}:ocl=${layout}`];
+ const local = ['-codec:a', 'libmp3lame', '-b:a', `${settings.bitrate}k`, '-shortest'];
const mapping = {
global: [],
@@ -61,23 +47,6 @@ function Coder(props) {
[what]: value,
};
- if (what === 'layout') {
- let channels = stream.channels;
-
- switch (value) {
- case 'mono':
- channels = 1;
- break;
- case 'stereo':
- channels = 2;
- break;
- default:
- break;
- }
-
- newSettings.channels = channels;
- }
-
handleChange(newSettings);
};
@@ -91,12 +60,6 @@ function Coder(props) {
-
-
-
-
-
-
);
}
@@ -114,7 +77,7 @@ const type = 'audio';
const hwaccel = false;
function summarize(settings) {
- return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`;
+ return `${name}, ${settings.bitrate} kbit/s`;
}
function defaults(stream) {
diff --git a/src/misc/coders/Encoders/audio/Opus.js b/src/misc/coders/Encoders/audio/Opus.js
index c5fe8a6..863daef 100644
--- a/src/misc/coders/Encoders/audio/Opus.js
+++ b/src/misc/coders/Encoders/audio/Opus.js
@@ -13,9 +13,6 @@ function init(initialState) {
const state = {
bitrate: '64',
delay: 'auto',
- channels: '2',
- layout: 'stereo',
- sampling: '44100',
...initialState,
};
@@ -34,7 +31,7 @@ function createMapping(settings, stream) {
layout = stream.layout;
}
- const local = ['-codec:a', 'opus', '-b:a', `${settings.bitrate}k`, '-vbr', 'on', '-shortest', '-filter:a', `aresample=osr=${sampling}:ocl=${layout}`];
+ const local = ['-codec:a', 'opus', '-b:a', `${settings.bitrate}k`, '-vbr', 'on', '-shortest'];
if (settings.delay !== 'auto') {
local.push('opus_delay', settings.delay);
@@ -113,23 +110,6 @@ function Coder(props) {
[what]: value,
};
- if (what === 'layout') {
- let channels = stream.channels;
-
- switch (value) {
- case 'mono':
- channels = 1;
- break;
- case 'stereo':
- channels = 2;
- break;
- default:
- break;
- }
-
- newSettings.channels = channels;
- }
-
handleChange(newSettings);
};
@@ -146,12 +126,6 @@ function Coder(props) {
-
-
-
-
-
-
);
}
@@ -169,7 +143,7 @@ const type = 'audio';
const hwaccel = false;
function summarize(settings) {
- return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`;
+ return `${name}, ${settings.bitrate} kbit/s`;
}
function defaults(stream) {
diff --git a/src/misc/coders/Encoders/audio/Vorbis.js b/src/misc/coders/Encoders/audio/Vorbis.js
index 462a508..872dd83 100644
--- a/src/misc/coders/Encoders/audio/Vorbis.js
+++ b/src/misc/coders/Encoders/audio/Vorbis.js
@@ -7,9 +7,6 @@ import Audio from '../../settings/Audio';
function init(initialState) {
const state = {
bitrate: '64',
- channels: '2',
- layout: 'stereo',
- sampling: '44100',
...initialState,
};
@@ -17,18 +14,7 @@ function init(initialState) {
}
function createMapping(settings, stream) {
- let sampling = settings.sampling;
- let layout = settings.layout;
-
- if (sampling === 'inherit') {
- sampling = stream.sampling_hz;
- }
-
- if (layout === 'inherit') {
- layout = stream.layout;
- }
-
- const local = ['-codec:a', 'vorbis', '-b:a', `${settings.bitrate}k`, '-qscale:a', '3', '-shortest', '-filter:a', `aresample=osr=${sampling}:ocl=${layout}`];
+ const local = ['-codec:a', 'vorbis', '-b:a', `${settings.bitrate}k`, '-qscale:a', '3', '-shortest'];
const mapping = {
global: [],
@@ -60,23 +46,6 @@ function Coder(props) {
[what]: value,
};
- if (what === 'layout') {
- let channels = stream.channels;
-
- switch (value) {
- case 'mono':
- channels = 1;
- break;
- case 'stereo':
- channels = 2;
- break;
- default:
- break;
- }
-
- newSettings.channels = channels;
- }
-
handleChange(newSettings);
};
@@ -90,12 +59,6 @@ function Coder(props) {
-
-
-
-
-
-
);
}
@@ -113,7 +76,7 @@ const type = 'audio';
const hwaccel = false;
function summarize(settings) {
- return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`;
+ return `${name}, ${settings.bitrate} kbit/s`;
}
function defaults(stream) {
diff --git a/src/misc/filters/audio/Loudnorm.js b/src/misc/filters/audio/Loudnorm.js
index 7b0ec22..319bbf6 100644
--- a/src/misc/filters/audio/Loudnorm.js
+++ b/src/misc/filters/audio/Loudnorm.js
@@ -69,7 +69,7 @@ function Filter(props) {
Filter.defaultProps = {
settings: {},
- onChange: function (settings, mapping) {},
+ onChange: function (settings, graph, automatic) {},
};
const filter = 'loudnorm';
diff --git a/src/misc/filters/audio/Resample.js b/src/misc/filters/audio/Resample.js
index 5cd7e1b..f9ad447 100644
--- a/src/misc/filters/audio/Resample.js
+++ b/src/misc/filters/audio/Resample.js
@@ -200,7 +200,7 @@ function Filter(props) {
Filter.defaultProps = {
settings: {},
- onChange: function (settings, mapping) {},
+ onChange: function (settings, graph, automatic) {},
};
const filter = 'aresample';
diff --git a/src/misc/filters/audio/Volume.js b/src/misc/filters/audio/Volume.js
index 8aeb750..758b129 100644
--- a/src/misc/filters/audio/Volume.js
+++ b/src/misc/filters/audio/Volume.js
@@ -126,7 +126,7 @@ function Filter(props) {
Filter.defaultProps = {
settings: {},
- onChange: function (settings, mapping) {},
+ onChange: function (settings, graph, automatic) {},
};
const filter = 'volume';
diff --git a/src/misc/filters/video/HFlip.js b/src/misc/filters/video/HFlip.js
index 52d8ff2..0bf8147 100644
--- a/src/misc/filters/video/HFlip.js
+++ b/src/misc/filters/video/HFlip.js
@@ -67,7 +67,7 @@ function Filter(props) {
Filter.defaultProps = {
settings: {},
- onChange: function (settings, mapping) {},
+ onChange: function (settings, graph, automatic) {},
};
const filter = 'hflip';
diff --git a/src/misc/filters/video/Transpose.js b/src/misc/filters/video/Transpose.js
index 80eb338..474e1fc 100644
--- a/src/misc/filters/video/Transpose.js
+++ b/src/misc/filters/video/Transpose.js
@@ -95,7 +95,7 @@ Filter.defaultProps = {
};
const filter = 'transpose';
-const name = 'Filter (transpose)';
+const name = 'Transpose';
const type = 'video';
const hwaccel = false;
diff --git a/src/misc/filters/video/VFlip.js b/src/misc/filters/video/VFlip.js
index 9c76f94..a523dfd 100644
--- a/src/misc/filters/video/VFlip.js
+++ b/src/misc/filters/video/VFlip.js
@@ -67,7 +67,7 @@ function Filter(props) {
Filter.defaultProps = {
settings: {},
- onChange: function (settings, mapping) {},
+ onChange: function (settings, graph, automatic) {},
};
const filter = 'vflip';
diff --git a/src/utils/metadata.js b/src/utils/metadata.js
index 3bfda79..1f819ea 100644
--- a/src/utils/metadata.js
+++ b/src/utils/metadata.js
@@ -3,7 +3,7 @@
Ingest Metadata Layout:
data = {
- version: 1,
+ version: "1.2.0",
meta: {
name: 'Livestream 1',
description: 'Live from earth. Powered by datarhei/restreamer.',
@@ -99,12 +99,24 @@ data = {
'-codec:a', 'aac',
'-b:a', '64k',
'-bsf:a', 'aac_adtstoasc',
- '-shortest',
- '-af', 'aresample=osr=44100:ocl=2'
+ '-shortest'
]
}
},
decoder: null,
+ filter: {
+ graph: 'aresample=osr=44100:ocl=stereo',
+ settings: {
+ aresample: {
+ graph: 'aresample=osr=44100:ocl=stereo',
+ settings: {
+ channels: 2,
+ layout: 'stereo',
+ sampling: 44100
+ }
+ }
+ }
+ },
},
video: {
source: 0,
@@ -124,6 +136,7 @@ data = {
}
},
decoder: null,
+ filter: null,
},
"or": {},
"video": {
@@ -210,7 +223,7 @@ data = {
Egress Metadata Layout:
data = {
- version: 1,
+ version: "1.2.0",
name: "foobar",
control: {
process: {
@@ -232,14 +245,15 @@ data = {
*/
import * as Coders from '../misc/coders/Encoders';
+import * as version from '../version';
const defaultMetadata = {
- version: 1,
+ version: version.Version,
playersite: {},
};
const defaultIngestMetadata = {
- version: 1,
+ version: version.Version,
sources: [],
profiles: [{}],
streams: [],
@@ -282,7 +296,7 @@ const defaultIngestMetadata = {
};
const defaultEgressMetadata = {
- version: 1,
+ version: version.Version,
name: '',
control: {
process: {
diff --git a/src/version.js b/src/version.js
index 1dedd3d..adccb4b 100644
--- a/src/version.js
+++ b/src/version.js
@@ -3,5 +3,6 @@ import { name, version, bundle } from '../package.json';
const Core = '^16.9.0';
const FFmpeg = '^4.1.0 || ^5.0.0';
const UI = bundle ? bundle : name + ' v' + version;
+const Version = version;
-export { Core, FFmpeg, UI };
+export { Core, FFmpeg, UI, Version };
diff --git a/src/views/Edit/Summary.js b/src/views/Edit/Summary.js
index c9c9fd5..b910421 100644
--- a/src/views/Edit/Summary.js
+++ b/src/views/Edit/Summary.js
@@ -6,6 +6,7 @@ import Typography from '@mui/material/Typography';
import Grid from '@mui/material/Grid';
import * as Coders from '../../misc/coders/Encoders';
+import * as Filters from '../../misc/filters';
import BoxText from '../../misc/BoxText';
import Sources from './Sources';
@@ -28,6 +29,7 @@ export default function Summary(props) {
let name = i18n._(t`No source selected`);
let address = '';
let encodingSummary = i18n._(t`None`);
+ let filterSummary = [];
let showEncoding = false;
@@ -51,6 +53,30 @@ export default function Summary(props) {
if (coder !== null) {
encodingSummary = coder.summarize(profile.encoder.settings);
}
+
+ if (profile.filter.graph.length !== 0) {
+ let filters = null;
+
+ if (props.type === 'video') {
+ filters = Filters.Video;
+ } else if (props.type === 'audio') {
+ filters = Filters.Audio;
+ }
+
+ for (let filter of filters.List()) {
+ const name = filter.filter;
+
+ if (!(name in profile.filter.settings)) {
+ continue;
+ }
+
+ if (profile.filter.settings[name].graph.length === 0) {
+ continue;
+ }
+
+ filterSummary.push(filter.summarize(profile.filter.settings[name].settings));
+ }
+ }
}
return (
@@ -61,12 +87,26 @@ export default function Summary(props) {
{address}
{showEncoding === true && (
-
-
- Encoding
-
- {encodingSummary}
-
+
+
+
+ Encoding
+
+ {encodingSummary}
+
+
+
+ Filter
+
+ {filterSummary.length ? (
+ {filterSummary.join(', ')}
+ ) : (
+
+ None
+
+ )}
+
+
)}