libavjs-webcodecs-polyfill
Version:
A WebCodecs polyfill (ponyfill, really), using libav.js
1 lines • 50.9 kB
JavaScript
let t=class{constructor(t){{this.type=t.type,this.timestamp=t.timestamp,"number"==typeof t.duration?this.duration=t.duration:this.duration=null,this.byteLength=t.data.byteLength;let e=!1;if(t.transfer){let i,s;i=t.data.buffer?t.data.buffer:t.data,s=t.transfer instanceof Array?t.transfer:Array.from(t.transfer);for(const t of s)if(t===i){e=!0;break}}const i=new Uint8Array(t.data.buffer||t.data,t.data.byteOffset||0,t.data.BYTES_PER_ELEMENT?t.data.BYTES_PER_ELEMENT*t.data.length:t.data.byteLength);this._data=e?i:i.slice(0)}}_libavGetData(){return this._data}copyTo(t){new Uint8Array(t.buffer||t,t.byteOffset||0).set(this._data)}};!function(t){function e(){var e=this||self;e.globalThis=e,delete t.prototype._T_}"object"!=typeof globalThis&&(this?e():(t.defineProperty(t.prototype,"_T_",{configurable:!0,get:e}),_T_))}(Object);let e=class t{constructor(e){t._checkValidAudioDataInit(e);{this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=e.numberOfFrames,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp;let t=!1;if(e.transfer){let i,s;i=e.data.buffer?e.data.buffer:e.data,s=e.transfer instanceof Array?e.transfer:Array.from(e.transfer);for(const e of s)if(e===i){t=!0;break}}let s,a=0;t?(s=e.data,a=e.data.byteOffset||0):s=e.data.slice(0);const r=i(e.format,s.buffer||s,a);this._data=r}this.duration=e.numberOfFrames/e.sampleRate*1e6}toNative(t={}){const e=new globalThis.AudioData({data:this._data,format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp,transfer:t.transfer?[this._data.buffer]:[]});return t.transfer&&this.close(),e}static fromNative(e){const i=e,s=a(i.format)?1:i.numberOfChannels,r=i.allocationSize({format:i.format,planeIndex:0}),o=new Uint8Array(r*s);for(let t=0;t<s;t++)i.copyTo(o.subarray(t*r),{format:i.format,planeIndex:t});return new t({data:o,format:i.format,sampleRate:i.sampleRate,numberOfFrames:i.numberOfFrames,numberOfChannels:i.numberOfChannels,timestamp:i.timestamp,transfer:[o.buffer]})}_libavGetData(){return this._data}static _checkValidAudioDataInit(t){if(t.sampleRate<=0)throw new TypeError(`Invalid sample rate ${t.sampleRate}`);if(t.numberOfFrames<=0)throw new TypeError(`Invalid number of frames ${t.numberOfFrames}`);if(t.numberOfChannels<=0)throw new TypeError(`Invalid number of channels ${t.numberOfChannels}`);{const e=t.numberOfFrames*t.numberOfChannels,i=s(t.format)*e;if(t.data.byteLength<i)throw new TypeError(`This audio data must be at least ${i} bytes`)}}allocationSize(t){if(null===this._data)throw new DOMException("Detached","InvalidStateError");const e=this._computeCopyElementCount(t);let i=this.format;t.format&&(i=t.format);return s(i)*e}_computeCopyElementCount(t){let e=this.format;t.format&&(e=t.format);const i=a(e);if(i){if(t.planeIndex>0)throw new RangeError("Invalid plane")}else if(t.planeIndex>=this.numberOfChannels)throw new RangeError("Invalid plane");if(this.format!==e&&"f32-planar"!==e)throw new DOMException("Only conversion to f32-planar is supported","NotSupportedError");const s=this.numberOfFrames,r=t.frameOffset||0;if(r>=s)throw new RangeError("Frame offset out of range");let o=s-r;if("number"==typeof t.frameCount){if(t.frameCount>=o)throw new RangeError("Frame count out of range");o=t.frameCount}let n=o;return i&&(n*=this.numberOfChannels),n}copyTo(t,e){if(null===this._data)throw new DOMException("Detached","InvalidStateError");const r=this._computeCopyElementCount(e);let o=this.format;e.format&&(o=e.format);if(s(o)*r>t.byteLength)throw new RangeError("Buffer too small");const n=this._data.subarray(e.planeIndex*this.numberOfFrames),c=e.frameOffset||0,d=this.numberOfChannels;if(this.format===o){const e=i(o,t.buffer||t,t.byteOffset||0);a(o)?e.set(n.subarray(c*d,c*d+r)):e.set(n.subarray(c,c+r))}else{const s=i(o,t.buffer||t,t.byteOffset||0);let h=0,l=1;switch(this.format){case"u8":case"u8-planar":h=128,l=128;break;case"s16":case"s16-planar":l=32768;break;case"s32":case"s32-planar":l=2147483648}if(a(this.format))for(let t=e.planeIndex+c*d,i=0;i<r;t+=d,i++)s[i]=(n[t]-h)/l;else for(let t=c,e=0;e<r;t++,e++)s[e]=(n[t]-h)/l}}clone(){if(null===this._data)throw new DOMException("Detached","InvalidStateError");return new t({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp,data:this._data})}close(){this._data=null}};function i(t,e,i){switch(t){case"u8":case"u8-planar":return new Uint8Array(e,i);case"s16":case"s16-planar":return new Int16Array(e,i);case"s32":case"s32-planar":return new Int32Array(e,i);case"f32":case"f32-planar":return new Float32Array(e,i);default:throw new TypeError("Invalid AudioSampleFormat")}}function s(t){switch(t){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":case"f32":case"f32-planar":return 4;default:throw new TypeError("Invalid AudioSampleFormat")}}function a(t){switch(t){case"u8":case"s16":case"s32":case"f32":return!0;case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!1;default:throw new TypeError("Invalid AudioSampleFormat")}}class r{constructor(){const t=this._eventer=new EventTarget;this.addEventListener=t.addEventListener.bind(t),this.removeEventListener=t.removeEventListener.bind(t),this.dispatchEvent=t.dispatchEvent.bind(t)}}class o extends r{constructor(){super(),this.addEventListener("dequeue",(t=>{this.ondequeue&&this.ondequeue(t)}))}}var n=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))((function(a,r){function o(t){try{c(s.next(t))}catch(t){r(t)}}function n(t){try{c(s.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,n)}c((s=s.apply(t,e||[])).next())}))};let c=null;const d=[];let h={},l=null,u=null;function f(t){h=t}function _(){return n(this,void 0,void 0,(function*(){return d.length?d.shift():yield c.LibAV(h)}))}function p(t){d.push(t)}function m(t){return n(this,void 0,void 0,(function*(){const e=yield _(),i=[];for(const[s,a]of[["flac","flac"],["libopus","opus"],["libvorbis","vorbis"],["libaom-av1","av01"],["libvpx-vp9","vp09"],["libvpx","vp8"]])t?(yield e.avcodec_find_encoder_by_name(s))&&i.push(a):(yield e.avcodec_find_decoder_by_name(s))&&i.push(a);return p(e),i}))}function y(t,e){if("string"==typeof t){let i=t=t.replace(/\..*/,"");switch(t){case"flac":if(void 0===e.description)return null;break;case"opus":if(void 0!==e.description)return null;i="libopus";break;case"vorbis":if(void 0===e.description)return null;i="libvorbis";break;case"av01":i="libaom-av1";break;case"vp09":i="libvpx-vp9";break;case"vp8":i="libvpx";break;case"mp3":case"mp4a":case"ulaw":case"alaw":case"avc1":case"avc3":case"hev1":case"hvc1":return null;default:throw new TypeError("Unrecognized codec")}return l.indexOf(t)>=0?{codec:i}:null}return t.libavjs}function b(t,e){if("string"==typeof t){const i=t.split(".");let s=t=i[0];const a={},r={};let o=!1;switch(t){case"flac":if(a.sample_fmt=2,a.bit_rate=0,"object"==typeof e.flac&&null!==e.flac){const t=e.flac;if("number"==typeof t.blockSize&&(a.frame_size=t.blockSize),"number"==typeof t.compressLevel)return null}break;case"opus":if(s="libopus",a.sample_fmt=3,a.sample_rate=48e3,"object"==typeof e.opus&&null!==e.opus){const t=e.opus;if("number"==typeof t.frameDuration&&(r.frame_duration=""+t.frameDuration/1e3),void 0!==t.complexity)return null;if("number"==typeof t.packetlossperc){if(t.packetlossperc<0||t.packetlossperc>100)return null;r.packet_loss=""+t.packetlossperc}if("boolean"==typeof t.useinbandfec&&(r.fec=t.useinbandfec?"1":"0"),"boolean"==typeof t.usedtx)return null;if("string"==typeof t.format&&"opus"!==t.format)return null}break;case"vorbis":s="libvorbis",a.sample_fmt=8;break;case"av01":if(o=!0,s="libaom-av1","realtime"===e.latencyMode&&(r.usage="realtime",r["cpu-used"]="8"),!function(t,e){if(t[1]){const i=+t[1];if(!(i>=0&&i<=2))throw new TypeError("Invalid AV1 profile");e.profile=i}if(t[2]){const i=+t[2];if(!(i>=0&&i<=23))throw new TypeError("Invalid AV1 level");e.level=i}if(t[3])switch(t[3]){case"M":break;case"H":if(e.level&&e.level>=8)return!1;throw new TypeError("The AV1 high tier is only available for level 4.0 and up");default:throw new TypeError("Invalid AV1 tier")}if(t[4]){const e=+t[3];if(10===e||12===e)return!1;if(8!==e)throw new TypeError("Invalid AV1 bit depth")}if(t[5])switch(t[5]){case"0":break;case"1":return!1;default:throw new TypeError("Invalid AV1 monochrome flag")}if(t[6])switch(t[6]){case"000":e.pix_fmt=5;break;case"100":e.pix_fmt=4;break;case"110":e.pix_fmt=0;break;case"111":return!1;default:throw new TypeError("Invalid AV1 subsampling mode")}return!0}(i,a))return null;break;case"vp09":if(o=!0,s="libvpx-vp9","realtime"===e.latencyMode&&(r.quality="realtime",r["cpu-used"]="8"),!function(t,e){if(t[1]){const i=+t[1];if(!(i>=0&&i<=3))throw new TypeError("Invalid VP9 profile");e.profile=i}if(t[2]){const i=[+t[2][0],+t[2][1]];if(i[0]>=1&&i[0]<=4){if(!(i[1]>=0&&i[1]<=1))throw new TypeError("Invalid VP9 level")}else{if(!(i[0]>=5&&i[0]<=6))throw new TypeError("Invalid VP9 level");if(!(i[1]>=0&&i[1]<=2))throw new TypeError("Invalid VP9 level")}e.level=+t[2]}if(t[3]){const e=+t[3];if(10===e||12===e)return!1;if(8!==e)throw new TypeError("Invalid VP9 bit depth")}if(t[4]){switch(+t[4]){case 0:case 1:e.pix_fmt=0;break;case 2:e.pix_fmt=4;break;case 3:e.pix_fmt=5;break;default:throw new TypeError("Invalid VP9 chroma subsampling format")}}return!0}(i,a))return null;break;case"vp8":o=!0,s="libvpx","realtime"===e.latencyMode&&(r.quality="realtime",r["cpu-used"]="8");break;case"mp3":case"mp4a":case"ulaw":case"alaw":case"avc1":return null;default:throw new TypeError("Unrecognized codec")}if(!(u.indexOf(t)>=0))return null;if(o){"number"!=typeof a.pix_fmt&&(a.pix_fmt=0);const t=a.width=e.width,i=a.height=e.height;e.framerate&&(a.framerate_num=Math.round(e.framerate),a.framerate_den=1);const s=e.displayWidth||e.width,r=e.displayHeight||e.height;s===t&&r===i||(a.sample_aspect_ratio_num=s*i,a.sample_aspect_ratio_den=r*t)}else if(a.sample_rate||(a.sample_rate=e.sampleRate||48e3),e.numberOfChannels){const t=e.numberOfChannels;a.channel_layout=1===t?4:(1<<t)-1}return"number"!=typeof a.bit_rate&&e.bitrate&&(a.bit_rate=e.bitrate),{codec:s,ctx:a,options:r}}return t.libavjs}function v(t,e){const i={};for(const s of e)s in t&&(i[s]=t[s]);return i}var w=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))((function(a,r){function o(t){try{c(s.next(t))}catch(t){r(t)}}function n(t){try{c(s.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,n)}c((s=s.apply(t,e||[])).next())}))};let g=class extends o{constructor(t){super(),this._p=Promise.all([]),this._libav=null,this._codec=this._c=this._pkt=this._frame=0,this._output=t.output,this._error=t.error,this.state="unconfigured",this.decodeQueueSize=0}configure(t){if("closed"===this.state)throw new DOMException("Decoder is closed","InvalidStateError");this._libav&&(this._p=this._p.then((()=>this._free()))),this.state="configured",this._p=this._p.then((()=>w(this,void 0,void 0,(function*(){let e;if(t.description)if(ArrayBuffer.isView(t.description)){const i=t.description;e=new Uint8Array(i.buffer,i.byteOffset,i.byteLength)}else{const i=t.description;e=new Uint8Array(i)}const i=y(t.codec,t);if(!i)return void this._closeAudioDecoder(new DOMException("Unsupported codec","NotSupportedError"));const s=this._libav=yield _(),a=yield s.avcodec_parameters_alloc(),r=[s.AVCodecParameters_channels_s(a,t.numberOfChannels),s.AVCodecParameters_sample_rate_s(a,t.sampleRate),s.AVCodecParameters_codec_type_s(a,1)];let o=0;e?(r.push(s.AVCodecParameters_extradata_size_s(a,e.byteLength)),o=yield s.calloc(e.byteLength+64,1),r.push(s.copyin_u8(o,e)),r.push(s.AVCodecParameters_extradata_s(a,o))):(r.push(s.AVCodecParameters_extradata_s(a,0)),r.push(s.AVCodecParameters_extradata_size_s(a,0))),yield Promise.all(r),[this._codec,this._c,this._pkt,this._frame]=yield s.ff_init_decoder(i.codec,a);const n=[s.AVCodecContext_time_base_s(this._c,1,1e3),s.avcodec_parameters_free_js(a)];o&&n.push(s.free(o)),yield Promise.all(n)})))).catch(this._error)}_free(){return w(this,void 0,void 0,(function*(){this._c&&(yield this._libav.ff_free_decoder(this._c,this._pkt,this._frame),this._codec=this._c=this._pkt=this._frame=0),this._libav&&(p(this._libav),this._libav=null)}))}_closeAudioDecoder(t){this._resetAudioDecoder(t),this.state="closed",this._p=this._p.then((()=>this._free())),"AbortError"!==t.name&&(this._p=this._p.then((()=>{this._error(t)})))}_resetAudioDecoder(t){if("closed"===this.state)throw new DOMException("Decoder closed","InvalidStateError");this.state="unconfigured",this._p=this._p.then((()=>this._free()))}decode(t){if("configured"!==this.state)throw new DOMException("Unconfigured","InvalidStateError");this.decodeQueueSize++,this._p=this._p.then((()=>w(this,void 0,void 0,(function*(){const e=this._libav,i=this._c,s=this._pkt,a=this._frame;let r=null;this.decodeQueueSize--,this.dispatchEvent(new CustomEvent("dequeue"));try{const o=Math.floor(t.timestamp/1e3),[n,c]=e.f64toi64(o),d={data:t._libavGetData(),pts:n,ptshi:c,dts:n,dtshi:c};t.duration&&(d.duration=Math.floor(t.duration/1e3),d.durationhi=0),r=yield e.ff_decode_multi(i,s,a,[d])}catch(t){return void(this._p=this._p.then((()=>{this._closeAudioDecoder(t)})))}r&&this._outputAudioData(r)})))).catch(this._error)}_outputAudioData(t){const i=this._libav;for(const s of t){let t,a=!1;switch(s.format){case i.AV_SAMPLE_FMT_U8:t="u8";break;case i.AV_SAMPLE_FMT_S16:t="s16";break;case i.AV_SAMPLE_FMT_S32:t="s32";break;case i.AV_SAMPLE_FMT_FLT:t="f32";break;case i.AV_SAMPLE_FMT_U8P:t="u8",a=!0;break;case i.AV_SAMPLE_FMT_S16P:t="s16",a=!0;break;case i.AV_SAMPLE_FMT_S32P:t="s32",a=!0;break;case i.AV_SAMPLE_FMT_FLTP:t="f32",a=!0;break;default:throw new DOMException("Unsupported libav format!","EncodingError")}const r=s.sample_rate,o=s.nb_samples,n=s.channels,c=1e3*i.i64tof64(s.pts,s.ptshi);let d;if(a){let t=0;for(let e=0;e<s.data.length;e++)t+=s.data[e].length;d=new s.data[0].constructor(t),t=0;for(let e=0;e<s.data.length;e++){const i=s.data[e];d.set(i,t),t+=i.length}}else d=s.data;const h=new e({format:t,sampleRate:r,numberOfFrames:o,numberOfChannels:n,timestamp:c,data:d});this._output(h)}}flush(){if("configured"!==this.state)throw new DOMException("Invalid state","InvalidStateError");const t=this._p.then((()=>w(this,void 0,void 0,(function*(){if(!this._c)return;const t=this._libav,e=this._c,i=this._pkt,s=this._frame;let a=null;try{a=yield t.ff_decode_multi(e,i,s,[],!0)}catch(t){this._p=this._p.then((()=>{this._closeAudioDecoder(t)}))}a&&this._outputAudioData(a)}))));return this._p=t,t}reset(){this._resetAudioDecoder(new DOMException("Reset","AbortError"))}close(){this._closeAudioDecoder(new DOMException("Close","AbortError"))}static isConfigSupported(t){return w(this,void 0,void 0,(function*(){const e=y(t.codec,t);let i=!1;if(e){const t=yield _();try{const[,s,a,r]=yield t.ff_init_decoder(e.codec);yield t.ff_free_decoder(s,a,r),i=!0}catch(t){}yield p(t)}return{supported:i,config:v(t,["codec","sampleRate","numberOfChannels"])}}))}};var A=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))((function(a,r){function o(t){try{c(s.next(t))}catch(t){r(t)}}function n(t){try{c(s.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,n)}c((s=s.apply(t,e||[])).next())}))};let E=class extends o{constructor(t){super(),this._outputMetadata=null,this._outputMetadataFilled=!1,this._pts=null,this._p=Promise.all([]),this._libav=null,this._codec=this._c=this._frame=this._pkt=0,this._filter_in_ctx=this._filter_out_ctx=null,this._filter_graph=this._buffersrc_ctx=this._buffersink_ctx=0,this._output=t.output,this._error=t.error,this.state="unconfigured",this.encodeQueueSize=0}configure(t){const e=this;if("closed"===this.state)throw new DOMException("Encoder is closed","InvalidStateError");this._libav&&(this._p=this._p.then((()=>this._free()))),this.state="configured",this._p=this._p.then((function(){return A(this,void 0,void 0,(function*(){const i=b(t.codec,t);if(e._outputMetadata={decoderConfig:{codec:t.codec,sampleRate:0,numberOfChannels:0}},e._outputMetadataFilled=!1,!i)return void e._closeAudioEncoder(new DOMException("Unsupported codec","NotSupportedError"));const s=e._libav=yield _();let a;[e._codec,e._c,e._frame,e._pkt,a]=yield s.ff_init_encoder(i.codec,i),e._pts=null,yield s.AVCodecContext_time_base_s(e._c,1,i.ctx.sample_rate),e._filter_out_ctx={sample_rate:i.ctx.sample_rate,sample_fmt:i.ctx.sample_fmt,channel_layout:i.ctx.channel_layout,frame_size:a}}))})).catch(this._error)}_free(){return A(this,void 0,void 0,(function*(){this._filter_graph&&(yield this._libav.avfilter_graph_free_js(this._filter_graph),this._filter_in_ctx=this._filter_out_ctx=null,this._filter_graph=this._buffersrc_ctx=this._buffersink_ctx=0),this._c&&(yield this._libav.ff_free_encoder(this._c,this._frame,this._pkt),this._codec=this._c=this._frame=this._pkt=0),this._libav&&(p(this._libav),this._libav=null)}))}_closeAudioEncoder(t){this._resetAudioEncoder(t),this.state="closed",this._p=this._p.then((()=>this._free())),"AbortError"!==t.name&&(this._p=this._p.then((()=>{this._error(t)})))}_resetAudioEncoder(t){if("closed"===this.state)throw new DOMException("Encoder closed","InvalidStateError");this.state="unconfigured",this._p=this._p.then((()=>this._free()))}encode(t){if(null===t._libavGetData())throw new TypeError("Detached");if("configured"!==this.state)throw new DOMException("Unconfigured","InvalidStateError");const e=t.clone();this.encodeQueueSize++,this._p=this._p.then((()=>A(this,void 0,void 0,(function*(){const t=this._libav,i=this._c,s=this._pkt,r=this._frame;let o=null;this.encodeQueueSize--,this.dispatchEvent(new CustomEvent("dequeue"));try{let n=e._libavGetData();const c=e.numberOfFrames;if(!a(e.format)){let t=[];for(let i=0;i<e.numberOfChannels;i++)t.push(n.subarray(i*c,(i+1)*c));n=t}let d;switch(e.format){case"u8":d=t.AV_SAMPLE_FMT_U8;break;case"s16":d=t.AV_SAMPLE_FMT_S16;break;case"s32":d=t.AV_SAMPLE_FMT_S32;break;case"f32":d=t.AV_SAMPLE_FMT_FLT;break;case"u8-planar":d=t.AV_SAMPLE_FMT_U8P;break;case"s16-planar":d=t.AV_SAMPLE_FMT_S16P;break;case"s32-planar":d=t.AV_SAMPLE_FMT_S32P;break;case"f32-planar":d=t.AV_SAMPLE_FMT_FLTP;break;default:throw new TypeError("Invalid AudioSampleFormat")}const h=Math.floor(e.timestamp/1e3),[l,u]=t.f64toi64(h),f=e.numberOfChannels,_={data:n,format:d,pts:l,ptshi:u,channel_layout:1===f?4:(1<<f)-1,sample_rate:e.sampleRate};let p=null;if(this._filter_in_ctx){const e=this._filter_in_ctx;if(e.sample_fmt!==_.format||e.channel_layout!==_.channel_layout||e.sample_rate!==_.sample_rate){let e=yield this._filter([],!0);e=e.filter((t=>{let e;return e=t.data[0].length?t.data[0].length:t.data.length/t.channels,e===this._filter_out_ctx.frame_size})),e.length&&(p=yield t.ff_encode_multi(i,r,s,e)),yield t.avfilter_graph_free_js(this._filter_graph),this._filter_in_ctx=null,this._filter_graph=this._buffersrc_ctx=this._buffersink_ctx=0}}if(!this._filter_graph){const e=this._filter_in_ctx={sample_rate:_.sample_rate,sample_fmt:_.format,channel_layout:_.channel_layout};[this._filter_graph,this._buffersrc_ctx,this._buffersink_ctx]=yield t.ff_init_filter_graph("aresample",e,this._filter_out_ctx)}const m=yield this._filter([_]);o=yield t.ff_encode_multi(i,r,s,m),p&&(o=p.concat(o)),o.length&&!this._outputMetadataFilled&&m&&m.length&&(yield this._getOutputMetadata(m[0]))}catch(t){this._p=this._p.then((()=>{this._closeAudioEncoder(t)}))}o&&this._outputEncodedAudioChunks(o)})))).catch(this._error)}_filter(t,e=!1){return A(this,void 0,void 0,(function*(){t.length&&null===this._pts&&(this._pts=t[0].pts||0);const i=yield this._libav.ff_filter_multi(this._buffersrc_ctx,this._buffersink_ctx,this._frame,t,e);for(const t of i)t.pts=this._pts,t.ptshi=0,this._pts+=t.nb_samples;return i}))}_getOutputMetadata(t){return A(this,void 0,void 0,(function*(){const e=this._libav,i=this._c,s=yield e.AVCodecContext_extradata(i),a=yield e.AVCodecContext_extradata_size(i);let r=null;s&&a&&(r=yield e.copyout_u8(s,a)),this._outputMetadata.decoderConfig.sampleRate=t.sample_rate,this._outputMetadata.decoderConfig.numberOfChannels=t.channels,r&&(this._outputMetadata.decoderConfig.description=r),this._outputMetadataFilled=!0}))}_outputEncodedAudioChunks(e){const i=this._libav,s=this._filter_out_ctx.sample_rate;for(const a of e){const e=a.data,r=1&a.flags?"key":"delta";let o,n=i.i64tof64(a.pts,a.ptshi);n=Math.floor(n/s*1e6),void 0!==a.duration&&(o=i.i64tof64(a.duration,a.durationhi||0),o=Math.floor(o/s*1e6));const c=new t({data:e,type:r,timestamp:n,duration:o});this._outputMetadataFilled?this._output(c,this._outputMetadata||void 0):this._output(c)}}flush(){if("configured"!==this.state)throw new DOMException("Invalid state","InvalidStateError");const t=this._p.then((()=>A(this,void 0,void 0,(function*(){if(!this._c)return;const t=this._libav,e=this._c,i=this._frame,s=this._pkt,a=this._buffersrc_ctx;this._buffersink_ctx;let r=null;try{let o=null;a&&(o=yield this._filter([],!0)),r=yield t.ff_encode_multi(e,i,s,o||[],!0),!this._outputMetadataFilled&&o&&o.length&&(yield this._getOutputMetadata(o[0]))}catch(t){this._p=this._p.then((()=>{this._closeAudioEncoder(t)}))}r&&this._outputEncodedAudioChunks(r)}))));return this._p=t,t}reset(){this._resetAudioEncoder(new DOMException("Reset","AbortError"))}close(){this._closeAudioEncoder(new DOMException("Close","AbortError"))}static isConfigSupported(t){return A(this,void 0,void 0,(function*(){const e=b(t.codec,t);let i=!1;if(e){const t=yield _();try{const[,s,a,r]=yield t.ff_init_encoder(e.codec,e);yield t.ff_free_encoder(s,a,r),i=!0}catch(t){}yield p(t)}return{supported:i,config:v(t,["codec","sampleRate","numberOfChannels","bitrate"])}}))}};const I=t;var x=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))((function(a,r){function o(t){try{c(s.next(t))}catch(t){r(t)}}function n(t){try{c(s.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,n)}c((s=s.apply(t,e||[])).next())}))};let P=null,V=class t{constructor(e,i){if(this.format="I420",this.codedWidth=0,this.codedHeight=0,this.codedRect=null,this.visibleRect=null,this.displayWidth=0,this.displayHeight=0,this.timestamp=0,this._layout=null,this._data=null,this._nonSquarePixels=!1,this._sar_num=1,this._sar_den=1,e instanceof ArrayBuffer||e.buffer instanceof ArrayBuffer)this._constructBuffer(e,i);else if(e instanceof t||globalThis.VideoFrame&&e instanceof globalThis.VideoFrame){const t=new Uint8Array(e.allocationSize());e.copyTo(t),this._constructBuffer(t,{transfer:[t.buffer],format:e.format,codedHeight:e.codedHeight,codedWidth:e.codedWidth,colorSpace:e.colorSpace,visibleRect:(null==i?void 0:i.visibleRect)||e.visibleRect,displayHeight:(null==i?void 0:i.displayHeight)||e.displayHeight,displayWidth:(null==i?void 0:i.displayWidth)||e.displayWidth,duration:(null==i?void 0:i.duration)||e.duration,timestamp:(null==i?void 0:i.timestamp)||e.timestamp,metadata:JSON.parse(JSON.stringify(null==i?void 0:i.metadata))})}else if(e instanceof HTMLVideoElement){if(e.readyState===HTMLVideoElement.prototype.HAVE_NOTHING||e.readyState===HTMLVideoElement.prototype.HAVE_METADATA)throw new DOMException("Video is not ready for reading frames","InvalidStateError");if(e.networkState===e.NETWORK_EMPTY)throw new DOMException("Video network state is empty","InvalidStateError");this._constructCanvas(e,Object.assign(Object.assign({},i),{timestamp:(null==i?void 0:i.timestamp)||1e6*e.currentTime}))}else this._constructCanvas(e,i)}_constructCanvas(t,e){let i=0,s=0;if(t.naturalWidth?(i=t.naturalWidth,s=t.naturalHeight):t.videoWidth?(i=t.videoWidth,s=t.videoHeight):t.width&&(i=t.width,s=t.height),!i||!s)throw new DOMException("Could not determine dimensions","InvalidStateError");null===P&&("undefined"!=typeof OffscreenCanvas?P=new OffscreenCanvas(i,s):(P=document.createElement("canvas"),P.style.display="none",document.body.appendChild(P))),P.width=i,P.height=s;const a=P.getContext("2d",{desynchronized:!0,willReadFrequently:!0});a.clearRect(0,0,i,s),a.drawImage(t,0,0),this._constructBuffer(a.getImageData(0,0,i,s).data,{format:"RGBA",codedWidth:i,codedHeight:s,timestamp:(null==e?void 0:e.timestamp)||0,duration:(null==e?void 0:e.duration)||0,layout:[{offset:0,stride:4*i}],displayWidth:(null==e?void 0:e.displayWidth)||i,displayHeight:(null==e?void 0:e.displayHeight)||s})}_constructBuffer(e,i){t._checkValidVideoFrameBufferInit(i);const s=new DOMRect(0,0,i.codedWidth,i.codedHeight);let a;i.visibleRect&&(a=DOMRect.fromRect(i.visibleRect)),this.codedWidth=i.codedWidth,this.codedHeight=i.codedHeight;const r=this._parseVisibleRect(s,a||null);let o;i.layout&&(o=i.layout instanceof Array?i.layout:Array.from(i.layout)),this.format=i.format;const n=this._computeLayoutAndAllocationSize(r,o||null);if(e.byteLength<n.allocationSize)throw new TypeError("data is too small for layout");let c=!1;if(i.transfer){let t,s;t=e.buffer?e.buffer:e,s=i.transfer instanceof Array?i.transfer:Array.from(i.transfer);for(const e of s)if(e===t){c=!0;break}}const d=i.format;if(i.layout)i.layout instanceof Array?this._layout=i.layout:this._layout=Array.from(i.layout);else{const t=T(d),e=[];let i=0;for(let s=0;s<t;s++){const t=M(d,s),a=S(d,s),r=~~(this.codedWidth/t);e.push({offset:i,stride:r}),i+=r*~~(this.codedHeight/a)}this._layout=e}if(this._data=new Uint8Array(e.buffer||e,e.byteOffset||0),!c){const t=T(d);let e=this._layout,i=1/0,s=0;for(let a=0;a<t;a++){const t=e[a];let r=t.offset;r<i&&(i=r);const o=S(d,a);r+=t.stride*~~(this.codedHeight/o),r>s&&(s=r)}0!==i&&(e=this._layout=e.map((t=>({offset:t.offset-i,stride:t.stride})))),this._data=this._data.slice(i,s)}const h=i.codedWidth,l=i.codedHeight;r.left,r.top,this.codedRect=new DOMRect(0,0,h,l),this.visibleRect=r,i.visibleRect?this.visibleRect=DOMRect.fromRect(i.visibleRect):this.visibleRect=new DOMRect(0,0,h,l),"number"==typeof i.displayWidth?this.displayWidth=i.displayWidth:this.displayWidth=this.visibleRect.width,"number"==typeof i.displayHeight?this.displayHeight=i.displayHeight:this.displayHeight=this.visibleRect.height,this.displayWidth!==this.visibleRect.width||this.displayHeight!==this.visibleRect.height?(this._nonSquarePixels=!0,this._sar_num=this.displayWidth*this.visibleRect.width,this._sar_den=this.displayHeight*this.visibleRect.height):(this._nonSquarePixels=!1,this._sar_num=this._sar_den=1),this.timestamp=i.timestamp,this.duration=i.duration}toNative(t={}){const e=new globalThis.VideoFrame(this._data,{layout:this._layout,format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,duration:this.duration,timestamp:this.timestamp,transfer:t.transfer?[this._data.buffer]:[]});return t.transfer&&this.close(),e}static fromNative(e){const i=e,s=new Uint8Array(i.allocationSize());return i.copyTo(s),new t(s,{format:i.format,codedWidth:i.codedWidth,codedHeight:i.codedHeight,visibleRect:i.visibleRect,displayWidth:i.displayWidth,displayHeight:i.displayHeight,duration:i.duration,timestamp:i.timestamp})}_libavGetData(){return this._data}_libavGetLayout(){return this._layout}static _checkValidVideoFrameBufferInit(t){if(!t.codedWidth||!t.codedHeight)throw new TypeError("Invalid coded dimensions");if(t.visibleRect){const e=DOMRect.fromRect(t.visibleRect);if(e.x<0||!Number.isFinite(e.x)||e.y<0||!Number.isFinite(e.y)||e.width<0||!Number.isFinite(e.width)||e.height<0||!Number.isFinite(e.height))throw new TypeError("Invalid visible rectangle");if(e.y+e.height>t.codedHeight)throw new TypeError("Visible rectangle outside of coded height");if(e.x+e.width>t.codedWidth)throw new TypeError("Visible rectangle outside of coded width");if(t.displayWidth&&!t.displayHeight||!t.displayWidth&&!t.displayHeight||0===t.displayWidth||0===t.displayHeight)throw new TypeError("Invalid display dimensions")}}metadata(){if(null===this._data)throw new DOMException("Detached","InvalidStateError");return null}allocationSize(t={}){if(null===this._data)throw new DOMException("Detached","InvalidStateError");if(null===this.format)throw new DOMException("Not supported","NotSupportedError");return this._parseVideoFrameCopyToOptions(t).allocationSize}_parseVideoFrameCopyToOptions(t){const e=this.visibleRect;let i=t.rect?new DOMRect(t.rect.x,t.rect.y,t.rect.width,t.rect.height):null;const s=this._parseVisibleRect(e,i);let a=null;t.layout&&(a=t.layout instanceof Array?t.layout:Array.from(t.layout));return this._computeLayoutAndAllocationSize(s,a)}_parseVisibleRect(t,e){let i=t;if(e){if(0===e.width||0===e.height)throw new TypeError("Invalid rectangle");if(e.x+e.width>this.codedWidth)throw new TypeError("Invalid rectangle");if(e.y+e.height>this.codedHeight)throw new TypeError("Invalid rectangle");i=e}if(!this._verifyRectOffsetAlignment(i))throw new TypeError("Invalid alignment");return i}_computeLayoutAndAllocationSize(t,e){let i=T(this.format);if(e&&e.length!==i)throw new TypeError("Invalid layout");let s=0,a=[],r=[],o=0;for(;o<i;){const i=O(this.format,o),n=M(this.format,o),c=S(this.format,o),d={destinationOffset:0,destinationStride:0,sourceTop:Math.ceil(~~t.y/c),sourceHeight:Math.ceil(~~t.height/c),sourceLeftBytes:~~(t.x/n*i),sourceWidthBytes:~~(t.width/n*i)};if(e){const t=e[o];if(t.stride<d.sourceWidthBytes)throw new TypeError("Invalid stride");d.destinationOffset=t.offset,d.destinationStride=t.stride}else d.destinationOffset=s,d.destinationStride=d.sourceWidthBytes;const h=d.destinationStride*d.sourceHeight,l=h+d.destinationOffset;if(h>=4294967296||l>=4294967296)throw new TypeError("Plane too large");r.push(l),l>s&&(s=l);let u=0;for(;u<o;){if(!(l<=a[u].destinationOffset||r[u]<=d.destinationOffset))throw new TypeError("Invalid plane layout");u++}a.push(d),o++}return{computedLayouts:a,allocationSize:s}}_verifyRectOffsetAlignment(t){if(!this.format)return!0;let e=0;const i=T(this.format);for(;e<i;){const i=M(this.format,e),s=S(this.format,e),a=t.x/i;if(a!==~~a)return!1;const r=t.y/s;if(r!==~~r)return!1;e++}return!0}copyTo(t,e={}){return x(this,void 0,void 0,(function*(){const i=new Uint8Array(t.buffer||t,t.byteOffset||0);if(null===this._data)throw new DOMException("Detached","InvalidStateError");if(!this.format)throw new DOMException("No format","NotSupportedError");const s=this._parseVideoFrameCopyToOptions(e);if(t.byteLength<s.allocationSize)throw new TypeError("Insufficient space");let a=[];{T(this.format);let t=0;for(;t<s.computedLayouts.length;){const e=this._layout[t].stride,r=s.computedLayouts[t];let o=r.sourceTop*e;o+=r.sourceLeftBytes;let n=r.destinationOffset;const c=r.sourceWidthBytes,d={offset:r.destinationOffset,stride:r.destinationStride};let h=0;for(;h<r.sourceHeight;)i.set(this._data.subarray(o,o+c),n),o+=e,n+=r.destinationStride,h++;t++,a.push(d)}}return a}))}clone(){return new t(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,layout:this._layout,transfer:[this._data.buffer]})}close(){this._data=null}};function k(t,e){let i=t.AV_PIX_FMT_RGBA;switch(e){case"I420":i=t.AV_PIX_FMT_YUV420P;break;case"I420P10":i=62;break;case"I420P12":i=123;break;case"I420A":i=t.AV_PIX_FMT_YUVA420P;break;case"I420AP10":i=87;break;case"I420AP12":throw new TypeError("YUV420P12 is not supported by libav");case"I422":i=t.AV_PIX_FMT_YUV422P;break;case"I422P10":i=64;break;case"I422P12":i=127;break;case"I422A":i=78;break;case"I422AP10":i=89;break;case"I422AP10":i=186;break;case"I444":i=t.AV_PIX_FMT_YUV444P;break;case"I444P10":i=68;break;case"I444P12":i=131;break;case"I444A":i=79;break;case"I444AP10":i=91;break;case"I444AP12":i=188;break;case"NV12":i=t.AV_PIX_FMT_NV12;break;case"RGBA":i=t.AV_PIX_FMT_RGBA;break;case"RGBX":i=119;break;case"BGRA":i=t.AV_PIX_FMT_BGRA;break;case"BGRX":i=121;break;default:throw new TypeError("Invalid VideoPixelFormat")}return i}function T(t){switch(t){case"I420":case"I420P10":case"I420P12":case"I422":case"I422P10":case"I422P12":case"I444":case"I444P10":case"I444P12":return 3;case"I420A":case"I420AP10":case"I420AP12":case"I422A":case"I422AP10":case"I422AP12":case"I444A":case"I444AP10":case"I444AP12":return 4;case"NV12":return 2;case"RGBA":case"RGBX":case"BGRA":case"BGRX":return 1;default:throw new DOMException("Unsupported video pixel format","NotSupportedError")}}function O(t,e){switch(t){case"I420":case"I420A":case"I422":case"I422A":case"I444":case"I444A":return 1;case"I420P10":case"I420AP10":case"I422P10":case"I422AP10":case"I444P10":case"I444AP10":case"I420P12":case"I420AP12":case"I422P12":case"I422AP12":case"I444P12":case"I444AP12":return 2;case"NV12":return 1===e?2:1;case"RGBA":case"RGBX":case"BGRA":case"BGRX":return 4;default:throw new DOMException("Unsupported video pixel format","NotSupportedError")}}function M(t,e){if(0===e)return 1;if(3===e)return 1;switch(t){case"I420":case"I420P10":case"I420P12":case"I420A":case"I420AP10":case"I420AP12":case"I422":case"I422P10":case"I422P12":case"I422A":case"I422AP10":case"I422AP12":case"NV12":return 2;case"I444":case"I444P10":case"I444P12":case"I444A":case"I444AP10":case"I444AP12":case"RGBA":case"RGBX":case"BGRA":case"BGRX":return 1;default:throw new DOMException("Unsupported video pixel format","NotSupportedError")}}function S(t,e){if(0===e)return 1;if(3===e)return 1;switch(t){case"I420":case"I420P10":case"I420P12":case"I420A":case"I420AP10":case"I420AP12":case"NV12":return 2;case"I422":case"I422P10":case"I422P12":case"I422A":case"I422AP10":case"I422AP12":case"I444":case"I444P10":case"I444P12":case"I444A":case"I444AP10":case"I444AP12":case"RGBA":case"RGBX":case"BGRA":case"BGRX":return 1;default:throw new DOMException("Unsupported video pixel format","NotSupportedError")}}var C=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))((function(a,r){function o(t){try{c(s.next(t))}catch(t){r(t)}}function n(t){try{c(s.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,n)}c((s=s.apply(t,e||[])).next())}))};let D=class extends o{constructor(t){super(),this._p=Promise.all([]),this._libav=null,this._codec=this._c=this._pkt=this._frame=0,this._output=t.output,this._error=t.error,this.state="unconfigured",this.decodeQueueSize=0}configure(t){if("closed"===this.state)throw new DOMException("Decoder is closed","InvalidStateError");this._libav&&(this._p=this._p.then((()=>this._free()))),this.state="configured",this._p=this._p.then((()=>C(this,void 0,void 0,(function*(){const e=y(t.codec,t);if(!e)return void this._closeVideoDecoder(new DOMException("Unsupported codec","NotSupportedError"));const i=this._libav=yield _();[this._codec,this._c,this._pkt,this._frame]=yield i.ff_init_decoder(e.codec),yield i.AVCodecContext_time_base_s(this._c,1,1e3)})))).catch(this._error)}_free(){return C(this,void 0,void 0,(function*(){this._c&&(yield this._libav.ff_free_decoder(this._c,this._pkt,this._frame),this._codec=this._c=this._pkt=this._frame=0),this._libav&&(p(this._libav),this._libav=null)}))}_closeVideoDecoder(t){this._resetVideoDecoder(t),this.state="closed",this._p=this._p.then((()=>this._free())),"AbortError"!==t.name&&(this._p=this._p.then((()=>{this._error(t)})))}_resetVideoDecoder(t){if("closed"===this.state)throw new DOMException("Decoder closed","InvalidStateError");this.state="unconfigured",this._p=this._p.then((()=>this._free()))}decode(t){const e=this;if("configured"!==this.state)throw new DOMException("Unconfigured","InvalidStateError");this.decodeQueueSize++,this._p=this._p.then((function(){return C(this,void 0,void 0,(function*(){const i=e._libav,s=e._c,a=e._pkt,r=e._frame;let o=null;e.decodeQueueSize--,e.dispatchEvent(new CustomEvent("dequeue"));try{const e=Math.floor(t.timestamp/1e3),[n,c]=i.f64toi64(e),d={data:t._libavGetData(),pts:n,ptshi:c,dts:n,dtshi:c};t.duration&&(d.duration=Math.floor(t.duration/1e3),d.durationhi=0),o=yield i.ff_decode_multi(s,a,r,[d])}catch(t){e._p=e._p.then((()=>{e._closeVideoDecoder(t)}))}o&&e._outputVideoFrames(o)}))})).catch(this._error)}_outputVideoFrames(t){const e=this._libav;for(const i of t){let t;switch(i.format){case e.AV_PIX_FMT_YUV420P:t="I420";break;case 62:t="I420P10";break;case 123:t="I420P12";break;case e.AV_PIX_FMT_YUVA420P:t="I420A";break;case 87:t="I420AP10";break;case e.AV_PIX_FMT_YUV422P:t="I422";break;case 64:t="I422P10";break;case 127:t="I422P12";break;case 78:t="I422A";break;case 89:t="I422AP10";break;case 186:t="I422AP12";break;case e.AV_PIX_FMT_YUV444P:t="I444";break;case 68:t="I444P10";break;case 131:t="I444P12";break;case 79:t="I444A";break;case 91:t="I444AP10";break;case 188:t="I444AP12";break;case e.AV_PIX_FMT_NV12:t="NV12";break;case e.AV_PIX_FMT_RGBA:t="RGBA";break;case 119:t="RGBX";break;case e.AV_PIX_FMT_BGRA:t="BGRA";break;case 121:t="BGRX";break;default:throw new DOMException("Unsupported libav format!","EncodingError")}const s=i.width,a=i.height;let r;r=i.crop?new DOMRect(i.crop.left,i.crop.top,s-i.crop.left-i.crop.right,a-i.crop.top-i.crop.bottom):new DOMRect(0,0,s,a);let o=s,n=a;if(i.sample_aspect_ratio&&i.sample_aspect_ratio[0]){const t=i.sample_aspect_ratio;t[0]>t[1]?o=~~(s*t[0]/t[1]):n=~~(a*t[1]/t[0])}const c=1e3*e.i64tof64(i.pts,i.ptshi),d=new V(i.data,{layout:i.layout,format:t,codedWidth:s,codedHeight:a,visibleRect:r,displayWidth:o,displayHeight:n,timestamp:c});this._output(d)}}flush(){if("configured"!==this.state)throw new DOMException("Invalid state","InvalidStateError");const t=this._p.then((()=>C(this,void 0,void 0,(function*(){if(!this._c)return;const t=this._libav,e=this._c,i=this._pkt,s=this._frame;let a=null;try{a=yield t.ff_decode_multi(e,i,s,[],!0)}catch(t){this._p=this._p.then((()=>{this._closeVideoDecoder(t)}))}a&&this._outputVideoFrames(a)}))));return this._p=t,t}reset(){this._resetVideoDecoder(new DOMException("Reset","AbortError"))}close(){this._closeVideoDecoder(new DOMException("Close","AbortError"))}static isConfigSupported(t){return C(this,void 0,void 0,(function*(){const e=y(t.codec,t);let i=!1;if(e){const t=yield _();try{const[,s,a,r]=yield t.ff_init_decoder(e.codec);yield t.ff_free_decoder(s,a,r),i=!0}catch(t){}yield p(t)}return{supported:i,config:v(t,["codec","codedWidth","codedHeight"])}}))}};var R=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))((function(a,r){function o(t){try{c(s.next(t))}catch(t){r(t)}}function n(t){try{c(s.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,n)}c((s=s.apply(t,e||[])).next())}))};let F=class extends o{constructor(t){super(),this._extradataSet=!1,this._extradata=null,this._nonSquarePixels=!1,this._sar_num=1,this._sar_den=1,this._p=Promise.all([]),this._libav=null,this._codec=this._c=this._frame=this._pkt=0,this._output=t.output,this._error=t.error,this._metadata=null,this.state="unconfigured",this.encodeQueueSize=0}configure(t){if("closed"===this.state)throw new DOMException("Encoder is closed","InvalidStateError");this._libav&&(this._p=this._p.then((()=>this._free()))),this.state="configured",this._p=this._p.then((()=>R(this,void 0,void 0,(function*(){const e=b(t.codec,t);if(!e)return void this._closeVideoEncoder(new DOMException("Unsupported codec","NotSupportedError"));const i=this._libav=yield _();this._metadata={decoderConfig:{codec:e.codec}},[this._codec,this._c,this._frame,this._pkt]=yield i.ff_init_encoder(e.codec,e),this._extradataSet=!1,this._extradata=null,yield i.AVCodecContext_time_base_s(this._c,1,1e3);const s=t.width,a=t.height;this._sws=0,this._swsFrame=0,this._swsOut={width:s,height:a,format:e.ctx.pix_fmt};const r=t.displayWidth||s,o=t.displayHeight||a;r!==s||o!==a?(this._nonSquarePixels=!0,this._sar_num=r*a,this._sar_den=o*s):this._nonSquarePixels=!1})))).catch(this._error)}_free(){return R(this,void 0,void 0,(function*(){this._sws&&(yield this._libav.av_frame_free_js(this._swsFrame),yield this._libav.sws_freeContext(this._sws),this._sws=this._swsFrame=0,this._swsIn=this._swsOut=void 0),this._c&&(yield this._libav.ff_free_encoder(this._c,this._frame,this._pkt),this._codec=this._c=this._frame=this._pkt=0),this._libav&&(p(this._libav),this._libav=null)}))}_closeVideoEncoder(t){this._resetVideoEncoder(t),this.state="closed",this._p=this._p.then((()=>this._free())),"AbortError"!==t.name&&(this._p=this._p.then((()=>{this._error(t)})))}_resetVideoEncoder(t){if("closed"===this.state)throw new DOMException("Encoder closed","InvalidStateError");this.state="unconfigured",this._p=this._p.then((()=>this._free()))}encode(t,e={}){if(null===t._libavGetData())throw new TypeError("Detached");if("configured"!==this.state)throw new DOMException("Unconfigured","InvalidStateError");const i=t.clone();this.encodeQueueSize++,this._p=this._p.then((()=>R(this,void 0,void 0,(function*(){const t=this._libav,s=this._c,a=this._pkt,r=this._frame,o=this._swsOut;let n=null;this.encodeQueueSize--,this.dispatchEvent(new CustomEvent("dequeue"));try{const c=k(t,i.format),d=i._libavGetData(),h=i._libavGetLayout(),l=Math.floor(i.timestamp/1e3),[u,f]=t.f64toi64(l),_={data:d,layout:h,format:c,pts:u,ptshi:f,width:i.codedWidth,height:i.codedHeight,crop:{left:i.visibleRect.left,right:i.visibleRect.right,top:i.visibleRect.top,bottom:i.visibleRect.bottom},key_frame:e.keyFrame?1:0,pict_type:e.keyFrame?1:0};if(_.width!==o.width||_.height!==o.height||_.format!==o.format){i._nonSquarePixels&&(_.sample_aspect_ratio=[i._sar_num,i._sar_den]);let c=this._sws,d=this._swsIn,h=this._swsFrame;c&&_.width===d.width&&_.height===d.height&&_.format===d.format||(c&&(yield t.sws_freeContext(c)),d={width:_.width,height:_.height,format:_.format},c=yield t.sws_getContext(d.width,d.height,d.format,o.width,o.height,o.format,2,0,0,0),this._sws=c,this._swsIn=d,h||(this._swsFrame=h=yield t.av_frame_alloc()));const[,l,,,,,,p]=yield Promise.all([t.ff_copyin_frame(r,_),t.sws_scale_frame(c,h,r),this._nonSquarePixels?t.AVFrame_sample_aspect_ratio_s(h,this._sar_num,this._sar_den):null,t.AVFrame_pts_s(h,u),t.AVFrame_ptshi_s(h,f),t.AVFrame_key_frame_s(h,e.keyFrame?1:0),t.AVFrame_pict_type_s(h,e.keyFrame?1:0),t.avcodec_send_frame(s,h)]);if(l<0||p<0)throw new Error("Encoding failed!");for(n=[];;){const e=yield t.avcodec_receive_packet(s,a);if(e===-t.EAGAIN)break;if(e<0)throw new Error("Encoding failed!");n.push(yield t.ff_copyout_packet(a))}}else this._nonSquarePixels&&(_.sample_aspect_ratio=[this._sar_num,this._sar_den]),n=yield t.ff_encode_multi(s,r,a,[_]);n.length&&!this._extradataSet&&(yield this._getExtradata())}catch(t){return void(this._p=this._p.then((()=>{this._closeVideoEncoder(t)})))}n&&this._outputEncodedVideoChunks(n)})))).catch(this._error)}_getExtradata(){return R(this,void 0,void 0,(function*(){const t=this._libav,e=this._c,i=yield t.AVCodecContext_extradata(e),s=yield t.AVCodecContext_extradata_size(e);i&&s&&(this._metadata.decoderConfig.description=this._extradata=yield t.copyout_u8(i,s)),this._extradataSet=!0}))}_outputEncodedVideoChunks(t){const e=this._libav;for(const i of t){const t=1&i.flags?"key":"delta",s=1e3*e.i64tof64(i.pts,i.ptshi),a=new I({type:t,timestamp:s,data:i.data});this._extradataSet?this._output(a,this._metadata||void 0):this._output(a)}}flush(){if("configured"!==this.state)throw new DOMException("Invalid state","InvalidStateError");const t=this._p.then((()=>R(this,void 0,void 0,(function*(){if(!this._c)return;const t=this._libav,e=this._c,i=this._frame,s=this._pkt;let a=null;try{a=yield t.ff_encode_multi(e,i,s,[],!0),this._extradataSet||(yield this._getExtradata())}catch(t){this._p=this._p.then((()=>{this._closeVideoEncoder(t)}))}a&&this._outputEncodedVideoChunks(a)}))));return this._p=t,t}reset(){this._resetVideoEncoder(new DOMException("Reset","AbortError"))}close(){this._closeVideoEncoder(new DOMException("Close","AbortError"))}static isConfigSupported(t){return R(this,void 0,void 0,(function*(){const e=b(t.codec,t);let i=!1;if(e){const t=yield _();try{const[,s,a,r]=yield t.ff_init_encoder(e.codec,e);yield t.ff_free_encoder(s,a,r),i=!0}catch(t){}yield p(t)}return{supported:i,config:v(t,["codec","width","height","bitrate","framerate","latencyMode"])}}))}};var H=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))((function(a,r){function o(t){try{c(s.next(t))}catch(t){r(t)}}function n(t){try{c(s.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,n)}c((s=s.apply(t,e||[])).next())}))};let L=null,W=null,B=null,G=null,z=null;function U(t,e,i,s,a,r,o,n,c,d){if(!e._data)return B.apply(t,Array.prototype.slice.call(arguments,1));void 0===a?(o=i,n=s):void 0===o&&(o=i,n=s,c=a,d=r,a=void 0,r=void 0),void 0===c&&(c=e.displayWidth,d=e.displayHeight);const h=k(L,e.format),l=L.sws_getContext_sync(e.visibleRect.width,e.visibleRect.height,h,c,d,L.AV_PIX_FMT_RGBA,2,0,0,0),u=L.av_frame_alloc_sync(),f=L.av_frame_alloc_sync();let _,p;e._libavGetData?(_=e._libavGetData(),p=e._libavGetLayout()):(_=e._data,p=e._layout),L.ff_copyin_frame_sync(u,{data:_,layout:p,format:h,width:e.codedWidth,height:e.codedHeight,crop:{left:e.visibleRect.left,right:e.visibleRect.right,top:e.visibleRect.top,bottom:e.visibleRect.bottom}}),L.sws_scale_frame_sync(l,f,u);const m=L.ff_copyout_frame_video_imagedata_sync(f);t.putImageData(m,o,n),L.av_frame_free_js_sync(f),L.av_frame_free_js_sync(u),L.sws_freeContext_sync(l)}function N(t,e,i,s,a,r,o,n,c){return t instanceof V?U(this,t,e,i,s,a,r,o,n,c):B.apply(this,arguments)}function X(t,e,i,s,a,r,o,n,c){return t instanceof V?U(this,t,e,i,s,a,r,o,n,c):G.apply(this,arguments)}function j(t,e={}){if(!t._data)return z.apply(globalThis,arguments);const i=k(W,t.format),s="number"==typeof e.resizeWidth?e.resizeWidth:t.displayWidth,a="number"==typeof e.resizeHeight?e.resizeHeight:t.displayHeight;return(()=>H(this,void 0,void 0,(function*(){const[e,r,o]=yield Promise.all([W.sws_getContext(t.visibleRect.width,t.visibleRect.height,i,s,a,W.AV_PIX_FMT_RGBA,2,0,0,0),W.av_frame_alloc(),W.av_frame_alloc()]);let n,c;t._libavGetData?(n=t._libavGetData(),c=t._libavGetLayout()):t._data?(n=t._data,c=t._layout):(n=new Uint8Array(t.allocationSize()),yield t.copyTo(n)),yield W.ff_copyin_frame(r,{data:n,layout:c,format:i,width:t.codedWidth,height:t.codedHeight,crop:{left:t.visibleRect.left,right:t.visibleRect.right,top:t.visibleRect.top,bottom:t.visibleRect.bottom}}),yield W.sws_scale_frame(e,o,r);const d=yield W.ff_copyout_frame_video_imagedata(o);return yield Promise.all([W.av_frame_free_js(o),W.av_frame_free_js(r),W.sws_freeContext(e)]),yield z(d)})))()}var q=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))((function(a,r){function o(t){try{c(s.next(t))}catch(t){r(t)}}function n(t){try{c(s.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,n)}c((s=s.apply(t,e||[])).next())}))};let Q=class extends Error{constructor(){super("The requested configuration is not supported")}};var Y=this&&this.__awaiter||function(t,e,i,s){return new(i||(i=Promise))((function(a,r){function o(t){try{c(s.next(t))}catch(t){r(t)}}function n(t){try{c(s.throw(t))}catch(t){r(t)}}function c(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(o,n)}c((s=s.apply(t,e||[])).next())}))};function $(i={}){return Y(this,void 0,void 0,(function*(){let s={};var a;if(i.libavOptions&&Object.assign(s,i.libavOptions),i.LibAV||void 0!==globalThis.LibAV||(yield new Promise(((t,e)=>{s.noworker=!0;const i="https://cdn.jsdelivr.net/npm/@libav.js/variant-webm-vp9@6.7.7/dist";globalThis.LibAV={base:i};const a="libav-6.7.7.1.1-webm-vp9.js";if("undefined"!=typeof importScripts)importScripts(`${i}/${a}`),t(void 0);else{const s=document.createElement("script");s.src=`${i}/${a}`,s.onload=t,s.onerror=e,document.body.appendChild(s)}}))),i.LibAV&&(a=i.LibAV,c=a),f(s),yield function(){return n(this,void 0,void 0,(function*(){c=c||LibAV,l=yield m(!1),u=yield m(!0)}))}(),i.polyfill)for(const i of[["EncodedAudioChunk",t],["AudioData",e],["AudioDecoder",g],["AudioEncoder",E],["EncodedVideoChunk",I],["VideoFrame",V],["VideoDecoder",D],["VideoEncoder",F]])globalThis[i[0]]||(globalThis[i[0]]=i[1]);yield function(t,e){return H(this,void 0,void 0,(function*(){"importScripts"in globalThis&&(c.nolibavworker=!0),L=yield c.LibAV(Object.assign(Object.assign({},t),{noworker:!0,yesthreads:!1})),W=yield c.LibAV(t),"CanvasRenderingContext2D"in globalThis&&(B=CanvasRenderingContext2D.prototype.drawImage,e&&(CanvasRenderingContext2D.prototype.drawImage=N)),"OffscreenCanvasRenderingContext2D"in globalThis&&(G=OffscreenCanvasRenderingContext2D.prototype.drawImage,e&&(OffscreenCanvasRenderingContext2D.prototype.drawImage=X)),z=globalThis.createImageBitmap,e&&(globalThis.createImageBitmap=j)}))}(s,!!i.polyfill)}))}const J=t,K=e,Z=g,tt=E,et=I,it=V,st=D,at=F,rt=U,ot=j,nt=Q,ct=function(i){return q(this,void 0,void 0,(function*(){try{if(void 0!==globalThis.AudioDecoder&&(yield globalThis.AudioDecoder.isConfigSupported(i)).supported)return{AudioDecoder:globalThis.AudioDecoder,EncodedAudioChunk:globalThis.EncodedAudioChunk,AudioData:globalThis.AudioData}}catch(t){}if((yield g.isConfigSupported(i)).supported)return{AudioDecoder:g,EncodedAudioChunk:t,AudioData:e};throw new Q}))},dt=function(t){return q(this,void 0,void 0,(function*(){try{if(void 0!==globalThis.VideoDecoder&&(yield globalThis.VideoDecoder.isConfigSupported(t)).supported)return{VideoDecoder:globalThis.VideoDecoder,EncodedVideoChunk:globalThis.EncodedVideoChunk,VideoFrame:globalThis.VideoFrame}}catch(t){}if((yield D.isConfigSupported(t)).supported)return{VideoDecoder:D,EncodedVideoChunk:I,VideoFrame:V};throw new Q}))},ht=function(i){return q(this,void 0,void 0,(function*(){try{if(void 0!==globalThis.AudioEncoder&&(yield globalThis.AudioEncoder.isConfigSupported(i)).supported)return{AudioEncoder:globalThis.AudioEncoder,EncodedAudioChunk:globa