@mediabunny/server 1.56.2 → 1.57.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/bundles/mediabunny-server.cjs +141 -2
- package/dist/bundles/mediabunny-server.min.cjs +2 -2
- package/dist/bundles/mediabunny-server.min.mjs +2 -2
- package/dist/bundles/mediabunny-server.mjs +141 -2
- package/dist/mediabunny-server.d.ts +2 -2
- package/dist/modules/src/index.d.ts +2 -2
- package/dist/modules/src/index.js +2 -2
- package/dist/modules/src/video-sample.d.ts.map +1 -1
- package/dist/modules/src/video-sample.js +7 -2
- package/dist/modules/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/index.ts +2 -2
- package/src/video-sample.ts +8 -2
|
@@ -5,5 +5,5 @@
|
|
|
5
5
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
6
6
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
7
7
|
*/
|
|
8
|
-
import{AudioSample as ir,Logging as or,registerDecoder as Ct,registerEncoder as bt,registerVideoSampleTransformer as sr,VideoSample as xt}from"mediabunny";import*as X from"node-av";import{CustomVideoDecoder as It,VideoSample as wt}from"mediabunny";import*as C from"node-av";import*as o from"node-av";var j={avc:o.AV_CODEC_ID_H264,hevc:o.AV_CODEC_ID_HEVC,vp8:o.AV_CODEC_ID_VP8,vp9:o.AV_CODEC_ID_VP9,av1:o.AV_CODEC_ID_AV1,prores:o.AV_CODEC_ID_PRORES,aac:o.AV_CODEC_ID_AAC,opus:o.AV_CODEC_ID_OPUS,mp3:o.AV_CODEC_ID_MP3,vorbis:o.AV_CODEC_ID_VORBIS,flac:o.AV_CODEC_ID_FLAC,ac3:o.AV_CODEC_ID_AC3,eac3:o.AV_CODEC_ID_EAC3,dts:o.AV_CODEC_ID_DTS},Se,Ue=()=>$.hardwareContext!==void 0&&typeof $.hardwareContext!="function"?$.hardwareContext:(Se===void 0&&(Se=o.HardwareContext.auto()),Se),Oe=t=>{if(t!==null&&!(t instanceof o.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},ye=new Map,De=async t=>{if(typeof $.hardwareContext=="function"){let r=await $.hardwareContext(t);return Oe(r),r?.getDecoderCodec(t)??null}if(!ye.has(t)){let r=Ue();ye.set(t,r?.getDecoderCodec(t)??null)}return ye.get(t)},Ee=new Map,Le=async t=>{if(typeof $.hardwareContext=="function"){let r=await $.hardwareContext(t);return Oe(r),r?.getEncoderCodec(t)??null}if(!Ee.has(t)){let r=Ue();Ee.set(t,r?.getEncoderCodec(t)??null)}return Ee.get(t)},He=t=>{switch(t){case"bt709":return o.AVCOL_PRI_BT709;case"bt470bg":return o.AVCOL_PRI_BT470BG;case"smpte170m":return o.AVCOL_PRI_SMPTE170M;case"bt2020":return o.AVCOL_PRI_BT2020;case"smpte432":return o.AVCOL_PRI_SMPTE432}return null},ue=t=>{switch(t){case o.AVCOL_PRI_BT709:return"bt709";case o.AVCOL_PRI_BT470BG:return"bt470bg";case o.AVCOL_PRI_SMPTE170M:return"smpte170m";case o.AVCOL_PRI_BT2020:return"bt2020";case o.AVCOL_PRI_SMPTE432:return"smpte432"}return null},ze=t=>{switch(t){case"bt709":return o.AVCOL_TRC_BT709;case"smpte170m":return o.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return o.AVCOL_TRC_IEC61966_2_1;case"linear":return o.AVCOL_TRC_LINEAR;case"pq":return o.AVCOL_TRC_SMPTE2084;case"hlg":return o.AVCOL_TRC_ARIB_STD_B67}return null},Ae=t=>{switch(t){case o.AVCOL_TRC_BT709:return"bt709";case o.AVCOL_TRC_SMPTE170M:return"smpte170m";case o.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case o.AVCOL_TRC_LINEAR:return"linear";case o.AVCOL_TRC_SMPTE2084:return"pq";case o.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},qe=t=>{switch(t){case"rgb":return o.AVCOL_SPC_RGB;case"bt709":return o.AVCOL_SPC_BT709;case"bt470bg":return o.AVCOL_SPC_BT470BG;case"smpte170m":return o.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return o.AVCOL_SPC_BT2020_NCL}return null},fe=t=>{switch(t){case o.AVCOL_SPC_RGB:return"rgb";case o.AVCOL_SPC_BT709:return"bt709";case o.AVCOL_SPC_BT470BG:return"bt470bg";case o.AVCOL_SPC_SMPTE170M:return"smpte170m";case o.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},We=t=>{switch(t){case o.AV_PIX_FMT_YUV420P:return"I420";case o.AV_PIX_FMT_YUVJ420P:return"I420";case o.AV_PIX_FMT_YUV420P10LE:return"I420P10";case o.AV_PIX_FMT_YUV420P12LE:return"I420P12";case o.AV_PIX_FMT_YUVA420P:return"I420A";case o.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case o.AV_PIX_FMT_YUV422P:return"I422";case o.AV_PIX_FMT_YUVJ422P:return"I422";case o.AV_PIX_FMT_YUV422P10LE:return"I422P10";case o.AV_PIX_FMT_YUV422P12LE:return"I422P12";case o.AV_PIX_FMT_YUVA422P:return"I422A";case o.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case o.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case o.AV_PIX_FMT_YUV444P:return"I444";case o.AV_PIX_FMT_YUVJ444P:return"I444";case o.AV_PIX_FMT_YUV444P10LE:return"I444P10";case o.AV_PIX_FMT_YUV444P12LE:return"I444P12";case o.AV_PIX_FMT_YUVA444P:return"I444A";case o.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case o.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case o.AV_PIX_FMT_NV12:return"NV12";case o.AV_PIX_FMT_RGBA:return"RGBA";case o.AV_PIX_FMT_RGB0:return"RGBX";case o.AV_PIX_FMT_BGRA:return"BGRA";case o.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},Be=t=>{switch(t){case"I420":return o.AV_PIX_FMT_YUV420P;case"I420P10":return o.AV_PIX_FMT_YUV420P10LE;case"I420P12":return o.AV_PIX_FMT_YUV420P12LE;case"I420A":return o.AV_PIX_FMT_YUVA420P;case"I420AP10":return o.AV_PIX_FMT_YUVA420P10LE;case"I422":return o.AV_PIX_FMT_YUV422P;case"I422P10":return o.AV_PIX_FMT_YUV422P10LE;case"I422P12":return o.AV_PIX_FMT_YUV422P12LE;case"I422A":return o.AV_PIX_FMT_YUVA422P;case"I422AP10":return o.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return o.AV_PIX_FMT_YUVA422P12LE;case"I444":return o.AV_PIX_FMT_YUV444P;case"I444P10":return o.AV_PIX_FMT_YUV444P10LE;case"I444P12":return o.AV_PIX_FMT_YUV444P12LE;case"I444A":return o.AV_PIX_FMT_YUVA444P;case"I444AP10":return o.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return o.AV_PIX_FMT_YUVA444P12LE;case"NV12":return o.AV_PIX_FMT_NV12;case"RGBA":return o.AV_PIX_FMT_RGBA;case"RGBX":return o.AV_PIX_FMT_RGB0;case"BGRA":return o.AV_PIX_FMT_BGRA;case"BGRX":return o.AV_PIX_FMT_BGR0;default:return o.AV_PIX_FMT_NONE}},Xe=t=>{switch(t){case o.AV_SAMPLE_FMT_U8:return"u8";case o.AV_SAMPLE_FMT_S16:return"s16";case o.AV_SAMPLE_FMT_S32:return"s32";case o.AV_SAMPLE_FMT_FLT:return"f32";case o.AV_SAMPLE_FMT_U8P:return"u8-planar";case o.AV_SAMPLE_FMT_S16P:return"s16-planar";case o.AV_SAMPLE_FMT_S32P:return"s32-planar";case o.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},Ge=t=>{switch(t){case"u8":return o.AV_SAMPLE_FMT_U8;case"s16":return o.AV_SAMPLE_FMT_S16;case"s32":return o.AV_SAMPLE_FMT_S32;case"f32":return o.AV_SAMPLE_FMT_FLT;case"u8-planar":return o.AV_SAMPLE_FMT_U8P;case"s16-planar":return o.AV_SAMPLE_FMT_S16P;case"s32-planar":return o.AV_SAMPLE_FMT_S32P;case"f32-planar":return o.AV_SAMPLE_FMT_FLTP;default:return o.AV_SAMPLE_FMT_NONE}},re=t=>{switch(t){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return o.AV_CHANNEL_LAYOUT_QUAD;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return o.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}},St=0x603n,Ye=t=>{switch(t){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return{nbChannels:4,order:o.AV_CHANNEL_ORDER_NATIVE,mask:St};case 5:return o.AV_CHANNEL_LAYOUT_5POINT0;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1;default:return{nbChannels:t,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};var D=class D{constructor(){}static get level(){return D._level}static set level(r){if(r!==0&&r!==1&&r!==2&&r!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");D._level=r}static get _emitter(){return D._emitterInstance??=new me}static on(r,e,n){return D._emitter.on(r,e,n)}static _error(...r){D._emitter._emit("error",r),D._level>=1&&console.error(...r)}static _warn(...r){D._emitter._emit("warn",r),D._level>=2&&console.warn(...r)}static _info(...r){D._emitter._emit("info",r),D._level>=3&&console.info(...r)}};D._level=3,D._emitterInstance=null;var ne=D;function p(t){if(!t)throw new Error("Assertion failed.")}var oe=t=>t&&t[t.length-1];var d=t=>{let r=0;for(;t.readBits(1)===0&&r<32;)r++;if(r>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<r)-1+t.readBits(r)};var Y=t=>{let r=d(t);return(r&1)===0?-(r>>1):r+1>>1};var L=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Ie=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var Ke={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var Qe={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var $e={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var we=t=>[...t].map(r=>r.toString(16).padStart(2,"0")).join("");var Pe=t=>(t=t>>1&1431655765|(t&1431655765)<<1,t=t>>2&858993459|(t&858993459)<<2,t=t>>4&252645135|(t&252645135)<<4,t=t>>8&16711935|(t&16711935)<<8,t=t>>16&65535|(t&65535)<<16,t>>>0);var se=(t,r,e)=>{let n=0,i=t.length-1,s=-1;for(;n<=i;){let a=n+(i-n+1)/2|0;e(t[a])<=r?(s=a,n=a+1):i=a-1}return s};var Te=t=>{throw new Error(`Unexpected value: ${t}`)};var Ar=1e6*(1+Number.EPSILON);var fr=(async()=>{})().constructor;var pe=t=>{p(Number.isInteger(t.num)),p(Number.isInteger(t.den)),p(t.den!==0);let r=Math.abs(t.num),e=Math.abs(t.den);for(;e!==0;){let i=r%e;r=e,e=i}let n=r||1;return{num:t.num/n,den:t.den/n}};var me=class{constructor(){this._listeners=new Map}on(r,e,n){this._listeners.has(r)||this._listeners.set(r,new Set);let i={fn:e,once:n?.once??!1};return this._listeners.get(r).add(i),()=>{this._listeners.get(r)?.delete(i)}}_emit(...r){let[e,n]=r,i=this._listeners.get(e);if(i)for(let s of i){try{s.fn(n)}catch(a){console.error(a)}s.once&&i.delete(s)}}};import{VideoSampleResource as yt,VideoSampleColorSpace as Et,VideoSample as je}from"mediabunny";import*as m from"node-av";var Bt=new Set([m.AV_PIX_FMT_YUVJ411P,m.AV_PIX_FMT_YUVJ420P,m.AV_PIX_FMT_YUVJ422P,m.AV_PIX_FMT_YUVJ440P,m.AV_PIX_FMT_YUVJ444P]),W=class t extends yt{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(r){if(super(),!(r instanceof m.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(r.getMediaType()!==m.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=r}getFormat(){return We(this.frame.format)}getCodedWidth(){return this.frame.width}getCodedHeight(){return this.frame.height}getSquarePixelWidth(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?Math.round(this.frame.width*this.frame.sampleAspectRatio.num/this.frame.sampleAspectRatio.den):this.frame.width}getSquarePixelHeight(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?this.frame.height:Math.round(this.frame.height*this.frame.sampleAspectRatio.den/this.frame.sampleAspectRatio.num)}getColorSpace(){return new Et({primaries:ue(this.frame.colorPrimaries),transfer:Ae(this.frame.colorTrc),matrix:fe(this.frame.colorSpace),fullRange:this.frame.colorRange===m.AVCOL_RANGE_JPEG||Bt.has(this.frame.format)?!0:this.frame.colorRange===m.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return p(this.frame.data),this.frame.data.map((r,e)=>({data:L(r),stride:this.frame.linesize[e]}))}async toRgbSample(r,e){let n=this.frame.width,i=this.frame.height,s=new m.SoftwareScaleContext,a=this.frame.format,c=Be("RGBA");s.getContext(n,i,a,n,i,c,m.SWS_BILINEAR);let f=new m.Frame;f.width=n,f.height=i,f.format=c,f.alloc(),f.allocBuffer();let l=this.frame;try{await s.scaleFrame(f,l)}finally{s.freeContext()}return f.sampleAspectRatio=l.sampleAspectRatio,new je(new t(f),r)}},le=async(t,r,e)=>{p(t.format!==null),r.format=Be(t.format),r.width=t.codedWidth,r.height=t.codedHeight,r.sampleAspectRatio=new m.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),r.colorPrimaries=He(t.colorSpace.primaries??"unknown")??m.AVCOL_PRI_UNSPECIFIED,r.colorSpace=qe(t.colorSpace.matrix??"unknown")??m.AVCOL_SPC_UNSPECIFIED,r.colorTrc=ze(t.colorSpace.transfer??"unknown")??m.AVCOL_TRC_UNSPECIFIED,r.colorRange=t.colorSpace.fullRange===!1?m.AVCOL_RANGE_MPEG:t.colorSpace.fullRange===!0?m.AVCOL_RANGE_JPEG:m.AVCOL_RANGE_UNSPECIFIED;let n=t.allocationSize();return(!e||e.byteLength!==n)&&(e=Buffer.from({length:n})),await t.copyTo(e),r.fromBuffer(e),e},Je=async(t,r)=>{let e,n=!1;if(t._data instanceof W)e=t._data.frame;else{if(t.format===null)return null;e=new m.Frame,e.alloc(),n=!0,await le(t,e,null)}let i=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(i.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),i.push("setsar=1")),r.rotation===90?i.push("transpose=1"):r.rotation===180?i.push("transpose=1,transpose=1"):r.rotation===270&&i.push("transpose=2"),i.push(`crop=${Math.round(r.crop.width)}:${Math.round(r.crop.height)}:${Math.round(r.crop.left)}:${Math.round(r.crop.top)}`),r.fit==="fill"?i.push(`scale=${r.width}:${r.height}`):r.fit==="contain"?(i.push(`scale=${r.width}:${r.height}:force_original_aspect_ratio=decrease`),i.push(`pad=${r.width}:${r.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):r.fit==="cover"&&(i.push(`scale=${r.width}:${r.height}:force_original_aspect_ratio=increase`),i.push(`crop=${r.width}:${r.height}`)),i.push("setsar=1");let s=new m.FilterGraph;s.alloc();try{let a=`video_size=${e.width}x${e.height}:pix_fmt=${e.format}:time_base=1/1000000:pixel_aspect=${t.pixelAspectRatio.num}/${t.pixelAspectRatio.den}`,c=s.createFilter(m.Filter.getByName("buffer"),"src",a),f=s.createFilter(m.Filter.getByName("buffersink"),"sink");p(c&&f);let l=m.FilterInOut.createList([{name:"in",filterCtx:c,padIdx:0}]),u=m.FilterInOut.createList([{name:"out",filterCtx:f,padIdx:0}]),h=s.parsePtr(`[in]${i.join(",")}[out]`,u,l);m.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let _=await s.config();m.FFmpegError.throwIfError(_,"FilterGraph.config");let R=await c.buffersrcAddFrame(e);m.FFmpegError.throwIfError(R,"buffersrcAddFrame"),await c.buffersrcAddFrame(null);let g=new m.Frame;g.alloc();let x=await f.buffersinkGetFrame(g);return m.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new je(new W(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),n&&e.free()}};var he=class extends It{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(e,n){return e==="avc"||e==="hevc"||e==="vp8"||e==="vp9"||e==="av1"}async init(){this.frame=new C.Frame,this.frame.alloc(),this.packet=new C.Packet,this.packet.alloc()}async initCodecContext(e){p(this.codecContext===null);let n=j[this.codec];p(n!==void 0);let i;if(this.codec==="vp9"&&e.sideData.alpha?i=C.Codec.findDecoderByName(C.FF_DECODER_LIBVPX_VP9)??C.Codec.findDecoder(n):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?i=C.Codec.findDecoder(n):i=await De(n)??C.Codec.findDecoder(n),!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new C.CodecContext;s.allocContext3(i),this.pixelAspectRatio=pe({num:(this.config.displayAspectWidth??this.config.codedWidth??0)*(this.config.codedHeight??0),den:(this.config.displayAspectHeight??this.config.codedHeight??0)*(this.config.codedWidth??0)||1}),s.width=this.config.codedWidth??0,s.height=this.config.codedHeight??0,s.codecType=C.AVMEDIA_TYPE_VIDEO,s.codecId=n,s.extraData=this.config.description?Buffer.from(L(this.config.description)):null,s.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=C.Dictionary.fromObject({strict:C.FF_COMPLIANCE_STRICT}),c=await s.open2(i,a);C.FFmpegError.throwIfError(c,"Open codec context"),this.codecContext=s}async decode(e){if(this.codecContext===null&&await this.initCodecContext(e),p(this.codecContext),this.packet.isKeyframe=e.type==="key",this.packet.data=Buffer.from(e.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(e.microsecondTimestamp),this.packet.dts=C.AV_NOPTS_VALUE,this.packet.duration=BigInt(e.microsecondDuration),e.sideData.alpha){let a=Buffer.alloc(8+e.sideData.alpha.byteLength);a[7]=1,a.set(e.sideData.alpha,8),this.packet.addSideData(C.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let n=se(this.preciseTimings,e.microsecondTimestamp,a=>a.microsecondTimestamp),i=n!==-1?this.preciseTimings[n]:null;i&&i.microsecondTimestamp===e.microsecondTimestamp?(i.timestamp!==e.timestamp&&(i.timestampIsValid=!1),i.duration!==e.duration&&(i.durationIsValid=!1)):(this.preciseTimings.splice(n+1,0,{microsecondTimestamp:e.microsecondTimestamp,timestamp:e.timestamp,duration:e.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let s=await this.codecContext.sendPacket(this.packet);for(C.FFmpegError.throwIfError(s,"Send packet"),this.packet.unref();;){let a=await this.codecContext.receiveFrame(this.frame);if(a===C.AVERROR_EAGAIN||a===C.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(e){C.FFmpegError.throwIfError(e,"Receive frame"),this.frame.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let n=Number(this.frame.pts)/1e6,i=Number(this.frame.duration)/1e6,s=se(this.preciseTimings,Number(this.frame.pts),f=>f.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(n=a.timestamp),a.durationIsValid&&(i=a.duration));let c=this.frame.clone();if(!c)throw new Error("Frame clone allocation failed.");this.onSample(new wt(new W(c),{timestamp:n,duration:i}))}async flush(){if(!this.codecContext)return;let e=await this.codecContext.sendPacket(null);for(C.FFmpegError.throwIfError(e,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===C.AVERROR_EAGAIN||n===C.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomVideoEncoder as Wt,Quality as Xt,EncodedPacket as Gt}from"mediabunny";import*as A from"node-av";var z=class t{constructor(r){this.bytes=r;this.pos=0}seekToByte(r){this.pos=8*r}readBit(){let r=Math.floor(this.pos/8),e=this.bytes[r]??0,n=7-(this.pos&7),i=(e&1<<n)>>n;return this.pos++,i}readBits(r){if(r===1)return this.readBit();let e=0;for(let n=0;n<r;n++)e<<=1,e|=this.readBit();return e}writeBits(r,e){let n=this.pos+r;for(let i=this.pos;i<n;i++){let s=Math.floor(i/8),a=this.bytes[s],c=7-(i&7);a&=~(1<<c),a|=(e&1<<n-i-1)>>n-i-1<<c,this.bytes[s]=a}this.pos=n}copyBits(r,e){let n=0;for(n;n<r-7;n+=8)this.writeBits(8,e.readBits(8));let i=r-n;i>0&&this.writeBits(i,e.readBits(i))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let r=this.pos/8,e=this.bytes[r]??0;return this.pos+=8,e}skipBits(r){this.pos+=r}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let r=new t(this.bytes);return r.pos=this.pos,r}};var Ze=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Pt=[-1,1,2,3,4,5,6,8],et=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let r=new z(t),e=Re(r),{frequencyIndex:n,sampleRate:i}=Fe(r),s=r.readBits(4),a=null;s>=1&&s<=7&&(a=Pt[s]);let c=e,f=!1,l=i;if(e===5||e===29)f=e===29,l=Fe(r).sampleRate,c=Re(r),c===22&&r.skipBits(4);else for(;r.getBitsLeft()>15;){let u=r.pos;if(r.readBits(11)!==695){r.pos=u+1;continue}Re(r)===5&&r.readBits(1)&&(l=Fe(r).sampleRate,r.getBitsLeft()>11&&r.readBits(11)===1352&&(f=!!r.readBits(1)));break}return a!==null&&a>1&&(f=!1),{objectType:e,coreObjectType:c,frequencyIndex:n,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:f&&a===1?2:a}},Re=t=>{let r=t.readBits(5);return r===31?32+t.readBits(6):r},Fe=t=>{let r=t.readBits(4);return r===15?{frequencyIndex:r,sampleRate:t.readBits(24)}:{frequencyIndex:r,sampleRate:r<Ze.length?Ze[r]:null}};var tt=t=>{let r=new Uint8Array(7),e=new z(r),{coreObjectType:n,frequencyIndex:i,channelConfiguration:s}=t,a=n-1;return e.writeBits(12,4095),e.writeBits(1,0),e.writeBits(2,0),e.writeBits(1,1),e.writeBits(2,a),e.writeBits(4,i),e.writeBits(1,0),e.writeBits(3,s),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.skipBits(13),e.writeBits(11,2047),e.writeBits(2,0),{header:r,bitstream:e}};var Rt=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Ft=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],Lr=[...Ft,...Rt];var Ve=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}];var ie=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}];var rt=".01.01.01.01.00",nt=".0.110.01.01.01.0",Vt=["ap4x","ap4h","apch","apcn","apcs","apco"];var ae=t=>{let{codec:r,codecDescription:e,colorSpace:n,avcCodecInfo:i,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:c,proresFormat:f}=t;if(r==="avc"){if(p(t.avcType!==null),i){let l=new Uint8Array([i.avcProfileIndication,i.profileCompatibility,i.avcLevelIndication]);return`avc${t.avcType}.${we(l)}`}if(!e||e.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${t.avcType}.${we(e.subarray(1,4))}`}else if(r==="hevc"){let l,u,h,_,R,g;if(s)l=s.generalProfileSpace,u=s.generalProfileIdc,h=Pe(s.generalProfileCompatibilityFlags),_=s.generalTierFlag,R=s.generalLevelIdc,g=[...s.generalConstraintIndicatorFlags];else{if(!e||e.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let b=Ie(e),y=b.getUint8(1);l=y>>6&3,u=y&31,h=Pe(b.getUint32(2)),_=y>>5&1,R=b.getUint8(12),g=[];for(let E=0;E<6;E++)g.push(b.getUint8(6+E))}let x="hev1.";for(x+=["","A","B","C"][l]+u,x+=".",x+=h.toString(16).toUpperCase(),x+=".",x+=_===0?"L":"H",x+=R;g.length>0&&g[g.length-1]===0;)g.pop();return g.length>0&&(x+=".",x+=g.map(b=>b.toString(16).toUpperCase()).join(".")),x}else{if(r==="vp8")return"vp8";if(r==="vp9"){if(!a){let E=t.width*t.height,B=oe(ie).level;for(let T of ie)if(E<=T.maxPictureSize){B=T.level;break}return`vp09.00.${B.toString().padStart(2,"0")}.08`}let l=a.profile.toString().padStart(2,"0"),u=a.level.toString().padStart(2,"0"),h=a.bitDepth.toString().padStart(2,"0"),_=a.chromaSubsampling.toString().padStart(2,"0"),R=a.colourPrimaries.toString().padStart(2,"0"),g=a.transferCharacteristics.toString().padStart(2,"0"),x=a.matrixCoefficients.toString().padStart(2,"0"),b=a.videoFullRangeFlag.toString().padStart(2,"0"),y=`vp09.${l}.${u}.${h}.${_}`;return y+=`.${R}.${g}.${x}.${b}`,y.endsWith(rt)&&(y=y.slice(0,-rt.length)),y}else if(r==="av1"){if(!c){let T=t.width*t.height,w=oe(ie).level;for(let I of ie)if(T<=I.maxPictureSize){w=I.level;break}return`av01.0.${w.toString().padStart(2,"0")}M.08`}let l=c.profile,u=c.level.toString().padStart(2,"0"),h=c.tier?"H":"M",_=c.bitDepth.toString().padStart(2,"0"),R=c.monochrome?"1":"0",g=100*c.chromaSubsamplingX+10*c.chromaSubsamplingY+1*(c.chromaSubsamplingX&&c.chromaSubsamplingY?c.chromaSamplePosition:0),x=n?.primaries?Ke[n.primaries]:1,b=n?.transfer?Qe[n.transfer]:1,y=n?.matrix?$e[n.matrix]:1,E=n?.fullRange?1:0,B=`av01.${l}.${u}${h}.${_}`;return B+=`.${R}.${g.toString().padStart(3,"0")}`,B+=`.${x.toString().padStart(2,"0")}`,B+=`.${b.toString().padStart(2,"0")}`,B+=`.${y.toString().padStart(2,"0")}`,B+=`.${E}`,B.endsWith(nt)&&(B=B.slice(0,-nt.length)),B}else{if(r==="prores")return f??"apch";r!==null&&Te(r)}}throw new TypeError(`Unhandled codec '${r}'.`)};var Hr=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Vt];var Ce=function*(t){let r=0,e=-1;for(;r<t.length-2;){let n=t.indexOf(0,r);if(n===-1||n>=t.length-2)break;r=n;let i=0;if(r+3<t.length&&t[r+1]===0&&t[r+2]===0&&t[r+3]===1?i=4:t[r+1]===0&&t[r+2]===1&&(i=3),i===0){r++;continue}e!==-1&&r>e&&(yield{offset:e,length:r-e}),e=r+i,r=e}e!==-1&&e<t.length&&(yield{offset:e,length:t.length-e})};var Ne=t=>t&31,Me=t=>{let r=[],e=t.length;for(let n=0;n<e;n++)n+2<e&&t[n]===0&&t[n+1]===0&&t[n+2]===3?(r.push(0,0),n+=2):r.push(t[n]);return new Uint8Array(r)};var sn=new Uint8Array([0,0,0,1]);var st=t=>{try{let r=[],e=[],n=[];for(let c of Ce(t)){let f=t.subarray(c.offset,c.offset+c.length),l=Ne(f[0]);l===7?r.push(f):l===8?e.push(f):l===13&&n.push(f)}if(r.length===0||e.length===0)return null;let i=r[0],s=Nt(i);p(s!==null);let a=s.profileIdc===100||s.profileIdc===110||s.profileIdc===122||s.profileIdc===144;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:r,pictureParameterSets:e,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?n:null}}catch(r){return ne._error("Error building AVC Decoder Configuration Record:",r),null}},at=t=>{let r=[];r.push(t.configurationVersion),r.push(t.avcProfileIndication),r.push(t.profileCompatibility),r.push(t.avcLevelIndication),r.push(252|t.lengthSizeMinusOne&3),r.push(224|t.sequenceParameterSets.length&31);for(let e of t.sequenceParameterSets){let n=e.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(e[i])}r.push(t.pictureParameterSets.length);for(let e of t.pictureParameterSets){let n=e.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(e[i])}if((t.avcProfileIndication===100||t.avcProfileIndication===110||t.avcProfileIndication===122||t.avcProfileIndication===144)&&t.chromaFormat!==null){p(t.bitDepthLumaMinus8!==null),p(t.bitDepthChromaMinus8!==null),p(t.sequenceParameterSetExt!==null),r.push(252|t.chromaFormat&3),r.push(248|t.bitDepthLumaMinus8&7),r.push(248|t.bitDepthChromaMinus8&7),r.push(t.sequenceParameterSetExt.length);for(let e of t.sequenceParameterSetExt){let n=e.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(e[i])}}return new Uint8Array(r)};var ct={1:{num:1,den:1},2:{num:12,den:11},3:{num:10,den:11},4:{num:16,den:11},5:{num:40,den:33},6:{num:24,den:11},7:{num:20,den:11},8:{num:32,den:11},9:{num:80,den:33},10:{num:18,den:11},11:{num:15,den:11},12:{num:64,den:33},13:{num:160,den:99},14:{num:4,den:3},15:{num:3,den:2},16:{num:2,den:1}},Nt=t=>{try{let r=Me(t),e=new z(r);if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let i=e.readAlignedByte(),s=e.readAlignedByte(),a=e.readAlignedByte();d(e);let c=1,f=0,l=0,u=0;if((i===100||i===110||i===122||i===244||i===44||i===83||i===86||i===118||i===128)&&(c=d(e),c===3&&(u=e.readBits(1)),f=d(e),l=d(e),e.skipBits(1),e.readBits(1))){for(let V=0;V<(c!==3?8:12);V++)if(e.readBits(1)){let Q=V<6?16:64,G=8,O=8;for(let ee=0;ee<Q;ee++){if(O!==0){let te=Y(e);O=(G+te+256)%256}G=O===0?G:O}}}d(e);let h=d(e);if(h===0)d(e);else if(h===1){e.skipBits(1),Y(e),Y(e);let M=d(e);for(let V=0;V<M;V++)Y(e)}d(e),e.skipBits(1);let _=d(e),R=d(e),g=16*(_+1),x=16*(R+1),b=g,y=x,E=e.readBits(1);if(E||e.skipBits(1),e.skipBits(1),e.readBits(1)){let M=d(e),V=d(e),H=d(e),Q=d(e),G,O;if((u===0?c:0)===0)G=1,O=2-E;else{let te=c===3?1:2,de=c===1?2:1;G=te,O=de*(2-E)}b-=G*(M+V),y-=O*(H+Q)}let T=2,w=2,I=2,F=0,N={num:1,den:1},U=null,k=null,q=null,P=null,K=e.pos;if(e.readBits(1)){if(e.readBits(1)){let te=e.readBits(8);if(te===255)N={num:e.readBits(16),den:e.readBits(16)};else{let de=ct[te];de&&(N=de)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),F=e.readBits(1),e.readBits(1)&&(T=e.readBits(8),w=e.readBits(8),I=e.readBits(8))),e.readBits(1)&&(d(e),d(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let O=e.readBits(1);O&&it(e);let ee=e.readBits(1);ee&&it(e),(O||ee)&&e.skipBits(1),e.skipBits(1),q=e.pos,P=e.readBits(1),P&&(e.skipBits(1),d(e),d(e),d(e),d(e),U=d(e),k=d(e))}if(U===null){p(k===null);let M=s&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&M)U=0,k=0;else{let V=_+1,H=R+1,Q=(2-E)*H,G=Ve.find(ee=>ee.level>=a)??oe(Ve),O=Math.min(Math.floor(G.maxDpbMbs/(V*Q)),16);U=O,k=O}}return p(k!==null),{emulationUnpreventedBytes:r,profileIdc:i,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:E,chromaFormatIdc:c,bitDepthLumaMinus8:f,bitDepthChromaMinus8:l,codedWidth:g,codedHeight:x,displayWidth:b,displayHeight:y,pixelAspectRatio:N,colourPrimaries:T,matrixCoefficients:I,transferCharacteristics:w,fullRangeFlag:F,numReorderFrames:U,maxDecFrameBuffering:k,vuiParametersFlagBitOffset:K,bitstreamRestrictionFlagBitOffset:q,bitstreamRestrictionFlag:P}}catch(r){return ne._error("Error parsing AVC SPS:",r),null}},it=t=>{let r=d(t);t.skipBits(4),t.skipBits(4);for(let e=0;e<=r;e++)d(t),d(t),t.skipBits(1);t.skipBits(5),t.skipBits(5),t.skipBits(5),t.skipBits(5)};var ge=t=>t>>1&63,Mt=t=>{try{let r=new z(Me(t));r.skipBits(16),r.readBits(4);let e=r.readBits(3),n=r.readBits(1),{general_profile_space:i,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:c,general_constraint_indicator_flags:f,general_level_idc:l}=kt(r,e);d(r);let u=d(r),h=0;u===3&&(h=r.readBits(1));let _=d(r),R=d(r),g=_,x=R;if(r.readBits(1)){let P=d(r),K=d(r),Z=d(r),M=d(r),V=1,H=1,Q=h===0?u:0;Q===1?(V=2,H=2):Q===2&&(V=2,H=1),g-=(P+K)*V,x-=(Z+M)*H}let b=d(r),y=d(r);d(r);let B=r.readBits(1)?0:e,T=0;for(let P=B;P<=e;P++)d(r),T=d(r),d(r);d(r),d(r),d(r),d(r),d(r),d(r),r.readBits(1)&&r.readBits(1)&&Ut(r),r.skipBits(1),r.skipBits(1),r.readBits(1)&&(r.skipBits(4),r.skipBits(4),d(r),d(r),r.skipBits(1));let w=d(r);if(Ot(r,w),r.readBits(1)){let P=d(r);for(let K=0;K<P;K++)d(r),r.skipBits(1)}r.skipBits(1),r.skipBits(1);let I=2,F=2,N=2,U=0,k=0,q={num:1,den:1};if(r.readBits(1)){let P=Lt(r,e);q=P.pixelAspectRatio,I=P.colourPrimaries,F=P.transferCharacteristics,N=P.matrixCoefficients,U=P.fullRangeFlag,k=P.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:q,colourPrimaries:I,transferCharacteristics:F,matrixCoefficients:N,fullRangeFlag:U,maxDecFrameBuffering:T+1,spsMaxSubLayersMinus1:e,spsTemporalIdNestingFlag:n,generalProfileSpace:i,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:c,generalConstraintIndicatorFlags:f,generalLevelIdc:l,chromaFormatIdc:u,bitDepthLumaMinus8:b,bitDepthChromaMinus8:y,minSpatialSegmentationIdc:k}}catch(r){return ne._error("Error parsing HEVC SPS:",r),null}},lt=t=>{try{let r=[],e=[],n=[],i=[];for(let l of Ce(t)){let u=t.subarray(l.offset,l.offset+l.length),h=ge(u[0]);h===32?r.push(u):h===33?e.push(u):h===34?n.push(u):(h===39||h===40)&&i.push(u)}if(e.length===0||n.length===0)return null;let s=Mt(e[0]);if(!s)return null;let a=0;if(n.length>0){let l=n[0],u=new z(Me(l));u.skipBits(16),d(u),d(u),u.skipBits(1),u.skipBits(1),u.skipBits(3),u.skipBits(1),u.skipBits(1),d(u),d(u),Y(u),u.skipBits(1),u.skipBits(1),u.readBits(1)&&d(u),Y(u),Y(u),u.skipBits(1),u.skipBits(1),u.skipBits(1),u.skipBits(1);let h=u.readBits(1),_=u.readBits(1);!h&&!_?a=0:h&&!_?a=2:!h&&_?a=3:a=0}let c=[...r.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:r}]:[],...e.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:e}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:n}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:ge(i[0][0]),nalUnits:i}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:c}}catch(r){return ne._error("Error building HEVC Decoder Configuration Record:",r),null}},kt=(t,r)=>{let e=t.readBits(2),n=t.readBits(1),i=t.readBits(5),s=0;for(let u=0;u<32;u++)s=s<<1|t.readBits(1);let a=new Uint8Array(6);for(let u=0;u<6;u++)a[u]=t.readBits(8);let c=t.readBits(8),f=[],l=[];for(let u=0;u<r;u++)f.push(t.readBits(1)),l.push(t.readBits(1));if(r>0)for(let u=r;u<8;u++)t.skipBits(2);for(let u=0;u<r;u++)f[u]&&t.skipBits(88),l[u]&&t.skipBits(8);return{general_profile_space:e,general_tier_flag:n,general_profile_idc:i,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:c}},Ut=t=>{for(let r=0;r<4;r++)for(let e=0;e<(r===3?2:6);e++)if(!t.readBits(1))d(t);else{let i=Math.min(64,1<<4+(r<<1));r>1&&Y(t);for(let s=0;s<i;s++)Y(t)}},Ot=(t,r)=>{let e=[];for(let n=0;n<r;n++)e[n]=Dt(t,n,r,e)},Dt=(t,r,e,n)=>{let i=0,s=0,a=0;if(r!==0&&(s=t.readBits(1)),s){if(r===e){let f=d(t);a=r-(f+1)}else a=r-1;t.readBits(1),d(t);let c=n[a]??0;for(let f=0;f<=c;f++)t.readBits(1)||t.readBits(1);i=n[a]}else{let c=d(t),f=d(t);for(let l=0;l<c;l++)d(t),t.readBits(1);for(let l=0;l<f;l++)d(t),t.readBits(1);i=c+f}return i},Lt=(t,r)=>{let e=2,n=2,i=2,s=0,a=0,c={num:1,den:1};if(t.readBits(1)){let f=t.readBits(8);if(f===255)c={num:t.readBits(16),den:t.readBits(16)};else{let l=ct[f];l&&(c=l)}}return t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),s=t.readBits(1),t.readBits(1)&&(e=t.readBits(8),n=t.readBits(8),i=t.readBits(8))),t.readBits(1)&&(d(t),d(t)),t.readBits(1),t.readBits(1),t.readBits(1),t.readBits(1)&&(d(t),d(t),d(t),d(t)),t.readBits(1)&&(t.readBits(32),t.readBits(32),t.readBits(1)&&d(t),t.readBits(1)&&Ht(t,!0,r)),t.readBits(1)&&(t.readBits(1),t.readBits(1),t.readBits(1),a=d(t),d(t),d(t),d(t),d(t)),{pixelAspectRatio:c,colourPrimaries:e,transferCharacteristics:n,matrixCoefficients:i,fullRangeFlag:s,minSpatialSegmentationIdc:a}},Ht=(t,r,e)=>{let n=!1,i=!1,s=!1;r&&(n=t.readBits(1)===1,i=t.readBits(1)===1,(n||i)&&(s=t.readBits(1)===1,s&&(t.readBits(8),t.readBits(5),t.readBits(1),t.readBits(5)),t.readBits(4),t.readBits(4),s&&t.readBits(4),t.readBits(5),t.readBits(5),t.readBits(5)));for(let a=0;a<=e;a++){let c=t.readBits(1)===1,f=!0;c||(f=t.readBits(1)===1);let l=!1;f?d(t):l=t.readBits(1)===1;let u=1;l||(u=d(t)+1),n&&ot(t,u,s),i&&ot(t,u,s)}},ot=(t,r,e)=>{for(let n=0;n<r;n++)d(t),d(t),e&&(d(t),d(t)),t.readBits(1)},dt=t=>{let r=[];r.push(t.configurationVersion),r.push((t.generalProfileSpace&3)<<6|(t.generalTierFlag&1)<<5|t.generalProfileIdc&31),r.push(t.generalProfileCompatibilityFlags>>>24&255),r.push(t.generalProfileCompatibilityFlags>>>16&255),r.push(t.generalProfileCompatibilityFlags>>>8&255),r.push(t.generalProfileCompatibilityFlags&255),r.push(...t.generalConstraintIndicatorFlags),r.push(t.generalLevelIdc&255),r.push(240|t.minSpatialSegmentationIdc>>8&15),r.push(t.minSpatialSegmentationIdc&255),r.push(252|t.parallelismType&3),r.push(252|t.chromaFormatIdc&3),r.push(248|t.bitDepthLumaMinus8&7),r.push(248|t.bitDepthChromaMinus8&7),r.push(t.avgFrameRate>>8&255),r.push(t.avgFrameRate&255),r.push((t.constantFrameRate&3)<<6|(t.numTemporalLayers&7)<<3|(t.temporalIdNested&1)<<2|t.lengthSizeMinusOne&3),r.push(t.arrays.length&255);for(let e of t.arrays){r.push((e.arrayCompleteness&1)<<7|0|e.nalUnitType&63),r.push(e.nalUnits.length>>8&255),r.push(e.nalUnits.length&255);for(let n of e.nalUnits){r.push(n.length>>8&255),r.push(n.length&255);for(let i=0;i<n.length;i++)r.push(n[i])}}return new Uint8Array(r)};var zt={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},ut=t=>{let r=new z(t);if(r.readBits(2)!==2)return null;let n=r.readBits(1),s=(r.readBits(1)<<1)+n;if(s===3&&r.skipBits(1),r.readBits(1)===1||r.readBits(1)!==0||(r.skipBits(2),r.readBits(24)!==4817730))return null;let l=8;s>=2&&(l=r.readBits(1)?12:10);let u=r.readBits(3),h=0,_=0;if(u!==7)if(_=r.readBits(1),s===1||s===3){let N=r.readBits(1),U=r.readBits(1);h=!N&&!U?3:N&&!U?2:1,r.skipBits(1)}else h=1;else h=3,_=1;let R=r.readBits(16),g=r.readBits(16),x=R+1,b=g+1,y=x*b,E=oe(ie).level;for(let F of ie)if(y<=F.maxPictureSize){E=F.level;break}let B=zt[u],T=B?.colourPrimaries??2,w=B?.transferCharacteristics??2,I=B?.matrixCoefficients??2;return{profile:s,level:E,bitDepth:l,chromaSubsampling:h,videoFullRangeFlag:_,colourPrimaries:T,transferCharacteristics:w,matrixCoefficients:I}};var qt=function*(t){let r=new z(t),e=()=>{let n=0;for(let i=0;i<8;i++){let s=r.readAlignedByte();if(n+=(s&127)*2**(i*7),!(s&128))break;if(i===7&&s&128)return null}return n>2**32-1?null:n};for(;r.getBitsLeft()>=8;){r.skipBits(1);let n=r.readBits(4),i=r.readBits(1),s=r.readBits(1);r.skipBits(1),i&&r.skipBits(8);let a;if(s){let c=e();if(c===null)return;a=c}else a=Math.floor(r.getBitsLeft()/8);p(r.pos%8===0),yield{type:n,data:t.subarray(r.pos/8,r.pos/8+a)},r.skipBits(a*8)}},At=t=>{for(let{type:r,data:e}of qt(t)){if(r!==1)continue;let n=new z(e),i=n.readBits(3),s=n.readBits(1),a=n.readBits(1),c=0,f=0,l=0;if(a)c=n.readBits(5);else{let k=n.readBits(1),q=0;if(k){if(n.skipBits(32),n.skipBits(32),n.readBits(1)){let M=0;for(;M<32&&!n.readBits(1);)M++;M<32&&n.skipBits(M)}q=n.readBits(1),q&&(l=n.readBits(5),n.skipBits(32),n.skipBits(5),n.skipBits(5))}let P=n.readBits(1),K=n.readBits(5);for(let Z=0;Z<=K;Z++){n.skipBits(12);let M=n.readBits(5);if(Z===0&&(c=M),M>7){let V=n.readBits(1);Z===0&&(f=V)}if(q&&n.readBits(1)){let H=l+1;n.skipBits(H),n.skipBits(H),n.skipBits(1)}P&&n.readBits(1)&&n.skipBits(4)}}let u=n.readBits(4),h=n.readBits(4),_=u+1;n.skipBits(_);let R=h+1;n.skipBits(R);let g=0;if(a?g=0:g=n.readBits(1),g&&(n.skipBits(4),n.skipBits(3)),n.skipBits(1),n.skipBits(1),n.skipBits(1),!a){n.skipBits(1),n.skipBits(1),n.skipBits(1),n.skipBits(1);let k=n.readBits(1);k&&(n.skipBits(1),n.skipBits(1));let q=n.readBits(1),P=0;q?P=2:P=n.readBits(1),P>0&&(n.readBits(1)||n.skipBits(1)),k&&n.skipBits(3)}n.skipBits(1),n.skipBits(1),n.skipBits(1);let x=n.readBits(1),b=8;i===2&&x?b=n.readBits(1)?12:10:i<=2&&(b=x?10:8);let y=0;i!==1&&(y=n.readBits(1));let E=2,B=2,T=2;n.readBits(1)&&(E=n.readBits(8),B=n.readBits(8),T=n.readBits(8));let I=0,F=1,N=1,U=0;return y?I=n.readBits(1):E===1&&B===13&&T===0?(I=1,F=0,N=0):(I=n.readBits(1),i===0?(F=1,N=1):i===1?(F=0,N=0):b===12?(F=n.readBits(1),N=F?n.readBits(1):0):(F=1,N=0),F&&N&&(U=n.readBits(2))),{profile:i,level:c,tier:f,bitDepth:b,monochrome:y,chromaSubsamplingX:F,chromaSubsamplingY:N,chromaSamplePosition:U,videoFullRangeFlag:I,colourPrimaries:E,transferCharacteristics:B,matrixCoefficients:T}}return null};var an=[64*2,69*2,96*2,64*2,70*2,96*2,80*2,87*2,120*2,80*2,88*2,120*2,96*2,104*2,144*2,96*2,105*2,144*2,112*2,121*2,168*2,112*2,122*2,168*2,128*2,139*2,192*2,128*2,140*2,192*2,160*2,174*2,240*2,160*2,175*2,240*2,192*2,208*2,288*2,192*2,209*2,288*2,224*2,243*2,336*2,224*2,244*2,336*2,256*2,278*2,384*2,256*2,279*2,384*2,320*2,348*2,480*2,320*2,349*2,480*2,384*2,417*2,576*2,384*2,418*2,576*2,448*2,487*2,672*2,448*2,488*2,672*2,512*2,557*2,768*2,512*2,558*2,768*2,640*2,696*2,960*2,640*2,697*2,960*2,768*2,835*2,1152*2,768*2,836*2,1152*2,896*2,975*2,1344*2,896*2,976*2,1344*2,1024*2,1114*2,1536*2,1024*2,1115*2,1536*2,1152*2,1253*2,1728*2,1152*2,1254*2,1728*2,1280*2,1393*2,1920*2,1280*2,1394*2,1920*2];var cn=new Uint8Array([5,4,65,67,45,51]),ln=new Uint8Array([5,4,69,65,67,51]);var Yt={apco:A.AV_PROFILE_PRORES_PROXY,apcs:A.AV_PROFILE_PRORES_LT,apcn:A.AV_PROFILE_PRORES_STANDARD,apch:A.AV_PROFILE_PRORES_HQ,ap4h:A.AV_PROFILE_PRORES_4444,ap4x:A.AV_PROFILE_PRORES_XQ},be=class extends Wt{constructor(){super(...arguments);this.codecContext=null;this.scaler=null;this.dstFrame=null;this.lastBuffer=null;this.packetEmitted=!1;this.lastScalerKey=null;this.quantizer=null;this.preciseTimings=[]}static supports(e,n){return n.bitrateMode==="quantizer"?e==="avc"||e==="hevc"||e==="vp9"||e==="av1":e==="avc"||e==="hevc"||e==="vp8"||e==="vp9"||e==="av1"||e==="prores"}async init(){this.frame=new A.Frame,this.frame.alloc(),this.frame.timeBase=new A.Rational(1,1e6),this.packet=new A.Packet,this.packet.alloc();let e=j[this.codec];p(e!==void 0);let n=()=>{if(this.codec==="prores"){let s=A.Codec.findEncoderByName(A.FF_ENCODER_PRORES_KS);if(s)return s}return A.Codec.findEncoder(e)},i=null;if(this.codec==="vp9"&&this.config.alpha==="keep")i=A.Codec.findEncoderByName(A.FF_ENCODER_LIBVPX_VP9)??A.Codec.findEncoder(e);else if(this.config.hardwareAcceleration==="prefer-software")i=n();else{let s=await Le(e);s&&this.config.bitrateMode==="quantizer"&&!s.name?.endsWith("_nvenc")&&(s=null),i=s??n()}if(!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=i,this.config.bitrateMode!=="quantizer"&&await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let e=new A.CodecContext;e.allocContext3(this.avCodec);let n=A.AV_PIX_FMT_YUV420P;this.avCodec.pixelFormats&&(this.avCodec.pixelFormats.includes(A.AV_PIX_FMT_YUV420P)||(n=this.avCodec.pixelFormats[0]),this.config.alpha==="keep"&&(this.avCodec.pixelFormats.includes(A.AV_PIX_FMT_YUVA420P)?n=A.AV_PIX_FMT_YUVA420P:n=A.avcodecFindBestPixFmtOfList(this.avCodec.pixelFormats,A.AV_PIX_FMT_YUVA444P12LE)));let i=pe({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});e.width=this.config.width,e.height=this.config.height,e.pixelFormat=n,e.timeBase=new A.Rational(1,1e6),e.gopSize=60,e.framerate=new A.Rational(Math.round(this.config.framerate??0)||30,1),e.bitRate=this.config.bitrateMode==="quantizer"?0n:BigInt(this.config.bitrate??new Xt("medium")._toVideoBitrate(this.codec,this.config.width,this.config.height)),e.sampleAspectRatio=new A.Rational(i.num,i.den),this.config.bitrateMode==="constant"&&(e.rcMinRate=e.bitRate,e.rcMaxRate=e.bitRate);let s=this.config.latencyMode==="realtime";if(this.avCodec.name==="libx264"?s&&(e.setOption("tune","zerolatency"),e.setOption("preset","ultrafast")):this.avCodec.name==="libx265"?(e.setOption("x265-params","log-level=error"),s&&(e.setOption("tune","zerolatency"),e.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(s&&e.setOption("deadline","realtime"),e.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(e.setOption("deadline","realtime"),s?e.setOption("cpu-used","8"):e.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"?(process.env.SVT_LOG="1",s&&e.setOption("preset","12")):(this.avCodec.name==="h264_nvenc"||this.avCodec.name==="hevc_nvenc")&&e.setOption("forced-idr","1"),this.config.bitrateMode==="quantizer"){p(this.quantizer!==null);let c;if(this.avCodec.name==="libaom-av1"||this.avCodec.name==="libsvtav1"?c=Math.round(this.quantizer/4):c=this.quantizer,this.avCodec.name==="libx264"||this.avCodec.name==="libx265")e.setOption("qp",String(c));else if(this.avCodec.name==="libvpx-vp9"||this.avCodec.name==="libaom-av1")e.setOption("crf",String(c));else if(this.avCodec.name==="libsvtav1")e.setOption("qp",String(c));else if(this.avCodec.name==="librav1e")e.setOption("qp",String(c));else if(this.avCodec.name?.endsWith("_nvenc"))e.setOption("rc","constqp"),e.setOption("qp",String(c));else throw new Error(`Encoder '${this.avCodec.name}' cannot be used for quantizer-based encoding.`);e.qMin=c,e.qMax=c}if(this.codec==="prores"){let c=Yt[this.config.codec];p(c!==void 0),e.setOption("profile",String(c))}let a=await e.open2();A.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=e}async encode(e,n){if(this.config.bitrateMode==="quantizer"){let l;if(this.codec==="avc"?l=n.avc?.quantizer:this.codec==="hevc"?l=n.hevc?.quantizer:this.codec==="vp9"?l=n.vp9?.quantizer:l=n.av1?.quantizer,p(l!=null),this.codecContext!==null&&l!==this.quantizer){let u=await this.codecContext.sendFrame(null);for(A.FFmpegError.throwIfError(u,"Send frame");;){let h=await this.codecContext.receivePacket(this.packet);if(h===A.AVERROR_EAGAIN||h===A.AVERROR_EOF)break;this.receivePacket(h)}this.codecContext.freeContext(),this.codecContext=null}this.quantizer=l}if(this.codecContext===null&&await this.createCodecContext(),p(this.codecContext),e._data instanceof W)this.frame.unref(),this.frame.ref(e._data.frame);else{if(e.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await le(e,this.frame,this.lastBuffer)}let i=this.frame;if(this.codecContext.pixelFormat!==this.frame.format||this.codecContext.width!==this.frame.width||this.codecContext.height!==this.frame.height){this.scaler||(this.scaler=new A.SoftwareScaleContext);let l=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(l!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,A.SWS_FAST_BILINEAR),this.lastScalerKey=l;let h=this.scaler.initContext();A.FFmpegError.throwIfError(h,"initContext")}this.dstFrame||(this.dstFrame=new A.Frame,this.dstFrame.alloc(),this.dstFrame.width=this.codecContext.width,this.dstFrame.height=this.codecContext.height,this.dstFrame.format=this.codecContext.pixelFormat,this.dstFrame.allocBuffer()),await this.scaler.scaleFrame(this.dstFrame,this.frame),this.dstFrame.copyProps(this.frame),i=this.dstFrame}i.pts=BigInt(e.microsecondTimestamp),i.duration=BigInt(e.microsecondDuration),i.timeBase=new A.Rational(1,1e6),i.pictType=n?.keyFrame?A.AV_PICTURE_TYPE_I:A.AV_PICTURE_TYPE_NONE,i.keyFrame=n?.keyFrame?1:0;let a=se(this.preciseTimings,e.microsecondTimestamp,l=>l.microsecondTimestamp),c=a!==-1?this.preciseTimings[a]:null;c&&c.microsecondTimestamp===e.microsecondTimestamp?(c.timestamp!==e.timestamp&&(c.timestampIsValid=!1),c.duration!==e.duration&&(c.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:e.microsecondTimestamp,timestamp:e.timestamp,duration:e.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let f=await this.codecContext.sendFrame(i);for(A.FFmpegError.throwIfError(f,"Send frame");;){let l=await this.codecContext.receivePacket(this.packet);if(l===A.AVERROR_EAGAIN||l===A.AVERROR_EOF)break;this.receivePacket(l)}}receivePacket(e){if(p(this.codecContext),A.FFmpegError.throwIfError(e,"Receive packet"),!this.packet.data)return;let n=L(this.packet.data),i=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=se(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),c=a!==-1?this.preciseTimings[a]:null;c&&c.microsecondTimestamp===Number(this.packet.pts)&&(c.timestampIsValid&&(i=c.timestamp),c.durationIsValid&&(s=c.duration));let f={},l=null,u=null;if(this.codec==="avc"||this.codec==="hevc"){let g=!1;if(this.codec==="avc"?g=this.config.avc?.format==="annexb":g=this.config.hevc?.format==="annexb",!this.packetEmitted){let x;if(this.codec==="avc"){let b=st(this.packet.data);if(!b)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=at(b)}else{let b=lt(this.packet.data);if(!b)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=dt(b)}l=ae({width:this.config.width,height:this.config.height,codec:this.codec,codecDescription:x,colorSpace:null,avcType:1,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),g||(u=x)}if(!g){let b=[];for(let w of Ce(n))if(this.codec==="avc"){let I=Ne(n[w.offset]);I!==7&&I!==8&&I!==13&&b.push(w)}else{let I=ge(n[w.offset]);I!==33&&I!==34&&I!==32&&b.push(w)}let y=0;for(let w of b)y+=4+w.length;let E=new Uint8Array(y),B=new DataView(E.buffer),T=0;for(let w of b){let I=w.length;B.setUint32(T,I,!1),T+=4,E.set(n.subarray(w.offset,w.offset+w.length),T),T+=w.length}n=E}}else if(this.codec==="vp8")this.packetEmitted||(l=ae({width:this.config.width,height:this.config.height,codec:"vp8",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}));else if(this.codec==="vp9"){if(!this.packetEmitted){let g=ut(n);l=ae({width:this.config.width,height:this.config.height,codec:"vp9",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:g,av1CodecInfo:null,proresFormat:null})}}else if(this.codec==="av1"){if(!this.packetEmitted){let g=At(n);l=ae({width:this.config.width,height:this.config.height,codec:"av1",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:g,proresFormat:null})}}else if(this.codec==="prores")this.packetEmitted||(l=ae({width:this.config.width,height:this.config.height,codec:"prores",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:this.config.codec}));else throw new Error("Unreachable.");let h={},_=this.packet.getSideData(A.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);_&&(h.alpha=L(_).subarray(8));let R=new Gt(n,this.packet.isKeyframe?"key":"delta",i,s,void 0,void 0,h);l!==null&&(f.decoderConfig={codec:l,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:u??void 0,colorSpace:{primaries:ue(this.codecContext.colorPrimaries),matrix:fe(this.codecContext.colorSpace),transfer:Ae(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===A.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===A.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(R,f)}async flush(){if(this.codecContext){let e=await this.codecContext.sendFrame(null);for(A.FFmpegError.throwIfError(e,"Send frame");;){let n=await this.codecContext.receivePacket(this.packet);if(n===A.AVERROR_EAGAIN||n===A.AVERROR_EOF)break;this.receivePacket(n)}this.codecContext.freeContext(),this.codecContext=null}this.packetEmitted=!1}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.scaler?.freeContext(),this.dstFrame?.free()}};import{AudioSample as Qt,CustomAudioDecoder as $t}from"mediabunny";import*as S from"node-av";import{AudioSampleResource as Kt}from"mediabunny";import*as ce from"node-av";var J=class extends Kt{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(r){if(super(),!(r instanceof ce.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(r.getMediaType()!==ce.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=r}getFormat(){let r=Xe(this.frame.format);if(r===null){let e=ce.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${e} (${this.frame.format})`)}return r}getSampleRate(){return this.frame.sampleRate}getNumberOfChannels(){return this.frame.channels}getNumberOfFrames(){return this.frame.nbSamples}getTimestamp(){return Number(this.frame.pts)/this.frame.timeBase.den}close(){this.frame.free(),this._frame=null}getDataPlane(r){return p(this.frame.data&&r<this.frame.data.length),L(this.frame.data[r])}},xe=(t,r)=>{r.format=Ge(t.format),r.nbSamples=t.numberOfFrames,r.sampleRate=t.sampleRate,r.channelLayout=re(t.numberOfChannels),r.allocBuffer(),p(r.data);for(let e=0;e<r.data.length;e++)t.copyTo(r.data[e],{planeIndex:e})};var ve=class extends $t{constructor(){super(...arguments);this.codecContext=null}static supports(e,n){return e==="aac"||e==="opus"||e==="mp3"||e==="vorbis"||e==="flac"||e==="ac3"||e==="eac3"||e==="dts"}async init(){this.frame=new S.Frame,this.frame.alloc(),this.packet=new S.Packet,this.packet.alloc();let e=j[this.codec];p(e!==void 0);let n=S.Codec.findDecoder(e);if(n===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let i=new S.CodecContext;i.allocContext3(n),i.sampleRate=this.config.sampleRate,i.channelLayout=re(this.config.numberOfChannels),i.timeBase=new S.Rational(1,this.config.sampleRate),i.codecType=S.AVMEDIA_TYPE_AUDIO,i.codecId=e,i.extraData=this.config.description?Buffer.from(L(this.config.description)):null;let s=await i.open2();S.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=i}async decode(e){p(this.codecContext),this.packet.isKeyframe=e.type==="key",this.packet.data=Buffer.from(e.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(e.timestamp*this.config.sampleRate)),this.packet.dts=S.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(e.duration*this.config.sampleRate));let n=await this.codecContext.sendPacket(this.packet);for(S.FFmpegError.throwIfError(n,"Send packet"),this.packet.unref();;){let i=await this.codecContext.receiveFrame(this.frame);if(i===S.AVERROR_EAGAIN||i===S.AVERROR_EOF)break;this.receiveFrame(i)}}receiveFrame(e){S.FFmpegError.throwIfError(e,"Receive frame");let n=this.frame.clone();if(!n)throw new Error("Allocation failure during frame clone.");n.timeBase=new S.Rational(1,this.config.sampleRate),this.onSample(new Qt(new J(n)))}async flush(){p(this.codecContext);let e=await this.codecContext.sendPacket(null);for(S.FFmpegError.throwIfError(e,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===S.AVERROR_EAGAIN||n===S.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomAudioEncoder as Jt,Quality as Zt,EncodedPacket as er}from"mediabunny";import*as v from"node-av";var ft=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],mt=[1,2,4,5,6],jt=16384,pt=(t,r,e)=>{if(t<32e3||t>384e4)return!1;let n=e===6,i=e-(n?1:0),s=32*Math.ceil(Math.ceil(t*512/r)/32),a=132+(493+28*32)*i+(n?72:0);return s>=a&&s<=8*jt};var tr=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],rr=[8e3,12e3,16e3,24e3,48e3],nr=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],ht=[32e3,44100,48e3],ke=1024,_e=class extends Jt{constructor(){super(...arguments);this.codecContext=null;this.resampler=null;this.dstFrame=null;this.firstExpectedTimestamp=null;this.outputTimestampOffset=0;this.inputParametersKey=null;this.resamplerInputSampleRate=null;this.nextResamplerPts=null;this.packetEmitted=!1;this.adtsHeaderTemplate=null}static supports(e,n){let{numberOfChannels:i,sampleRate:s}=n;return e==="aac"&&i>=1&&i<=48&&tr.includes(s)||e==="opus"&&i>=1&&i<=255&&rr.includes(s)||e==="mp3"&&i>=1&&i<=2&&nr.includes(s)||e==="vorbis"&&i>=1&&i<=255&&s<=2e5||e==="flac"&&i>=1&&i<=8&&s<=655350||e==="ac3"&&i>=1&&i<=6&&ht.includes(s)||e==="eac3"&&i>=1&&i<=16&&ht.includes(s)||e==="dts"&&mt.includes(i)&&ft.includes(s)&&pt(gt(n,e),s,i)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let e=j[this.codec];p(e!==void 0);let n=v.Codec.findEncoder(e);if(!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=n,await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let e=new v.CodecContext;e.allocContext3(this.avCodec);let n=v.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(v.AV_SAMPLE_FMT_FLTP)&&(n=this.avCodec.sampleFormats[0]),e.sampleRate=this.config.sampleRate,e.channelLayout=this.codec==="dts"?Ye(this.config.numberOfChannels):re(this.config.numberOfChannels),e.codecType=v.AVMEDIA_TYPE_AUDIO,e.codecId=j[this.codec],e.sampleFormat=n,e.timeBase=new v.Rational(1,this.config.sampleRate),e.bitRate=BigInt(gt(this.config,this.codec)),this.config.bitrateMode==="constant"&&(e.rcMinRate=e.bitRate,e.rcMaxRate=e.bitRate);let i=this.codec==="dts"?v.Dictionary.fromObject({strict:-2}):null,s=await e.open2(this.avCodec,i);v.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=e}async encode(e){this.codecContext===null&&(await this.createCodecContext(),p(this.codecContext)),this.firstExpectedTimestamp??=e.timestamp,e._data instanceof J?(this.frame.unref(),this.frame.ref(e._data.frame)):xe(e,this.frame),this.frame.pts=BigInt(Math.round(e.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(e.duration*this.config.sampleRate)),this.frame.timeBase=new v.Rational(1,this.config.sampleRate);let n=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==n)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=n,this.codecContext.frameSize>0||this.codecContext.sampleFormat!==this.frame.format||this.codecContext.sampleRate!==this.frame.sampleRate||this.codecContext.channels!==this.frame.channels){if(!this.resampler){this.resampler=new v.SoftwareResampleContext,this.resamplerInputSampleRate=this.frame.sampleRate;let a=this.codecContext.channelLayout,c=re(this.frame.channels),f=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,c,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(f,"allocSetOpts2");let l=this.resampler.init();v.FFmpegError.throwIfError(l,"init"),this.dstFrame=new v.Frame,this.dstFrame.alloc(),this.dstFrame.channelLayout=a,this.dstFrame.sampleRate=this.codecContext.sampleRate,this.dstFrame.format=this.codecContext.sampleFormat,this.dstFrame.nbSamples=this.codecContext.frameSize||ke,this.dstFrame.duration=BigInt(this.dstFrame.nbSamples),this.dstFrame.allocBuffer(),this.nextResamplerPts=this.frame.pts}let s=this.frame.data;if(!s)throw new DOMException("Frame has no data","EncodingError");await this.resampler.convert(null,0,s,this.frame.nbSamples),await this.pullResampledFrames()}else await this.sendFrameAndReceivePackets(this.frame)}async pullResampledFrames(){p(this.codecContext),p(this.resampler),p(this.dstFrame),p(this.nextResamplerPts!==null);let e=this.codecContext.frameSize||ke;for(;!(this.resampler.getOutSamples(0)<e);)await this.resampler.convert(this.dstFrame.data,e,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(e)}async sendFrameAndReceivePackets(e){p(this.codecContext);let n=await this.codecContext.sendFrame(e);for(v.FFmpegError.throwIfError(n,"Send frame");;){let i=await this.codecContext.receivePacket(this.packet);if(i===v.AVERROR_EAGAIN||i===v.AVERROR_EOF)break;this.receivePacket(i)}}receivePacket(e){if(p(this.codecContext),p(this.firstExpectedTimestamp!==null),v.FFmpegError.throwIfError(e,"Receive packet"),!this.packet.data)return;let n=Number(this.packet.pts)/this.codecContext.sampleRate,i=Number(this.packet.duration)/this.codecContext.sampleRate,s=this.packet.data,a;if(this.packetEmitted)a={};else{this.outputTimestampOffset=Math.max(this.firstExpectedTimestamp-n,0);let f=this.config.codec,l=this.codecContext.extraData?L(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!l)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let h=et(l);this.adtsHeaderTemplate=tt(h),l=void 0}}else if(this.codec==="opus"){if(!l)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!l)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!l)throw new Error("Extradata expected for FLAC.");l=new Uint8Array([102,76,97,67,128,0,0,l.byteLength,...l])}a={decoderConfig:{codec:f,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:l}}}if(this.adtsHeaderTemplate){let f=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,f);let l=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);l.set(this.adtsHeaderTemplate.header,0),l.set(s,this.adtsHeaderTemplate.header.byteLength),s=l}n+=this.outputTimestampOffset;let c=new er(s,"key",n,i);this.packetEmitted=!0,this.onPacket(c,a)}async flush(){if(this.codecContext){e:if(this.resampler){p(this.resamplerInputSampleRate!==null);let e=this.resampler.getOutSamples(0);if(e===0)break e;let n=this.codecContext.frameSize||ke;p(e<n);let i=Math.ceil((n-e)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(i),await this.pullResampledFrames()}await this.sendFrameAndReceivePackets(null),this.codecContext.freeContext(),this.codecContext=null,this.packetEmitted=!1,this.firstExpectedTimestamp=null,this.outputTimestampOffset=0,this.adtsHeaderTemplate=null,this.resampler?.free(),this.resampler=null,this.inputParametersKey=null,this.resamplerInputSampleRate=null,this.nextResamplerPts=null,this.dstFrame?.free(),this.dstFrame=null}}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.dstFrame?.free(),this.resampler?.free()}},gt=(t,r)=>t.bitrate??new Zt("medium")._toAudioBitrate(r)??0;import{registerProresDecoder as ar}from"@mediabunny/prores";var _t=Symbol.for("@mediabunny/server loaded");globalThis[_t]&&or._error(`[WARNING]
|
|
9
|
-
@mediabunny/server was loaded twice. This will likely cause the package not to work correctly. Check if multiple dependencies are importing different versions of @mediabunny/server, or if something is being bundled incorrectly.`);globalThis[_t]=!0;var vt=!1
|
|
8
|
+
import{AudioSample as ir,Logging as or,registerDecoder as Ct,registerEncoder as xt,registerVideoSampleTransformer as sr,VideoSample as bt}from"mediabunny";import*as X from"node-av";import{CustomVideoDecoder as It,VideoSample as wt}from"mediabunny";import*as C from"node-av";import*as o from"node-av";var $={avc:o.AV_CODEC_ID_H264,hevc:o.AV_CODEC_ID_HEVC,vp8:o.AV_CODEC_ID_VP8,vp9:o.AV_CODEC_ID_VP9,av1:o.AV_CODEC_ID_AV1,prores:o.AV_CODEC_ID_PRORES,aac:o.AV_CODEC_ID_AAC,opus:o.AV_CODEC_ID_OPUS,mp3:o.AV_CODEC_ID_MP3,vorbis:o.AV_CODEC_ID_VORBIS,flac:o.AV_CODEC_ID_FLAC,ac3:o.AV_CODEC_ID_AC3,eac3:o.AV_CODEC_ID_EAC3,dts:o.AV_CODEC_ID_DTS},Se,Ue=()=>j.hardwareContext!==void 0&&typeof j.hardwareContext!="function"?j.hardwareContext:(Se===void 0&&(Se=o.HardwareContext.auto()),Se),Oe=r=>{if(r!==null&&!(r instanceof o.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},ye=new Map,De=async r=>{if(typeof j.hardwareContext=="function"){let t=await j.hardwareContext(r);return Oe(t),t?.getDecoderCodec(r)??null}if(!ye.has(r)){let t=Ue();ye.set(r,t?.getDecoderCodec(r)??null)}return ye.get(r)},Ee=new Map,Le=async r=>{if(typeof j.hardwareContext=="function"){let t=await j.hardwareContext(r);return Oe(t),t?.getEncoderCodec(r)??null}if(!Ee.has(r)){let t=Ue();Ee.set(r,t?.getEncoderCodec(r)??null)}return Ee.get(r)},He=r=>{switch(r){case"bt709":return o.AVCOL_PRI_BT709;case"bt470bg":return o.AVCOL_PRI_BT470BG;case"smpte170m":return o.AVCOL_PRI_SMPTE170M;case"bt2020":return o.AVCOL_PRI_BT2020;case"smpte432":return o.AVCOL_PRI_SMPTE432}return null},ue=r=>{switch(r){case o.AVCOL_PRI_BT709:return"bt709";case o.AVCOL_PRI_BT470BG:return"bt470bg";case o.AVCOL_PRI_SMPTE170M:return"smpte170m";case o.AVCOL_PRI_BT2020:return"bt2020";case o.AVCOL_PRI_SMPTE432:return"smpte432"}return null},ze=r=>{switch(r){case"bt709":return o.AVCOL_TRC_BT709;case"smpte170m":return o.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return o.AVCOL_TRC_IEC61966_2_1;case"linear":return o.AVCOL_TRC_LINEAR;case"pq":return o.AVCOL_TRC_SMPTE2084;case"hlg":return o.AVCOL_TRC_ARIB_STD_B67}return null},Ae=r=>{switch(r){case o.AVCOL_TRC_BT709:return"bt709";case o.AVCOL_TRC_SMPTE170M:return"smpte170m";case o.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case o.AVCOL_TRC_LINEAR:return"linear";case o.AVCOL_TRC_SMPTE2084:return"pq";case o.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},qe=r=>{switch(r){case"rgb":return o.AVCOL_SPC_RGB;case"bt709":return o.AVCOL_SPC_BT709;case"bt470bg":return o.AVCOL_SPC_BT470BG;case"smpte170m":return o.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return o.AVCOL_SPC_BT2020_NCL}return null},fe=r=>{switch(r){case o.AVCOL_SPC_RGB:return"rgb";case o.AVCOL_SPC_BT709:return"bt709";case o.AVCOL_SPC_BT470BG:return"bt470bg";case o.AVCOL_SPC_SMPTE170M:return"smpte170m";case o.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},We=r=>{switch(r){case o.AV_PIX_FMT_YUV420P:return"I420";case o.AV_PIX_FMT_YUVJ420P:return"I420";case o.AV_PIX_FMT_YUV420P10LE:return"I420P10";case o.AV_PIX_FMT_YUV420P12LE:return"I420P12";case o.AV_PIX_FMT_YUVA420P:return"I420A";case o.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case o.AV_PIX_FMT_YUV422P:return"I422";case o.AV_PIX_FMT_YUVJ422P:return"I422";case o.AV_PIX_FMT_YUV422P10LE:return"I422P10";case o.AV_PIX_FMT_YUV422P12LE:return"I422P12";case o.AV_PIX_FMT_YUVA422P:return"I422A";case o.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case o.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case o.AV_PIX_FMT_YUV444P:return"I444";case o.AV_PIX_FMT_YUVJ444P:return"I444";case o.AV_PIX_FMT_YUV444P10LE:return"I444P10";case o.AV_PIX_FMT_YUV444P12LE:return"I444P12";case o.AV_PIX_FMT_YUVA444P:return"I444A";case o.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case o.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case o.AV_PIX_FMT_NV12:return"NV12";case o.AV_PIX_FMT_RGBA:return"RGBA";case o.AV_PIX_FMT_RGB0:return"RGBX";case o.AV_PIX_FMT_BGRA:return"BGRA";case o.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},Be=r=>{switch(r){case"I420":return o.AV_PIX_FMT_YUV420P;case"I420P10":return o.AV_PIX_FMT_YUV420P10LE;case"I420P12":return o.AV_PIX_FMT_YUV420P12LE;case"I420A":return o.AV_PIX_FMT_YUVA420P;case"I420AP10":return o.AV_PIX_FMT_YUVA420P10LE;case"I422":return o.AV_PIX_FMT_YUV422P;case"I422P10":return o.AV_PIX_FMT_YUV422P10LE;case"I422P12":return o.AV_PIX_FMT_YUV422P12LE;case"I422A":return o.AV_PIX_FMT_YUVA422P;case"I422AP10":return o.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return o.AV_PIX_FMT_YUVA422P12LE;case"I444":return o.AV_PIX_FMT_YUV444P;case"I444P10":return o.AV_PIX_FMT_YUV444P10LE;case"I444P12":return o.AV_PIX_FMT_YUV444P12LE;case"I444A":return o.AV_PIX_FMT_YUVA444P;case"I444AP10":return o.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return o.AV_PIX_FMT_YUVA444P12LE;case"NV12":return o.AV_PIX_FMT_NV12;case"RGBA":return o.AV_PIX_FMT_RGBA;case"RGBX":return o.AV_PIX_FMT_RGB0;case"BGRA":return o.AV_PIX_FMT_BGRA;case"BGRX":return o.AV_PIX_FMT_BGR0;default:return o.AV_PIX_FMT_NONE}},Xe=r=>{switch(r){case o.AV_SAMPLE_FMT_U8:return"u8";case o.AV_SAMPLE_FMT_S16:return"s16";case o.AV_SAMPLE_FMT_S32:return"s32";case o.AV_SAMPLE_FMT_FLT:return"f32";case o.AV_SAMPLE_FMT_U8P:return"u8-planar";case o.AV_SAMPLE_FMT_S16P:return"s16-planar";case o.AV_SAMPLE_FMT_S32P:return"s32-planar";case o.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},Ge=r=>{switch(r){case"u8":return o.AV_SAMPLE_FMT_U8;case"s16":return o.AV_SAMPLE_FMT_S16;case"s32":return o.AV_SAMPLE_FMT_S32;case"f32":return o.AV_SAMPLE_FMT_FLT;case"u8-planar":return o.AV_SAMPLE_FMT_U8P;case"s16-planar":return o.AV_SAMPLE_FMT_S16P;case"s32-planar":return o.AV_SAMPLE_FMT_S32P;case"f32-planar":return o.AV_SAMPLE_FMT_FLTP;default:return o.AV_SAMPLE_FMT_NONE}},re=r=>{switch(r){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return o.AV_CHANNEL_LAYOUT_QUAD;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return o.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:r,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}},St=0x603n,Ye=r=>{switch(r){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return{nbChannels:4,order:o.AV_CHANNEL_ORDER_NATIVE,mask:St};case 5:return o.AV_CHANNEL_LAYOUT_5POINT0;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1;default:return{nbChannels:r,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};var L=class L{constructor(){}static get level(){return L._level}static set level(t){if(t!==0&&t!==1&&t!==2&&t!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");L._level=t}static get _emitter(){return L._emitterInstance??=new me}static on(t,e,n){return L._emitter.on(t,e,n)}static _error(...t){L._emitter._emit("error",t),L._level>=1&&console.error(...t)}static _warn(...t){L._emitter._emit("warn",t),L._level>=2&&console.warn(...t)}static _info(...t){L._emitter._emit("info",t),L._level>=3&&console.info(...t)}};L._level=3,L._emitterInstance=null;var ne=L;function h(r){if(!r)throw new Error("Assertion failed.")}var Ar=Math.PI/180,fr=180/Math.PI;var oe=r=>r&&r[r.length-1];var A=r=>{let t=0;for(;r.readBits(1)===0&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<t)-1+r.readBits(t)};var Y=r=>{let t=A(r);return(t&1)===0?-(t>>1):t+1>>1};var U=r=>r.constructor===Uint8Array?r:ArrayBuffer.isView(r)?new Uint8Array(r.buffer,r.byteOffset,r.byteLength):new Uint8Array(r),Ie=r=>r.constructor===DataView?r:ArrayBuffer.isView(r)?new DataView(r.buffer,r.byteOffset,r.byteLength):new DataView(r),mr=typeof globalThis.TextEncoder<"u"?globalThis.TextEncoder:class{constructor(){this.encoding="utf-8"}encode(t=""){let e=new Uint8Array(3*t.length),n=0;for(let i=0;i<t.length;i++){let s=t.charCodeAt(i);if(s<128)e[n++]=s;else if(s<2048)e[n++]=192|s>>6,e[n++]=128|s&63;else if(s<55296||s>57343)e[n++]=224|s>>12,e[n++]=128|s>>6&63,e[n++]=128|s&63;else{let a=i+1<t.length?t.charCodeAt(i+1):0;s<56320&&a>=56320&&a<=57343?(s=65536+(s-55296<<10)+(a-56320),i++,e[n++]=240|s>>18,e[n++]=128|s>>12&63,e[n++]=128|s>>6&63,e[n++]=128|s&63):(e[n++]=239,e[n++]=191,e[n++]=189)}}return e.slice(0,n)}},hr=typeof globalThis.TextDecoder<"u"?globalThis.TextDecoder:class{constructor(t="utf-8"){let e=t.trim().toLowerCase();if(e==="utf-8"||e==="utf8"||e==="unicode-1-1-utf-8")this.encoding="utf-8";else if(e==="utf-16le"||e==="utf-16")this.encoding="utf-16le";else if(e==="utf-16be")this.encoding="utf-16be";else throw new RangeError(`The encoding label provided ('${t}') is invalid.`)}decode(t){let e=t?U(t):new Uint8Array(0),n=[];if(this.encoding==="utf-8"){let s=e.length>=3&&e[0]===239&&e[1]===187&&e[2]===191?3:0;for(;s<e.length;){let a=e[s];if(a<128){n.push(a),s++;continue}let c,d;if(a>=194&&a<224)c=1,d=a&31;else if(a>=224&&a<240)c=2,d=a&15;else if(a>=240&&a<245)c=3,d=a&7;else{n.push(65533),s++;continue}let l=a===224?160:a===240?144:128,u=a===237?159:a===244?143:191,m=1;for(;m<=c;m++){let v=s+m<e.length?e[s+m]:0;if(v<l||v>u)break;d=d<<6|v&63,l=128,u=191}s+=m,m<=c?n.push(65533):d>=65536?(d-=65536,n.push(55296|d>>10,56320|d&1023)):n.push(d)}}else{let s=this.encoding==="utf-16le",a=s?255:254,c=s?254:255,d=e.length>=2&&e[0]===a&&e[1]===c?2:0;for(;d+1<e.length;){let l=s?e[d]|e[d+1]<<8:e[d]<<8|e[d+1];if(d+=2,l>=55296&&l<=56319){let u=d+1<e.length?s?e[d]|e[d+1]<<8:e[d]<<8|e[d+1]:-1;u>=56320&&u<=57343?(n.push(l,u),d+=2):n.push(65533)}else l>=56320&&l<=57343?n.push(65533):n.push(l)}d<e.length&&n.push(65533)}let i="";for(let s=0;s<n.length;s+=8192)i+=String.fromCharCode(...n.slice(s,s+8192));return i}};var Ke={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var Qe={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var je={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var we=r=>[...r].map(t=>t.toString(16).padStart(2,"0")).join("");var Te=r=>(r=r>>1&1431655765|(r&1431655765)<<1,r=r>>2&858993459|(r&858993459)<<2,r=r>>4&252645135|(r&252645135)<<4,r=r>>8&16711935|(r&16711935)<<8,r=r>>16&65535|(r&65535)<<16,r>>>0);var se=(r,t,e)=>{let n=0,i=r.length-1,s=-1;for(;n<=i;){let a=n+(i-n+1)/2|0;e(r[a])<=t?(s=a,n=a+1):i=a-1}return s};var Pe=r=>{throw new Error(`Unexpected value: ${r}`)};var Cr=1e6*(1+Number.EPSILON);var xr=(async()=>{})().constructor;var pe=r=>{h(Number.isInteger(r.num)),h(Number.isInteger(r.den)),h(r.den!==0);let t=Math.abs(r.num),e=Math.abs(r.den);for(;e!==0;){let i=t%e;t=e,e=i}let n=t||1;return{num:r.num/n,den:r.den/n}};var me=class{constructor(){this._listeners=new Map}on(t,e,n){this._listeners.has(t)||this._listeners.set(t,new Set);let i={fn:e,once:n?.once??!1};return this._listeners.get(t).add(i),()=>{this._listeners.get(t)?.delete(i)}}_emit(...t){let[e,n]=t,i=this._listeners.get(e);if(i)for(let s of i){try{s.fn(n)}catch(a){console.error(a)}s.once&&i.delete(s)}}};import{VideoSampleResource as yt,VideoSampleColorSpace as Et,VideoSample as $e}from"mediabunny";import*as p from"node-av";var Bt=new Set([p.AV_PIX_FMT_YUVJ411P,p.AV_PIX_FMT_YUVJ420P,p.AV_PIX_FMT_YUVJ422P,p.AV_PIX_FMT_YUVJ440P,p.AV_PIX_FMT_YUVJ444P]),W=class r extends yt{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(t){if(super(),!(t instanceof p.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t.getMediaType()!==p.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=t}getFormat(){return We(this.frame.format)}getCodedWidth(){return this.frame.width}getCodedHeight(){return this.frame.height}getSquarePixelWidth(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?Math.round(this.frame.width*this.frame.sampleAspectRatio.num/this.frame.sampleAspectRatio.den):this.frame.width}getSquarePixelHeight(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?this.frame.height:Math.round(this.frame.height*this.frame.sampleAspectRatio.den/this.frame.sampleAspectRatio.num)}getColorSpace(){return new Et({primaries:ue(this.frame.colorPrimaries),transfer:Ae(this.frame.colorTrc),matrix:fe(this.frame.colorSpace),fullRange:this.frame.colorRange===p.AVCOL_RANGE_JPEG||Bt.has(this.frame.format)?!0:this.frame.colorRange===p.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return h(this.frame.data),this.frame.data.map((t,e)=>({data:U(t),stride:this.frame.linesize[e]}))}async toRgbSample(t,e){let n=this.frame.width,i=this.frame.height,s=new p.SoftwareScaleContext,a=this.frame.format,c=Be("RGBA");s.getContext(n,i,a,n,i,c,p.SWS_BILINEAR);let d=new p.Frame;d.width=n,d.height=i,d.format=c,d.alloc(),d.allocBuffer();let l=this.frame;try{await s.scaleFrame(d,l)}finally{s.freeContext()}return d.sampleAspectRatio=l.sampleAspectRatio,new $e(new r(d),t)}},le=async(r,t,e)=>{h(r.format!==null),t.format=Be(r.format),t.width=r.codedWidth,t.height=r.codedHeight,t.sampleAspectRatio=new p.Rational(r.pixelAspectRatio.num,r.pixelAspectRatio.den),t.colorPrimaries=He(r.colorSpace.primaries??"unknown")??p.AVCOL_PRI_UNSPECIFIED,t.colorSpace=qe(r.colorSpace.matrix??"unknown")??p.AVCOL_SPC_UNSPECIFIED,t.colorTrc=ze(r.colorSpace.transfer??"unknown")??p.AVCOL_TRC_UNSPECIFIED,t.colorRange=r.colorSpace.fullRange===!1?p.AVCOL_RANGE_MPEG:r.colorSpace.fullRange===!0?p.AVCOL_RANGE_JPEG:p.AVCOL_RANGE_UNSPECIFIED;let n=r.allocationSize();return(!e||e.byteLength!==n)&&(e=Buffer.from({length:n})),await r.copyTo(e),t.fromBuffer(e),e},Je=async(r,t)=>{let e,n=!1;if(r._data instanceof W)e=r._data.frame;else{if(r.format===null)return null;e=new p.Frame,e.alloc(),n=!0,await le(r,e,null)}let i=[];(r.squarePixelWidth!==r.codedWidth||r.squarePixelHeight!==r.codedHeight)&&(i.push(`scale=${r.squarePixelWidth}:${r.squarePixelHeight}`),i.push("setsar=1")),t.rotation===90?i.push("transpose=1"):t.rotation===180?i.push("transpose=1,transpose=1"):t.rotation===270&&i.push("transpose=2"),t.flip&&i.push("hflip"),i.push(`crop=${Math.round(t.crop.width)}:${Math.round(t.crop.height)}:${Math.round(t.crop.left)}:${Math.round(t.crop.top)}`),t.fit==="fill"?i.push(`scale=${t.width}:${t.height}`):t.fit==="contain"?(i.push(`scale=${t.width}:${t.height}:force_original_aspect_ratio=decrease`),i.push(`pad=${t.width}:${t.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):t.fit==="cover"&&(i.push(`scale=${t.width}:${t.height}:force_original_aspect_ratio=increase`),i.push(`crop=${t.width}:${t.height}`)),i.push("setsar=1");let s=new p.FilterGraph;s.alloc();try{let a=`video_size=${e.width}x${e.height}:pix_fmt=${e.format}:time_base=1/1000000:pixel_aspect=${r.pixelAspectRatio.num}/${r.pixelAspectRatio.den}`,c=s.createFilter(p.Filter.getByName("buffer"),"src",a),d=s.createFilter(p.Filter.getByName("buffersink"),"sink");h(c&&d);let l=p.FilterInOut.createList([{name:"in",filterCtx:c,padIdx:0}]),u=p.FilterInOut.createList([{name:"out",filterCtx:d,padIdx:0}]),m=s.parsePtr(`[in]${i.join(",")}[out]`,u,l);p.FFmpegError.throwIfError(m,"FilterGraph.parsePtr");let v=await s.config();p.FFmpegError.throwIfError(v,"FilterGraph.config");let R=await c.buffersrcAddFrame(e);p.FFmpegError.throwIfError(R,"buffersrcAddFrame"),await c.buffersrcAddFrame(null);let g=new p.Frame;g.alloc();let b=await d.buffersinkGetFrame(g);return p.FFmpegError.throwIfError(b,"buffersinkGetFrame"),new $e(new W(g),{timestamp:r.timestamp,duration:r.duration,rotation:0,flip:!1})}finally{s.free(),n&&e.free()}};var he=class extends It{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(e,n){return e==="avc"||e==="hevc"||e==="vp8"||e==="vp9"||e==="av1"}async init(){this.frame=new C.Frame,this.frame.alloc(),this.packet=new C.Packet,this.packet.alloc()}async initCodecContext(e){h(this.codecContext===null);let n=$[this.codec];h(n!==void 0);let i;if(this.codec==="vp9"&&e.sideData.alpha?i=C.Codec.findDecoderByName(C.FF_DECODER_LIBVPX_VP9)??C.Codec.findDecoder(n):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?i=C.Codec.findDecoder(n):i=await De(n)??C.Codec.findDecoder(n),!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new C.CodecContext;s.allocContext3(i),this.pixelAspectRatio=pe({num:(this.config.displayAspectWidth??this.config.codedWidth??0)*(this.config.codedHeight??0),den:(this.config.displayAspectHeight??this.config.codedHeight??0)*(this.config.codedWidth??0)||1}),s.width=this.config.codedWidth??0,s.height=this.config.codedHeight??0,s.codecType=C.AVMEDIA_TYPE_VIDEO,s.codecId=n,s.extraData=this.config.description?Buffer.from(U(this.config.description)):null,s.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=C.Dictionary.fromObject({strict:C.FF_COMPLIANCE_STRICT}),c=await s.open2(i,a);C.FFmpegError.throwIfError(c,"Open codec context"),this.codecContext=s}async decode(e){if(this.codecContext===null&&await this.initCodecContext(e),h(this.codecContext),this.packet.isKeyframe=e.type==="key",this.packet.data=Buffer.from(e.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(e.microsecondTimestamp),this.packet.dts=C.AV_NOPTS_VALUE,this.packet.duration=BigInt(e.microsecondDuration),e.sideData.alpha){let a=Buffer.alloc(8+e.sideData.alpha.byteLength);a[7]=1,a.set(e.sideData.alpha,8),this.packet.addSideData(C.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let n=se(this.preciseTimings,e.microsecondTimestamp,a=>a.microsecondTimestamp),i=n!==-1?this.preciseTimings[n]:null;i&&i.microsecondTimestamp===e.microsecondTimestamp?(i.timestamp!==e.timestamp&&(i.timestampIsValid=!1),i.duration!==e.duration&&(i.durationIsValid=!1)):(this.preciseTimings.splice(n+1,0,{microsecondTimestamp:e.microsecondTimestamp,timestamp:e.timestamp,duration:e.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let s=await this.codecContext.sendPacket(this.packet);for(C.FFmpegError.throwIfError(s,"Send packet"),this.packet.unref();;){let a=await this.codecContext.receiveFrame(this.frame);if(a===C.AVERROR_EAGAIN||a===C.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(e){C.FFmpegError.throwIfError(e,"Receive frame"),this.frame.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let n=Number(this.frame.pts)/1e6,i=Number(this.frame.duration)/1e6,s=se(this.preciseTimings,Number(this.frame.pts),d=>d.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(n=a.timestamp),a.durationIsValid&&(i=a.duration));let c=this.frame.clone();if(!c)throw new Error("Frame clone allocation failed.");this.onSample(new wt(new W(c),{timestamp:n,duration:i}))}async flush(){if(!this.codecContext)return;let e=await this.codecContext.sendPacket(null);for(C.FFmpegError.throwIfError(e,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===C.AVERROR_EAGAIN||n===C.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomVideoEncoder as Wt,Quality as Xt,EncodedPacket as Gt}from"mediabunny";import*as f from"node-av";var z=class r{constructor(t){this.bytes=t;this.pos=0}seekToByte(t){this.pos=8*t}readBit(){let t=Math.floor(this.pos/8),e=this.bytes[t]??0,n=7-(this.pos&7),i=(e&1<<n)>>n;return this.pos++,i}readBits(t){if(t===1)return this.readBit();let e=0;for(let n=0;n<t;n++)e<<=1,e|=this.readBit();return e}writeBits(t,e){let n=this.pos+t;for(let i=this.pos;i<n;i++){let s=Math.floor(i/8),a=this.bytes[s],c=7-(i&7);a&=~(1<<c),a|=(e&1<<n-i-1)>>n-i-1<<c,this.bytes[s]=a}this.pos=n}copyBits(t,e){let n=0;for(n;n<t-7;n+=8)this.writeBits(8,e.readBits(8));let i=t-n;i>0&&this.writeBits(i,e.readBits(i))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let t=this.pos/8,e=this.bytes[t]??0;return this.pos+=8,e}skipBits(t){this.pos+=t}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let t=new r(this.bytes);return t.pos=this.pos,t}};var Ze=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Tt=[-1,1,2,3,4,5,6,8],et=r=>{if(!r||r.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let t=new z(r),e=Re(t),{frequencyIndex:n,sampleRate:i}=Fe(t),s=t.readBits(4),a=null;s>=1&&s<=7&&(a=Tt[s]);let c=e,d=!1,l=i;if(e===5||e===29)d=e===29,l=Fe(t).sampleRate,c=Re(t),c===22&&t.skipBits(4);else for(;t.getBitsLeft()>15;){let u=t.pos;if(t.readBits(11)!==695){t.pos=u+1;continue}Re(t)===5&&t.readBits(1)&&(l=Fe(t).sampleRate,t.getBitsLeft()>11&&t.readBits(11)===1352&&(d=!!t.readBits(1)));break}return a!==null&&a>1&&(d=!1),{objectType:e,coreObjectType:c,frequencyIndex:n,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:d&&a===1?2:a}},Re=r=>{let t=r.readBits(5);return t===31?32+r.readBits(6):t},Fe=r=>{let t=r.readBits(4);return t===15?{frequencyIndex:t,sampleRate:r.readBits(24)}:{frequencyIndex:t,sampleRate:t<Ze.length?Ze[t]:null}};var tt=r=>{let t=new Uint8Array(7),e=new z(t),{coreObjectType:n,frequencyIndex:i,channelConfiguration:s}=r,a=n-1;return e.writeBits(12,4095),e.writeBits(1,0),e.writeBits(2,0),e.writeBits(1,1),e.writeBits(2,a),e.writeBits(4,i),e.writeBits(1,0),e.writeBits(3,s),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.skipBits(13),e.writeBits(11,2047),e.writeBits(2,0),{header:t,bitstream:e}};var Rt=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Ft=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],Gr=[...Ft,...Rt];var Ve=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}];var ie=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}];var rt=".01.01.01.01.00",nt=".0.110.01.01.01.0",Vt=["ap4x","ap4h","apch","apcn","apcs","apco"];var ae=r=>{let{codec:t,codecDescription:e,colorSpace:n,avcCodecInfo:i,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:c,proresFormat:d}=r;if(t==="avc"){if(h(r.avcType!==null),i){let l=new Uint8Array([i.avcProfileIndication,i.profileCompatibility,i.avcLevelIndication]);return`avc${r.avcType}.${we(l)}`}if(!e||e.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${r.avcType}.${we(e.subarray(1,4))}`}else if(t==="hevc"){let l,u,m,v,R,g;if(s)l=s.generalProfileSpace,u=s.generalProfileIdc,m=Te(s.generalProfileCompatibilityFlags),v=s.generalTierFlag,R=s.generalLevelIdc,g=[...s.generalConstraintIndicatorFlags];else{if(!e||e.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let x=Ie(e),y=x.getUint8(1);l=y>>6&3,u=y&31,m=Te(x.getUint32(2)),v=y>>5&1,R=x.getUint8(12),g=[];for(let E=0;E<6;E++)g.push(x.getUint8(6+E))}let b="hev1.";for(b+=["","A","B","C"][l]+u,b+=".",b+=m.toString(16).toUpperCase(),b+=".",b+=v===0?"L":"H",b+=R;g.length>0&&g[g.length-1]===0;)g.pop();return g.length>0&&(b+=".",b+=g.map(x=>x.toString(16).toUpperCase()).join(".")),b}else{if(t==="vp8")return"vp8";if(t==="vp9"){if(!a){let E=r.width*r.height,B=oe(ie).level;for(let P of ie)if(E<=P.maxPictureSize){B=P.level;break}return`vp09.00.${B.toString().padStart(2,"0")}.08`}let l=a.profile.toString().padStart(2,"0"),u=a.level.toString().padStart(2,"0"),m=a.bitDepth.toString().padStart(2,"0"),v=a.chromaSubsampling.toString().padStart(2,"0"),R=a.colourPrimaries.toString().padStart(2,"0"),g=a.transferCharacteristics.toString().padStart(2,"0"),b=a.matrixCoefficients.toString().padStart(2,"0"),x=a.videoFullRangeFlag.toString().padStart(2,"0"),y=`vp09.${l}.${u}.${m}.${v}`;return y+=`.${R}.${g}.${b}.${x}`,y.endsWith(rt)&&(y=y.slice(0,-rt.length)),y}else if(t==="av1"){if(!c){let P=r.width*r.height,w=oe(ie).level;for(let I of ie)if(P<=I.maxPictureSize){w=I.level;break}return`av01.0.${w.toString().padStart(2,"0")}M.08`}let l=c.profile,u=c.level.toString().padStart(2,"0"),m=c.tier?"H":"M",v=c.bitDepth.toString().padStart(2,"0"),R=c.monochrome?"1":"0",g=100*c.chromaSubsamplingX+10*c.chromaSubsamplingY+1*(c.chromaSubsamplingX&&c.chromaSubsamplingY?c.chromaSamplePosition:0),b=n?.primaries?Ke[n.primaries]:1,x=n?.transfer?Qe[n.transfer]:1,y=n?.matrix?je[n.matrix]:1,E=n?.fullRange?1:0,B=`av01.${l}.${u}${m}.${v}`;return B+=`.${R}.${g.toString().padStart(3,"0")}`,B+=`.${b.toString().padStart(2,"0")}`,B+=`.${x.toString().padStart(2,"0")}`,B+=`.${y.toString().padStart(2,"0")}`,B+=`.${E}`,B.endsWith(nt)&&(B=B.slice(0,-nt.length)),B}else{if(t==="prores")return d??"apch";t!==null&&Pe(t)}}throw new TypeError(`Unhandled codec '${t}'.`)};var Yr=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Vt];var Ce=function*(r){let t=0,e=-1;for(;t<r.length-2;){let n=r.indexOf(0,t);if(n===-1||n>=r.length-2)break;t=n;let i=0;if(t+3<r.length&&r[t+1]===0&&r[t+2]===0&&r[t+3]===1?i=4:r[t+1]===0&&r[t+2]===1&&(i=3),i===0){t++;continue}e!==-1&&t>e&&(yield{offset:e,length:t-e}),e=t+i,t=e}e!==-1&&e<r.length&&(yield{offset:e,length:r.length-e})};var Ne=r=>r&31,Me=r=>{let t=[],e=r.length;for(let n=0;n<e;n++)n+2<e&&r[n]===0&&r[n+1]===0&&r[n+2]===3?(t.push(0,0),n+=2):t.push(r[n]);return new Uint8Array(t)};var An=new Uint8Array([0,0,0,1]);var st=r=>{try{let t=[],e=[],n=[];for(let c of Ce(r)){let d=r.subarray(c.offset,c.offset+c.length),l=Ne(d[0]);l===7?t.push(d):l===8?e.push(d):l===13&&n.push(d)}if(t.length===0||e.length===0)return null;let i=t[0],s=Nt(i);h(s!==null);let a=s.profileIdc===100||s.profileIdc===110||s.profileIdc===122||s.profileIdc===144;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:e,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?n:null}}catch(t){return ne._error("Error building AVC Decoder Configuration Record:",t),null}},at=r=>{let t=[];t.push(r.configurationVersion),t.push(r.avcProfileIndication),t.push(r.profileCompatibility),t.push(r.avcLevelIndication),t.push(252|r.lengthSizeMinusOne&3),t.push(224|r.sequenceParameterSets.length&31);for(let e of r.sequenceParameterSets){let n=e.byteLength;t.push(n>>8),t.push(n&255);for(let i=0;i<n;i++)t.push(e[i])}t.push(r.pictureParameterSets.length);for(let e of r.pictureParameterSets){let n=e.byteLength;t.push(n>>8),t.push(n&255);for(let i=0;i<n;i++)t.push(e[i])}if((r.avcProfileIndication===100||r.avcProfileIndication===110||r.avcProfileIndication===122||r.avcProfileIndication===144)&&r.chromaFormat!==null){h(r.bitDepthLumaMinus8!==null),h(r.bitDepthChromaMinus8!==null),h(r.sequenceParameterSetExt!==null),t.push(252|r.chromaFormat&3),t.push(248|r.bitDepthLumaMinus8&7),t.push(248|r.bitDepthChromaMinus8&7),t.push(r.sequenceParameterSetExt.length);for(let e of r.sequenceParameterSetExt){let n=e.byteLength;t.push(n>>8),t.push(n&255);for(let i=0;i<n;i++)t.push(e[i])}}return new Uint8Array(t)};var ct={1:{num:1,den:1},2:{num:12,den:11},3:{num:10,den:11},4:{num:16,den:11},5:{num:40,den:33},6:{num:24,den:11},7:{num:20,den:11},8:{num:32,den:11},9:{num:80,den:33},10:{num:18,den:11},11:{num:15,den:11},12:{num:64,den:33},13:{num:160,den:99},14:{num:4,den:3},15:{num:3,den:2},16:{num:2,den:1}},Nt=r=>{try{let t=Me(r),e=new z(t);if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let i=e.readAlignedByte(),s=e.readAlignedByte(),a=e.readAlignedByte();A(e);let c=1,d=0,l=0,u=0;if((i===100||i===110||i===122||i===244||i===44||i===83||i===86||i===118||i===128)&&(c=A(e),c===3&&(u=e.readBits(1)),d=A(e),l=A(e),e.skipBits(1),e.readBits(1))){for(let V=0;V<(c!==3?8:12);V++)if(e.readBits(1)){let Q=V<6?16:64,G=8,D=8;for(let ee=0;ee<Q;ee++){if(D!==0){let te=Y(e);D=(G+te+256)%256}G=D===0?G:D}}}A(e);let m=A(e);if(m===0)A(e);else if(m===1){e.skipBits(1),Y(e),Y(e);let M=A(e);for(let V=0;V<M;V++)Y(e)}A(e),e.skipBits(1);let v=A(e),R=A(e),g=16*(v+1),b=16*(R+1),x=g,y=b,E=e.readBits(1);if(E||e.skipBits(1),e.skipBits(1),e.readBits(1)){let M=A(e),V=A(e),H=A(e),Q=A(e),G,D;if((u===0?c:0)===0)G=1,D=2-E;else{let te=c===3?1:2,de=c===1?2:1;G=te,D=de*(2-E)}x-=G*(M+V),y-=D*(H+Q)}let P=2,w=2,I=2,F=0,N={num:1,den:1},O=null,k=null,q=null,T=null,K=e.pos;if(e.readBits(1)){if(e.readBits(1)){let te=e.readBits(8);if(te===255)N={num:e.readBits(16),den:e.readBits(16)};else{let de=ct[te];de&&(N=de)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),F=e.readBits(1),e.readBits(1)&&(P=e.readBits(8),w=e.readBits(8),I=e.readBits(8))),e.readBits(1)&&(A(e),A(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let D=e.readBits(1);D&&it(e);let ee=e.readBits(1);ee&&it(e),(D||ee)&&e.skipBits(1),e.skipBits(1),q=e.pos,T=e.readBits(1),T&&(e.skipBits(1),A(e),A(e),A(e),A(e),O=A(e),k=A(e))}if(O===null){h(k===null);let M=s&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&M)O=0,k=0;else{let V=v+1,H=R+1,Q=(2-E)*H,G=Ve.find(ee=>ee.level>=a)??oe(Ve),D=Math.min(Math.floor(G.maxDpbMbs/(V*Q)),16);O=D,k=D}}return h(k!==null),{emulationUnpreventedBytes:t,profileIdc:i,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:E,chromaFormatIdc:c,bitDepthLumaMinus8:d,bitDepthChromaMinus8:l,codedWidth:g,codedHeight:b,displayWidth:x,displayHeight:y,pixelAspectRatio:N,colourPrimaries:P,matrixCoefficients:I,transferCharacteristics:w,fullRangeFlag:F,numReorderFrames:O,maxDecFrameBuffering:k,vuiParametersFlagBitOffset:K,bitstreamRestrictionFlagBitOffset:q,bitstreamRestrictionFlag:T}}catch(t){return ne._error("Error parsing AVC SPS:",t),null}},it=r=>{let t=A(r);r.skipBits(4),r.skipBits(4);for(let e=0;e<=t;e++)A(r),A(r),r.skipBits(1);r.skipBits(5),r.skipBits(5),r.skipBits(5),r.skipBits(5)};var ge=r=>r>>1&63,Mt=r=>{try{let t=new z(Me(r));t.skipBits(16),t.readBits(4);let e=t.readBits(3),n=t.readBits(1),{general_profile_space:i,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:c,general_constraint_indicator_flags:d,general_level_idc:l}=kt(t,e);A(t);let u=A(t),m=0;u===3&&(m=t.readBits(1));let v=A(t),R=A(t),g=v,b=R;if(t.readBits(1)){let T=A(t),K=A(t),Z=A(t),M=A(t),V=1,H=1,Q=m===0?u:0;Q===1?(V=2,H=2):Q===2&&(V=2,H=1),g-=(T+K)*V,b-=(Z+M)*H}let x=A(t),y=A(t);A(t);let B=t.readBits(1)?0:e,P=0;for(let T=B;T<=e;T++)A(t),P=A(t),A(t);A(t),A(t),A(t),A(t),A(t),A(t),t.readBits(1)&&t.readBits(1)&&Ut(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),A(t),A(t),t.skipBits(1));let w=A(t);if(Ot(t,w),t.readBits(1)){let T=A(t);for(let K=0;K<T;K++)A(t),t.skipBits(1)}t.skipBits(1),t.skipBits(1);let I=2,F=2,N=2,O=0,k=0,q={num:1,den:1};if(t.readBits(1)){let T=Lt(t,e);q=T.pixelAspectRatio,I=T.colourPrimaries,F=T.transferCharacteristics,N=T.matrixCoefficients,O=T.fullRangeFlag,k=T.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:b,pixelAspectRatio:q,colourPrimaries:I,transferCharacteristics:F,matrixCoefficients:N,fullRangeFlag:O,maxDecFrameBuffering:P+1,spsMaxSubLayersMinus1:e,spsTemporalIdNestingFlag:n,generalProfileSpace:i,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:c,generalConstraintIndicatorFlags:d,generalLevelIdc:l,chromaFormatIdc:u,bitDepthLumaMinus8:x,bitDepthChromaMinus8:y,minSpatialSegmentationIdc:k}}catch(t){return ne._error("Error parsing HEVC SPS:",t),null}},lt=r=>{try{let t=[],e=[],n=[],i=[];for(let l of Ce(r)){let u=r.subarray(l.offset,l.offset+l.length),m=ge(u[0]);m===32?t.push(u):m===33?e.push(u):m===34?n.push(u):(m===39||m===40)&&i.push(u)}if(e.length===0||n.length===0)return null;let s=Mt(e[0]);if(!s)return null;let a=0;if(n.length>0){let l=n[0],u=new z(Me(l));u.skipBits(16),A(u),A(u),u.skipBits(1),u.skipBits(1),u.skipBits(3),u.skipBits(1),u.skipBits(1),A(u),A(u),Y(u),u.skipBits(1),u.skipBits(1),u.readBits(1)&&A(u),Y(u),Y(u),u.skipBits(1),u.skipBits(1),u.skipBits(1),u.skipBits(1);let m=u.readBits(1),v=u.readBits(1);!m&&!v?a=0:m&&!v?a=2:!m&&v?a=3:a=0}let c=[...t.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:t}]:[],...e.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:e}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:n}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:ge(i[0][0]),nalUnits:i}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:c}}catch(t){return ne._error("Error building HEVC Decoder Configuration Record:",t),null}},kt=(r,t)=>{let e=r.readBits(2),n=r.readBits(1),i=r.readBits(5),s=0;for(let u=0;u<32;u++)s=s<<1|r.readBits(1);let a=new Uint8Array(6);for(let u=0;u<6;u++)a[u]=r.readBits(8);let c=r.readBits(8),d=[],l=[];for(let u=0;u<t;u++)d.push(r.readBits(1)),l.push(r.readBits(1));if(t>0)for(let u=t;u<8;u++)r.skipBits(2);for(let u=0;u<t;u++)d[u]&&r.skipBits(88),l[u]&&r.skipBits(8);return{general_profile_space:e,general_tier_flag:n,general_profile_idc:i,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:c}},Ut=r=>{for(let t=0;t<4;t++)for(let e=0;e<(t===3?2:6);e++)if(!r.readBits(1))A(r);else{let i=Math.min(64,1<<4+(t<<1));t>1&&Y(r);for(let s=0;s<i;s++)Y(r)}},Ot=(r,t)=>{let e=[];for(let n=0;n<t;n++)e[n]=Dt(r,n,t,e)},Dt=(r,t,e,n)=>{let i=0,s=0,a=0;if(t!==0&&(s=r.readBits(1)),s){if(t===e){let d=A(r);a=t-(d+1)}else a=t-1;r.readBits(1),A(r);let c=n[a]??0;for(let d=0;d<=c;d++)r.readBits(1)||r.readBits(1);i=n[a]}else{let c=A(r),d=A(r);for(let l=0;l<c;l++)A(r),r.readBits(1);for(let l=0;l<d;l++)A(r),r.readBits(1);i=c+d}return i},Lt=(r,t)=>{let e=2,n=2,i=2,s=0,a=0,c={num:1,den:1};if(r.readBits(1)){let d=r.readBits(8);if(d===255)c={num:r.readBits(16),den:r.readBits(16)};else{let l=ct[d];l&&(c=l)}}return r.readBits(1)&&r.readBits(1),r.readBits(1)&&(r.readBits(3),s=r.readBits(1),r.readBits(1)&&(e=r.readBits(8),n=r.readBits(8),i=r.readBits(8))),r.readBits(1)&&(A(r),A(r)),r.readBits(1),r.readBits(1),r.readBits(1),r.readBits(1)&&(A(r),A(r),A(r),A(r)),r.readBits(1)&&(r.readBits(32),r.readBits(32),r.readBits(1)&&A(r),r.readBits(1)&&Ht(r,!0,t)),r.readBits(1)&&(r.readBits(1),r.readBits(1),r.readBits(1),a=A(r),A(r),A(r),A(r),A(r)),{pixelAspectRatio:c,colourPrimaries:e,transferCharacteristics:n,matrixCoefficients:i,fullRangeFlag:s,minSpatialSegmentationIdc:a}},Ht=(r,t,e)=>{let n=!1,i=!1,s=!1;t&&(n=r.readBits(1)===1,i=r.readBits(1)===1,(n||i)&&(s=r.readBits(1)===1,s&&(r.readBits(8),r.readBits(5),r.readBits(1),r.readBits(5)),r.readBits(4),r.readBits(4),s&&r.readBits(4),r.readBits(5),r.readBits(5),r.readBits(5)));for(let a=0;a<=e;a++){let c=r.readBits(1)===1,d=!0;c||(d=r.readBits(1)===1);let l=!1;d?A(r):l=r.readBits(1)===1;let u=1;l||(u=A(r)+1),n&&ot(r,u,s),i&&ot(r,u,s)}},ot=(r,t,e)=>{for(let n=0;n<t;n++)A(r),A(r),e&&(A(r),A(r)),r.readBits(1)},dt=r=>{let t=[];t.push(r.configurationVersion),t.push((r.generalProfileSpace&3)<<6|(r.generalTierFlag&1)<<5|r.generalProfileIdc&31),t.push(r.generalProfileCompatibilityFlags>>>24&255),t.push(r.generalProfileCompatibilityFlags>>>16&255),t.push(r.generalProfileCompatibilityFlags>>>8&255),t.push(r.generalProfileCompatibilityFlags&255),t.push(...r.generalConstraintIndicatorFlags),t.push(r.generalLevelIdc&255),t.push(240|r.minSpatialSegmentationIdc>>8&15),t.push(r.minSpatialSegmentationIdc&255),t.push(252|r.parallelismType&3),t.push(252|r.chromaFormatIdc&3),t.push(248|r.bitDepthLumaMinus8&7),t.push(248|r.bitDepthChromaMinus8&7),t.push(r.avgFrameRate>>8&255),t.push(r.avgFrameRate&255),t.push((r.constantFrameRate&3)<<6|(r.numTemporalLayers&7)<<3|(r.temporalIdNested&1)<<2|r.lengthSizeMinusOne&3),t.push(r.arrays.length&255);for(let e of r.arrays){t.push((e.arrayCompleteness&1)<<7|0|e.nalUnitType&63),t.push(e.nalUnits.length>>8&255),t.push(e.nalUnits.length&255);for(let n of e.nalUnits){t.push(n.length>>8&255),t.push(n.length&255);for(let i=0;i<n.length;i++)t.push(n[i])}}return new Uint8Array(t)};var zt={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},ut=r=>{let t=new z(r);if(t.readBits(2)!==2)return null;let n=t.readBits(1),s=(t.readBits(1)<<1)+n;if(s===3&&t.skipBits(1),t.readBits(1)===1||t.readBits(1)!==0||(t.skipBits(2),t.readBits(24)!==4817730))return null;let l=8;s>=2&&(l=t.readBits(1)?12:10);let u=t.readBits(3),m=0,v=0;if(u!==7)if(v=t.readBits(1),s===1||s===3){let N=t.readBits(1),O=t.readBits(1);m=!N&&!O?3:N&&!O?2:1,t.skipBits(1)}else m=1;else m=3,v=1;let R=t.readBits(16),g=t.readBits(16),b=R+1,x=g+1,y=b*x,E=oe(ie).level;for(let F of ie)if(y<=F.maxPictureSize){E=F.level;break}let B=zt[u],P=B?.colourPrimaries??2,w=B?.transferCharacteristics??2,I=B?.matrixCoefficients??2;return{profile:s,level:E,bitDepth:l,chromaSubsampling:m,videoFullRangeFlag:v,colourPrimaries:P,transferCharacteristics:w,matrixCoefficients:I}};var qt=function*(r){let t=new z(r),e=()=>{let n=0;for(let i=0;i<8;i++){let s=t.readAlignedByte();if(n+=(s&127)*2**(i*7),!(s&128))break;if(i===7&&s&128)return null}return n>2**32-1?null:n};for(;t.getBitsLeft()>=8;){t.skipBits(1);let n=t.readBits(4),i=t.readBits(1),s=t.readBits(1);t.skipBits(1),i&&t.skipBits(8);let a;if(s){let c=e();if(c===null)return;a=c}else a=Math.floor(t.getBitsLeft()/8);h(t.pos%8===0),yield{type:n,data:r.subarray(t.pos/8,t.pos/8+a)},t.skipBits(a*8)}},At=r=>{for(let{type:t,data:e}of qt(r)){if(t!==1)continue;let n=new z(e),i=n.readBits(3),s=n.readBits(1),a=n.readBits(1),c=0,d=0,l=0;if(a)c=n.readBits(5);else{let k=n.readBits(1),q=0;if(k){if(n.skipBits(32),n.skipBits(32),n.readBits(1)){let M=0;for(;M<32&&!n.readBits(1);)M++;M<32&&n.skipBits(M)}q=n.readBits(1),q&&(l=n.readBits(5),n.skipBits(32),n.skipBits(5),n.skipBits(5))}let T=n.readBits(1),K=n.readBits(5);for(let Z=0;Z<=K;Z++){n.skipBits(12);let M=n.readBits(5);if(Z===0&&(c=M),M>7){let V=n.readBits(1);Z===0&&(d=V)}if(q&&n.readBits(1)){let H=l+1;n.skipBits(H),n.skipBits(H),n.skipBits(1)}T&&n.readBits(1)&&n.skipBits(4)}}let u=n.readBits(4),m=n.readBits(4),v=u+1;n.skipBits(v);let R=m+1;n.skipBits(R);let g=0;if(a?g=0:g=n.readBits(1),g&&(n.skipBits(4),n.skipBits(3)),n.skipBits(1),n.skipBits(1),n.skipBits(1),!a){n.skipBits(1),n.skipBits(1),n.skipBits(1),n.skipBits(1);let k=n.readBits(1);k&&(n.skipBits(1),n.skipBits(1));let q=n.readBits(1),T=0;q?T=2:T=n.readBits(1),T>0&&(n.readBits(1)||n.skipBits(1)),k&&n.skipBits(3)}n.skipBits(1),n.skipBits(1),n.skipBits(1);let b=n.readBits(1),x=8;i===2&&b?x=n.readBits(1)?12:10:i<=2&&(x=b?10:8);let y=0;i!==1&&(y=n.readBits(1));let E=2,B=2,P=2;n.readBits(1)&&(E=n.readBits(8),B=n.readBits(8),P=n.readBits(8));let I=0,F=1,N=1,O=0;return y?I=n.readBits(1):E===1&&B===13&&P===0?(I=1,F=0,N=0):(I=n.readBits(1),i===0?(F=1,N=1):i===1?(F=0,N=0):x===12?(F=n.readBits(1),N=F?n.readBits(1):0):(F=1,N=0),F&&N&&(O=n.readBits(2))),{profile:i,level:c,tier:d,bitDepth:x,monochrome:y,chromaSubsamplingX:F,chromaSubsamplingY:N,chromaSamplePosition:O,videoFullRangeFlag:I,colourPrimaries:E,transferCharacteristics:B,matrixCoefficients:P}}return null};var fn=[64*2,69*2,96*2,64*2,70*2,96*2,80*2,87*2,120*2,80*2,88*2,120*2,96*2,104*2,144*2,96*2,105*2,144*2,112*2,121*2,168*2,112*2,122*2,168*2,128*2,139*2,192*2,128*2,140*2,192*2,160*2,174*2,240*2,160*2,175*2,240*2,192*2,208*2,288*2,192*2,209*2,288*2,224*2,243*2,336*2,224*2,244*2,336*2,256*2,278*2,384*2,256*2,279*2,384*2,320*2,348*2,480*2,320*2,349*2,480*2,384*2,417*2,576*2,384*2,418*2,576*2,448*2,487*2,672*2,448*2,488*2,672*2,512*2,557*2,768*2,512*2,558*2,768*2,640*2,696*2,960*2,640*2,697*2,960*2,768*2,835*2,1152*2,768*2,836*2,1152*2,896*2,975*2,1344*2,896*2,976*2,1344*2,1024*2,1114*2,1536*2,1024*2,1115*2,1536*2,1152*2,1253*2,1728*2,1152*2,1254*2,1728*2,1280*2,1393*2,1920*2,1280*2,1394*2,1920*2];var mn=new Uint8Array([5,4,65,67,45,51]),pn=new Uint8Array([5,4,69,65,67,51]);var Yt={apco:f.AV_PROFILE_PRORES_PROXY,apcs:f.AV_PROFILE_PRORES_LT,apcn:f.AV_PROFILE_PRORES_STANDARD,apch:f.AV_PROFILE_PRORES_HQ,ap4h:f.AV_PROFILE_PRORES_4444,ap4x:f.AV_PROFILE_PRORES_XQ},xe=class extends Wt{constructor(){super(...arguments);this.codecContext=null;this.scaler=null;this.dstFrame=null;this.lastBuffer=null;this.packetEmitted=!1;this.lastScalerKey=null;this.quantizer=null;this.preciseTimings=[]}static supports(e,n){return n.bitrateMode==="quantizer"?e==="avc"||e==="hevc"||e==="vp9"||e==="av1":e==="avc"||e==="hevc"||e==="vp8"||e==="vp9"||e==="av1"||e==="prores"}async init(){this.frame=new f.Frame,this.frame.alloc(),this.frame.timeBase=new f.Rational(1,1e6),this.packet=new f.Packet,this.packet.alloc();let e=$[this.codec];h(e!==void 0);let n=()=>{if(this.codec==="prores"){let s=f.Codec.findEncoderByName(f.FF_ENCODER_PRORES_KS);if(s)return s}return f.Codec.findEncoder(e)},i=null;if(this.codec==="vp9"&&this.config.alpha==="keep")i=f.Codec.findEncoderByName(f.FF_ENCODER_LIBVPX_VP9)??f.Codec.findEncoder(e);else if(this.config.hardwareAcceleration==="prefer-software")i=n();else{let s=await Le(e);s&&this.config.bitrateMode==="quantizer"&&!s.name?.endsWith("_nvenc")&&(s=null),i=s??n()}if(!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=i,this.config.bitrateMode!=="quantizer"&&await this.createCodecContext()}async createCodecContext(){h(this.codecContext===null);let e=new f.CodecContext;e.allocContext3(this.avCodec);let n=f.AV_PIX_FMT_YUV420P;this.avCodec.pixelFormats&&(this.avCodec.pixelFormats.includes(f.AV_PIX_FMT_YUV420P)||(n=this.avCodec.pixelFormats[0]),this.config.alpha==="keep"&&(this.avCodec.pixelFormats.includes(f.AV_PIX_FMT_YUVA420P)?n=f.AV_PIX_FMT_YUVA420P:n=f.avcodecFindBestPixFmtOfList(this.avCodec.pixelFormats,f.AV_PIX_FMT_YUVA444P12LE)));let i=pe({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});e.width=this.config.width,e.height=this.config.height,e.pixelFormat=n,e.timeBase=new f.Rational(1,1e6),e.gopSize=60,e.framerate=new f.Rational(Math.round(this.config.framerate??0)||30,1),e.bitRate=this.config.bitrateMode==="quantizer"?0n:BigInt(this.config.bitrate??new Xt("medium")._toVideoBitrate(this.codec,this.config.width,this.config.height)),e.sampleAspectRatio=new f.Rational(i.num,i.den),this.config.bitrateMode==="constant"&&(e.rcMinRate=e.bitRate,e.rcMaxRate=e.bitRate);let s=this.config.latencyMode==="realtime";if(this.avCodec.name==="libx264"?s&&(e.setOption("tune","zerolatency"),e.setOption("preset","ultrafast")):this.avCodec.name==="libx265"?(e.setOption("x265-params","log-level=error"),s&&(e.setOption("tune","zerolatency"),e.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(s&&e.setOption("deadline","realtime"),e.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(e.setOption("deadline","realtime"),s?e.setOption("cpu-used","8"):e.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"?(process.env.SVT_LOG="1",s&&e.setOption("preset","12")):(this.avCodec.name==="h264_nvenc"||this.avCodec.name==="hevc_nvenc")&&e.setOption("forced-idr","1"),this.config.bitrateMode==="quantizer"){h(this.quantizer!==null);let c;if(this.avCodec.name==="libaom-av1"||this.avCodec.name==="libsvtav1"?c=Math.round(this.quantizer/4):c=this.quantizer,this.avCodec.name==="libx264"||this.avCodec.name==="libx265")e.setOption("qp",String(c));else if(this.avCodec.name==="libvpx-vp9"||this.avCodec.name==="libaom-av1")e.setOption("crf",String(c));else if(this.avCodec.name==="libsvtav1")e.setOption("qp",String(c));else if(this.avCodec.name==="librav1e")e.setOption("qp",String(c));else if(this.avCodec.name?.endsWith("_nvenc"))e.setOption("rc","constqp"),e.setOption("qp",String(c));else throw new Error(`Encoder '${this.avCodec.name}' cannot be used for quantizer-based encoding.`);e.qMin=c,e.qMax=c}if(this.codec==="prores"){let c=Yt[this.config.codec];h(c!==void 0),e.setOption("profile",String(c))}let a=await e.open2();f.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=e}async encode(e,n){if(this.config.bitrateMode==="quantizer"){let l;if(this.codec==="avc"?l=n.avc?.quantizer:this.codec==="hevc"?l=n.hevc?.quantizer:this.codec==="vp9"?l=n.vp9?.quantizer:l=n.av1?.quantizer,h(l!=null),this.codecContext!==null&&l!==this.quantizer){let u=await this.codecContext.sendFrame(null);for(f.FFmpegError.throwIfError(u,"Send frame");;){let m=await this.codecContext.receivePacket(this.packet);if(m===f.AVERROR_EAGAIN||m===f.AVERROR_EOF)break;this.receivePacket(m)}this.codecContext.freeContext(),this.codecContext=null}this.quantizer=l}if(this.codecContext===null&&await this.createCodecContext(),h(this.codecContext),e._data instanceof W)this.frame.unref(),this.frame.ref(e._data.frame);else{if(e.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await le(e,this.frame,this.lastBuffer)}let i=this.frame;if(this.codecContext.pixelFormat!==this.frame.format||this.codecContext.width!==this.frame.width||this.codecContext.height!==this.frame.height){this.scaler||(this.scaler=new f.SoftwareScaleContext);let l=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(l!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,f.SWS_FAST_BILINEAR),this.lastScalerKey=l;let m=this.scaler.initContext();f.FFmpegError.throwIfError(m,"initContext")}this.dstFrame||(this.dstFrame=new f.Frame,this.dstFrame.alloc(),this.dstFrame.width=this.codecContext.width,this.dstFrame.height=this.codecContext.height,this.dstFrame.format=this.codecContext.pixelFormat,this.dstFrame.allocBuffer()),await this.scaler.scaleFrame(this.dstFrame,this.frame),this.dstFrame.copyProps(this.frame),i=this.dstFrame}i.pts=BigInt(e.microsecondTimestamp),i.duration=BigInt(e.microsecondDuration),i.timeBase=new f.Rational(1,1e6),i.pictType=n?.keyFrame?f.AV_PICTURE_TYPE_I:f.AV_PICTURE_TYPE_NONE,i.keyFrame=n?.keyFrame?1:0;let a=se(this.preciseTimings,e.microsecondTimestamp,l=>l.microsecondTimestamp),c=a!==-1?this.preciseTimings[a]:null;c&&c.microsecondTimestamp===e.microsecondTimestamp?(c.timestamp!==e.timestamp&&(c.timestampIsValid=!1),c.duration!==e.duration&&(c.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:e.microsecondTimestamp,timestamp:e.timestamp,duration:e.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let d=await this.codecContext.sendFrame(i);for(f.FFmpegError.throwIfError(d,"Send frame");;){let l=await this.codecContext.receivePacket(this.packet);if(l===f.AVERROR_EAGAIN||l===f.AVERROR_EOF)break;this.receivePacket(l)}}receivePacket(e){if(h(this.codecContext),f.FFmpegError.throwIfError(e,"Receive packet"),!this.packet.data)return;let n=U(this.packet.data),i=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=se(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),c=a!==-1?this.preciseTimings[a]:null;c&&c.microsecondTimestamp===Number(this.packet.pts)&&(c.timestampIsValid&&(i=c.timestamp),c.durationIsValid&&(s=c.duration));let d={},l=null,u=null;if(this.codec==="avc"||this.codec==="hevc"){let g=!1;if(this.codec==="avc"?g=this.config.avc?.format==="annexb":g=this.config.hevc?.format==="annexb",!this.packetEmitted){let b;if(this.codec==="avc"){let x=st(this.packet.data);if(!x)throw new Error("Invalid AVC data, could not extract decoder configuration record.");b=at(x)}else{let x=lt(this.packet.data);if(!x)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");b=dt(x)}l=ae({width:this.config.width,height:this.config.height,codec:this.codec,codecDescription:b,colorSpace:null,avcType:1,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),g||(u=b)}if(!g){let x=[];for(let w of Ce(n))if(this.codec==="avc"){let I=Ne(n[w.offset]);I!==7&&I!==8&&I!==13&&x.push(w)}else{let I=ge(n[w.offset]);I!==33&&I!==34&&I!==32&&x.push(w)}let y=0;for(let w of x)y+=4+w.length;let E=new Uint8Array(y),B=new DataView(E.buffer),P=0;for(let w of x){let I=w.length;B.setUint32(P,I,!1),P+=4,E.set(n.subarray(w.offset,w.offset+w.length),P),P+=w.length}n=E}}else if(this.codec==="vp8")this.packetEmitted||(l=ae({width:this.config.width,height:this.config.height,codec:"vp8",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}));else if(this.codec==="vp9"){if(!this.packetEmitted){let g=ut(n);l=ae({width:this.config.width,height:this.config.height,codec:"vp9",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:g,av1CodecInfo:null,proresFormat:null})}}else if(this.codec==="av1"){if(!this.packetEmitted){let g=At(n);l=ae({width:this.config.width,height:this.config.height,codec:"av1",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:g,proresFormat:null})}}else if(this.codec==="prores")this.packetEmitted||(l=ae({width:this.config.width,height:this.config.height,codec:"prores",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:this.config.codec}));else throw new Error("Unreachable.");let m={},v=this.packet.getSideData(f.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);v&&(m.alpha=U(v).subarray(8));let R=new Gt(n,this.packet.isKeyframe?"key":"delta",i,s,void 0,void 0,m);l!==null&&(d.decoderConfig={codec:l,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:u??void 0,colorSpace:{primaries:ue(this.codecContext.colorPrimaries),matrix:fe(this.codecContext.colorSpace),transfer:Ae(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===f.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===f.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(R,d)}async flush(){if(this.codecContext){let e=await this.codecContext.sendFrame(null);for(f.FFmpegError.throwIfError(e,"Send frame");;){let n=await this.codecContext.receivePacket(this.packet);if(n===f.AVERROR_EAGAIN||n===f.AVERROR_EOF)break;this.receivePacket(n)}this.codecContext.freeContext(),this.codecContext=null}this.packetEmitted=!1}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.scaler?.freeContext(),this.dstFrame?.free()}};import{AudioSample as Qt,CustomAudioDecoder as jt}from"mediabunny";import*as S from"node-av";import{AudioSampleResource as Kt}from"mediabunny";import*as ce from"node-av";var J=class extends Kt{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(t){if(super(),!(t instanceof ce.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t.getMediaType()!==ce.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=t}getFormat(){let t=Xe(this.frame.format);if(t===null){let e=ce.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${e} (${this.frame.format})`)}return t}getSampleRate(){return this.frame.sampleRate}getNumberOfChannels(){return this.frame.channels}getNumberOfFrames(){return this.frame.nbSamples}getTimestamp(){return Number(this.frame.pts)/this.frame.timeBase.den}close(){this.frame.free(),this._frame=null}getDataPlane(t){return h(this.frame.data&&t<this.frame.data.length),U(this.frame.data[t])}},be=(r,t)=>{t.format=Ge(r.format),t.nbSamples=r.numberOfFrames,t.sampleRate=r.sampleRate,t.channelLayout=re(r.numberOfChannels),t.allocBuffer(),h(t.data);for(let e=0;e<t.data.length;e++)r.copyTo(t.data[e],{planeIndex:e})};var ve=class extends jt{constructor(){super(...arguments);this.codecContext=null}static supports(e,n){return e==="aac"||e==="opus"||e==="mp3"||e==="vorbis"||e==="flac"||e==="ac3"||e==="eac3"||e==="dts"}async init(){this.frame=new S.Frame,this.frame.alloc(),this.packet=new S.Packet,this.packet.alloc();let e=$[this.codec];h(e!==void 0);let n=S.Codec.findDecoder(e);if(n===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let i=new S.CodecContext;i.allocContext3(n),i.sampleRate=this.config.sampleRate,i.channelLayout=re(this.config.numberOfChannels),i.timeBase=new S.Rational(1,this.config.sampleRate),i.codecType=S.AVMEDIA_TYPE_AUDIO,i.codecId=e,i.extraData=this.config.description?Buffer.from(U(this.config.description)):null;let s=await i.open2();S.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=i}async decode(e){h(this.codecContext),this.packet.isKeyframe=e.type==="key",this.packet.data=Buffer.from(e.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(e.timestamp*this.config.sampleRate)),this.packet.dts=S.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(e.duration*this.config.sampleRate));let n=await this.codecContext.sendPacket(this.packet);for(S.FFmpegError.throwIfError(n,"Send packet"),this.packet.unref();;){let i=await this.codecContext.receiveFrame(this.frame);if(i===S.AVERROR_EAGAIN||i===S.AVERROR_EOF)break;this.receiveFrame(i)}}receiveFrame(e){S.FFmpegError.throwIfError(e,"Receive frame");let n=this.frame.clone();if(!n)throw new Error("Allocation failure during frame clone.");n.timeBase=new S.Rational(1,this.config.sampleRate),this.onSample(new Qt(new J(n)))}async flush(){h(this.codecContext);let e=await this.codecContext.sendPacket(null);for(S.FFmpegError.throwIfError(e,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===S.AVERROR_EAGAIN||n===S.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomAudioEncoder as Jt,Quality as Zt,EncodedPacket as er}from"mediabunny";import*as _ from"node-av";var ft=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],mt=[1,2,4,5,6],$t=16384,pt=(r,t,e)=>{if(r<32e3||r>384e4)return!1;let n=e===6,i=e-(n?1:0),s=32*Math.ceil(Math.ceil(r*512/t)/32),a=132+(493+28*32)*i+(n?72:0);return s>=a&&s<=8*$t};var tr=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],rr=[8e3,12e3,16e3,24e3,48e3],nr=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],ht=[32e3,44100,48e3],ke=1024,_e=class extends Jt{constructor(){super(...arguments);this.codecContext=null;this.resampler=null;this.dstFrame=null;this.firstExpectedTimestamp=null;this.outputTimestampOffset=0;this.inputParametersKey=null;this.resamplerInputSampleRate=null;this.nextResamplerPts=null;this.packetEmitted=!1;this.adtsHeaderTemplate=null}static supports(e,n){let{numberOfChannels:i,sampleRate:s}=n;return e==="aac"&&i>=1&&i<=48&&tr.includes(s)||e==="opus"&&i>=1&&i<=255&&rr.includes(s)||e==="mp3"&&i>=1&&i<=2&&nr.includes(s)||e==="vorbis"&&i>=1&&i<=255&&s<=2e5||e==="flac"&&i>=1&&i<=8&&s<=655350||e==="ac3"&&i>=1&&i<=6&&ht.includes(s)||e==="eac3"&&i>=1&&i<=16&&ht.includes(s)||e==="dts"&&mt.includes(i)&&ft.includes(s)&&pt(gt(n,e),s,i)}async init(){this.frame=new _.Frame,this.frame.alloc(),this.packet=new _.Packet,this.packet.alloc();let e=$[this.codec];h(e!==void 0);let n=_.Codec.findEncoder(e);if(!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=n,await this.createCodecContext()}async createCodecContext(){h(this.codecContext===null);let e=new _.CodecContext;e.allocContext3(this.avCodec);let n=_.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(_.AV_SAMPLE_FMT_FLTP)&&(n=this.avCodec.sampleFormats[0]),e.sampleRate=this.config.sampleRate,e.channelLayout=this.codec==="dts"?Ye(this.config.numberOfChannels):re(this.config.numberOfChannels),e.codecType=_.AVMEDIA_TYPE_AUDIO,e.codecId=$[this.codec],e.sampleFormat=n,e.timeBase=new _.Rational(1,this.config.sampleRate),e.bitRate=BigInt(gt(this.config,this.codec)),this.config.bitrateMode==="constant"&&(e.rcMinRate=e.bitRate,e.rcMaxRate=e.bitRate);let i=this.codec==="dts"?_.Dictionary.fromObject({strict:-2}):null,s=await e.open2(this.avCodec,i);_.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=e}async encode(e){this.codecContext===null&&(await this.createCodecContext(),h(this.codecContext)),this.firstExpectedTimestamp??=e.timestamp,e._data instanceof J?(this.frame.unref(),this.frame.ref(e._data.frame)):be(e,this.frame),this.frame.pts=BigInt(Math.round(e.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(e.duration*this.config.sampleRate)),this.frame.timeBase=new _.Rational(1,this.config.sampleRate);let n=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==n)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=n,this.codecContext.frameSize>0||this.codecContext.sampleFormat!==this.frame.format||this.codecContext.sampleRate!==this.frame.sampleRate||this.codecContext.channels!==this.frame.channels){if(!this.resampler){this.resampler=new _.SoftwareResampleContext,this.resamplerInputSampleRate=this.frame.sampleRate;let a=this.codecContext.channelLayout,c=re(this.frame.channels),d=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,c,this.frame.format,this.frame.sampleRate);_.FFmpegError.throwIfError(d,"allocSetOpts2");let l=this.resampler.init();_.FFmpegError.throwIfError(l,"init"),this.dstFrame=new _.Frame,this.dstFrame.alloc(),this.dstFrame.channelLayout=a,this.dstFrame.sampleRate=this.codecContext.sampleRate,this.dstFrame.format=this.codecContext.sampleFormat,this.dstFrame.nbSamples=this.codecContext.frameSize||ke,this.dstFrame.duration=BigInt(this.dstFrame.nbSamples),this.dstFrame.allocBuffer(),this.nextResamplerPts=this.frame.pts}let s=this.frame.data;if(!s)throw new DOMException("Frame has no data","EncodingError");await this.resampler.convert(null,0,s,this.frame.nbSamples),await this.pullResampledFrames()}else await this.sendFrameAndReceivePackets(this.frame)}async pullResampledFrames(){h(this.codecContext),h(this.resampler),h(this.dstFrame),h(this.nextResamplerPts!==null);let e=this.codecContext.frameSize||ke;for(;!(this.resampler.getOutSamples(0)<e);)await this.resampler.convert(this.dstFrame.data,e,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(e)}async sendFrameAndReceivePackets(e){h(this.codecContext);let n=await this.codecContext.sendFrame(e);for(_.FFmpegError.throwIfError(n,"Send frame");;){let i=await this.codecContext.receivePacket(this.packet);if(i===_.AVERROR_EAGAIN||i===_.AVERROR_EOF)break;this.receivePacket(i)}}receivePacket(e){if(h(this.codecContext),h(this.firstExpectedTimestamp!==null),_.FFmpegError.throwIfError(e,"Receive packet"),!this.packet.data)return;let n=Number(this.packet.pts)/this.codecContext.sampleRate,i=Number(this.packet.duration)/this.codecContext.sampleRate,s=this.packet.data,a;if(this.packetEmitted)a={};else{this.outputTimestampOffset=Math.max(this.firstExpectedTimestamp-n,0);let d=this.config.codec,l=this.codecContext.extraData?U(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!l)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let m=et(l);this.adtsHeaderTemplate=tt(m),l=void 0}}else if(this.codec==="opus"){if(!l)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!l)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!l)throw new Error("Extradata expected for FLAC.");l=new Uint8Array([102,76,97,67,128,0,0,l.byteLength,...l])}a={decoderConfig:{codec:d,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:l}}}if(this.adtsHeaderTemplate){let d=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,d);let l=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);l.set(this.adtsHeaderTemplate.header,0),l.set(s,this.adtsHeaderTemplate.header.byteLength),s=l}n+=this.outputTimestampOffset;let c=new er(s,"key",n,i);this.packetEmitted=!0,this.onPacket(c,a)}async flush(){if(this.codecContext){e:if(this.resampler){h(this.resamplerInputSampleRate!==null);let e=this.resampler.getOutSamples(0);if(e===0)break e;let n=this.codecContext.frameSize||ke;h(e<n);let i=Math.ceil((n-e)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(i),await this.pullResampledFrames()}await this.sendFrameAndReceivePackets(null),this.codecContext.freeContext(),this.codecContext=null,this.packetEmitted=!1,this.firstExpectedTimestamp=null,this.outputTimestampOffset=0,this.adtsHeaderTemplate=null,this.resampler?.free(),this.resampler=null,this.inputParametersKey=null,this.resamplerInputSampleRate=null,this.nextResamplerPts=null,this.dstFrame?.free(),this.dstFrame=null}}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.dstFrame?.free(),this.resampler?.free()}},gt=(r,t)=>r.bitrate??new Zt("medium")._toAudioBitrate(t)??0;import{registerProresDecoder as ar}from"@mediabunny/prores";var _t=Symbol.for("@mediabunny/server loaded");globalThis[_t]&&or._error(`[WARNING]
|
|
9
|
+
@mediabunny/server was loaded twice. This will likely cause the package not to work correctly. Check if multiple dependencies are importing different versions of @mediabunny/server, or if something is being bundled incorrectly.`);globalThis[_t]=!0;var vt=!1,j={},li=(r={})=>{if(typeof r!="object"||!r)throw new TypeError("options must be an object.");if(r.hardwareContext!=null&&!(r.hardwareContext instanceof X.HardwareContext||typeof r.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");vt||(vt=!0,j=r,X.Log.setLevel(X.AV_LOG_ERROR),Ct(he),ar(),xt(xe),Ct(ve),xt(_e),sr(Je))},di=async(r,t)=>{if(!(r instanceof bt)&&!(r instanceof ir))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(t instanceof X.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(r instanceof bt){if(r._data instanceof W)t.unref(),t.ref(r._data.frame);else{if(r.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await le(r,t,null)}t.pts=BigInt(r.microsecondTimestamp),t.duration=BigInt(r.microsecondDuration),t.timeBase=new X.Rational(1,1e6)}else r._data instanceof J?(t.unref(),t.ref(r._data.frame)):be(r,t),t.timeBase=new X.Rational(1,r.sampleRate),t.pts=BigInt(Math.round(r.timestamp*r.sampleRate)),t.duration=BigInt(r.numberOfFrames)};export{J as AvFrameAudioSampleResource,W as AvFrameVideoSampleResource,j as _serverOptions,li as registerMediabunnyServer,di as toAvFrame};
|
|
@@ -419,6 +419,8 @@ function assert(x) {
|
|
|
419
419
|
throw new Error("Assertion failed.");
|
|
420
420
|
}
|
|
421
421
|
}
|
|
422
|
+
var DEG_TO_RAD = Math.PI / 180;
|
|
423
|
+
var RAD_TO_DEG = 180 / Math.PI;
|
|
422
424
|
var last = (arr) => {
|
|
423
425
|
return arr && arr[arr.length - 1];
|
|
424
426
|
};
|
|
@@ -455,6 +457,139 @@ var toDataView = (source) => {
|
|
|
455
457
|
return new DataView(source);
|
|
456
458
|
}
|
|
457
459
|
};
|
|
460
|
+
var TextEncoder = typeof globalThis.TextEncoder !== "undefined" ? globalThis.TextEncoder : class TextEncoder2 {
|
|
461
|
+
constructor() {
|
|
462
|
+
this.encoding = "utf-8";
|
|
463
|
+
}
|
|
464
|
+
encode(input = "") {
|
|
465
|
+
const bytes = new Uint8Array(3 * input.length);
|
|
466
|
+
let n = 0;
|
|
467
|
+
for (let i = 0; i < input.length; i++) {
|
|
468
|
+
let c = input.charCodeAt(i);
|
|
469
|
+
if (c < 128) {
|
|
470
|
+
bytes[n++] = c;
|
|
471
|
+
} else if (c < 2048) {
|
|
472
|
+
bytes[n++] = 192 | c >> 6;
|
|
473
|
+
bytes[n++] = 128 | c & 63;
|
|
474
|
+
} else if (c < 55296 || c > 57343) {
|
|
475
|
+
bytes[n++] = 224 | c >> 12;
|
|
476
|
+
bytes[n++] = 128 | c >> 6 & 63;
|
|
477
|
+
bytes[n++] = 128 | c & 63;
|
|
478
|
+
} else {
|
|
479
|
+
const next = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
|
|
480
|
+
if (c < 56320 && next >= 56320 && next <= 57343) {
|
|
481
|
+
c = 65536 + (c - 55296 << 10) + (next - 56320);
|
|
482
|
+
i++;
|
|
483
|
+
bytes[n++] = 240 | c >> 18;
|
|
484
|
+
bytes[n++] = 128 | c >> 12 & 63;
|
|
485
|
+
bytes[n++] = 128 | c >> 6 & 63;
|
|
486
|
+
bytes[n++] = 128 | c & 63;
|
|
487
|
+
} else {
|
|
488
|
+
bytes[n++] = 239;
|
|
489
|
+
bytes[n++] = 191;
|
|
490
|
+
bytes[n++] = 189;
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
return bytes.slice(0, n);
|
|
495
|
+
}
|
|
496
|
+
};
|
|
497
|
+
var TextDecoder = typeof globalThis.TextDecoder !== "undefined" ? globalThis.TextDecoder : class TextDecoder2 {
|
|
498
|
+
constructor(label = "utf-8") {
|
|
499
|
+
const normalized = label.trim().toLowerCase();
|
|
500
|
+
if (normalized === "utf-8" || normalized === "utf8" || normalized === "unicode-1-1-utf-8") {
|
|
501
|
+
this.encoding = "utf-8";
|
|
502
|
+
} else if (normalized === "utf-16le" || normalized === "utf-16") {
|
|
503
|
+
this.encoding = "utf-16le";
|
|
504
|
+
} else if (normalized === "utf-16be") {
|
|
505
|
+
this.encoding = "utf-16be";
|
|
506
|
+
} else {
|
|
507
|
+
throw new RangeError(`The encoding label provided ('${label}') is invalid.`);
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
decode(input) {
|
|
511
|
+
const bytes = input ? toUint8Array(input) : new Uint8Array(0);
|
|
512
|
+
const units = [];
|
|
513
|
+
if (this.encoding === "utf-8") {
|
|
514
|
+
let i = bytes.length >= 3 && bytes[0] === 239 && bytes[1] === 187 && bytes[2] === 191 ? 3 : 0;
|
|
515
|
+
while (i < bytes.length) {
|
|
516
|
+
const lead = bytes[i];
|
|
517
|
+
if (lead < 128) {
|
|
518
|
+
units.push(lead);
|
|
519
|
+
i++;
|
|
520
|
+
continue;
|
|
521
|
+
}
|
|
522
|
+
let continuationCount;
|
|
523
|
+
let codePoint;
|
|
524
|
+
if (lead >= 194 && lead < 224) {
|
|
525
|
+
continuationCount = 1;
|
|
526
|
+
codePoint = lead & 31;
|
|
527
|
+
} else if (lead >= 224 && lead < 240) {
|
|
528
|
+
continuationCount = 2;
|
|
529
|
+
codePoint = lead & 15;
|
|
530
|
+
} else if (lead >= 240 && lead < 245) {
|
|
531
|
+
continuationCount = 3;
|
|
532
|
+
codePoint = lead & 7;
|
|
533
|
+
} else {
|
|
534
|
+
units.push(65533);
|
|
535
|
+
i++;
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
let lowerBound = lead === 224 ? 160 : lead === 240 ? 144 : 128;
|
|
539
|
+
let upperBound = lead === 237 ? 159 : lead === 244 ? 143 : 191;
|
|
540
|
+
let j = 1;
|
|
541
|
+
for (; j <= continuationCount; j++) {
|
|
542
|
+
const byte = i + j < bytes.length ? bytes[i + j] : 0;
|
|
543
|
+
if (byte < lowerBound || byte > upperBound) {
|
|
544
|
+
break;
|
|
545
|
+
}
|
|
546
|
+
codePoint = codePoint << 6 | byte & 63;
|
|
547
|
+
lowerBound = 128;
|
|
548
|
+
upperBound = 191;
|
|
549
|
+
}
|
|
550
|
+
i += j;
|
|
551
|
+
if (j <= continuationCount) {
|
|
552
|
+
units.push(65533);
|
|
553
|
+
} else if (codePoint >= 65536) {
|
|
554
|
+
codePoint -= 65536;
|
|
555
|
+
units.push(55296 | codePoint >> 10, 56320 | codePoint & 1023);
|
|
556
|
+
} else {
|
|
557
|
+
units.push(codePoint);
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
} else {
|
|
561
|
+
const littleEndian = this.encoding === "utf-16le";
|
|
562
|
+
const bomLow = littleEndian ? 255 : 254;
|
|
563
|
+
const bomHigh = littleEndian ? 254 : 255;
|
|
564
|
+
let i = bytes.length >= 2 && bytes[0] === bomLow && bytes[1] === bomHigh ? 2 : 0;
|
|
565
|
+
while (i + 1 < bytes.length) {
|
|
566
|
+
const unit = littleEndian ? bytes[i] | bytes[i + 1] << 8 : bytes[i] << 8 | bytes[i + 1];
|
|
567
|
+
i += 2;
|
|
568
|
+
if (unit >= 55296 && unit <= 56319) {
|
|
569
|
+
const next = i + 1 < bytes.length ? littleEndian ? bytes[i] | bytes[i + 1] << 8 : bytes[i] << 8 | bytes[i + 1] : -1;
|
|
570
|
+
if (next >= 56320 && next <= 57343) {
|
|
571
|
+
units.push(unit, next);
|
|
572
|
+
i += 2;
|
|
573
|
+
} else {
|
|
574
|
+
units.push(65533);
|
|
575
|
+
}
|
|
576
|
+
} else if (unit >= 56320 && unit <= 57343) {
|
|
577
|
+
units.push(65533);
|
|
578
|
+
} else {
|
|
579
|
+
units.push(unit);
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
if (i < bytes.length) {
|
|
583
|
+
units.push(65533);
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
let result = "";
|
|
587
|
+
for (let i = 0; i < units.length; i += 8192) {
|
|
588
|
+
result += String.fromCharCode(...units.slice(i, i + 8192));
|
|
589
|
+
}
|
|
590
|
+
return result;
|
|
591
|
+
}
|
|
592
|
+
};
|
|
458
593
|
var COLOR_PRIMARIES_MAP = {
|
|
459
594
|
bt709: 1,
|
|
460
595
|
// ITU-R BT.709
|
|
@@ -734,6 +869,9 @@ var transformVideoSample = async (sample, description) => {
|
|
|
734
869
|
} else if (description.rotation === 270) {
|
|
735
870
|
chain.push("transpose=2");
|
|
736
871
|
}
|
|
872
|
+
if (description.flip) {
|
|
873
|
+
chain.push("hflip");
|
|
874
|
+
}
|
|
737
875
|
chain.push(`crop=${Math.round(description.crop.width)}:${Math.round(description.crop.height)}:${Math.round(description.crop.left)}:${Math.round(description.crop.top)}`);
|
|
738
876
|
if (description.fit === "fill") {
|
|
739
877
|
chain.push(`scale=${description.width}:${description.height}`);
|
|
@@ -768,8 +906,9 @@ var transformVideoSample = async (sample, description) => {
|
|
|
768
906
|
return new VideoSample(new AvFrameVideoSampleResource(dstFrame), {
|
|
769
907
|
timestamp: sample.timestamp,
|
|
770
908
|
duration: sample.duration,
|
|
771
|
-
|
|
772
|
-
|
|
909
|
+
// Baked in by the filter graph:
|
|
910
|
+
rotation: 0,
|
|
911
|
+
flip: false
|
|
773
912
|
});
|
|
774
913
|
} finally {
|
|
775
914
|
graph.free();
|
|
@@ -91,8 +91,8 @@ export declare type MediabunnyServerOptions = {
|
|
|
91
91
|
|
|
92
92
|
/**
|
|
93
93
|
* Registers video and audio decoders and encoders for all codecs, using FFmpeg's libavcodec under the hood.
|
|
94
|
-
* Additionally, a custom `VideoSample` transformer based on libavfilter is registered to enable resizing, rotation
|
|
95
|
-
* cropping of video frames.
|
|
94
|
+
* Additionally, a custom `VideoSample` transformer based on libavfilter is registered to enable resizing, rotation,
|
|
95
|
+
* flipping and cropping of video frames.
|
|
96
96
|
*
|
|
97
97
|
* Make sure to call this function before interacting with Mediabunny.
|
|
98
98
|
*
|
|
@@ -25,8 +25,8 @@ type MediabunnyServerOptions = {
|
|
|
25
25
|
};
|
|
26
26
|
/**
|
|
27
27
|
* Registers video and audio decoders and encoders for all codecs, using FFmpeg's libavcodec under the hood.
|
|
28
|
-
* Additionally, a custom `VideoSample` transformer based on libavfilter is registered to enable resizing, rotation
|
|
29
|
-
* cropping of video frames.
|
|
28
|
+
* Additionally, a custom `VideoSample` transformer based on libavfilter is registered to enable resizing, rotation,
|
|
29
|
+
* flipping and cropping of video frames.
|
|
30
30
|
*
|
|
31
31
|
* Make sure to call this function before interacting with Mediabunny.
|
|
32
32
|
*
|
|
@@ -63,8 +63,8 @@ let registered = false;
|
|
|
63
63
|
exports._serverOptions = {};
|
|
64
64
|
/**
|
|
65
65
|
* Registers video and audio decoders and encoders for all codecs, using FFmpeg's libavcodec under the hood.
|
|
66
|
-
* Additionally, a custom `VideoSample` transformer based on libavfilter is registered to enable resizing, rotation
|
|
67
|
-
* cropping of video frames.
|
|
66
|
+
* Additionally, a custom `VideoSample` transformer based on libavfilter is registered to enable resizing, rotation,
|
|
67
|
+
* flipping and cropping of video frames.
|
|
68
68
|
*
|
|
69
69
|
* Make sure to call this function before interacting with Mediabunny.
|
|
70
70
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video-sample.d.ts","sourceRoot":"","sources":["../../../src/video-sample.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,KAAK,YAAY,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,oCAAoC,EACpC,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAqBlC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,0BAA2B,SAAQ,mBAAmB;IAIlE;;;OAGG;IACH,IAAI,KAAK,iBAMR;gBAEW,KAAK,EAAE,MAAM,CAAC,KAAK;IAa/B,SAAS,IAAI,sBAAsB,GAAG,IAAI;IAI1C,aAAa,IAAI,MAAM;IAIvB,cAAc,IAAI,MAAM;IAIxB,mBAAmB,IAAI,MAAM;IAQ7B,oBAAoB,IAAI,MAAM;IAQ9B,aAAa,IAAI,qBAAqB;IActC,KAAK,IAAI,IAAI;IAKb,aAAa,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;IASzC,WAAW,CAChB,IAAI,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,EAG/C,UAAU,EAAE,oBAAoB,GAC9B,OAAO,CAAC,WAAW,CAAC;CAiCvB;AAED,eAAO,MAAM,wBAAwB,GAAU,QAAQ,WAAW,EAAE,OAAO,MAAM,CAAC,KAAK,EAAE,YAAY,MAAM,GAAG,IAAI,qCA+BjH,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAChC,QAAQ,WAAW,EACnB,aAAa,oCAAoC,KAC/C,OAAO,CAAC,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"video-sample.d.ts","sourceRoot":"","sources":["../../../src/video-sample.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,KAAK,YAAY,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,qBAAqB,EACrB,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,oCAAoC,EACpC,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAqBlC;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,0BAA2B,SAAQ,mBAAmB;IAIlE;;;OAGG;IACH,IAAI,KAAK,iBAMR;gBAEW,KAAK,EAAE,MAAM,CAAC,KAAK;IAa/B,SAAS,IAAI,sBAAsB,GAAG,IAAI;IAI1C,aAAa,IAAI,MAAM;IAIvB,cAAc,IAAI,MAAM;IAIxB,mBAAmB,IAAI,MAAM;IAQ7B,oBAAoB,IAAI,MAAM;IAQ9B,aAAa,IAAI,qBAAqB;IActC,KAAK,IAAI,IAAI;IAKb,aAAa,IAAI,YAAY,CAAC,cAAc,EAAE,CAAC;IASzC,WAAW,CAChB,IAAI,EAAE,WAAW,CAAC,eAAe,EAAE,WAAW,CAAC,EAG/C,UAAU,EAAE,oBAAoB,GAC9B,OAAO,CAAC,WAAW,CAAC;CAiCvB;AAED,eAAO,MAAM,wBAAwB,GAAU,QAAQ,WAAW,EAAE,OAAO,MAAM,CAAC,KAAK,EAAE,YAAY,MAAM,GAAG,IAAI,qCA+BjH,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAChC,QAAQ,WAAW,EACnB,aAAa,oCAAoC,KAC/C,OAAO,CAAC,WAAW,GAAG,IAAI,CAwG5B,CAAC"}
|
|
@@ -207,7 +207,7 @@ const transformVideoSample = async (sample, description) => {
|
|
|
207
207
|
srcFrameOwned = true;
|
|
208
208
|
await (0, exports.copyVideoSampleToAvFrame)(sample, srcFrame, null);
|
|
209
209
|
}
|
|
210
|
-
// Build the filter chain. Order: square-pixel normalize -> rotate -> crop -> resize-with-fit.
|
|
210
|
+
// Build the filter chain. Order: square-pixel normalize -> rotate -> flip -> crop -> resize-with-fit.
|
|
211
211
|
const chain = [];
|
|
212
212
|
if (sample.squarePixelWidth !== sample.codedWidth || sample.squarePixelHeight !== sample.codedHeight) {
|
|
213
213
|
chain.push(`scale=${sample.squarePixelWidth}:${sample.squarePixelHeight}`);
|
|
@@ -222,6 +222,9 @@ const transformVideoSample = async (sample, description) => {
|
|
|
222
222
|
else if (description.rotation === 270) {
|
|
223
223
|
chain.push('transpose=2');
|
|
224
224
|
}
|
|
225
|
+
if (description.flip) {
|
|
226
|
+
chain.push('hflip');
|
|
227
|
+
}
|
|
225
228
|
chain.push(`crop=${Math.round(description.crop.width)}:${Math.round(description.crop.height)}`
|
|
226
229
|
+ `:${Math.round(description.crop.left)}:${Math.round(description.crop.top)}`);
|
|
227
230
|
if (description.fit === 'fill') {
|
|
@@ -266,7 +269,9 @@ const transformVideoSample = async (sample, description) => {
|
|
|
266
269
|
return new mediabunny_1.VideoSample(new AvFrameVideoSampleResource(dstFrame), {
|
|
267
270
|
timestamp: sample.timestamp,
|
|
268
271
|
duration: sample.duration,
|
|
269
|
-
|
|
272
|
+
// Baked in by the filter graph:
|
|
273
|
+
rotation: 0,
|
|
274
|
+
flip: false,
|
|
270
275
|
});
|
|
271
276
|
}
|
|
272
277
|
finally {
|