YuqianFu's picture
Upload folder using huggingface_hub
1867b21 verified
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import useVideo from '@/common/components/video/editor/useVideo';
import {
activeBackgroundEffectAtom,
activeHighlightEffectAtom,
} from '@/demo/atoms';
import {useSetAtom} from 'jotai';
import {useCallback, useEffect} from 'react';
import {EffectUpdateEvent} from '../VideoWorkerBridge';
import {EffectOptions} from '../effects/Effect';
import Effects, {EffectIndex, Effects as EffectsType} from '../effects/Effects';
export default function useVideoEffect() {
const video = useVideo();
const setBackgroundEffect = useSetAtom(activeBackgroundEffectAtom);
const setHighlightEffect = useSetAtom(activeHighlightEffectAtom);
// The useEffect will listen to any effect updates from the worker. The
// worker is the source of truth, which effect and effect variant is
// currently applied. The main thread will be notified whenever an effect
// or effect variant changes.
useEffect(() => {
function onEffectUpdate(event: EffectUpdateEvent) {
if (event.index === EffectIndex.BACKGROUND) {
setBackgroundEffect(event);
} else {
setHighlightEffect(event);
}
}
video?.addEventListener('effectUpdate', onEffectUpdate);
return () => {
video?.removeEventListener('effectUpdate', onEffectUpdate);
};
}, [video, setBackgroundEffect, setHighlightEffect]);
return useCallback(
(name: keyof EffectsType, index: EffectIndex, options?: EffectOptions) => {
video?.setEffect(name, index, options);
const effect = Effects[name];
const effectVariant = options?.variant ?? 0;
if (index === EffectIndex.BACKGROUND) {
setBackgroundEffect({
name,
variant: effectVariant,
numVariants: effect.numVariants,
});
} else {
setHighlightEffect({
name,
variant: options?.variant ?? 0,
numVariants: effect.numVariants,
});
}
},
[video, setBackgroundEffect, setHighlightEffect],
);
}