import React from 'react'; import { faImages } from '@fortawesome/free-solid-svg-icons'; import { useLingui } from '@lingui/react'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { Trans, t } from '@lingui/macro'; import makeStyles from '@mui/styles/makeStyles'; import Grid from '@mui/material/Grid'; import Typography from '@mui/material/Typography'; import FormInlineButton from '../../../misc/FormInlineButton'; import SelectCustom from '../../../misc/SelectCustom'; import Video from '../../../misc/coders/settings/Video'; const useStyles = makeStyles((theme) => ({ gridContainer: { marginTop: '0.5em', }, })); const initSettings = (initialSettings) => { if (!initialSettings) { initialSettings = {}; } const settings = { device: 'none', framerate: '25', ...initialSettings, }; return settings; }; const createInputs = (settings) => { const address = settings.device === 'custom' || settings.device === 'none' ? settings.deviceCustom : settings.device; const input = { address: address, options: [], }; input.options.push('-f', 'fbdev'); input.options.push('-framerate', '' + settings.framerate); return [input]; }; function Source(props) { const classes = useStyles(); const { i18n } = useLingui(); const settings = initSettings(props.settings); const handleChange = (what) => (event) => { let data = {}; if (['device', 'framerate'].includes(what)) { data[what] = event.target.value; } props.onChange({ ...settings, ...data, }); }; const handleProbe = () => { props.onProbe(settings, createInputs(settings)); }; const filteredDevices = props.knownDevices.filter((device) => device.extra !== ''); const options = filteredDevices.map((device) => { return { value: device.id, label: device.name + ' (' + device.extra + ')', }; }); options.unshift({ value: 'none', label: i18n._(t`Choose an input device ...`), disabled: true, }); const videoDevices = ( Device} customLabel={Custom device} value={settings.device} onChange={handleChange('device')} variant="outlined" /> ); return ( Select a device: {videoDevices} Probe ); } Source.defaultProps = { knownDevices: [], settings: {}, onChange: function (settings) {}, onProbe: function (settings, inputs) {}, }; function SourceIcon(props) { return ; } const id = 'fbdev'; const name = Framebuffer; const capabilities = ['video']; const ffversion = '^4.1.0 || ^5.0.0 || ^6.1.0'; const func = { initSettings, createInputs, }; export { id, name, capabilities, ffversion, SourceIcon as icon, Source as component, func };