1"use strict";(self.webpackChunkfacetalk=self.webpackChunkfacetalk||[]).push([["2264"],{710166(e,t,i){let a,s;i.r(t),i.d(t,{stopPreviewBackgroundEffect:()=>B,default:()=>C,previewBackgroundEffect:()=>A});var r=i(42385),n=i(842226),h=i(31522),c=i(868522),o=i(529633),d=i(174857);function u(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}class l{get canvas(){return this._canvas}get width(){return this._canvas.width}get height(){return this._canvas.height}resize(e){this._context.drawImage(e,0,0,e.width,e.height,0,0,this._canvas.width,this._canvas.height);let{data:t}=this._context.getImageData(0,0,this._canvas.width,this._canvas.height);return t}loadMask(e){this._context.putImageData(new ImageData(e,this._canvas.width),0,0)}constructor(e,t){if(u(this,"_isWebWorker","function"==typeof importScripts),u(this,"_canvas",void 0),d.W4)this._canvas=new OffscreenCanvas(e,t);else if(this._isWebWorker)throw Error("WebWorker");this._canvas||(this._canvas=document.createElement("canvas"),this._canvas.width=e,this._canvas.height=t),this._context=(0,d.Io)(this._canvas,{imageSmoothing:!0,willReadFrequently:!0})}}var _=i(699491);class f{get image(){return this._image}get background(){return this._background}get imageUrl(){return this._imageUrl}hasChanged(){return!!this._updated&&null!==this._image&&(this._updated=!1,!0)}init(e,t,i){this._canvas.width=e,this._canvas.height=t,this._facingUser=i,this.resize()}stop(){this._background=null,this._image=null,this._imageUrl=null}async setBackgroundImage(e){return this._imageUrl===e||((this._background=null,this._imageUrl=e,e)?(this._background=await new Promise(t=>{let i=new Image;i.onerror=e=>{r.A.error("Failed to load image",e),t(void 0)},i.onload=()=>{i.onload=null;let e=document.createElement("canvas");e.width=10,e.height=10;try{(0,d.Io)(e,{alpha:!1}).drawImage(i,0,0),e.toBlob(Boolean),t(i)}catch(e){r.A.error("Failed to apply",e),t(void 0)}},i.crossOrigin="Anonymous",i.src=e}),!!this._background):(this._image=null,this._updated=!0,!0))}draw(e){return this._context.putImageData(e,0,0),this._canvas}async resize(){if(!(this._background instanceof HTMLImageElement))return;let{naturalWidth:e,naturalHeight:t}=this._background,i=(0,_.Tv)("cover",this._canvas.width,this._canvas.height,e,t);if(this._facingUser&&(this._context.save(),this._context.scale(-1,1)),this._context.drawImage(this._background,i.offsetX,i.offsetY,this._facingUser?-i.width:i.width,i.height),this._facingUser&&this._context.restore(),this._background=this._canvas,this._image=this._image||new Image,this._image.src=this._canvas.toDataURL(),d.hJ){let e=await createImageBitmap(this._canvas);this._background===this._canvas&&(this._background=e)}this._updated=!0}constructor(){this._canvas=document.createElement("canvas"),this._context=(0,d.Io)(this._canvas,{alpha:!1,imageSmoothing:!0}),this._facingUser=!1,this._background=null,this._image=null,this._imageUrl=null,this._updated=!1}}i(996599);var g=i(233680),p=i(690007),m=i(555442);function v(e,t,i){return t in e?Object.defineProperty(e,t,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[t]=i,e}let w="WebGL2RenderingContext"in window&&o.A.isWebGL2WellSupported();function k(e){let[t]=e.getVideoTracks();if(!t)throw Error("No video track!");let{frameRate:i,facingMode:a,width:s,height:r}=t.getSettings?t.getSettings():t.getConstraints();return{videoTrack:t,frameRate:i,facingMode:a,width:s,height:r}}async function b(e,t){return new Promise(i=>{e.onloadeddata=async()=>{let{videoWidth:t,videoHeight:a}=e,s=document.createElement("canvas");s.width=e.width=t,s.height=e.height=a,i(s)},e.srcObject=t,e.play()})}class E{async initSettings(){await this._effectSettings.init()}isEnabled(e){return e.isVideoTrack()&&"camera"===e.videoType}isRunning(){return!!this._renderWorker}async isEffectApplied(){var e;return null==(e=this._effectSettings)?void 0:e.isBGEffectApplied()}getStream(){if(this._preparedStream)return this._preparedStream}async setBackgroundImage(e){let t=await this._bgImage.setBackgroundImage(e);return t&&this.isRunning()&&await this._bgImage.resize(),t}async _setBlur(e){var t;this._blurRadius=Math.floor(32*e),null==(t=this._pipeline)||t.setBlur(this._blurRadius)}async applyEffects(){if(await this.isEffectApplied()){r.A.info("Backgroun
1dEffect applyEffects"),await this.setBackgroundImage(this._effectSettings._states.bg.value);let e=this._effectSettings._states.blur;this._setBlur(e.enabled?e.value:0)}}async init(e){if(this._preparedStream)return void r.A.warn("BackgroundEffect init skipped!");r.A.info("BackgroundEffect init");let{videoTrack:t,facingMode:i}=k(e);this._canvas=await b(this._inputVideo,e),this._inputCanvas.width=this._canvas.width,this._inputCanvas.height=this._canvas.height,await this._createPipeline(!i||"user"===i),await this.applyEffects(),this._bgImage.init(this._canvas.width,this._canvas.height,!1),this._preparedSourceTrack=t}startEffect(e){if(this.isRunning())return void r.A.warn("BackgroundEffect already running!");let{frameRate:t,videoTrack:i}=k(e);if(i!==this._preparedSourceTrack){r.A.warn("Video track mismatch!"),this._clearPreparedStream();return}r.A.info("BackgroundEffect start"),this.skipped=0,this.total=0;let a=Math.min(30,Number(t)||30);return this._renderWorker=new c.A(this._render),this._renderWorker.start(Math.floor(1e3/a)),this._preparedSourceTrack.addEventListener("ended",()=>{this.stopEffect()}),this._preparedStream=this._canvas.captureStream(),this._preparedStream.getVideoTracks().forEach(e=>{e.getSettings=i.getSettings.bind(i)}),this._preparedStream}
1stopEffect(){r.A.info("BackgroundEffect stop"),this._clearPreparedStream(),this._inputVideo.srcObject=null,this._worker.postMessage({id:4}),this._renderWorker&&(this._renderWorker.stop(),this._renderWorker=void 0),this._peerStream&&(this._peerStream.stop(),this._peerStream=void 0),this._pipeline&&(this._pipeline.stop(),this._pipeline=void 0),this._rendering=!1,this._bgImage.stop(),this._initMaskCache(),this._canvas=void 0}_initMaskCache(){this._maskCache={counter:0,buffer:null,bgBuffer:null}}_clearPreparedStream(){this._preparedStream&&(this._preparedStream.getTracks().forEach(e=>e.stop()),this._preparedStream=void 0,this._preparedSourceTrack=void 0)}async _createPipeline(e){let t;this._useWebGL=w&&!!o.A.getLocalValue("WEBGL2"),t=this._useWebGL?await i.e("5591").then(i.bind(i,969610)).then(e=>e.default):await i.e("5960").then(i.bind(i,465675)).then(e=>e.default),this._pipeline=new t(this._canvas,this._mask,this._bgImage,this._blurRadius),await this._pipeline.init(e)}constructor(e,{segmentationWidth:t=0,segmentationHeight:i=0}={}){v(this,"_pipeline",void 0),v(this,"_canvas",void 0),v(this,"_render",()=>{if(!this._pipeline)return;if(this.total++,this._rendering)return void this.skipped++;let e=this._inputVideo.srcObject;if(e instanceof MediaStream&&!e.active){r.A.warn("Source stream has stopped"),this.stopEffect();return}this._rendering=!0,this._runInference()}),v(this,"_onInferenceResult",({bitmap:e,buffer:t,bgBuffer:i,inference:a})=>{null==e||e.close(),this._rendering&&(this._maskCache.buffer=t,this._maskCache.bgBuffer=i,this._maskCache.counter++,this._pipeline.composite({mask:this._useWebGL?new Float32Array(t):new Uint8ClampedArray(t),newMask:a>=0,source:this._inputVideo,background:i&&new Uint8ClampedArray(i)}),this._rendering=!1)}),v(this,"_runInference",async()=>{let e={returnRawMask:this._useWebGL};this._maskCache.buffer&&this._maskCache.counter%2?this._onInferenceResult({buffer:this._maskCache.buffer,bgBuffer:this._maskCache.bgBuffer,inference:-1}):(e.bitmap=await createImageBitmap(this._inputVideo,{resizeWidth:this._mask.width,resizeHeight:this._mask.height}),d.yp||this._bgImage.background||(e.blurRadius=Math.ceil(this._blurRadius/4)),this._worker.postMessage({id:10,...e},[e.bitmap]))}),g.Ay.VB_EFFECT=this,this._useWebGL=!1,this._blurRadius=16,this._initMaskCache(),this._worker=e,this._inputVideo=document.createElement("video"),this._inputVideo.muted=!0,this._inputVideo.playsInline=!0,this._inputCanvas=document.createElement("canvas"),this._inputCtx=(0,d.Io)(this._inputCanvas,{alpha:!1}),this._mask=new l(t,i),this._bgImage=new f,this._renderWorker=null,this._skipped=0,this._total=0,this._effectSettings=new m.A,e.onmessage=e=>{var t;(null==(t=e.data)?void 0:t.id)===11&&this._onInferenceResult(e.data)},p.A.on("CHANGE",e=>{this._effectSettings._states=e,this.applyEffects()})}}let y=new n.A("vb"),S=!1,I=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]));async function C(){if(a)return a;if(S)throw Error("BlurEffect not supported!");if(S=!0,!MediaStreamTrack.prototype.getSettings&&!MediaStreamTrack.prototype.getConstraints)throw Error("BlurEffect not supported! (API failure)");if(!d.W4||!d.hJ)throw Error("API Unsupported");let e="person_v3l",t=h.A.getPath("/javascripts/tflite"),n=await I(),c=n?"tflite-simd":"tflite";r.A.info("Loading",c,e),s=new Worker(new URL(i.p+i.u("8306"),i.b));let o=await new Promise((i,a)=>{s.onmessage=e=>{var t;switch(null==(t=e.data)?void 0:t.id){case 2:i(e.data.info);break;case 3:a(e.data.error)}},s.postMessage({id:1,simd:n,tfscript:`${t}/${c}.js`,tfmodel:`${t}/models/${e}.tflite`})});return a=new E(s,o),S=!1,a}async function A(e,t,i){return y.run(async()=>{if(!a)throw Error("Effect is not available");let s=a.isRunning();if((e||!s)&&await a.setBackgroundImage(t),!e||!s)if(e)return await a.init(i),a.startEffect(i);else s&&a.stopEffect()})}function B(){a&&a.stopEffect()}},174857(e,t,i){i.d(t,{Io:()=>n,W4:()=>a,hJ:()=>s,j9:()=>h,k6:()=>c,yp:()=>r});let a="OffscreenCanvas"in self,s="createImageBitmap"in self,r="filter"in(self.CanvasRenderingContext2D||self.OffscreenCanvasRenderingContext2D||Object).prototype;function n(e,{alpha:t=!0,imageSmoothing:i=!1,willReadFrequently:a=!1}={}){let s=e.getContext("2d",{alpha:t,willReadFrequently:a,desynchronized:!1});return s.imageSmoothingEnabled=i,s.imageSmoothingQuality="low",s}function h(e){return e.getContext("webgl2",{alpha:!0,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0,powerPreference:"low-power",desynchronized:!1})}class c{stop(){}composite(e){}async init(e){this._facingUser=e}setBlur(e){this._blurRadius=e}constructor(e,t,i,a){this._canvas=e,this._segmentation=t,this._bgImg=i,this._blurRadius=a}}}}]);
2//# sourceMappingURL=2264-addf19438d0e659d.chunk.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.