{"version":3,"file":"415.chunk.js","mappings":"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","sources":["VmWidgetUi.tsx","utils/unmount.ts","widgets/ConfiguratorsWidget/UI.tsx","../node_modules/@luxottica/capture-component/src/app/functions/UploadImage.ts","../node_modules/@luxottica/virtual-mirror/src/app/functions/CloseMirror.ts","../node_modules/@luxottica/virtual-mirror/src/app/functions/IsBrowserSupported.ts","../node_modules/@luxottica/virtual-mirror/src/app/functions/Resume.ts","../node_modules/@luxottica/virtual-mirror/src/plugins/VideoRecPlugin.ts","../node_modules/@luxottica/vmp/src/plugins/Dude.ts","../node_modules/@luxottica/vmp/src/plugins/fgImage.ts","../node_modules/@luxottica/vmp/src/plugins/videoBg.ts"],"sourcesContent":["import React, { Suspense } from 'react'\nimport { Config } from './types/config'\n\ntype VmWidgetUiProps = { config: Config }\n\nconst VMWidget = React.lazy(() => import('./VMWidget'))\n\nexport const VmWidgetUi = (props: VmWidgetUiProps) => {\n return (\n \n \n \n )\n}\n","export const unmount: () => void = async () => {\n // use dynamic imports here\n const { store } = await import('@store/index')\n const { setVtoPage } = await import('@store/actions/ui')\n const { FrameAdvisorCapture } = await import('@luxottica/capture-component')\n const { VirtualMirror } = await import('@luxottica/virtual-mirror')\n const { VtoCore } = await import('@luxottica/vto-core')\n const { CONTAINER_ID_PICTURE_MODE, CONTAINER_ID_VIDEO_MODE } = await import(\n '@providers/VtoProvider'\n )\n const { CONTAINER_ID_LIVE_TRY_ON } = await import('@providers/VmProvider')\n\n const {\n ui: { vtoPage },\n } = store.getState()\n\n if (vtoPage === 'live-try-on') {\n await VirtualMirror.closeMirror({ target: CONTAINER_ID_LIVE_TRY_ON })\n } else if (vtoPage === 'picture-mode') {\n await (() =>\n new Promise((resolve, reject) =>\n VtoCore.closeRender({ divId: CONTAINER_ID_PICTURE_MODE }, resolve, reject)\n ))()\n } else if (vtoPage === 'video-mode') {\n await (() =>\n new Promise((resolve, reject) =>\n VtoCore.closeRender({ divId: CONTAINER_ID_VIDEO_MODE }, resolve, reject)\n ))()\n } else if (vtoPage === 'fa-vto-capture') {\n FrameAdvisorCapture.close()\n FrameAdvisorCapture.closeVtoCapture()\n } else if (vtoPage === 'fa-upload') {\n FrameAdvisorCapture.close()\n FrameAdvisorCapture.closeUploadImage()\n }\n\n store.dispatch(setVtoPage('off'))\n}\n","import { Config } from '@customTypes/config'\nimport React, { Suspense } from 'react'\n\ntype Props = { config: Config }\n\nconst Widget = React.lazy(() => import('./Widget'))\n\nexport const Ui = (props: Props) => {\n return (\n \n \n \n )\n}\n","import { loadUploadImage } from '../../components/upload-image/UploadImageLoader';\nimport { MountError, NotInitializedError } from '../../errors/errors';\nimport { setDefaultUploadImageOptions } from '../../helpers/ParameterHelper';\nimport { UploadImageParameters } from '../../interfaces/CaptureParameters';\nimport { hasInitialized } from './HasInitialized';\n\nexport const uploadImage = (\n uploadParams: UploadImageParameters\n): Promise => {\n if (!hasInitialized()) {\n return Promise.reject(new NotInitializedError());\n }\n\n const validatedOptions = setDefaultUploadImageOptions(uploadParams.options);\n return new Promise((resolve, reject) => {\n const container = document.getElementById(uploadParams.target);\n if (!!container) {\n loadUploadImage(container, validatedOptions, () => { resolve(undefined); });\n } else {\n reject(new MountError(uploadParams.target));\n }\n });\n};\n","import ReactDOM from 'react-dom';\nimport { UnmountComponentError } from '../../errors/errors';\nimport { AdobeHelper } from '../../helpers/AdobeHelper';\nimport { AnalyticsHelper } from '../../helpers/AnalyticsHelper';\nimport { AppActions } from '../../reducers/appReducer';\nimport { createLogger, sendAppViewSession } from '../../remotelog/VmLogger';\nimport { VmStore } from '../VmCore';\n\nconst logger = createLogger('CloseMirror');\n\nconst resetLoadingStatus = () => {\n VmStore.dispatch(AppActions.setLoadingStatus({ type: 'WEBCAM_ACCESS', status: false }));\n VmStore.dispatch(AppActions.setLoadingStatus({ type: 'RENDERING', status: false }));\n VmStore.dispatch(AppActions.setLoadingStatus({ type: 'POSETRACKER', status: false }));\n};\n\n// we return a promise because it's easy to keep this backwards compatibility here\n// but sneaky on client code\nconst closeMirror = (target: string): Promise => {\n try {\n // reset all loading statuses, this will display the loading screen again on a new VM instance\n resetLoadingStatus();\n AnalyticsHelper.onCloseMirror();\n logger.debug('closing mirror for target div {}', target);\n const container = document.getElementById(target);\n\n if (ReactDOM.unmountComponentAtNode(container)) {\n logger.debug('closed mirror for target div {}', target);\n sendAppViewSession.close(target);\n\n } else {\n logger.debug('closing mirror for target div {} failed', target);\n sendAppViewSession.closeError(target);\n const unmountComponentError = new UnmountComponentError(target);\n AdobeHelper.sendError(unmountComponentError);\n return Promise.reject(unmountComponentError);\n }\n return Promise.resolve();\n } catch (e) {\n logger.debug('closing mirror for target div {} failed: {}', target, e.message);\n const unmountComponentError = new UnmountComponentError(target);\n try {\n AdobeHelper.sendError(unmountComponentError);\n } catch (e) {\n return Promise.reject(e);\n }\n return Promise.reject(unmountComponentError);\n }\n};\n\nexport {\n closeMirror\n};\n","export const isBrowserSupported: () => Promise = () => {\n return import('../../helpers/SupportedFeaturesHelper')\n .then(({ SupportedFeaturesHelper }) => {\n return SupportedFeaturesHelper.getSupportedFeatures();\n })\n .then((supportedFeatures): Promise => {\n return Promise.resolve(\n supportedFeatures.wasmSupport &&\n supportedFeatures.webcamAccess &&\n supportedFeatures.webcamAvailable &&\n supportedFeatures.webglRendering\n );\n });\n};\n","import { EventBus } from '@luxottica/vm-eventbus';\nimport { Events } from '../../constants/Events';\nimport { NotInitializedError } from '../../errors/errors';\nimport { createLogger } from '../../remotelog/VmLogger';\nimport { VmWebCam } from '../mirror/VmWebCam';\nimport { vmIsInitialized } from '../VmCore';\n\nconst logger = createLogger('Resume');\n\nconst resume = (): Promise => {\n if (!vmIsInitialized()) {\n return Promise.reject(new NotInitializedError());\n } else {\n return VmWebCam.getInstance().play().then(() => {\n EventBus.publish(Events.RESUME, {});\n }).catch((e) => {\n logger.error(e);\n });\n }\n};\n\nexport {\n resume\n};\n","/* #if _PERFORMANCE_MEASUREMENTS\nimport { dispatchEvent, performanceEvents as PEV } from '../helpers/CallbackHelper';\n// #endif */\n\nimport { PluginPayload, VmEffect, videoRecOptions } from '../interfaces/PluginInterface';\nimport { toBlobURL } from '@ffmpeg/util';\nimport { FileData } from '@ffmpeg/ffmpeg/dist/esm/types';\nimport { FFmpeg } from '@ffmpeg/ffmpeg';\n\nlet ffmpegEncoder: FFmpeg;\n\nexport class VideoRecPlugin implements VmEffect {\n private options: videoRecOptions;\n public orderOfExecution: number;\n\n\n constructor(orderOfExecution: number) {\n this.orderOfExecution = orderOfExecution;\n }\n\n public static get requirements() {\n return {\n prominentSubjectSegmenter: false\n };\n }\n\n async initialize(payload: PluginPayload) {\n\n if (!ffmpegEncoder) {\n \n ffmpegEncoder = new FFmpeg();\n \n const baseURL = 'https://unpkg.com/@ffmpeg/core@0.12.4/dist/umd';\n \n await ffmpegEncoder.load({\n coreURL: await toBlobURL(`${baseURL}/ffmpeg-core.js`, 'text/javascript'),\n wasmURL: await toBlobURL(`${baseURL}/ffmpeg-core.wasm`, 'application/wasm')\n } ).then(() => {\n ffmpegEncoder.on('log', ({ type, message }) => {\n console.debug(type, message);\n });\n });\n\n }\n \n let recordLength: number;\n this.options = payload.options as videoRecOptions;\n if (this.options && this.options.lengthMs) {\n if (this.options.lengthMs > 30000) {\n recordLength = 30000;\n } else if (this.options.lengthMs < 1000) {\n recordLength = 5000;\n } else {\n recordLength = this.options.lengthMs;\n }\n } else {\n recordLength = 5000;\n }\n\n function generateRandomString(length: number): string {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * characters.length));\n }\n return result;\n }\n\n const filenameId: string = generateRandomString(5);\n let mediaRecorder: MediaRecorder | null = null;\n const recordedChunks: Blob[] = [];\n const finalCanvas = document.getElementById('mirror-canvas-output') as HTMLCanvasElement;\n\n const startRecording = () => {\n const stream = finalCanvas.captureStream(24);\n mediaRecorder = new MediaRecorder(stream, {\n audioBitsPerSecond: 0,\n videoBitsPerSecond: 2500000,\n });\n\n mediaRecorder.ondataavailable = (event) => {\n if (event.data && event.data.size > 0) {\n recordedChunks.push(event.data);\n }\n };\n\n mediaRecorder.start();\n };\n\n const transcode = async (webcamData: FileData) => {\n const name = generateRandomString(5);\n await ffmpegEncoder.writeFile(name, webcamData);\n\n await ffmpegEncoder.exec(['-i', name, '-vcodec', 'libx264', '-crf', '27', '-preset', 'ultrafast', '-c:a', 'copy', '-r', '24', `${filenameId}.mp4`]);\n\n let fileData = await ffmpegEncoder.readFile(`${filenameId}.mp4`);\n let data = new Uint8Array(fileData as ArrayBuffer);\n\n this.options.res(new Blob([data.buffer]));\n \n // this section has been moved in the UI. Uncomment it to test if necessary\n /*\n const video = document.createElement('video') as HTMLVideoElement;\n video.src = URL.createObjectURL(new Blob([data.buffer]));\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.href = video.src;\n a.download = `${filenameId}.mp4`;\n a.click();\n URL.revokeObjectURL(video.src);\n document.body.removeChild(a);\n */\n\n await ffmpegEncoder.deleteFile(`${filenameId}.mp4`);\n await ffmpegEncoder.deleteFile(name);\n data = undefined;\n fileData = undefined;\n };\n\n const stopRecording = () => {\n if (mediaRecorder && mediaRecorder.state !== 'inactive') {\n mediaRecorder.onstop = async () => {\n const blob = new Blob(recordedChunks);\n const array = await blob.arrayBuffer();\n /* #if _PERFORMANCE_MEASUREMENTS\n dispatchEvent(PEV.onNewTranscodeFile);\n // #endif */\n await transcode(new Uint8Array(array) as FileData);\n /* #if _PERFORMANCE_MEASUREMENTS\n dispatchEvent(PEV.onEndTranscodeFile);\n // #endif */\n };\n mediaRecorder.stop();\n }\n };\n\n startRecording();\n\n setTimeout(() => { stopRecording(); }, recordLength);\n\n return Promise.resolve();\n }\n\n finalize(context?: CanvasRenderingContext2D) {\n return context;\n }\n\n applyFilter(context?: CanvasRenderingContext2D): Promise {\n return Promise.resolve(context);\n }\n}","import { PoseResponse } from '@luxottica/vm-posetracker-faceweb';\nimport { VmEffect } from '../Effects';\n\n////////////////////////\n//// Plugin Classes ////\n////////////////////////\n\nexport class DudePlugin implements VmEffect {\n private supportCanvas: HTMLCanvasElement;\n private supportContext: WebGLRenderingContext;\n private program: WebGLProgram;\n public orderOfExecution: number;\n\n private startTime: number | undefined = undefined;\n private resolutionLocation: WebGLUniformLocation;\n private timeUniformLocation: WebGLUniformLocation;\n private maskResolutionUniformLocation: WebGLUniformLocation;\n\n private textures: ReturnType;\n private positionBuffer: WebGLBuffer;\n private vertexShader: WebGLShader;\n private fragmentShader: WebGLShader;\n\n constructor(orderOfExecution: number) {\n this.orderOfExecution = orderOfExecution;\n }\n\n public static get requirements() {\n return {\n prominentSubjectSegmenter: true\n };\n }\n\n initialize() {\n this.supportCanvas = document.createElement('canvas');\n this.supportContext = this.supportCanvas.getContext('webgl');\n \n this.program = this.createProgram(this.supportContext);\n this.createBuffer(this.supportContext, this.program);\n this.textures = this.createTextures(this.supportContext, this.program);\n return Promise.resolve();\n }\n\n finalize(context?: CanvasRenderingContext2D) {\n this.supportContext.deleteProgram(this.program);\n this.supportContext.deleteBuffer(this.positionBuffer);\n this.supportContext.deleteShader(this.vertexShader);\n this.supportContext.deleteShader(this.fragmentShader);\n this.supportContext.deleteTexture(this.textures.mask.texture);\n this.supportContext.deleteTexture(this.textures.user.texture);\n this.supportCanvas.width = 0;\n this.supportCanvas.height = 0;\n if (this.supportContext.getSupportedExtensions().includes('WEBGL_lose_context')) {\n this.supportContext.getExtension('WEBGL_lose_context').loseContext();\n }\n this.supportContext = null;\n this.supportCanvas = null;\n return context;\n }\n\n applyFilter(\n context?: CanvasRenderingContext2D, // the image that has been processed by the pipeline\n pose?: PoseResponse // this contains the original image processed by the posetracker, and other details like mask, pose, etc..\n ): Promise {\n\n const mask = pose?.result.segmentationMask as ImageBitmap;\n if (mask === undefined) {\n return Promise.resolve(context);\n }\n\n const w = context.canvas.width;\n const h = context.canvas.height;\n this.supportCanvas.width = w;\n this.supportCanvas.height = h;\n\n this.draw(this.supportContext, mask, context.canvas);\n\n context.drawImage(this.supportContext.canvas, 0, 0, w, h, 0, 0, w, h);\n return Promise.resolve(context);\n }\n\n private draw(gl: WebGLRenderingContext, mask: ImageBitmap, user: TexImageSource) {\n if (this.startTime === undefined) {\n this.startTime = new Date().getTime();\n }\n const currentTime = new Date().getTime();\n const elapsedTime = (currentTime - this.startTime) / 10000;\n\n // update viewport size\n gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);\n\n gl.uniform2fv(this.maskResolutionUniformLocation, [mask.width, mask.height]);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, this.textures.mask.texture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n this.textures.mask.params.level,\n this.textures.mask.params.format,\n this.textures.mask.params.format,\n this.textures.mask.params.type,\n mask,\n );\n\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, this.textures.user.texture);\n gl.texImage2D(\n gl.TEXTURE_2D,\n this.textures.user.params.level,\n this.textures.user.params.format,\n this.textures.user.params.format,\n this.textures.user.params.type,\n user,\n );\n\n gl.uniform2f(this.resolutionLocation, gl.canvas.width, gl.canvas.height);\n gl.uniform1f(this.timeUniformLocation, elapsedTime);\n\n // disegna il triangolo a tutto schermo\n gl.drawArrays(gl.TRIANGLES, 0, 6);\n }\n\n private createProgram(gl: WebGLRenderingContext) {\n\n // definisci gli shader\n const vertexShaderSource = `\nattribute vec4 a_position;\nattribute vec2 a_uv;\nvarying vec2 v_uv;\nvoid main() {\n gl_Position = a_position;\n v_uv = a_uv;\n}\n`;\n const fragmentShaderSource = `\nprecision mediump float;\nuniform float u_time;\nuniform vec2 u_resolution;\nuniform vec2 u_maskResolution;\nuniform sampler2D u_textureMask;\nuniform sampler2D u_textureUser;\nvarying vec2 v_uv;\n\n// inspired from https://www.shadertoy.com/view/wtcyzX\n// TODO: check https://github.com/lettier/3d-game-shaders-for-beginners/blob/master/demonstration/shaders/fragment/posterize.frag\n// TODO: if above code is imported remember to link the license\nvec4 posterize(vec4 inputColor){\n float gamma = 0.85;\n float numColors = 3.0;\n \n\n vec3 c = inputColor.rgb;\n c = pow(c, vec3(gamma, gamma, gamma)) * 2.3;\n c = c * numColors;\n c = floor(c);\n c = c / numColors;\n c = pow(c, vec3(1.0/gamma)) / 2.3;\n \n return vec4(c, inputColor.a);\n}\n\n// inspired from https://stackoverflow.com/a/68690138\nvec2 getUv(float resRatio) {\n vec2 uv = gl_FragCoord.xy / u_resolution.xy;\n float imageRatio = u_maskResolution.x / u_maskResolution.y;\n float imageResRatio = imageRatio / resRatio;\n\n float widthScale = 1.;\n float heightScale = 1.;\n\n bool portraitTexture = imageRatio < 1.;\n bool portraitFrame = resRatio < 1.;\n\n bool contentMode = imageRatio > resRatio && u_resolution.x < u_resolution.y;\n if(contentMode) {\n if(portraitFrame)\n widthScale = 1. / imageResRatio;\n else\n heightScale = imageResRatio;\n } else {\n if(portraitFrame || imageRatio < resRatio)\n heightScale = imageResRatio;\n else\n widthScale = 1. / imageResRatio;\n }\n \n uv = vec2(widthScale, heightScale) * (uv - vec2(0.5)) + vec2(0.5);\n uv.y = 1. - uv.y;\n return uv;\n}\n\n/* \ninspired from\nhttps://thebookofshaders.com/07/\n*/\nvoid main() {\n vec2 st = gl_FragCoord.xy/u_resolution.xy;\n vec3 color = vec3(0.0);\n float red = 0.0;\n float green = 0.0;\n float blue = 0.0;\n\n // Remap the space to -1. to 1.\n st = st * 2.-1.;\n // maintain the aspect ratio\n float resRatio = (u_resolution.x/u_resolution.y);\n st.x *= resRatio;\n\n vec2 pos = st * 1.;\n\n float r = length(pos);\n float a = atan(pos.y,pos.x);\n\n float wavy = (abs(cos(u_time))+.5) * 0.3;\n red = length( st * cos((a * 5.) + (sin((r - u_time) * 9.) * wavy)) );\n green = length( st * cos((a * 9.) + (sin((r - u_time) * 19.) * wavy)) );\n blue = length( st * cos((a * 19.) + (sin((r - u_time) * 29.) * wavy)) );\n \n vec2 uv = getUv(resRatio);\n \n vec4 maskColor = texture2D(u_textureMask, uv);\n vec4 userColor = posterize(texture2D(u_textureUser, uv));\n \n vec4 dude = vec4(vec3(1.-red,1.-green,1.-blue) + vec3(0.6,0.1,0.3),1.);\n gl_FragColor = mix(dude, userColor, vec4(smoothstep(0.,1.,pow(maskColor.r, 2.))));\n}\n`;\n\n // crea gli shader\n this.vertexShader = gl.createShader(gl.VERTEX_SHADER);\n gl.shaderSource(this.vertexShader, vertexShaderSource);\n gl.compileShader(this.vertexShader);\n\n this.fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);\n gl.shaderSource(this.fragmentShader, fragmentShaderSource);\n gl.compileShader(this.fragmentShader);\n\n // crea il programma shader\n const program = gl.createProgram();\n gl.attachShader(program, this.vertexShader);\n gl.attachShader(program, this.fragmentShader);\n gl.linkProgram(program);\n\n // add this for extra debugging\n if ( !gl.getProgramParameter( program, gl.LINK_STATUS) ) {\n const info = gl.getProgramInfoLog(program);\n throw new Error(`Could not compile WebGL program.\n ${info}\n\n Vertex\n ${gl.getShaderInfoLog(this.vertexShader)}\n\n Fragment\n ${gl.getShaderInfoLog(this.fragmentShader)}\n `);\n }\n\n // usa il programma shader\n gl.useProgram(program);\n\n // retrieve uniform addresses\n this.timeUniformLocation = gl.getUniformLocation(program, 'u_time');\n this.resolutionLocation = gl.getUniformLocation(program, 'u_resolution');\n this.maskResolutionUniformLocation = gl.getUniformLocation(program, 'u_maskResolution');\n\n return program;\n }\n\n private createBuffer(gl: WebGLRenderingContext, program: WebGLProgram) {\n // create the buffer\n this.positionBuffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n const positions = [\n -1, -1, 0, 0,\n -1, 1, 0, 1,\n 1, 1, 1, 1,\n 1, 1, 1, 1,\n 1, -1, 1, 0,\n -1, -1, 0, 0,\n ];\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(positions), gl.STATIC_DRAW);\n // associate attributes to buffers\n const positionAttributeLocation = gl.getAttribLocation(program, 'a_position');\n gl.enableVertexAttribArray(positionAttributeLocation);\n gl.vertexAttribPointer(positionAttributeLocation, 2, gl.FLOAT, false, 16, 0);\n\n const uvAttributeLocation = gl.getAttribLocation(program, 'a_uv');\n gl.enableVertexAttribArray(uvAttributeLocation);\n gl.vertexAttribPointer(uvAttributeLocation, 2, gl.FLOAT, false, 16, 8);\n }\n\n private createTextures(gl: WebGLRenderingContext, program: WebGLProgram): {\n mask: ReturnType,\n user: ReturnType\n } {\n // create texture\n const mask = this.createTexture(gl, 0, 'u_textureMask', program);\n const user = this.createTexture(gl, 1, 'u_textureUser', program);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, mask.texture);\n gl.activeTexture(gl.TEXTURE1);\n gl.bindTexture(gl.TEXTURE_2D, user.texture);\n return {\n mask,\n user,\n };\n }\n\n private createTexture(gl: WebGLRenderingContext, id: number, uniform: string, program: WebGLProgram): {\n texture: WebGLTexture,\n location: WebGLUniformLocation,\n params: {\n level: number,\n format: number,\n border: number,\n type: number,\n }\n } {\n const texture = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n const level = 0;\n const internalFormat = gl.RGBA;\n const width = 1;\n const height = 1;\n const border = 0;\n const format = gl.RGBA;\n const type = gl.UNSIGNED_BYTE;\n const data = new Uint8Array([0, 0, 255, 255]);\n gl.texImage2D(gl.TEXTURE_2D, level, internalFormat, width, height, border, format, type, data);\n \n // set texture parameters\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\n \n // set texture location\n const location = gl.getUniformLocation(program, uniform);\n gl.uniform1i(location, id);\n return {\n texture,\n location,\n params: {\n border,\n format,\n level,\n type\n }\n };\n }\n}\n","import { FgImageOptions, PluginPayload, VmEffect } from '../Effects';\nimport { BackgroudOptions, BackgroundData } from '../Effects';\nimport { fetchEndpoint } from '../Effects';\n\ninterface FgImagePayload extends PluginPayload {\n options: FgImageOptions,\n glasses: MirrorB3dAsset | MirrorGltfAsset\n}\nexport class FgImage implements VmEffect {\n private options: FgImageOptions;\n public orderOfExecution: number;\n private dataOptions: BackgroudOptions;\n private image: HTMLImageElement;\n \n constructor(orderOfExecution: number) {\n this.orderOfExecution = orderOfExecution;\n }\n \n public static get requirements() {\n return {};\n } \n\n async initialize(payload: FgImagePayload) {\n\n this.options = payload.options as FgImageOptions;\n const endpoint = fetchEndpoint('foreground',this.options.identifier);\n try {\n const response = await fetch(endpoint);\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n const jsonData = (await response.json()) as BackgroundData;\n this.dataOptions = jsonData.options;\n this.image = new Image();\n this.image.src = this.dataOptions.layerUrlA.toString();\n this.image.crossOrigin = '*';\n } catch (error) {\n console.error('There was a problem fetching the JSON file:', error);\n }\n\n return;\n }\n\n finalize(context?: CanvasRenderingContext2D) {\n return context;\n }\n\n applyFilter(context?: CanvasRenderingContext2D): Promise {\n\n const finalCanvas = document.getElementById('mirror-canvas-output') as HTMLCanvasElement;\n const imageCanvas = context.canvas;\n const w = imageCanvas.width;\n const h = imageCanvas.height;\n const scaleW = finalCanvas.height / imageCanvas.height;\n const scaleH = finalCanvas.width / imageCanvas.width;\n const ratio = finalCanvas.height / finalCanvas.width;\n const diffRatio = ratio > imageCanvas.height / imageCanvas.width;\n const offsetW = diffRatio ? (( imageCanvas.width * scaleW) - finalCanvas.width) / 2 : (( imageCanvas.height * scaleW) - finalCanvas.height) / 2;\n const offsetH = !diffRatio ? (( imageCanvas.height * scaleH) - finalCanvas.height) / 2 : (( imageCanvas.width * scaleH) - finalCanvas.width) / 2;\n\n context.globalCompositeOperation = 'source-over';\n context.scale(-1, 1);\n if (!this.image) {\n return Promise.resolve(context);\n }\n const scale = finalCanvas.height / imageCanvas.height;\n const offset = (( imageCanvas.width * scale) - finalCanvas.width) / 2;\n const canvasRatio = finalCanvas.height / finalCanvas.width;\n /*if (this.image) {\n context.drawImage(\n this.image, \n 0, \n 0, \n this.image.width, \n this.image.height, \n - w + this.dataOptions.position.x + (offsetW / scaleW),\n this.dataOptions.position.y + (offsetH / scaleH),\n this.image.width,\n this.image.height );\n }*/\n if (this.dataOptions.fit == 'fill') {\n context.drawImage(\n this.image,\n 0,\n 0,\n this.image.width,\n this.image.height,\n - w + this.dataOptions.position.x + (offset / scale),\n this.dataOptions.position.y,\n finalCanvas.width / scale,\n h,\n );\n } else if (this.dataOptions.fit == 'cover') {\n \n const newW = canvasRatio < 1 ? w : this.image.width * h / this.image.height;\n const newH = canvasRatio > 1 ? h : this.image.height * (newW / this.image.width);\n context.drawImage(\n this.image,\n 0,\n 0,\n this.image.width,\n this.image.height,\n canvasRatio < 1 ? -w : - w + (w-newW)/2 + this.dataOptions.position.x,\n canvasRatio > 1 ? 0 : (h-newH)/2 + this.dataOptions.position.y,\n newW,\n newH,\n );\n } else if (this.dataOptions.fit == 'none') {\n context.drawImage(\n this.image, \n 0, \n 0, \n this.image.width, \n this.image.height, \n - w + this.dataOptions.position.x + (offsetW / scaleW),\n this.dataOptions.position.y + (offsetH / scaleH),\n this.image.width,\n this.image.height );\n }\n context.scale(-1, 1);\n return Promise.resolve(context);\n }\n}\n","import { PoseResponse } from '@luxottica/vm-posetracker-faceweb';\nimport { videoBgOptions, PluginPayload, VmEffect } from '../Effects';\nimport { BackgroudOptions, BackgroundData } from '../Effects';\nimport { fetchEndpoint } from '../Effects';\n\nexport class VideoBg implements VmEffect {\n private supportCanvas: HTMLCanvasElement;\n private options: videoBgOptions;\n public orderOfExecution: number;\n private supportContext: CanvasRenderingContext2D;\n private loadedVideo: HTMLVideoElement;\n private dataOptions: BackgroudOptions;\n private playing = false;\n \n constructor(orderOfExecution: number) {\n this.orderOfExecution = orderOfExecution;\n }\n\n public static get requirements() {\n return {\n prominentSubjectSegmenter: true\n };\n } \n\n initialize(payload: PluginPayload) {\n\n this.options = payload.options as videoBgOptions;\n const endpoint = fetchEndpoint('video-background',this.options.identifier);\n\n fetch(endpoint)\n .then((response) => {\n if (!response.ok) {\n throw new Error('Network response was not ok');\n }\n return response.json() as Promise;\n })\n .then((jsonData) => {\n this.dataOptions = jsonData.options;\n this.supportCanvas = document.createElement('canvas');\n this.supportContext = this.supportCanvas.getContext('2d');\n const ctx = this.supportContext;\n this.loadedVideo = document.createElement('video');\n const video = this.loadedVideo;\n const source = document.createElement('source');\n source.src = jsonData.options.layerUrlA.toString();\n source.type = 'video/mp4';\n video.appendChild(source);\n video.crossOrigin = '*';\n video.loop = true;\n video.playsInline = true;\n video.onloadedmetadata = () => {\n this.supportCanvas.width = video.videoWidth;\n this.supportCanvas.height = video.videoHeight;\n };\n \n video.addEventListener('play', () => {\n const step = () => {\n if (video && video.readyState === 4) {\n this.playing = true;\n ctx.drawImage(video, 0, 0, video.videoWidth, video.videoHeight);\n }\n \n requestAnimationFrame(step);\n };\n \n requestAnimationFrame(step);\n }); \n \n if (video) {\n video.play();\n } \n })\n .catch((error) => {\n console.error('There was a problem fetching the JSON file:', error);\n });\n\n\n \n //document.body.appendChild(video)\n return Promise.resolve();\n }\n\n finalize(context?: CanvasRenderingContext2D) {\n return context;\n }\n\n applyFilter(context?: CanvasRenderingContext2D, pose?: PoseResponse): Promise {\n \n const mask = pose?.result.segmentationMask;\n if (mask === undefined || !this.supportContext || !this.playing) {\n return Promise.resolve(context);\n }\n\n \n const w = context.canvas.width;\n const h = context.canvas.height;\n \n \n context.globalCompositeOperation = 'destination-in';\n context.drawImage(\n mask, \n 0,\n 0,\n mask.width, \n mask.height, \n 0, \n 0, \n mask.width, \n mask.height);\n\n context.globalCompositeOperation = 'destination-over';\n const imageCanvas = context.canvas;\n const finalCanvas = document.getElementById('mirror-canvas-output') as HTMLCanvasElement;\n const canvasRatio = finalCanvas.height / finalCanvas.width;\n const scale = finalCanvas.height / imageCanvas.height;\n const offset = (( imageCanvas.width * scale) - finalCanvas.width) / 2;\n context.scale(-1, 1);\n\n if (!this.loadedVideo) {\n return Promise.resolve(context);\n }\n\n if (this.dataOptions.fit == 'fill') {\n context.drawImage(\n this.supportContext.canvas,\n 0,\n 0,\n this.supportContext.canvas.width,\n this.supportContext.canvas.height,\n - w + this.dataOptions.position.x + (offset / scale),\n this.dataOptions.position.y,\n finalCanvas.width / scale,\n h,\n );\n } else if (this.dataOptions.fit == 'cover') {\n\n const newW = canvasRatio < 1 ? w : this.supportContext.canvas.width * h / this.supportContext.canvas.height;\n const newH = canvasRatio > 1 ? h : this.supportContext.canvas.height * (newW / this.supportContext.canvas.width);\n context.drawImage(\n this.supportContext.canvas,\n 0,\n 0,\n this.supportContext.canvas.width,\n this.supportContext.canvas.height,\n canvasRatio < 1 ? -w : - w + (w-newW)/2 + this.dataOptions.position.x,\n canvasRatio > 1 ? 0 : (h-newH)/2 + this.dataOptions.position.y,\n newW,\n newH,\n );\n }\n context.scale(-1, 1);\n \n /*context.drawImage(\n this.supportContext.canvas, \n 0, \n 0, \n this.loadedVideo.videoWidth, \n this.loadedVideo.videoHeight, \n this.dataOptions.position.x,\n this.dataOptions.position.y, \n w, \n h\n );*/\n return Promise.resolve(context);\n }\n}"],"names":["VMWidget","React","VmWidgetUi","props","Suspense","fallback","config","unmount","store","setVtoPage","FrameAdvisorCapture","VirtualMirror","VtoCore","CONTAINER_ID_PICTURE_MODE","CONTAINER_ID_VIDEO_MODE","CONTAINER_ID_LIVE_TRY_ON","getState","vtoPage","ui","closeMirror","target","Promise","resolve","reject","closeRender","divId","close","closeVtoCapture","closeUploadImage","dispatch","Widget","Ui","uploadImage","uploadParams","hasInitialized","NotInitializedError","validatedOptions","setDefaultUploadImageOptions","options","container","document","getElementById","loadUploadImage","undefined","MountError","logger","createLogger","VmStore","AppActions","type","status","AnalyticsHelper","debug","ReactDOM","sendAppViewSession","unmountComponentError","UnmountComponentError","AdobeHelper","e","message","isBrowserSupported","then","_ref","SupportedFeaturesHelper","getSupportedFeatures","supportedFeatures","wasmSupport","webcamAccess","webcamAvailable","webglRendering","resume","vmIsInitialized","VmWebCam","play","EventBus","Events","catch","error","ffmpegEncoder","VideoRecPlugin","constructor","orderOfExecution","this","initialize","payload","generateRandomString","length","characters","result","i","charAt","Math","floor","random","FFmpeg","baseURL","toBlobURL","coreURL","wasmURL","load","on","console","_this","recordLength","lengthMs","filenameId","mediaRecorder","recordedChunks","finalCanvas","startRecording","stream","captureStream","MediaRecorder","audioBitsPerSecond","videoBitsPerSecond","ondataavailable","event","data","size","push","start","transcode","webcamData","name","writeFile","exec","readFile","fileData","Uint8Array","res","Blob","buffer","deleteFile","stopRecording","state","onstop","blob","arrayBuffer","array","stop","setTimeout","finalize","context","applyFilter","prominentSubjectSegmenter","DudePlugin","_classCallCheck","_defineProperty","_createClass","key","value","supportCanvas","createElement","supportContext","getContext","program","createProgram","createBuffer","textures","createTextures","deleteProgram","deleteBuffer","positionBuffer","deleteShader","vertexShader","fragmentShader","deleteTexture","mask","texture","user","width","height","getSupportedExtensions","includes","getExtension","loseContext","pose","segmentationMask","w","canvas","h","draw","drawImage","gl","startTime","Date","getTime","elapsedTime","viewport","uniform2fv","maskResolutionUniformLocation","activeTexture","TEXTURE0","bindTexture","TEXTURE_2D","texImage2D","params","level","format","TEXTURE1","uniform2f","resolutionLocation","uniform1f","timeUniformLocation","drawArrays","TRIANGLES","createShader","VERTEX_SHADER","shaderSource","compileShader","FRAGMENT_SHADER","attachShader","linkProgram","getProgramParameter","LINK_STATUS","info","getProgramInfoLog","Error","concat","getShaderInfoLog","useProgram","getUniformLocation","bindBuffer","ARRAY_BUFFER","bufferData","Float32Array","STATIC_DRAW","positionAttributeLocation","getAttribLocation","enableVertexAttribArray","vertexAttribPointer","FLOAT","uvAttributeLocation","createTexture","id","uniform","internalFormat","RGBA","UNSIGNED_BYTE","texParameteri","TEXTURE_WRAP_S","CLAMP_TO_EDGE","TEXTURE_WRAP_T","TEXTURE_MIN_FILTER","LINEAR","location","uniform1i","border","get","FgImage","endpoint","fetchEndpoint","identifier","_context","fetch","response","ok","json","jsonData","dataOptions","image","Image","src","layerUrlA","toString","crossOrigin","_callee","imageCanvas","scaleW","scaleH","diffRatio","offsetW","offsetH","globalCompositeOperation","scale","offset","canvasRatio","fit","position","x","y","newW","newH","VideoBg","ctx","loadedVideo","video","source","appendChild","loop","playsInline","onloadedmetadata","videoWidth","videoHeight","addEventListener","requestAnimationFrame","step","readyState","playing"],"sourceRoot":""}