(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[337],{2563:function(module){module.exports={vertex:"precision mediump float;\n\nattribute vec2 aPosition;\nattribute vec2 aLumaPosition;\nattribute vec2 aChromaPosition;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vLumaPosition = aLumaPosition;\n vChromaPosition = aChromaPosition;\n}\n",fragment:"// inspired by https://github.com/mbebenita/Broadway/blob/master/Player/canvas.js\n\nprecision mediump float;\n\nuniform sampler2D uTextureY;\nuniform sampler2D uTextureCb;\nuniform sampler2D uTextureCr;\nvarying vec2 vLumaPosition;\nvarying vec2 vChromaPosition;\nvoid main() {\n // Y, Cb, and Cr planes are uploaded as ALPHA textures.\n float fY = texture2D(uTextureY, vLumaPosition).w;\n float fCb = texture2D(uTextureCb, vChromaPosition).w;\n float fCr = texture2D(uTextureCr, vChromaPosition).w;\n\n // Premultipy the Y...\n float fYmul = fY * 1.1643828125;\n\n // And convert that to RGB!\n gl_FragColor = vec4(\n fYmul + 1.59602734375 * fCr - 0.87078515625,\n fYmul - 0.39176171875 * fCb - 0.81296875 * fCr + 0.52959375,\n fYmul + 2.017234375 * fCb - 1.081390625,\n 1\n );\n}\n",vertexStripe:"precision mediump float;\n\nattribute vec2 aPosition;\nattribute vec2 aTexturePosition;\nvarying vec2 vTexturePosition;\n\nvoid main() {\n gl_Position = vec4(aPosition, 0, 1);\n vTexturePosition = aTexturePosition;\n}\n",fragmentStripe:"// extra 'stripe' texture fiddling to work around IE 11's poor performance on gl.LUMINANCE and gl.ALPHA textures\n\nprecision mediump float;\n\nuniform sampler2D uStripe;\nuniform sampler2D uTexture;\nvarying vec2 vTexturePosition;\nvoid main() {\n // Y, Cb, and Cr planes are mapped into a pseudo-RGBA texture\n // so we can upload them without expanding the bytes on IE 11\n // which doesn't allow LUMINANCE or ALPHA textures\n // The stripe textures mark which channel to keep for each pixel.\n // Each texture extraction will contain the relevant value in one\n // channel only.\n\n float fLuminance = dot(\n texture2D(uStripe, vTexturePosition),\n texture2D(uTexture, vTexturePosition)\n );\n\n gl_FragColor = vec4(0, 0, 0, fLuminance);\n}\n"}},3605:function(module){!function(){"use strict";function FrameSink(canvas,options){throw Error("abstract")}FrameSink.prototype.drawFrame=function(buffer){throw Error("abstract")},FrameSink.prototype.clear=function(){throw Error("abstract")},module.exports=FrameSink}()},2333:function(module,__unused_webpack_exports,__webpack_require__){!function(){"use strict";var FrameSink=__webpack_require__(3605),YCbCr=__webpack_require__(9098);function SoftwareFrameSink(canvas){var self1=this,ctx=canvas.getContext("2d"),imageData=null,resampleCanvas=null,resampleContext=null;return self1.drawFrame=function(buffer){var cropWidth,cropHeight,drawContext,format=buffer.format;(canvas.width!==format.displayWidth||canvas.height!==format.displayHeight)&&(canvas.width=format.displayWidth,canvas.height=format.displayHeight),(null===imageData||imageData.width!=format.width||imageData.height!=format.height)&&function(width,height){for(var data=(imageData=ctx.createImageData(width,height)).data,pixelCount=width*height*4,i=0;iRGB conversion * * @author Brion Vibber * @copyright 2014-2019 * @license MIT-style * * @param {YUVFrame} buffer - input frame buffer * @param {Uint8ClampedArray} output - array to draw RGBA into * Assumes that the output array already has alpha channel set to opaque. */ function(buffer,output){var width=0|buffer.format.width,height=0|buffer.format.height,hdec=0|depower(buffer.format.width/buffer.format.chromaWidth),vdec=0|depower(buffer.format.height/buffer.format.chromaHeight),bytesY=buffer.y.bytes,bytesCb=buffer.u.bytes,bytesCr=buffer.v.bytes,strideY=0|buffer.y.stride,strideCb=0|buffer.u.stride,strideCr=0|buffer.v.stride,outStride=width<<2,YPtr=0,Y0Ptr=0,Y1Ptr=0,CbPtr=0,CrPtr=0,outPtr=0,outPtr0=0,outPtr1=0,colorCb=0,colorCr=0,multY=0,multCrR=0,multCbCrG=0,multCbB=0,x=0,y=0,xdec=0,ydec=0;if(1==hdec&&1==vdec)for(y=0,outPtr0=0,outPtr1=outStride,ydec=0;y>8,output[outPtr0+1]=multY-multCbCrG>>8,output[outPtr0+2]=multY+multCbB>>8,outPtr0+=4,multY=298*bytesY[Y0Ptr++]|0,output[outPtr0]=multY+multCrR>>8,output[outPtr0+1]=multY-multCbCrG>>8,output[outPtr0+2]=multY+multCbB>>8,outPtr0+=4,multY=298*bytesY[Y1Ptr++]|0,output[outPtr1]=multY+multCrR>>8,output[outPtr1+1]=multY-multCbCrG>>8,output[outPtr1+2]=multY+multCbB>>8,outPtr1+=4,multY=298*bytesY[Y1Ptr++]|0,output[outPtr1]=multY+multCrR>>8,output[outPtr1+1]=multY-multCbCrG>>8,output[outPtr1+2]=multY+multCbB>>8,outPtr1+=4;outPtr0+=outStride,outPtr1+=outStride,ydec++}else for(y=0,outPtr=0;y>vdec,YPtr=y*strideY|0,CbPtr=ydec*strideCb|0,CrPtr=ydec*strideCr|0;x>hdec)],multCrR=(409*(colorCr=0|bytesCr[CrPtr+xdec])|0)-57088|0,multCbCrG=(100*colorCb|0)+(208*colorCr|0)-34816|0,multCbB=(516*colorCb|0)-70912|0,multY=298*bytesY[YPtr++]|0,output[outPtr]=multY+multCrR>>8,output[outPtr+1]=multY-multCbCrG>>8,output[outPtr+2]=multY+multCbB>>8,outPtr+=4}}},6117:function(module){module.exports=/** * Convert a ratio into a bit-shift count; for instance a ratio of 2 * becomes a bit-shift of 1, while a ratio of 1 is a bit-shift of 0. * * @author Brion Vibber * @copyright 2016 * @license MIT-style * * @param {number} ratio - the integer ratio to convert. * @returns {number} - number of bits to shift to multiply/divide by the ratio. * @throws exception if given a non-power-of-two */ function(ratio){for(var shiftCount=0,n=ratio>>1;0!=n;)n>>=1,shiftCount++;if(ratio!==1<