| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 | // @flow
import { load } from '@tensorflow-models/body-pix';
import * as tfc from '@tensorflow/tfjs-core';
import JitsiStreamBlurEffect from './JitsiStreamBlurEffect';
/**
 * This promise represents the loading of the BodyPix model that is used
 * to extract person segmentation. A multiplier of 0.25 is used to for
 * improved performance on a larger range of CPUs.
 */
const bpModelPromise = load(0.25);
/**
 * Configure the Tensor Flow model to use the webgl backend which is the
 * most powerful backend for the browser.
 */
const webGlBackend = 'webgl';
/**
 * Creates a new instance of JitsiStreamBlurEffect.
 *
 * @returns {Promise<JitsiStreamBlurEffect>}
 */
export function createBlurEffect() {
    if (!MediaStreamTrack.prototype.getSettings && !MediaStreamTrack.prototype.getConstraints) {
        return Promise.reject(new Error('JitsiStreamBlurEffect not supported!'));
    }
    const setBackendPromise = new Promise((resolve, reject) => {
        if (tfc.getBackend() === webGlBackend) {
            resolve();
            return;
        }
        return tfc.setBackend(webGlBackend)
            .then(resolve, reject);
    });
    return setBackendPromise
        .then(() => bpModelPromise)
        .then(bpmodel => new JitsiStreamBlurEffect(bpmodel));
}
 |