UNPKG

@remotion/studio

Version:

APIs for interacting with the Remotion Studio

47 lines (46 loc) 1.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CrfSetting = exports.useCrfState = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const client_1 = require("@remotion/renderer/client"); const react_1 = require("react"); const NumberSetting_1 = require("./NumberSetting"); const getDefaultCrfState = () => { return client_1.BrowserSafeApis.validCodecs .map((c) => { return [c, client_1.BrowserSafeApis.getDefaultCrfForCodec(c)]; }) .reduce((acc, [codec, crf]) => { return { ...acc, [codec]: crf, }; }, {}); }; const useCrfState = (codec) => { const [state, setState] = (0, react_1.useState)(() => getDefaultCrfState()); const range = client_1.BrowserSafeApis.getValidCrfRanges(codec); const setCrf = (updater) => { setState((q) => { const val = q[codec]; if (val === null) { throw new TypeError(`Got unexpected codec "${codec}"`); } return { ...q, [codec]: typeof updater === 'number' ? updater : updater(val), }; }); }; return { crf: state[codec], setCrf, minCrf: range[0], maxCrf: range[1], }; }; exports.useCrfState = useCrfState; const CrfSetting = ({ crf, setCrf, min, max, option }) => { return (jsx_runtime_1.jsx(NumberSetting_1.NumberSetting, { min: min, max: max, name: "CRF", onValueChanged: setCrf, value: crf, step: 1, hint: option })); }; exports.CrfSetting = CrfSetting;