in apps/meeting/src/components/DeviceSelection/CameraDevices/VideoTransformDropdown.tsx [70:101]
async function selectTransform(e: ChangeEvent<HTMLSelectElement>) {
const selectedTransform = e.target.value;
let currentDevice = activeVideoDevice;
if (isLoading || currentDevice === null) {
return;
}
try {
setIsLoading(true);
// If current device activeVideoDevice is a transform device (blur or replacement) then store currentDevice as the intrinisc device for now.
if (isVideoTransformDevice(currentDevice)) {
const intrinsicDevice = await currentDevice.intrinsicDevice();
await currentDevice.stop();
currentDevice = intrinsicDevice;
}
// If the new selection is `Background Blur` then create a blur device. Else if the new selected transform is replacement then create
// a replacement device. Otherwise, the user selected `None` therefore do nothing because currentDevice is the intrinisc from the above logic.
if (selectedTransform === VideoTransformOptions.Blur && isBackgroundBlurSupported) {
currentDevice = await createBackgroundBlurDevice(currentDevice as Device);
} else if (selectedTransform === VideoTransformOptions.Replacement && isBackgroundReplacementSupported) {
currentDevice = await createBackgroundReplacementDevice(currentDevice as Device);
}
// Select the newly created device from the above logic as the video input device.
await meetingManager.selectVideoInputDevice(currentDevice);
// Update the current selected transform.
setTransformOption(selectedTransform);
} catch(e) {
console.error('Error trying to apply', selectTransform, e);
} finally {
setIsLoading(false);
}
}