@mediabunny/server 1.55.2 → 1.55.4

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.
@@ -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 jt,Logging as Zt,registerDecoder as mt,registerEncoder as ft,registerVideoSampleTransformer as er,VideoSample as pt}from"mediabunny";import*as q from"node-av";import{CustomVideoDecoder as _t,VideoSample as Et}from"mediabunny";import*as b from"node-av";import*as i from"node-av";var Y={avc:i.AV_CODEC_ID_H264,hevc:i.AV_CODEC_ID_HEVC,vp8:i.AV_CODEC_ID_VP8,vp9:i.AV_CODEC_ID_VP9,av1:i.AV_CODEC_ID_AV1,prores:i.AV_CODEC_ID_PRORES,aac:i.AV_CODEC_ID_AAC,opus:i.AV_CODEC_ID_OPUS,mp3:i.AV_CODEC_ID_MP3,vorbis:i.AV_CODEC_ID_VORBIS,flac:i.AV_CODEC_ID_FLAC,ac3:i.AV_CODEC_ID_AC3,eac3:i.AV_CODEC_ID_EAC3,dts:i.AV_CODEC_ID_DTS},be,Re=()=>G.hardwareContext!==void 0&&typeof G.hardwareContext!="function"?G.hardwareContext:(be===void 0&&(be=i.HardwareContext.auto()),be),Ve=t=>{if(t!==null&&!(t instanceof i.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},xe=new Map,Ne=async t=>{if(typeof G.hardwareContext=="function"){let e=await G.hardwareContext(t);return Ve(e),e?.getDecoderCodec(t)??null}if(!xe.has(t)){let e=Re();xe.set(t,e?.getDecoderCodec(t)??null)}return xe.get(t)},ve=new Map,Me=async t=>{if(typeof G.hardwareContext=="function"){let e=await G.hardwareContext(t);return Ve(e),e?.getEncoderCodec(t)??null}if(!ve.has(t)){let e=Re();ve.set(t,e?.getEncoderCodec(t)??null)}return ve.get(t)},ke=t=>{switch(t){case"bt709":return i.AVCOL_PRI_BT709;case"bt470bg":return i.AVCOL_PRI_BT470BG;case"smpte170m":return i.AVCOL_PRI_SMPTE170M;case"bt2020":return i.AVCOL_PRI_BT2020;case"smpte432":return i.AVCOL_PRI_SMPTE432}return null},ae=t=>{switch(t){case i.AVCOL_PRI_BT709:return"bt709";case i.AVCOL_PRI_BT470BG:return"bt470bg";case i.AVCOL_PRI_SMPTE170M:return"smpte170m";case i.AVCOL_PRI_BT2020:return"bt2020";case i.AVCOL_PRI_SMPTE432:return"smpte432"}return null},Ue=t=>{switch(t){case"bt709":return i.AVCOL_TRC_BT709;case"smpte170m":return i.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return i.AVCOL_TRC_IEC61966_2_1;case"linear":return i.AVCOL_TRC_LINEAR;case"pq":return i.AVCOL_TRC_SMPTE2084;case"hlg":return i.AVCOL_TRC_ARIB_STD_B67}return null},ce=t=>{switch(t){case i.AVCOL_TRC_BT709:return"bt709";case i.AVCOL_TRC_SMPTE170M:return"smpte170m";case i.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case i.AVCOL_TRC_LINEAR:return"linear";case i.AVCOL_TRC_SMPTE2084:return"pq";case i.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},Oe=t=>{switch(t){case"rgb":return i.AVCOL_SPC_RGB;case"bt709":return i.AVCOL_SPC_BT709;case"bt470bg":return i.AVCOL_SPC_BT470BG;case"smpte170m":return i.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return i.AVCOL_SPC_BT2020_NCL}return null},le=t=>{switch(t){case i.AVCOL_SPC_RGB:return"rgb";case i.AVCOL_SPC_BT709:return"bt709";case i.AVCOL_SPC_BT470BG:return"bt470bg";case i.AVCOL_SPC_SMPTE170M:return"smpte170m";case i.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},Le=t=>{switch(t){case i.AV_PIX_FMT_YUV420P:return"I420";case i.AV_PIX_FMT_YUVJ420P:return"I420";case i.AV_PIX_FMT_YUV420P10LE:return"I420P10";case i.AV_PIX_FMT_YUV420P12LE:return"I420P12";case i.AV_PIX_FMT_YUVA420P:return"I420A";case i.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case i.AV_PIX_FMT_YUV422P:return"I422";case i.AV_PIX_FMT_YUVJ422P:return"I422";case i.AV_PIX_FMT_YUV422P10LE:return"I422P10";case i.AV_PIX_FMT_YUV422P12LE:return"I422P12";case i.AV_PIX_FMT_YUVA422P:return"I422A";case i.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case i.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case i.AV_PIX_FMT_YUV444P:return"I444";case i.AV_PIX_FMT_YUVJ444P:return"I444";case i.AV_PIX_FMT_YUV444P10LE:return"I444P10";case i.AV_PIX_FMT_YUV444P12LE:return"I444P12";case i.AV_PIX_FMT_YUVA444P:return"I444A";case i.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case i.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case i.AV_PIX_FMT_NV12:return"NV12";case i.AV_PIX_FMT_RGBA:return"RGBA";case i.AV_PIX_FMT_RGB0:return"RGBX";case i.AV_PIX_FMT_BGRA:return"BGRA";case i.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},_e=t=>{switch(t){case"I420":return i.AV_PIX_FMT_YUV420P;case"I420P10":return i.AV_PIX_FMT_YUV420P10LE;case"I420P12":return i.AV_PIX_FMT_YUV420P12LE;case"I420A":return i.AV_PIX_FMT_YUVA420P;case"I420AP10":return i.AV_PIX_FMT_YUVA420P10LE;case"I422":return i.AV_PIX_FMT_YUV422P;case"I422P10":return i.AV_PIX_FMT_YUV422P10LE;case"I422P12":return i.AV_PIX_FMT_YUV422P12LE;case"I422A":return i.AV_PIX_FMT_YUVA422P;case"I422AP10":return i.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return i.AV_PIX_FMT_YUVA422P12LE;case"I444":return i.AV_PIX_FMT_YUV444P;case"I444P10":return i.AV_PIX_FMT_YUV444P10LE;case"I444P12":return i.AV_PIX_FMT_YUV444P12LE;case"I444A":return i.AV_PIX_FMT_YUVA444P;case"I444AP10":return i.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return i.AV_PIX_FMT_YUVA444P12LE;case"NV12":return i.AV_PIX_FMT_NV12;case"RGBA":return i.AV_PIX_FMT_RGBA;case"RGBX":return i.AV_PIX_FMT_RGB0;case"BGRA":return i.AV_PIX_FMT_BGRA;case"BGRX":return i.AV_PIX_FMT_BGR0;default:return i.AV_PIX_FMT_NONE}},De=t=>{switch(t){case i.AV_SAMPLE_FMT_U8:return"u8";case i.AV_SAMPLE_FMT_S16:return"s16";case i.AV_SAMPLE_FMT_S32:return"s32";case i.AV_SAMPLE_FMT_FLT:return"f32";case i.AV_SAMPLE_FMT_U8P:return"u8-planar";case i.AV_SAMPLE_FMT_S16P:return"s16-planar";case i.AV_SAMPLE_FMT_S32P:return"s32-planar";case i.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},ze=t=>{switch(t){case"u8":return i.AV_SAMPLE_FMT_U8;case"s16":return i.AV_SAMPLE_FMT_S16;case"s32":return i.AV_SAMPLE_FMT_S32;case"f32":return i.AV_SAMPLE_FMT_FLT;case"u8-planar":return i.AV_SAMPLE_FMT_U8P;case"s16-planar":return i.AV_SAMPLE_FMT_S16P;case"s32-planar":return i.AV_SAMPLE_FMT_S32P;case"f32-planar":return i.AV_SAMPLE_FMT_FLTP;default:return i.AV_SAMPLE_FMT_NONE}},J=t=>{switch(t){case 1:return i.AV_CHANNEL_LAYOUT_MONO;case 2:return i.AV_CHANNEL_LAYOUT_STEREO;case 4:return i.AV_CHANNEL_LAYOUT_QUAD;case 6:return i.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return i.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:i.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}},Ct=0x603n,He=t=>{switch(t){case 1:return i.AV_CHANNEL_LAYOUT_MONO;case 2:return i.AV_CHANNEL_LAYOUT_STEREO;case 4:return{nbChannels:4,order:i.AV_CHANNEL_ORDER_NATIVE,mask:Ct};case 5:return i.AV_CHANNEL_LAYOUT_5POINT0;case 6:return i.AV_CHANNEL_LAYOUT_5POINT1;default:return{nbChannels:t,order:i.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};var M=class M{constructor(){}static get level(){return M._level}static set level(e){if(e!==0&&e!==1&&e!==2&&e!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");M._level=e}static get _emitter(){return M._emitterInstance??=new de}static on(e,r,n){return M._emitter.on(e,r,n)}static _error(...e){M._emitter._emit("error",e),M._level>=1&&console.error(...e)}static _warn(...e){M._emitter._emit("warn",e),M._level>=2&&console.warn(...e)}static _info(...e){M._emitter._emit("info",e),M._level>=3&&console.info(...e)}};M._level=3,M._emitterInstance=null;var j=M;function f(t){if(!t)throw new Error("Assertion failed.")}var ee=t=>t&&t[t.length-1];var A=t=>{let e=0;for(;t.readBits(1)===0&&e<32;)e++;if(e>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<e)-1+t.readBits(e)},X=t=>{let e=A(t);return(e&1)===0?-(e>>1):e+1>>1};var k=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Ee=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var qe={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var We={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var Xe={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Se=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var ye=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 te=(t,e,r)=>{let n=0,o=t.length-1,s=-1;for(;n<=o;){let a=n+(o-n+1)/2|0;r(t[a])<=e?(s=a,n=a+1):o=a-1}return s};var Be=t=>{throw new Error(`Unexpected value: ${t}`)};var sr=1e6*(1+Number.EPSILON);var Ae=t=>{f(Number.isInteger(t.num)),f(Number.isInteger(t.den)),f(t.den!==0);let e=Math.abs(t.num),r=Math.abs(t.den);for(;r!==0;){let o=e%r;e=r,r=o}let n=e||1;return{num:t.num/n,den:t.den/n}};var de=class{constructor(){this._listeners=new Map}on(e,r,n){this._listeners.has(e)||this._listeners.set(e,new Set);let o={fn:r,once:n?.once??!1};return this._listeners.get(e).add(o),()=>{this._listeners.get(e)?.delete(o)}}_emit(...e){let[r,n]=e,o=this._listeners.get(r);if(o)for(let s of o){try{s.fn(n)}catch(a){console.error(a)}s.once&&o.delete(s)}}};import{VideoSampleResource as bt,VideoSampleColorSpace as xt,VideoSample as Ge}from"mediabunny";import*as p from"node-av";var vt=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]),H=class t extends bt{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof p.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==p.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=e}getFormat(){return Le(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 xt({primaries:ae(this.frame.colorPrimaries),transfer:ce(this.frame.colorTrc),matrix:le(this.frame.colorSpace),fullRange:this.frame.colorRange===p.AVCOL_RANGE_JPEG||vt.has(this.frame.format)?!0:this.frame.colorRange===p.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return f(this.frame.data),this.frame.data.map((e,r)=>({data:k(e),stride:this.frame.linesize[r]}))}async toRgbSample(e,r){let n=this.frame.width,o=this.frame.height,s=new p.SoftwareScaleContext,a=this.frame.format,l=_e("RGBA");s.getContext(n,o,a,n,o,l,p.SWS_BILINEAR);let m=new p.Frame;m.width=n,m.height=o,m.format=l,m.alloc(),m.allocBuffer();let c=this.frame;try{await s.scaleFrame(m,c)}finally{s.freeContext()}return m.sampleAspectRatio=c.sampleAspectRatio,new Ge(new t(m),e)}},oe=async(t,e,r)=>{f(t.format!==null),e.format=_e(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new p.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=ke(t.colorSpace.primaries??"unknown")??p.AVCOL_PRI_UNSPECIFIED,e.colorSpace=Oe(t.colorSpace.matrix??"unknown")??p.AVCOL_SPC_UNSPECIFIED,e.colorTrc=Ue(t.colorSpace.transfer??"unknown")??p.AVCOL_TRC_UNSPECIFIED,e.colorRange=t.colorSpace.fullRange===!1?p.AVCOL_RANGE_MPEG:t.colorSpace.fullRange===!0?p.AVCOL_RANGE_JPEG:p.AVCOL_RANGE_UNSPECIFIED;let n=t.allocationSize();return(!r||r.byteLength!==n)&&(r=Buffer.from({length:n})),await t.copyTo(r),e.fromBuffer(r),r},Ye=async(t,e)=>{let r,n=!1;if(t._data instanceof H)r=t._data.frame;else{if(t.format===null)return null;r=new p.Frame,r.alloc(),n=!0,await oe(t,r,null)}let o=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(o.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),o.push("setsar=1")),e.rotation===90?o.push("transpose=1"):e.rotation===180?o.push("transpose=1,transpose=1"):e.rotation===270&&o.push("transpose=2"),o.push(`crop=${Math.round(e.crop.width)}:${Math.round(e.crop.height)}:${Math.round(e.crop.left)}:${Math.round(e.crop.top)}`),e.fit==="fill"?o.push(`scale=${e.width}:${e.height}`):e.fit==="contain"?(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=decrease`),o.push(`pad=${e.width}:${e.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):e.fit==="cover"&&(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=increase`),o.push(`crop=${e.width}:${e.height}`)),o.push("setsar=1");let s=new p.FilterGraph;s.alloc();try{let a=`video_size=${r.width}x${r.height}:pix_fmt=${r.format}:time_base=1/1000000:pixel_aspect=${t.pixelAspectRatio.num}/${t.pixelAspectRatio.den}`,l=s.createFilter(p.Filter.getByName("buffer"),"src",a),m=s.createFilter(p.Filter.getByName("buffersink"),"sink");f(l&&m);let c=p.FilterInOut.createList([{name:"in",filterCtx:l,padIdx:0}]),d=p.FilterInOut.createList([{name:"out",filterCtx:m,padIdx:0}]),h=s.parsePtr(`[in]${o.join(",")}[out]`,d,c);p.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let y=await s.config();p.FFmpegError.throwIfError(y,"FilterGraph.config");let F=await l.buffersrcAddFrame(r);p.FFmpegError.throwIfError(F,"buffersrcAddFrame"),await l.buffersrcAddFrame(null);let g=new p.Frame;g.alloc();let x=await m.buffersinkGetFrame(g);return p.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new Ge(new H(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),n&&r.free()}};var ue=class extends _t{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(r,n){return r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1"}async init(){this.frame=new b.Frame,this.frame.alloc(),this.packet=new b.Packet,this.packet.alloc()}async initCodecContext(r){f(this.codecContext===null);let n=Y[this.codec];f(n!==void 0);let o;if(this.codec==="vp9"&&r.sideData.alpha?o=b.Codec.findDecoderByName(b.FF_DECODER_LIBVPX_VP9)??b.Codec.findDecoder(n):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?o=b.Codec.findDecoder(n):o=await Ne(n)??b.Codec.findDecoder(n),!o)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new b.CodecContext;s.allocContext3(o),this.pixelAspectRatio=Ae({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=b.AVMEDIA_TYPE_VIDEO,s.codecId=n,s.extraData=this.config.description?Buffer.from(k(this.config.description)):null,s.sampleAspectRatio=new b.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=await s.open2();b.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=s}async decode(r){if(this.codecContext===null&&await this.initCodecContext(r),f(this.codecContext),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(r.microsecondTimestamp),this.packet.dts=b.AV_NOPTS_VALUE,this.packet.duration=BigInt(r.microsecondDuration),r.sideData.alpha){let a=Buffer.alloc(8+r.sideData.alpha.byteLength);a[7]=1,a.set(r.sideData.alpha,8),this.packet.addSideData(b.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let n=te(this.preciseTimings,r.microsecondTimestamp,a=>a.microsecondTimestamp),o=n!==-1?this.preciseTimings[n]:null;o&&o.microsecondTimestamp===r.microsecondTimestamp?(o.timestamp!==r.timestamp&&(o.timestampIsValid=!1),o.duration!==r.duration&&(o.durationIsValid=!1)):(this.preciseTimings.splice(n+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let s=await this.codecContext.sendPacket(this.packet);for(b.FFmpegError.throwIfError(s,"Send packet"),this.packet.unref();;){let a=await this.codecContext.receiveFrame(this.frame);if(a===b.AVERROR_EAGAIN||a===b.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(r){b.FFmpegError.throwIfError(r,"Receive frame"),this.frame.sampleAspectRatio=new b.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let n=Number(this.frame.pts)/1e6,o=Number(this.frame.duration)/1e6,s=te(this.preciseTimings,Number(this.frame.pts),m=>m.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(n=a.timestamp),a.durationIsValid&&(o=a.duration));let l=this.frame.clone();if(!l)throw new Error("Frame clone allocation failed.");this.onSample(new Et(new H(l),{timestamp:n,duration:o}))}async flush(){if(!this.codecContext)return;let r=await this.codecContext.sendPacket(null);for(b.FFmpegError.throwIfError(r,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===b.AVERROR_EAGAIN||n===b.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomVideoEncoder as Ot,Quality as Lt,EncodedPacket as Dt}from"mediabunny";import*as u from"node-av";var z=class t{constructor(e){this.bytes=e;this.pos=0}seekToByte(e){this.pos=8*e}readBit(){let e=Math.floor(this.pos/8),r=this.bytes[e]??0,n=7-(this.pos&7),o=(r&1<<n)>>n;return this.pos++,o}readBits(e){if(e===1)return this.readBit();let r=0;for(let n=0;n<e;n++)r<<=1,r|=this.readBit();return r}writeBits(e,r){let n=this.pos+e;for(let o=this.pos;o<n;o++){let s=Math.floor(o/8),a=this.bytes[s],l=7-(o&7);a&=~(1<<l),a|=(r&1<<n-o-1)>>n-o-1<<l,this.bytes[s]=a}this.pos=n}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let e=this.pos/8,r=this.bytes[e]??0;return this.pos+=8,r}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let e=new t(this.bytes);return e.pos=this.pos,e}};var Ke=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],St=[-1,1,2,3,4,5,6,8],Qe=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new z(t),r=e.readBits(5);r===31&&(r=32+e.readBits(6));let n=e.readBits(4),o=null;n===15?o=e.readBits(24):n<Ke.length&&(o=Ke[n]);let s=e.readBits(4),a=null;return s>=1&&s<=7&&(a=St[s]),{objectType:r,frequencyIndex:n,sampleRate:o,channelConfiguration:s,numberOfChannels:a}};var $e=t=>{let e=new Uint8Array(7),r=new z(e),{objectType:n,frequencyIndex:o,channelConfiguration:s}=t,a=n-1;return r.writeBits(12,4095),r.writeBits(1,0),r.writeBits(2,0),r.writeBits(1,1),r.writeBits(2,a),r.writeBits(4,o),r.writeBits(1,0),r.writeBits(3,s),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.skipBits(13),r.writeBits(11,2047),r.writeBits(2,0),{header:e,bitstream:r}};var Bt=["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"],wt=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],Fr=[...wt,...Bt];var we=[{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 Z=[{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 Je=".01.01.01.01.00",je=".0.110.01.01.01.0",It=["ap4x","ap4h","apch","apcn","apcs","apco"];var re=t=>{let{codec:e,codecDescription:r,colorSpace:n,avcCodecInfo:o,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:l,proresFormat:m}=t;if(e==="avc"){if(f(t.avcType!==null),o){let c=new Uint8Array([o.avcProfileIndication,o.profileCompatibility,o.avcLevelIndication]);return`avc${t.avcType}.${Se(c)}`}if(!r||r.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${t.avcType}.${Se(r.subarray(1,4))}`}else if(e==="hevc"){let c,d,h,y,F,g;if(s)c=s.generalProfileSpace,d=s.generalProfileIdc,h=ye(s.generalProfileCompatibilityFlags),y=s.generalTierFlag,F=s.generalLevelIdc,g=[...s.generalConstraintIndicatorFlags];else{if(!r||r.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let C=Ee(r),_=C.getUint8(1);c=_>>6&3,d=_&31,h=ye(C.getUint32(2)),y=_>>5&1,F=C.getUint8(12),g=[];for(let T=0;T<6;T++)g.push(C.getUint8(6+T))}let x="hev1.";for(x+=["","A","B","C"][c]+d,x+=".",x+=h.toString(16).toUpperCase(),x+=".",x+=y===0?"L":"H",x+=F;g.length>0&&g[g.length-1]===0;)g.pop();return g.length>0&&(x+=".",x+=g.map(C=>C.toString(16).toUpperCase()).join(".")),x}else{if(e==="vp8")return"vp8";if(e==="vp9"){if(!a){let T=t.width*t.height,B=ee(Z).level;for(let P of Z)if(T<=P.maxPictureSize){B=P.level;break}return`vp09.00.${B.toString().padStart(2,"0")}.08`}let c=a.profile.toString().padStart(2,"0"),d=a.level.toString().padStart(2,"0"),h=a.bitDepth.toString().padStart(2,"0"),y=a.chromaSubsampling.toString().padStart(2,"0"),F=a.colourPrimaries.toString().padStart(2,"0"),g=a.transferCharacteristics.toString().padStart(2,"0"),x=a.matrixCoefficients.toString().padStart(2,"0"),C=a.videoFullRangeFlag.toString().padStart(2,"0"),_=`vp09.${c}.${d}.${h}.${y}`;return _+=`.${F}.${g}.${x}.${C}`,_.endsWith(Je)&&(_=_.slice(0,-Je.length)),_}else if(e==="av1"){if(!l){let P=t.width*t.height,w=ee(Z).level;for(let E of Z)if(P<=E.maxPictureSize){w=E.level;break}return`av01.0.${w.toString().padStart(2,"0")}M.08`}let c=l.profile,d=l.level.toString().padStart(2,"0"),h=l.tier?"H":"M",y=l.bitDepth.toString().padStart(2,"0"),F=l.monochrome?"1":"0",g=100*l.chromaSubsamplingX+10*l.chromaSubsamplingY+1*(l.chromaSubsamplingX&&l.chromaSubsamplingY?l.chromaSamplePosition:0),x=n?.primaries?qe[n.primaries]:1,C=n?.transfer?We[n.transfer]:1,_=n?.matrix?Xe[n.matrix]:1,T=n?.fullRange?1:0,B=`av01.${c}.${d}${h}.${y}`;return B+=`.${F}.${g.toString().padStart(3,"0")}`,B+=`.${x.toString().padStart(2,"0")}`,B+=`.${C.toString().padStart(2,"0")}`,B+=`.${_.toString().padStart(2,"0")}`,B+=`.${T}`,B.endsWith(je)&&(B=B.slice(0,-je.length)),B}else{if(e==="prores")return m??"apch";e!==null&&Be(e)}}throw new TypeError(`Unhandled codec '${e}'.`)};var Pr=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...It];var fe=function*(t){let e=0,r=-1;for(;e<t.length-2;){let n=t.indexOf(0,e);if(n===-1||n>=t.length-2)break;e=n;let o=0;if(e+3<t.length&&t[e+1]===0&&t[e+2]===0&&t[e+3]===1?o=4:t[e+1]===0&&t[e+2]===1&&(o=3),o===0){e++;continue}r!==-1&&e>r&&(yield{offset:r,length:e-r}),r=e+o,e=r}r!==-1&&r<t.length&&(yield{offset:r,length:t.length-r})};var Ie=t=>t&31,Te=t=>{let e=[],r=t.length;for(let n=0;n<r;n++)n+2<r&&t[n]===0&&t[n+1]===0&&t[n+2]===3?(e.push(0,0),n+=2):e.push(t[n]);return new Uint8Array(e)},Qr=new Uint8Array([0,0,0,1]);var tt=t=>{try{let e=[],r=[],n=[];for(let l of fe(t)){let m=t.subarray(l.offset,l.offset+l.length),c=Ie(m[0]);c===7?e.push(m):c===8?r.push(m):c===13&&n.push(m)}if(e.length===0||r.length===0)return null;let o=e[0],s=Tt(o);f(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:e,pictureParameterSets:r,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?n:null}}catch(e){return j._error("Error building AVC Decoder Configuration Record:",e),null}},rt=t=>{let e=[];e.push(t.configurationVersion),e.push(t.avcProfileIndication),e.push(t.profileCompatibility),e.push(t.avcLevelIndication),e.push(252|t.lengthSizeMinusOne&3),e.push(224|t.sequenceParameterSets.length&31);for(let r of t.sequenceParameterSets){let n=r.byteLength;e.push(n>>8),e.push(n&255);for(let o=0;o<n;o++)e.push(r[o])}e.push(t.pictureParameterSets.length);for(let r of t.pictureParameterSets){let n=r.byteLength;e.push(n>>8),e.push(n&255);for(let o=0;o<n;o++)e.push(r[o])}if(t.avcProfileIndication===100||t.avcProfileIndication===110||t.avcProfileIndication===122||t.avcProfileIndication===144){f(t.chromaFormat!==null),f(t.bitDepthLumaMinus8!==null),f(t.bitDepthChromaMinus8!==null),f(t.sequenceParameterSetExt!==null),e.push(252|t.chromaFormat&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.sequenceParameterSetExt.length);for(let r of t.sequenceParameterSetExt){let n=r.byteLength;e.push(n>>8),e.push(n&255);for(let o=0;o<n;o++)e.push(r[o])}}return new Uint8Array(e)};var nt={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}},Tt=t=>{try{let e=new z(Te(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let n=e.readAlignedByte(),o=e.readAlignedByte(),s=e.readAlignedByte();A(e);let a=1,l=0,m=0,c=0;if((n===100||n===110||n===122||n===244||n===44||n===83||n===86||n===118||n===128)&&(a=A(e),a===3&&(c=e.readBits(1)),l=A(e),m=A(e),e.skipBits(1),e.readBits(1))){for(let S=0;S<(a!==3?8:12);S++)if(e.readBits(1)){let Q=S<6?16:64,L=8,V=8;for(let D=0;D<Q;D++){if(V!==0){let $=X(e);V=(L+$+256)%256}L=V===0?L:V}}}A(e);let d=A(e);if(d===0)A(e);else if(d===1){e.skipBits(1),X(e),X(e);let U=A(e);for(let S=0;S<U;S++)X(e)}A(e),e.skipBits(1);let h=A(e),y=A(e),F=16*(h+1),g=16*(y+1),x=F,C=g,_=e.readBits(1);if(_||e.skipBits(1),e.skipBits(1),e.readBits(1)){let U=A(e),S=A(e),W=A(e),Q=A(e),L,V;if((c===0?a:0)===0)L=1,V=2-_;else{let $=a===3?1:2,ie=a===1?2:1;L=$,V=ie*(2-_)}x-=L*(U+S),C-=V*(W+Q)}let B=2,P=2,w=2,E=0,N={num:1,den:1},R=null,O=null;if(e.readBits(1)){if(e.readBits(1)){let ie=e.readBits(8);if(ie===255)N={num:e.readBits(16),den:e.readBits(16)};else{let Pe=nt[ie];Pe&&(N=Pe)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),E=e.readBits(1),e.readBits(1)&&(B=e.readBits(8),P=e.readBits(8),w=e.readBits(8))),e.readBits(1)&&(A(e),A(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let V=e.readBits(1);V&&Ze(e);let D=e.readBits(1);D&&Ze(e),(V||D)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),A(e),A(e),A(e),A(e),R=A(e),O=A(e))}if(R===null){f(O===null);let U=o&16;if((n===44||n===86||n===100||n===110||n===122||n===244)&&U)R=0,O=0;else{let S=h+1,W=y+1,Q=(2-_)*W,L=we.find(D=>D.level>=s)??ee(we),V=Math.min(Math.floor(L.maxDpbMbs/(S*Q)),16);R=V,O=V}}return f(O!==null),{profileIdc:n,constraintFlags:o,levelIdc:s,frameMbsOnlyFlag:_,chromaFormatIdc:a,bitDepthLumaMinus8:l,bitDepthChromaMinus8:m,codedWidth:F,codedHeight:g,displayWidth:x,displayHeight:C,pixelAspectRatio:N,colourPrimaries:B,matrixCoefficients:w,transferCharacteristics:P,fullRangeFlag:E,numReorderFrames:R,maxDecFrameBuffering:O}}catch(e){return j._error("Error parsing AVC SPS:",e),null}},Ze=t=>{let e=A(t);t.skipBits(4),t.skipBits(4);for(let r=0;r<=e;r++)A(t),A(t),t.skipBits(1);t.skipBits(5),t.skipBits(5),t.skipBits(5),t.skipBits(5)};var me=t=>t>>1&63,Ft=t=>{try{let e=new z(Te(t));e.skipBits(16),e.readBits(4);let r=e.readBits(3),n=e.readBits(1),{general_profile_space:o,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:l,general_constraint_indicator_flags:m,general_level_idc:c}=Pt(e,r);A(e);let d=A(e),h=0;d===3&&(h=e.readBits(1));let y=A(e),F=A(e),g=y,x=F;if(e.readBits(1)){let S=A(e),W=A(e),Q=A(e),L=A(e),V=1,D=1,$=h===0?d:0;$===1?(V=2,D=2):$===2&&(V=2,D=1),g-=(S+W)*V,x-=(Q+L)*D}let C=A(e),_=A(e);A(e);let B=e.readBits(1)?0:r,P=0;for(let S=B;S<=r;S++)A(e),P=A(e),A(e);A(e),A(e),A(e),A(e),A(e),A(e),e.readBits(1)&&e.readBits(1)&&Rt(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),A(e),A(e),e.skipBits(1));let w=A(e);if(Vt(e,w),e.readBits(1)){let S=A(e);for(let W=0;W<S;W++)A(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let E=2,N=2,R=2,O=0,se=0,U={num:1,den:1};if(e.readBits(1)){let S=Mt(e,r);U=S.pixelAspectRatio,E=S.colourPrimaries,N=S.transferCharacteristics,R=S.matrixCoefficients,O=S.fullRangeFlag,se=S.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:U,colourPrimaries:E,transferCharacteristics:N,matrixCoefficients:R,fullRangeFlag:O,maxDecFrameBuffering:P+1,spsMaxSubLayersMinus1:r,spsTemporalIdNestingFlag:n,generalProfileSpace:o,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:l,generalConstraintIndicatorFlags:m,generalLevelIdc:c,chromaFormatIdc:d,bitDepthLumaMinus8:C,bitDepthChromaMinus8:_,minSpatialSegmentationIdc:se}}catch(e){return j._error("Error parsing HEVC SPS:",e),null}},it=t=>{try{let e=[],r=[],n=[],o=[];for(let c of fe(t)){let d=t.subarray(c.offset,c.offset+c.length),h=me(d[0]);h===32?e.push(d):h===33?r.push(d):h===34?n.push(d):(h===39||h===40)&&o.push(d)}if(r.length===0||n.length===0)return null;let s=Ft(r[0]);if(!s)return null;let a=0;if(n.length>0){let c=n[0],d=new z(Te(c));d.skipBits(16),A(d),A(d),d.skipBits(1),d.skipBits(1),d.skipBits(3),d.skipBits(1),d.skipBits(1),A(d),A(d),X(d),d.skipBits(1),d.skipBits(1),d.readBits(1)&&A(d),X(d),X(d),d.skipBits(1),d.skipBits(1),d.skipBits(1),d.skipBits(1);let h=d.readBits(1),y=d.readBits(1);!h&&!y?a=0:h&&!y?a=2:!h&&y?a=3:a=0}let l=[...e.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:r}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:n}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:me(o[0][0]),nalUnits:o}]:[]];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:l}}catch(e){return j._error("Error building HEVC Decoder Configuration Record:",e),null}},Pt=(t,e)=>{let r=t.readBits(2),n=t.readBits(1),o=t.readBits(5),s=0;for(let d=0;d<32;d++)s=s<<1|t.readBits(1);let a=new Uint8Array(6);for(let d=0;d<6;d++)a[d]=t.readBits(8);let l=t.readBits(8),m=[],c=[];for(let d=0;d<e;d++)m.push(t.readBits(1)),c.push(t.readBits(1));if(e>0)for(let d=e;d<8;d++)t.skipBits(2);for(let d=0;d<e;d++)m[d]&&t.skipBits(88),c[d]&&t.skipBits(8);return{general_profile_space:r,general_tier_flag:n,general_profile_idc:o,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:l}},Rt=t=>{for(let e=0;e<4;e++)for(let r=0;r<(e===3?2:6);r++)if(!t.readBits(1))A(t);else{let o=Math.min(64,1<<4+(e<<1));e>1&&X(t);for(let s=0;s<o;s++)X(t)}},Vt=(t,e)=>{let r=[];for(let n=0;n<e;n++)r[n]=Nt(t,n,e,r)},Nt=(t,e,r,n)=>{let o=0,s=0,a=0;if(e!==0&&(s=t.readBits(1)),s){if(e===r){let m=A(t);a=e-(m+1)}else a=e-1;t.readBits(1),A(t);let l=n[a]??0;for(let m=0;m<=l;m++)t.readBits(1)||t.readBits(1);o=n[a]}else{let l=A(t),m=A(t);for(let c=0;c<l;c++)A(t),t.readBits(1);for(let c=0;c<m;c++)A(t),t.readBits(1);o=l+m}return o},Mt=(t,e)=>{let r=2,n=2,o=2,s=0,a=0,l={num:1,den:1};if(t.readBits(1)){let m=t.readBits(8);if(m===255)l={num:t.readBits(16),den:t.readBits(16)};else{let c=nt[m];c&&(l=c)}}return t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),s=t.readBits(1),t.readBits(1)&&(r=t.readBits(8),n=t.readBits(8),o=t.readBits(8))),t.readBits(1)&&(A(t),A(t)),t.readBits(1),t.readBits(1),t.readBits(1),t.readBits(1)&&(A(t),A(t),A(t),A(t)),t.readBits(1)&&(t.readBits(32),t.readBits(32),t.readBits(1)&&A(t),t.readBits(1)&&kt(t,!0,e)),t.readBits(1)&&(t.readBits(1),t.readBits(1),t.readBits(1),a=A(t),A(t),A(t),A(t),A(t)),{pixelAspectRatio:l,colourPrimaries:r,transferCharacteristics:n,matrixCoefficients:o,fullRangeFlag:s,minSpatialSegmentationIdc:a}},kt=(t,e,r)=>{let n=!1,o=!1,s=!1;e&&(n=t.readBits(1)===1,o=t.readBits(1)===1,(n||o)&&(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<=r;a++){let l=t.readBits(1)===1,m=!0;l||(m=t.readBits(1)===1);let c=!1;m?A(t):c=t.readBits(1)===1;let d=1;c||(d=A(t)+1),n&&et(t,d,s),o&&et(t,d,s)}},et=(t,e,r)=>{for(let n=0;n<e;n++)A(t),A(t),r&&(A(t),A(t)),t.readBits(1)},ot=t=>{let e=[];e.push(t.configurationVersion),e.push((t.generalProfileSpace&3)<<6|(t.generalTierFlag&1)<<5|t.generalProfileIdc&31),e.push(t.generalProfileCompatibilityFlags>>>24&255),e.push(t.generalProfileCompatibilityFlags>>>16&255),e.push(t.generalProfileCompatibilityFlags>>>8&255),e.push(t.generalProfileCompatibilityFlags&255),e.push(...t.generalConstraintIndicatorFlags),e.push(t.generalLevelIdc&255),e.push(240|t.minSpatialSegmentationIdc>>8&15),e.push(t.minSpatialSegmentationIdc&255),e.push(252|t.parallelismType&3),e.push(252|t.chromaFormatIdc&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.avgFrameRate>>8&255),e.push(t.avgFrameRate&255),e.push((t.constantFrameRate&3)<<6|(t.numTemporalLayers&7)<<3|(t.temporalIdNested&1)<<2|t.lengthSizeMinusOne&3),e.push(t.arrays.length&255);for(let r of t.arrays){e.push((r.arrayCompleteness&1)<<7|0|r.nalUnitType&63),e.push(r.nalUnits.length>>8&255),e.push(r.nalUnits.length&255);for(let n of r.nalUnits){e.push(n.length>>8&255),e.push(n.length&255);for(let o=0;o<n.length;o++)e.push(n[o])}}return new Uint8Array(e)};var st=t=>{let e=new z(t);if(e.readBits(2)!==2)return null;let n=e.readBits(1),s=(e.readBits(1)<<1)+n;if(s===3&&e.skipBits(1),e.readBits(1)===1||e.readBits(1)!==0||(e.skipBits(2),e.readBits(24)!==4817730))return null;let c=8;s>=2&&(c=e.readBits(1)?12:10);let d=e.readBits(3),h=0,y=0;if(d!==7)if(y=e.readBits(1),s===1||s===3){let N=e.readBits(1),R=e.readBits(1);h=!N&&!R?3:N&&!R?2:1,e.skipBits(1)}else h=1;else h=3,y=1;let F=e.readBits(16),g=e.readBits(16),x=F+1,C=g+1,_=x*C,T=ee(Z).level;for(let E of Z)if(_<=E.maxPictureSize){T=E.level;break}return{profile:s,level:T,bitDepth:c,chromaSubsampling:h,videoFullRangeFlag:y,colourPrimaries:d===2?1:d===1?6:2,transferCharacteristics:d===2?1:d===1?6:2,matrixCoefficients:d===7?0:d===2?1:d===1?6:2}},Ut=function*(t){let e=new z(t),r=()=>{let n=0;for(let o=0;o<8;o++){let s=e.readAlignedByte();if(n|=(s&127)<<o*7,!(s&128))break;if(o===7&&s&128)return null}return n>=2**32-1?null:n};for(;e.getBitsLeft()>=8;){e.skipBits(1);let n=e.readBits(4),o=e.readBits(1),s=e.readBits(1);e.skipBits(1),o&&e.skipBits(8);let a;if(s){let l=r();if(l===null)return;a=l}else a=Math.floor(e.getBitsLeft()/8);f(e.pos%8===0),yield{type:n,data:t.subarray(e.pos/8,e.pos/8+a)},e.skipBits(a*8)}},at=t=>{for(let{type:e,data:r}of Ut(t)){if(e!==1)continue;let n=new z(r),o=n.readBits(3),s=n.readBits(1),a=n.readBits(1),l=0,m=0,c=0;if(a)l=n.readBits(5);else{if(n.readBits(1)&&(n.skipBits(32),n.skipBits(32),n.readBits(1)))return null;let E=n.readBits(1);E&&(c=n.readBits(5),n.skipBits(32),n.skipBits(5),n.skipBits(5));let N=n.readBits(5);for(let R=0;R<=N;R++){n.skipBits(12);let O=n.readBits(5);if(R===0&&(l=O),O>7){let U=n.readBits(1);R===0&&(m=U)}if(E&&n.readBits(1)){let S=c+1;n.skipBits(S),n.skipBits(S),n.skipBits(1)}n.readBits(1)&&n.skipBits(4)}}let d=n.readBits(4),h=n.readBits(4),y=d+1;n.skipBits(y);let F=h+1;n.skipBits(F);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 w=n.readBits(1);w&&(n.skipBits(1),n.skipBits(1));let E=n.readBits(1),N=0;E?N=2:N=n.readBits(1),N>0&&(n.readBits(1)||n.skipBits(1)),w&&n.skipBits(3)}n.skipBits(1),n.skipBits(1),n.skipBits(1);let x=n.readBits(1),C=8;o===2&&x?C=n.readBits(1)?12:10:o<=2&&(C=x?10:8);let _=0;o!==1&&(_=n.readBits(1));let T=1,B=1,P=0;return _||(o===0?(T=1,B=1):o===1?(T=0,B=0):C===12&&(T=n.readBits(1),T&&(B=n.readBits(1))),T&&B&&(P=n.readBits(2))),{profile:o,level:l,tier:m,bitDepth:C,monochrome:_,chromaSubsamplingX:T,chromaSubsamplingY:B,chromaSamplePosition:P}}return null};var $r=[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 Jr=new Uint8Array([5,4,65,67,45,51]),jr=new Uint8Array([5,4,69,65,67,51]);var zt={apco:u.AV_PROFILE_PRORES_PROXY,apcs:u.AV_PROFILE_PRORES_LT,apcn:u.AV_PROFILE_PRORES_STANDARD,apch:u.AV_PROFILE_PRORES_HQ,ap4h:u.AV_PROFILE_PRORES_4444,ap4x:u.AV_PROFILE_PRORES_XQ},pe=class extends Ot{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(r,n){return n.bitrateMode==="quantizer"?r==="avc"||r==="hevc"||r==="vp9"||r==="av1":r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1"||r==="prores"}async init(){this.frame=new u.Frame,this.frame.alloc(),this.frame.timeBase=new u.Rational(1,1e6),this.packet=new u.Packet,this.packet.alloc();let r=Y[this.codec];f(r!==void 0);let n=()=>{if(this.codec==="prores"){let s=u.Codec.findEncoderByName(u.FF_ENCODER_PRORES_KS);if(s)return s}return u.Codec.findEncoder(r)},o=null;if(this.codec==="vp9"&&this.config.alpha==="keep")o=u.Codec.findEncoderByName(u.FF_ENCODER_LIBVPX_VP9)??u.Codec.findEncoder(r);else if(this.config.hardwareAcceleration==="prefer-software")o=n();else{let s=await Me(r);s&&this.config.bitrateMode==="quantizer"&&!s.name?.endsWith("_nvenc")&&(s=null),o=s??n()}if(!o)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=o,this.config.bitrateMode!=="quantizer"&&await this.createCodecContext()}async createCodecContext(){f(this.codecContext===null);let r=new u.CodecContext;r.allocContext3(this.avCodec);let n=u.AV_PIX_FMT_YUV420P;this.avCodec.pixelFormats&&(this.avCodec.pixelFormats.includes(u.AV_PIX_FMT_YUV420P)||(n=this.avCodec.pixelFormats[0]),this.config.alpha==="keep"&&(this.avCodec.pixelFormats.includes(u.AV_PIX_FMT_YUVA420P)?n=u.AV_PIX_FMT_YUVA420P:n=u.avcodecFindBestPixFmtOfList(this.avCodec.pixelFormats,u.AV_PIX_FMT_YUVA444P12LE)));let o=Ae({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});r.width=this.config.width,r.height=this.config.height,r.pixelFormat=n,r.timeBase=new u.Rational(1,1e6),r.gopSize=60,r.framerate=new u.Rational(Math.round(this.config.framerate??0)||30,1),r.bitRate=this.config.bitrateMode==="quantizer"?0n:BigInt(this.config.bitrate??new Lt("medium")._toVideoBitrate(this.codec,this.config.width,this.config.height)),r.sampleAspectRatio=new u.Rational(o.num,o.den),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let s=this.config.latencyMode==="realtime";if(this.avCodec.name==="libx264"?s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast")):this.avCodec.name==="libx265"?(r.setOption("x265-params","log-level=error"),s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(s&&r.setOption("deadline","realtime"),r.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(r.setOption("deadline","realtime"),s?r.setOption("cpu-used","8"):r.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"?(process.env.SVT_LOG="1",s&&r.setOption("preset","12")):(this.avCodec.name==="h264_nvenc"||this.avCodec.name==="hevc_nvenc")&&r.setOption("forced-idr","1"),this.config.bitrateMode==="quantizer"){f(this.quantizer!==null);let l;if(this.avCodec.name==="libaom-av1"||this.avCodec.name==="libsvtav1"?l=Math.round(this.quantizer/4):l=this.quantizer,this.avCodec.name==="libx264"||this.avCodec.name==="libx265")r.setOption("qp",String(l));else if(this.avCodec.name==="libvpx-vp9"||this.avCodec.name==="libaom-av1")r.setOption("crf",String(l));else if(this.avCodec.name==="libsvtav1")r.setOption("qp",String(l));else if(this.avCodec.name==="librav1e")r.setOption("qp",String(l));else if(this.avCodec.name?.endsWith("_nvenc"))r.setOption("rc","constqp"),r.setOption("qp",String(l));else throw new Error(`Encoder '${this.avCodec.name}' cannot be used for quantizer-based encoding.`);r.qMin=l,r.qMax=l}if(this.codec==="prores"){let l=zt[this.config.codec];f(l!==void 0),r.setOption("profile",String(l))}let a=await r.open2();u.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=r}async encode(r,n){if(this.config.bitrateMode==="quantizer"){let c;if(this.codec==="avc"?c=n.avc?.quantizer:this.codec==="hevc"?c=n.hevc?.quantizer:this.codec==="vp9"?c=n.vp9?.quantizer:c=n.av1?.quantizer,f(c!=null),this.codecContext!==null&&c!==this.quantizer){let d=await this.codecContext.sendFrame(null);for(u.FFmpegError.throwIfError(d,"Send frame");;){let h=await this.codecContext.receivePacket(this.packet);if(h===u.AVERROR_EAGAIN||h===u.AVERROR_EOF)break;this.receivePacket(h)}this.codecContext.freeContext(),this.codecContext=null}this.quantizer=c}if(this.codecContext===null&&await this.createCodecContext(),f(this.codecContext),r._data instanceof H)this.frame.unref(),this.frame.ref(r._data.frame);else{if(r.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await oe(r,this.frame,this.lastBuffer)}let o=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 u.SoftwareScaleContext);let c=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(c!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,u.SWS_FAST_BILINEAR),this.lastScalerKey=c;let h=this.scaler.initContext();u.FFmpegError.throwIfError(h,"initContext")}this.dstFrame||(this.dstFrame=new u.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),o=this.dstFrame}o.pts=BigInt(r.microsecondTimestamp),o.duration=BigInt(r.microsecondDuration),o.timeBase=new u.Rational(1,1e6),o.pictType=n?.keyFrame?u.AV_PICTURE_TYPE_I:u.AV_PICTURE_TYPE_NONE,o.keyFrame=n?.keyFrame?1:0;let a=te(this.preciseTimings,r.microsecondTimestamp,c=>c.microsecondTimestamp),l=a!==-1?this.preciseTimings[a]:null;l&&l.microsecondTimestamp===r.microsecondTimestamp?(l.timestamp!==r.timestamp&&(l.timestampIsValid=!1),l.duration!==r.duration&&(l.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let m=await this.codecContext.sendFrame(o);for(u.FFmpegError.throwIfError(m,"Send frame");;){let c=await this.codecContext.receivePacket(this.packet);if(c===u.AVERROR_EAGAIN||c===u.AVERROR_EOF)break;this.receivePacket(c)}}receivePacket(r){if(f(this.codecContext),u.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let n=k(this.packet.data),o=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=te(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),l=a!==-1?this.preciseTimings[a]:null;l&&l.microsecondTimestamp===Number(this.packet.pts)&&(l.timestampIsValid&&(o=l.timestamp),l.durationIsValid&&(s=l.duration));let m={},c=null,d=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 C=tt(this.packet.data);if(!C)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=rt(C)}else{let C=it(this.packet.data);if(!C)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=ot(C)}c=re({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||(d=x)}if(!g){let C=[];for(let w of fe(n))if(this.codec==="avc"){let E=Ie(n[w.offset]);E!==7&&E!==8&&E!==13&&C.push(w)}else{let E=me(n[w.offset]);E!==33&&E!==34&&E!==32&&C.push(w)}let _=0;for(let w of C)_+=4+w.length;let T=new Uint8Array(_),B=new DataView(T.buffer),P=0;for(let w of C){let E=w.length;B.setUint32(P,E,!1),P+=4,T.set(n.subarray(w.offset,w.offset+w.length),P),P+=w.length}n=T}}else if(this.codec==="vp8")this.packetEmitted||(c=re({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=st(n);c=re({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);c=re({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||(c=re({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={},y=this.packet.getSideData(u.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);y&&(h.alpha=k(y).subarray(8));let F=new Dt(n,this.packet.isKeyframe?"key":"delta",o,s,void 0,void 0,h);c!==null&&(m.decoderConfig={codec:c,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:d??void 0,colorSpace:{primaries:ae(this.codecContext.colorPrimaries),matrix:le(this.codecContext.colorSpace),transfer:ce(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===u.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===u.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(F,m)}async flush(){if(this.codecContext){let r=await this.codecContext.sendFrame(null);for(u.FFmpegError.throwIfError(r,"Send frame");;){let n=await this.codecContext.receivePacket(this.packet);if(n===u.AVERROR_EAGAIN||n===u.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 Wt}from"mediabunny";import*as I from"node-av";import{AudioSampleResource as Ht}from"mediabunny";import*as ne from"node-av";var K=class extends Ht{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof ne.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==ne.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=De(this.frame.format);if(e===null){let r=ne.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${r} (${this.frame.format})`)}return e}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(e){return f(this.frame.data&&e<this.frame.data.length),k(this.frame.data[e])}},he=(t,e)=>{e.format=ze(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=J(t.numberOfChannels),e.allocBuffer(),f(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var ge=class extends Wt{constructor(){super(...arguments);this.codecContext=null}static supports(r,n){return r==="aac"||r==="opus"||r==="mp3"||r==="vorbis"||r==="flac"||r==="ac3"||r==="eac3"||r==="dts"}async init(){this.frame=new I.Frame,this.frame.alloc(),this.packet=new I.Packet,this.packet.alloc();let r=Y[this.codec];f(r!==void 0);let n=I.Codec.findDecoder(r);if(n===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let o=new I.CodecContext;o.allocContext3(n),o.sampleRate=this.config.sampleRate,o.channelLayout=J(this.config.numberOfChannels),o.timeBase=new I.Rational(1,this.config.sampleRate),o.codecType=I.AVMEDIA_TYPE_AUDIO,o.codecId=r,o.extraData=this.config.description?Buffer.from(k(this.config.description)):null;let s=await o.open2();I.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=o}async decode(r){f(this.codecContext),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.packet.dts=I.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(r.duration*this.config.sampleRate));let n=await this.codecContext.sendPacket(this.packet);for(I.FFmpegError.throwIfError(n,"Send packet"),this.packet.unref();;){let o=await this.codecContext.receiveFrame(this.frame);if(o===I.AVERROR_EAGAIN||o===I.AVERROR_EOF)break;this.receiveFrame(o)}}receiveFrame(r){I.FFmpegError.throwIfError(r,"Receive frame");let n=this.frame.clone();if(!n)throw new Error("Allocation failure during frame clone.");n.timeBase=new I.Rational(1,this.config.sampleRate),this.onSample(new qt(new K(n)))}async flush(){f(this.codecContext);let r=await this.codecContext.sendPacket(null);for(I.FFmpegError.throwIfError(r,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===I.AVERROR_EAGAIN||n===I.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomAudioEncoder as Gt,Quality as Yt,EncodedPacket as Kt}from"mediabunny";import*as v from"node-av";var ct=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],lt=[1,2,4,5,6],Xt=16384,dt=(t,e,r)=>{if(t<32e3||t>384e4)return!1;let n=r===6,o=r-(n?1:0),s=32*Math.ceil(Math.ceil(t*512/e)/32),a=132+(493+28*32)*o+(n?72:0);return s>=a&&s<=8*Xt};var Qt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],$t=[8e3,12e3,16e3,24e3,48e3],Jt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],At=[32e3,44100,48e3],Fe=1024,Ce=class extends Gt{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(r,n){let{numberOfChannels:o,sampleRate:s}=n;return r==="aac"&&o>=1&&o<=48&&Qt.includes(s)||r==="opus"&&o>=1&&o<=255&&$t.includes(s)||r==="mp3"&&o>=1&&o<=2&&Jt.includes(s)||r==="vorbis"&&o>=1&&o<=255&&s<=2e5||r==="flac"&&o>=1&&o<=8&&s<=655350||r==="ac3"&&o>=1&&o<=6&&At.includes(s)||r==="eac3"&&o>=1&&o<=16&&At.includes(s)||r==="dts"&&lt.includes(o)&&ct.includes(s)&&dt(ut(n,r),s,o)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let r=Y[this.codec];f(r!==void 0);let n=v.Codec.findEncoder(r);if(!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=n,await this.createCodecContext()}async createCodecContext(){f(this.codecContext===null);let r=new v.CodecContext;r.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]),r.sampleRate=this.config.sampleRate,r.channelLayout=this.codec==="dts"?He(this.config.numberOfChannels):J(this.config.numberOfChannels),r.codecType=v.AVMEDIA_TYPE_AUDIO,r.codecId=Y[this.codec],r.sampleFormat=n,r.timeBase=new v.Rational(1,this.config.sampleRate),r.bitRate=BigInt(ut(this.config,this.codec)),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let o=this.codec==="dts"?v.Dictionary.fromObject({strict:-2}):null,s=await r.open2(this.avCodec,o);v.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=r}async encode(r){this.codecContext===null&&(await this.createCodecContext(),f(this.codecContext)),this.firstExpectedTimestamp??=r.timestamp,r._data instanceof K?(this.frame.unref(),this.frame.ref(r._data.frame)):he(r,this.frame),this.frame.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(r.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,l=J(this.frame.channels),m=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,l,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(m,"allocSetOpts2");let c=this.resampler.init();v.FFmpegError.throwIfError(c,"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||Fe,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(){f(this.codecContext),f(this.resampler),f(this.dstFrame),f(this.nextResamplerPts!==null);let r=this.codecContext.frameSize||Fe;for(;!(this.resampler.getOutSamples(0)<r);)await this.resampler.convert(this.dstFrame.data,r,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(r)}async sendFrameAndReceivePackets(r){f(this.codecContext);let n=await this.codecContext.sendFrame(r);for(v.FFmpegError.throwIfError(n,"Send frame");;){let o=await this.codecContext.receivePacket(this.packet);if(o===v.AVERROR_EAGAIN||o===v.AVERROR_EOF)break;this.receivePacket(o)}}receivePacket(r){if(f(this.codecContext),f(this.firstExpectedTimestamp!==null),v.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let n=Number(this.packet.pts)/this.codecContext.sampleRate,o=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 m=this.config.codec,c=this.codecContext.extraData?k(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!c)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let h=Qe(c);this.adtsHeaderTemplate=$e(h),c=void 0}}else if(this.codec==="opus"){if(!c)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!c)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!c)throw new Error("Extradata expected for FLAC.");c=new Uint8Array([102,76,97,67,128,0,0,c.byteLength,...c])}a={decoderConfig:{codec:m,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:c}}}if(this.adtsHeaderTemplate){let m=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,m);let c=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);c.set(this.adtsHeaderTemplate.header,0),c.set(s,this.adtsHeaderTemplate.header.byteLength),s=c}n+=this.outputTimestampOffset;let l=new Kt(s,"key",n,o);this.packetEmitted=!0,this.onPacket(l,a)}async flush(){if(this.codecContext){e:if(this.resampler){f(this.resamplerInputSampleRate!==null);let r=this.resampler.getOutSamples(0);if(r===0)break e;let n=this.codecContext.frameSize||Fe;f(r<n);let o=Math.ceil((n-r)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(o),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()}},ut=(t,e)=>t.bitrate??new Yt("medium")._toAudioBitrate(e)??0;import{registerProresDecoder as tr}from"@mediabunny/prores";var gt=Symbol.for("@mediabunny/server loaded");globalThis[gt]&&Zt._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[gt]=!0;var ht=!1,G={},Yn=(t={})=>{if(typeof t!="object"||!t)throw new TypeError("options must be an object.");if(t.hardwareContext!=null&&!(t.hardwareContext instanceof q.HardwareContext||typeof t.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");ht||(ht=!0,G=t,q.Log.setLevel(q.AV_LOG_ERROR),mt(ue),tr(),ft(pe),mt(ge),ft(Ce),er(Ye))},Kn=async(t,e)=>{if(!(t instanceof pt)&&!(t instanceof jt))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(e instanceof q.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t instanceof pt){if(t._data instanceof H)e.unref(),e.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await oe(t,e,null)}e.pts=BigInt(t.microsecondTimestamp),e.duration=BigInt(t.microsecondDuration),e.timeBase=new q.Rational(1,1e6)}else t._data instanceof K?(e.unref(),e.ref(t._data.frame)):he(t,e),e.timeBase=new q.Rational(1,t.sampleRate),e.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),e.duration=BigInt(t.numberOfFrames)};export{K as AvFrameAudioSampleResource,H as AvFrameVideoSampleResource,G as _serverOptions,Yn as registerMediabunnyServer,Kn as toAvFrame};
8
+ import{AudioSample as tr,Logging as rr,registerDecoder as pt,registerEncoder as ht,registerVideoSampleTransformer as nr,VideoSample as gt}from"mediabunny";import*as X from"node-av";import{CustomVideoDecoder as Et,VideoSample as yt}from"mediabunny";import*as b from"node-av";import*as i from"node-av";var Q={avc:i.AV_CODEC_ID_H264,hevc:i.AV_CODEC_ID_HEVC,vp8:i.AV_CODEC_ID_VP8,vp9:i.AV_CODEC_ID_VP9,av1:i.AV_CODEC_ID_AV1,prores:i.AV_CODEC_ID_PRORES,aac:i.AV_CODEC_ID_AAC,opus:i.AV_CODEC_ID_OPUS,mp3:i.AV_CODEC_ID_MP3,vorbis:i.AV_CODEC_ID_VORBIS,flac:i.AV_CODEC_ID_FLAC,ac3:i.AV_CODEC_ID_AC3,eac3:i.AV_CODEC_ID_EAC3,dts:i.AV_CODEC_ID_DTS},be,Ne=()=>K.hardwareContext!==void 0&&typeof K.hardwareContext!="function"?K.hardwareContext:(be===void 0&&(be=i.HardwareContext.auto()),be),Me=t=>{if(t!==null&&!(t instanceof i.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},xe=new Map,ke=async t=>{if(typeof K.hardwareContext=="function"){let e=await K.hardwareContext(t);return Me(e),e?.getDecoderCodec(t)??null}if(!xe.has(t)){let e=Ne();xe.set(t,e?.getDecoderCodec(t)??null)}return xe.get(t)},ve=new Map,Ue=async t=>{if(typeof K.hardwareContext=="function"){let e=await K.hardwareContext(t);return Me(e),e?.getEncoderCodec(t)??null}if(!ve.has(t)){let e=Ne();ve.set(t,e?.getEncoderCodec(t)??null)}return ve.get(t)},Oe=t=>{switch(t){case"bt709":return i.AVCOL_PRI_BT709;case"bt470bg":return i.AVCOL_PRI_BT470BG;case"smpte170m":return i.AVCOL_PRI_SMPTE170M;case"bt2020":return i.AVCOL_PRI_BT2020;case"smpte432":return i.AVCOL_PRI_SMPTE432}return null},ae=t=>{switch(t){case i.AVCOL_PRI_BT709:return"bt709";case i.AVCOL_PRI_BT470BG:return"bt470bg";case i.AVCOL_PRI_SMPTE170M:return"smpte170m";case i.AVCOL_PRI_BT2020:return"bt2020";case i.AVCOL_PRI_SMPTE432:return"smpte432"}return null},De=t=>{switch(t){case"bt709":return i.AVCOL_TRC_BT709;case"smpte170m":return i.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return i.AVCOL_TRC_IEC61966_2_1;case"linear":return i.AVCOL_TRC_LINEAR;case"pq":return i.AVCOL_TRC_SMPTE2084;case"hlg":return i.AVCOL_TRC_ARIB_STD_B67}return null},ce=t=>{switch(t){case i.AVCOL_TRC_BT709:return"bt709";case i.AVCOL_TRC_SMPTE170M:return"smpte170m";case i.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case i.AVCOL_TRC_LINEAR:return"linear";case i.AVCOL_TRC_SMPTE2084:return"pq";case i.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},Le=t=>{switch(t){case"rgb":return i.AVCOL_SPC_RGB;case"bt709":return i.AVCOL_SPC_BT709;case"bt470bg":return i.AVCOL_SPC_BT470BG;case"smpte170m":return i.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return i.AVCOL_SPC_BT2020_NCL}return null},le=t=>{switch(t){case i.AVCOL_SPC_RGB:return"rgb";case i.AVCOL_SPC_BT709:return"bt709";case i.AVCOL_SPC_BT470BG:return"bt470bg";case i.AVCOL_SPC_SMPTE170M:return"smpte170m";case i.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},He=t=>{switch(t){case i.AV_PIX_FMT_YUV420P:return"I420";case i.AV_PIX_FMT_YUVJ420P:return"I420";case i.AV_PIX_FMT_YUV420P10LE:return"I420P10";case i.AV_PIX_FMT_YUV420P12LE:return"I420P12";case i.AV_PIX_FMT_YUVA420P:return"I420A";case i.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case i.AV_PIX_FMT_YUV422P:return"I422";case i.AV_PIX_FMT_YUVJ422P:return"I422";case i.AV_PIX_FMT_YUV422P10LE:return"I422P10";case i.AV_PIX_FMT_YUV422P12LE:return"I422P12";case i.AV_PIX_FMT_YUVA422P:return"I422A";case i.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case i.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case i.AV_PIX_FMT_YUV444P:return"I444";case i.AV_PIX_FMT_YUVJ444P:return"I444";case i.AV_PIX_FMT_YUV444P10LE:return"I444P10";case i.AV_PIX_FMT_YUV444P12LE:return"I444P12";case i.AV_PIX_FMT_YUVA444P:return"I444A";case i.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case i.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case i.AV_PIX_FMT_NV12:return"NV12";case i.AV_PIX_FMT_RGBA:return"RGBA";case i.AV_PIX_FMT_RGB0:return"RGBX";case i.AV_PIX_FMT_BGRA:return"BGRA";case i.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},_e=t=>{switch(t){case"I420":return i.AV_PIX_FMT_YUV420P;case"I420P10":return i.AV_PIX_FMT_YUV420P10LE;case"I420P12":return i.AV_PIX_FMT_YUV420P12LE;case"I420A":return i.AV_PIX_FMT_YUVA420P;case"I420AP10":return i.AV_PIX_FMT_YUVA420P10LE;case"I422":return i.AV_PIX_FMT_YUV422P;case"I422P10":return i.AV_PIX_FMT_YUV422P10LE;case"I422P12":return i.AV_PIX_FMT_YUV422P12LE;case"I422A":return i.AV_PIX_FMT_YUVA422P;case"I422AP10":return i.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return i.AV_PIX_FMT_YUVA422P12LE;case"I444":return i.AV_PIX_FMT_YUV444P;case"I444P10":return i.AV_PIX_FMT_YUV444P10LE;case"I444P12":return i.AV_PIX_FMT_YUV444P12LE;case"I444A":return i.AV_PIX_FMT_YUVA444P;case"I444AP10":return i.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return i.AV_PIX_FMT_YUVA444P12LE;case"NV12":return i.AV_PIX_FMT_NV12;case"RGBA":return i.AV_PIX_FMT_RGBA;case"RGBX":return i.AV_PIX_FMT_RGB0;case"BGRA":return i.AV_PIX_FMT_BGRA;case"BGRX":return i.AV_PIX_FMT_BGR0;default:return i.AV_PIX_FMT_NONE}},ze=t=>{switch(t){case i.AV_SAMPLE_FMT_U8:return"u8";case i.AV_SAMPLE_FMT_S16:return"s16";case i.AV_SAMPLE_FMT_S32:return"s32";case i.AV_SAMPLE_FMT_FLT:return"f32";case i.AV_SAMPLE_FMT_U8P:return"u8-planar";case i.AV_SAMPLE_FMT_S16P:return"s16-planar";case i.AV_SAMPLE_FMT_S32P:return"s32-planar";case i.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},qe=t=>{switch(t){case"u8":return i.AV_SAMPLE_FMT_U8;case"s16":return i.AV_SAMPLE_FMT_S16;case"s32":return i.AV_SAMPLE_FMT_S32;case"f32":return i.AV_SAMPLE_FMT_FLT;case"u8-planar":return i.AV_SAMPLE_FMT_U8P;case"s16-planar":return i.AV_SAMPLE_FMT_S16P;case"s32-planar":return i.AV_SAMPLE_FMT_S32P;case"f32-planar":return i.AV_SAMPLE_FMT_FLTP;default:return i.AV_SAMPLE_FMT_NONE}},J=t=>{switch(t){case 1:return i.AV_CHANNEL_LAYOUT_MONO;case 2:return i.AV_CHANNEL_LAYOUT_STEREO;case 4:return i.AV_CHANNEL_LAYOUT_QUAD;case 6:return i.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return i.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:i.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}},xt=0x603n,We=t=>{switch(t){case 1:return i.AV_CHANNEL_LAYOUT_MONO;case 2:return i.AV_CHANNEL_LAYOUT_STEREO;case 4:return{nbChannels:4,order:i.AV_CHANNEL_ORDER_NATIVE,mask:xt};case 5:return i.AV_CHANNEL_LAYOUT_5POINT0;case 6:return i.AV_CHANNEL_LAYOUT_5POINT1;default:return{nbChannels:t,order:i.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};var L=class L{constructor(){}static get level(){return L._level}static set level(e){if(e!==0&&e!==1&&e!==2&&e!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");L._level=e}static get _emitter(){return L._emitterInstance??=new de}static on(e,r,n){return L._emitter.on(e,r,n)}static _error(...e){L._emitter._emit("error",e),L._level>=1&&console.error(...e)}static _warn(...e){L._emitter._emit("warn",e),L._level>=2&&console.warn(...e)}static _info(...e){L._emitter._emit("info",e),L._level>=3&&console.info(...e)}};L._level=3,L._emitterInstance=null;var Z=L;function m(t){if(!t)throw new Error("Assertion failed.")}var te=t=>t&&t[t.length-1];var d=t=>{let e=0;for(;t.readBits(1)===0&&e<32;)e++;if(e>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<e)-1+t.readBits(e)},G=t=>{let e=d(t);return(e&1)===0?-(e>>1):e+1>>1};var H=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Se=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var Xe={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var Ge={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var Ye={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Ee=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var ye=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 re=(t,e,r)=>{let n=0,o=t.length-1,s=-1;for(;n<=o;){let a=n+(o-n+1)/2|0;r(t[a])<=e?(s=a,n=a+1):o=a-1}return s};var Ie=t=>{throw new Error(`Unexpected value: ${t}`)};var lr=1e6*(1+Number.EPSILON);var dr=(async()=>{})().constructor;var ue=t=>{m(Number.isInteger(t.num)),m(Number.isInteger(t.den)),m(t.den!==0);let e=Math.abs(t.num),r=Math.abs(t.den);for(;r!==0;){let o=e%r;e=r,r=o}let n=e||1;return{num:t.num/n,den:t.den/n}};var de=class{constructor(){this._listeners=new Map}on(e,r,n){this._listeners.has(e)||this._listeners.set(e,new Set);let o={fn:r,once:n?.once??!1};return this._listeners.get(e).add(o),()=>{this._listeners.get(e)?.delete(o)}}_emit(...e){let[r,n]=e,o=this._listeners.get(r);if(o)for(let s of o){try{s.fn(n)}catch(a){console.error(a)}s.once&&o.delete(s)}}};import{VideoSampleResource as vt,VideoSampleColorSpace as _t,VideoSample as Ke}from"mediabunny";import*as p from"node-av";var St=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 t extends vt{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof p.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==p.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=e}getFormat(){return He(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 _t({primaries:ae(this.frame.colorPrimaries),transfer:ce(this.frame.colorTrc),matrix:le(this.frame.colorSpace),fullRange:this.frame.colorRange===p.AVCOL_RANGE_JPEG||St.has(this.frame.format)?!0:this.frame.colorRange===p.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return m(this.frame.data),this.frame.data.map((e,r)=>({data:H(e),stride:this.frame.linesize[r]}))}async toRgbSample(e,r){let n=this.frame.width,o=this.frame.height,s=new p.SoftwareScaleContext,a=this.frame.format,l=_e("RGBA");s.getContext(n,o,a,n,o,l,p.SWS_BILINEAR);let f=new p.Frame;f.width=n,f.height=o,f.format=l,f.alloc(),f.allocBuffer();let c=this.frame;try{await s.scaleFrame(f,c)}finally{s.freeContext()}return f.sampleAspectRatio=c.sampleAspectRatio,new Ke(new t(f),e)}},se=async(t,e,r)=>{m(t.format!==null),e.format=_e(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new p.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=Oe(t.colorSpace.primaries??"unknown")??p.AVCOL_PRI_UNSPECIFIED,e.colorSpace=Le(t.colorSpace.matrix??"unknown")??p.AVCOL_SPC_UNSPECIFIED,e.colorTrc=De(t.colorSpace.transfer??"unknown")??p.AVCOL_TRC_UNSPECIFIED,e.colorRange=t.colorSpace.fullRange===!1?p.AVCOL_RANGE_MPEG:t.colorSpace.fullRange===!0?p.AVCOL_RANGE_JPEG:p.AVCOL_RANGE_UNSPECIFIED;let n=t.allocationSize();return(!r||r.byteLength!==n)&&(r=Buffer.from({length:n})),await t.copyTo(r),e.fromBuffer(r),r},Qe=async(t,e)=>{let r,n=!1;if(t._data instanceof W)r=t._data.frame;else{if(t.format===null)return null;r=new p.Frame,r.alloc(),n=!0,await se(t,r,null)}let o=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(o.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),o.push("setsar=1")),e.rotation===90?o.push("transpose=1"):e.rotation===180?o.push("transpose=1,transpose=1"):e.rotation===270&&o.push("transpose=2"),o.push(`crop=${Math.round(e.crop.width)}:${Math.round(e.crop.height)}:${Math.round(e.crop.left)}:${Math.round(e.crop.top)}`),e.fit==="fill"?o.push(`scale=${e.width}:${e.height}`):e.fit==="contain"?(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=decrease`),o.push(`pad=${e.width}:${e.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):e.fit==="cover"&&(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=increase`),o.push(`crop=${e.width}:${e.height}`)),o.push("setsar=1");let s=new p.FilterGraph;s.alloc();try{let a=`video_size=${r.width}x${r.height}:pix_fmt=${r.format}:time_base=1/1000000:pixel_aspect=${t.pixelAspectRatio.num}/${t.pixelAspectRatio.den}`,l=s.createFilter(p.Filter.getByName("buffer"),"src",a),f=s.createFilter(p.Filter.getByName("buffersink"),"sink");m(l&&f);let c=p.FilterInOut.createList([{name:"in",filterCtx:l,padIdx:0}]),u=p.FilterInOut.createList([{name:"out",filterCtx:f,padIdx:0}]),h=s.parsePtr(`[in]${o.join(",")}[out]`,u,c);p.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let E=await s.config();p.FFmpegError.throwIfError(E,"FilterGraph.config");let R=await l.buffersrcAddFrame(r);p.FFmpegError.throwIfError(R,"buffersrcAddFrame"),await l.buffersrcAddFrame(null);let g=new p.Frame;g.alloc();let x=await f.buffersinkGetFrame(g);return p.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new Ke(new W(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),n&&r.free()}};var Ae=class extends Et{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(r,n){return r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1"}async init(){this.frame=new b.Frame,this.frame.alloc(),this.packet=new b.Packet,this.packet.alloc()}async initCodecContext(r){m(this.codecContext===null);let n=Q[this.codec];m(n!==void 0);let o;if(this.codec==="vp9"&&r.sideData.alpha?o=b.Codec.findDecoderByName(b.FF_DECODER_LIBVPX_VP9)??b.Codec.findDecoder(n):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?o=b.Codec.findDecoder(n):o=await ke(n)??b.Codec.findDecoder(n),!o)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new b.CodecContext;s.allocContext3(o),this.pixelAspectRatio=ue({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=b.AVMEDIA_TYPE_VIDEO,s.codecId=n,s.extraData=this.config.description?Buffer.from(H(this.config.description)):null,s.sampleAspectRatio=new b.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=await s.open2();b.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=s}async decode(r){if(this.codecContext===null&&await this.initCodecContext(r),m(this.codecContext),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(r.microsecondTimestamp),this.packet.dts=b.AV_NOPTS_VALUE,this.packet.duration=BigInt(r.microsecondDuration),r.sideData.alpha){let a=Buffer.alloc(8+r.sideData.alpha.byteLength);a[7]=1,a.set(r.sideData.alpha,8),this.packet.addSideData(b.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let n=re(this.preciseTimings,r.microsecondTimestamp,a=>a.microsecondTimestamp),o=n!==-1?this.preciseTimings[n]:null;o&&o.microsecondTimestamp===r.microsecondTimestamp?(o.timestamp!==r.timestamp&&(o.timestampIsValid=!1),o.duration!==r.duration&&(o.durationIsValid=!1)):(this.preciseTimings.splice(n+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let s=await this.codecContext.sendPacket(this.packet);for(b.FFmpegError.throwIfError(s,"Send packet"),this.packet.unref();;){let a=await this.codecContext.receiveFrame(this.frame);if(a===b.AVERROR_EAGAIN||a===b.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(r){b.FFmpegError.throwIfError(r,"Receive frame"),this.frame.sampleAspectRatio=new b.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let n=Number(this.frame.pts)/1e6,o=Number(this.frame.duration)/1e6,s=re(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&&(o=a.duration));let l=this.frame.clone();if(!l)throw new Error("Frame clone allocation failed.");this.onSample(new yt(new W(l),{timestamp:n,duration:o}))}async flush(){if(!this.codecContext)return;let r=await this.codecContext.sendPacket(null);for(b.FFmpegError.throwIfError(r,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===b.AVERROR_EAGAIN||n===b.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomVideoEncoder as Ht,Quality as zt,EncodedPacket as qt}from"mediabunny";import*as A from"node-av";var q=class t{constructor(e){this.bytes=e;this.pos=0}seekToByte(e){this.pos=8*e}readBit(){let e=Math.floor(this.pos/8),r=this.bytes[e]??0,n=7-(this.pos&7),o=(r&1<<n)>>n;return this.pos++,o}readBits(e){if(e===1)return this.readBit();let r=0;for(let n=0;n<e;n++)r<<=1,r|=this.readBit();return r}writeBits(e,r){let n=this.pos+e;for(let o=this.pos;o<n;o++){let s=Math.floor(o/8),a=this.bytes[s],l=7-(o&7);a&=~(1<<l),a|=(r&1<<n-o-1)>>n-o-1<<l,this.bytes[s]=a}this.pos=n}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let e=this.pos/8,r=this.bytes[e]??0;return this.pos+=8,r}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let e=new t(this.bytes);return e.pos=this.pos,e}};var $e=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],It=[-1,1,2,3,4,5,6,8],je=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new q(t),r=Be(e),{frequencyIndex:n,sampleRate:o}=we(e),s=e.readBits(4),a=null;s>=1&&s<=7&&(a=It[s]);let l=r,f=!1,c=o;if(r===5||r===29)f=r===29,c=we(e).sampleRate,l=Be(e),l===22&&e.skipBits(4);else for(;e.getBitsLeft()>15;){let u=e.pos;if(e.readBits(11)!==695){e.pos=u+1;continue}Be(e)===5&&e.readBits(1)&&(c=we(e).sampleRate,e.getBitsLeft()>11&&e.readBits(11)===1352&&(f=!!e.readBits(1)));break}return a!==null&&a>1&&(f=!1),{objectType:r,coreObjectType:l,frequencyIndex:n,channelConfiguration:s,outputSampleRate:c,outputNumberOfChannels:f&&a===1?2:a}},Be=t=>{let e=t.readBits(5);return e===31?32+t.readBits(6):e},we=t=>{let e=t.readBits(4);return e===15?{frequencyIndex:e,sampleRate:t.readBits(24)}:{frequencyIndex:e,sampleRate:e<$e.length?$e[e]:null}};var Je=t=>{let e=new Uint8Array(7),r=new q(e),{coreObjectType:n,frequencyIndex:o,channelConfiguration:s}=t,a=n-1;return r.writeBits(12,4095),r.writeBits(1,0),r.writeBits(2,0),r.writeBits(1,1),r.writeBits(2,a),r.writeBits(4,o),r.writeBits(1,0),r.writeBits(3,s),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.skipBits(13),r.writeBits(11,2047),r.writeBits(2,0),{header:e,bitstream:r}};var wt=["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"],Tt=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],Ur=[...Tt,...wt];var Te=[{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 ee=[{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 Ze=".01.01.01.01.00",et=".0.110.01.01.01.0",Pt=["ap4x","ap4h","apch","apcn","apcs","apco"];var ne=t=>{let{codec:e,codecDescription:r,colorSpace:n,avcCodecInfo:o,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:l,proresFormat:f}=t;if(e==="avc"){if(m(t.avcType!==null),o){let c=new Uint8Array([o.avcProfileIndication,o.profileCompatibility,o.avcLevelIndication]);return`avc${t.avcType}.${Ee(c)}`}if(!r||r.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${t.avcType}.${Ee(r.subarray(1,4))}`}else if(e==="hevc"){let c,u,h,E,R,g;if(s)c=s.generalProfileSpace,u=s.generalProfileIdc,h=ye(s.generalProfileCompatibilityFlags),E=s.generalTierFlag,R=s.generalLevelIdc,g=[...s.generalConstraintIndicatorFlags];else{if(!r||r.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let C=Se(r),S=C.getUint8(1);c=S>>6&3,u=S&31,h=ye(C.getUint32(2)),E=S>>5&1,R=C.getUint8(12),g=[];for(let F=0;F<6;F++)g.push(C.getUint8(6+F))}let x="hev1.";for(x+=["","A","B","C"][c]+u,x+=".",x+=h.toString(16).toUpperCase(),x+=".",x+=E===0?"L":"H",x+=R;g.length>0&&g[g.length-1]===0;)g.pop();return g.length>0&&(x+=".",x+=g.map(C=>C.toString(16).toUpperCase()).join(".")),x}else{if(e==="vp8")return"vp8";if(e==="vp9"){if(!a){let F=t.width*t.height,y=te(ee).level;for(let P of ee)if(F<=P.maxPictureSize){y=P.level;break}return`vp09.00.${y.toString().padStart(2,"0")}.08`}let c=a.profile.toString().padStart(2,"0"),u=a.level.toString().padStart(2,"0"),h=a.bitDepth.toString().padStart(2,"0"),E=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"),C=a.videoFullRangeFlag.toString().padStart(2,"0"),S=`vp09.${c}.${u}.${h}.${E}`;return S+=`.${R}.${g}.${x}.${C}`,S.endsWith(Ze)&&(S=S.slice(0,-Ze.length)),S}else if(e==="av1"){if(!l){let P=t.width*t.height,w=te(ee).level;for(let B of ee)if(P<=B.maxPictureSize){w=B.level;break}return`av01.0.${w.toString().padStart(2,"0")}M.08`}let c=l.profile,u=l.level.toString().padStart(2,"0"),h=l.tier?"H":"M",E=l.bitDepth.toString().padStart(2,"0"),R=l.monochrome?"1":"0",g=100*l.chromaSubsamplingX+10*l.chromaSubsamplingY+1*(l.chromaSubsamplingX&&l.chromaSubsamplingY?l.chromaSamplePosition:0),x=n?.primaries?Xe[n.primaries]:1,C=n?.transfer?Ge[n.transfer]:1,S=n?.matrix?Ye[n.matrix]:1,F=n?.fullRange?1:0,y=`av01.${c}.${u}${h}.${E}`;return y+=`.${R}.${g.toString().padStart(3,"0")}`,y+=`.${x.toString().padStart(2,"0")}`,y+=`.${C.toString().padStart(2,"0")}`,y+=`.${S.toString().padStart(2,"0")}`,y+=`.${F}`,y.endsWith(et)&&(y=y.slice(0,-et.length)),y}else{if(e==="prores")return f??"apch";e!==null&&Ie(e)}}throw new TypeError(`Unhandled codec '${e}'.`)};var Or=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Pt];var me=function*(t){let e=0,r=-1;for(;e<t.length-2;){let n=t.indexOf(0,e);if(n===-1||n>=t.length-2)break;e=n;let o=0;if(e+3<t.length&&t[e+1]===0&&t[e+2]===0&&t[e+3]===1?o=4:t[e+1]===0&&t[e+2]===1&&(o=3),o===0){e++;continue}r!==-1&&e>r&&(yield{offset:r,length:e-r}),r=e+o,e=r}r!==-1&&r<t.length&&(yield{offset:r,length:t.length-r})};var Pe=t=>t&31,Re=t=>{let e=[],r=t.length;for(let n=0;n<r;n++)n+2<r&&t[n]===0&&t[n+1]===0&&t[n+2]===3?(e.push(0,0),n+=2):e.push(t[n]);return new Uint8Array(e)},tn=new Uint8Array([0,0,0,1]);var nt=t=>{try{let e=[],r=[],n=[];for(let l of me(t)){let f=t.subarray(l.offset,l.offset+l.length),c=Pe(f[0]);c===7?e.push(f):c===8?r.push(f):c===13&&n.push(f)}if(e.length===0||r.length===0)return null;let o=e[0],s=Rt(o);m(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:e,pictureParameterSets:r,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?n:null}}catch(e){return Z._error("Error building AVC Decoder Configuration Record:",e),null}},it=t=>{let e=[];e.push(t.configurationVersion),e.push(t.avcProfileIndication),e.push(t.profileCompatibility),e.push(t.avcLevelIndication),e.push(252|t.lengthSizeMinusOne&3),e.push(224|t.sequenceParameterSets.length&31);for(let r of t.sequenceParameterSets){let n=r.byteLength;e.push(n>>8),e.push(n&255);for(let o=0;o<n;o++)e.push(r[o])}e.push(t.pictureParameterSets.length);for(let r of t.pictureParameterSets){let n=r.byteLength;e.push(n>>8),e.push(n&255);for(let o=0;o<n;o++)e.push(r[o])}if(t.avcProfileIndication===100||t.avcProfileIndication===110||t.avcProfileIndication===122||t.avcProfileIndication===144){m(t.chromaFormat!==null),m(t.bitDepthLumaMinus8!==null),m(t.bitDepthChromaMinus8!==null),m(t.sequenceParameterSetExt!==null),e.push(252|t.chromaFormat&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.sequenceParameterSetExt.length);for(let r of t.sequenceParameterSetExt){let n=r.byteLength;e.push(n>>8),e.push(n&255);for(let o=0;o<n;o++)e.push(r[o])}}return new Uint8Array(e)};var ot={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}},Rt=t=>{try{let e=new q(Re(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let n=e.readAlignedByte(),o=e.readAlignedByte(),s=e.readAlignedByte();d(e);let a=1,l=0,f=0,c=0;if((n===100||n===110||n===122||n===244||n===44||n===83||n===86||n===118||n===128)&&(a=d(e),a===3&&(c=e.readBits(1)),l=d(e),f=d(e),e.skipBits(1),e.readBits(1))){for(let v=0;v<(a!==3?8:12);v++)if(e.readBits(1)){let D=v<6?16:64,N=8,T=8;for(let O=0;O<D;O++){if(T!==0){let j=G(e);T=(N+j+256)%256}N=T===0?N:T}}}d(e);let u=d(e);if(u===0)d(e);else if(u===1){e.skipBits(1),G(e),G(e);let k=d(e);for(let v=0;v<k;v++)G(e)}d(e),e.skipBits(1);let h=d(e),E=d(e),R=16*(h+1),g=16*(E+1),x=R,C=g,S=e.readBits(1);if(S||e.skipBits(1),e.skipBits(1),e.readBits(1)){let k=d(e),v=d(e),z=d(e),D=d(e),N,T;if((c===0?a:0)===0)N=1,T=2-S;else{let j=a===3?1:2,oe=a===1?2:1;N=j,T=oe*(2-S)}x-=N*(k+v),C-=T*(z+D)}let y=2,P=2,w=2,B=0,V={num:1,den:1},M=null,U=null;if(e.readBits(1)){if(e.readBits(1)){let oe=e.readBits(8);if(oe===255)V={num:e.readBits(16),den:e.readBits(16)};else{let Ve=ot[oe];Ve&&(V=Ve)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),B=e.readBits(1),e.readBits(1)&&(y=e.readBits(8),P=e.readBits(8),w=e.readBits(8))),e.readBits(1)&&(d(e),d(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let T=e.readBits(1);T&&tt(e);let O=e.readBits(1);O&&tt(e),(T||O)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),d(e),d(e),d(e),d(e),M=d(e),U=d(e))}if(M===null){m(U===null);let k=o&16;if((n===44||n===86||n===100||n===110||n===122||n===244)&&k)M=0,U=0;else{let v=h+1,z=E+1,D=(2-S)*z,N=Te.find(O=>O.level>=s)??te(Te),T=Math.min(Math.floor(N.maxDpbMbs/(v*D)),16);M=T,U=T}}return m(U!==null),{profileIdc:n,constraintFlags:o,levelIdc:s,frameMbsOnlyFlag:S,chromaFormatIdc:a,bitDepthLumaMinus8:l,bitDepthChromaMinus8:f,codedWidth:R,codedHeight:g,displayWidth:x,displayHeight:C,pixelAspectRatio:V,colourPrimaries:y,matrixCoefficients:w,transferCharacteristics:P,fullRangeFlag:B,numReorderFrames:M,maxDecFrameBuffering:U}}catch(e){return Z._error("Error parsing AVC SPS:",e),null}},tt=t=>{let e=d(t);t.skipBits(4),t.skipBits(4);for(let r=0;r<=e;r++)d(t),d(t),t.skipBits(1);t.skipBits(5),t.skipBits(5),t.skipBits(5),t.skipBits(5)};var fe=t=>t>>1&63,Ft=t=>{try{let e=new q(Re(t));e.skipBits(16),e.readBits(4);let r=e.readBits(3),n=e.readBits(1),{general_profile_space:o,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:l,general_constraint_indicator_flags:f,general_level_idc:c}=Vt(e,r);d(e);let u=d(e),h=0;u===3&&(h=e.readBits(1));let E=d(e),R=d(e),g=E,x=R;if(e.readBits(1)){let v=d(e),z=d(e),D=d(e),N=d(e),T=1,O=1,j=h===0?u:0;j===1?(T=2,O=2):j===2&&(T=2,O=1),g-=(v+z)*T,x-=(D+N)*O}let C=d(e),S=d(e);d(e);let y=e.readBits(1)?0:r,P=0;for(let v=y;v<=r;v++)d(e),P=d(e),d(e);d(e),d(e),d(e),d(e),d(e),d(e),e.readBits(1)&&e.readBits(1)&&Nt(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),d(e),d(e),e.skipBits(1));let w=d(e);if(Mt(e,w),e.readBits(1)){let v=d(e);for(let z=0;z<v;z++)d(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let B=2,V=2,M=2,U=0,Y=0,k={num:1,den:1};if(e.readBits(1)){let v=Ut(e,r);k=v.pixelAspectRatio,B=v.colourPrimaries,V=v.transferCharacteristics,M=v.matrixCoefficients,U=v.fullRangeFlag,Y=v.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:k,colourPrimaries:B,transferCharacteristics:V,matrixCoefficients:M,fullRangeFlag:U,maxDecFrameBuffering:P+1,spsMaxSubLayersMinus1:r,spsTemporalIdNestingFlag:n,generalProfileSpace:o,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:l,generalConstraintIndicatorFlags:f,generalLevelIdc:c,chromaFormatIdc:u,bitDepthLumaMinus8:C,bitDepthChromaMinus8:S,minSpatialSegmentationIdc:Y}}catch(e){return Z._error("Error parsing HEVC SPS:",e),null}},st=t=>{try{let e=[],r=[],n=[],o=[];for(let c of me(t)){let u=t.subarray(c.offset,c.offset+c.length),h=fe(u[0]);h===32?e.push(u):h===33?r.push(u):h===34?n.push(u):(h===39||h===40)&&o.push(u)}if(r.length===0||n.length===0)return null;let s=Ft(r[0]);if(!s)return null;let a=0;if(n.length>0){let c=n[0],u=new q(Re(c));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),G(u),u.skipBits(1),u.skipBits(1),u.readBits(1)&&d(u),G(u),G(u),u.skipBits(1),u.skipBits(1),u.skipBits(1),u.skipBits(1);let h=u.readBits(1),E=u.readBits(1);!h&&!E?a=0:h&&!E?a=2:!h&&E?a=3:a=0}let l=[...e.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:r}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:n}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:fe(o[0][0]),nalUnits:o}]:[]];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:l}}catch(e){return Z._error("Error building HEVC Decoder Configuration Record:",e),null}},Vt=(t,e)=>{let r=t.readBits(2),n=t.readBits(1),o=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 l=t.readBits(8),f=[],c=[];for(let u=0;u<e;u++)f.push(t.readBits(1)),c.push(t.readBits(1));if(e>0)for(let u=e;u<8;u++)t.skipBits(2);for(let u=0;u<e;u++)f[u]&&t.skipBits(88),c[u]&&t.skipBits(8);return{general_profile_space:r,general_tier_flag:n,general_profile_idc:o,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:l}},Nt=t=>{for(let e=0;e<4;e++)for(let r=0;r<(e===3?2:6);r++)if(!t.readBits(1))d(t);else{let o=Math.min(64,1<<4+(e<<1));e>1&&G(t);for(let s=0;s<o;s++)G(t)}},Mt=(t,e)=>{let r=[];for(let n=0;n<e;n++)r[n]=kt(t,n,e,r)},kt=(t,e,r,n)=>{let o=0,s=0,a=0;if(e!==0&&(s=t.readBits(1)),s){if(e===r){let f=d(t);a=e-(f+1)}else a=e-1;t.readBits(1),d(t);let l=n[a]??0;for(let f=0;f<=l;f++)t.readBits(1)||t.readBits(1);o=n[a]}else{let l=d(t),f=d(t);for(let c=0;c<l;c++)d(t),t.readBits(1);for(let c=0;c<f;c++)d(t),t.readBits(1);o=l+f}return o},Ut=(t,e)=>{let r=2,n=2,o=2,s=0,a=0,l={num:1,den:1};if(t.readBits(1)){let f=t.readBits(8);if(f===255)l={num:t.readBits(16),den:t.readBits(16)};else{let c=ot[f];c&&(l=c)}}return t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),s=t.readBits(1),t.readBits(1)&&(r=t.readBits(8),n=t.readBits(8),o=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)&&Ot(t,!0,e)),t.readBits(1)&&(t.readBits(1),t.readBits(1),t.readBits(1),a=d(t),d(t),d(t),d(t),d(t)),{pixelAspectRatio:l,colourPrimaries:r,transferCharacteristics:n,matrixCoefficients:o,fullRangeFlag:s,minSpatialSegmentationIdc:a}},Ot=(t,e,r)=>{let n=!1,o=!1,s=!1;e&&(n=t.readBits(1)===1,o=t.readBits(1)===1,(n||o)&&(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<=r;a++){let l=t.readBits(1)===1,f=!0;l||(f=t.readBits(1)===1);let c=!1;f?d(t):c=t.readBits(1)===1;let u=1;c||(u=d(t)+1),n&&rt(t,u,s),o&&rt(t,u,s)}},rt=(t,e,r)=>{for(let n=0;n<e;n++)d(t),d(t),r&&(d(t),d(t)),t.readBits(1)},at=t=>{let e=[];e.push(t.configurationVersion),e.push((t.generalProfileSpace&3)<<6|(t.generalTierFlag&1)<<5|t.generalProfileIdc&31),e.push(t.generalProfileCompatibilityFlags>>>24&255),e.push(t.generalProfileCompatibilityFlags>>>16&255),e.push(t.generalProfileCompatibilityFlags>>>8&255),e.push(t.generalProfileCompatibilityFlags&255),e.push(...t.generalConstraintIndicatorFlags),e.push(t.generalLevelIdc&255),e.push(240|t.minSpatialSegmentationIdc>>8&15),e.push(t.minSpatialSegmentationIdc&255),e.push(252|t.parallelismType&3),e.push(252|t.chromaFormatIdc&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.avgFrameRate>>8&255),e.push(t.avgFrameRate&255),e.push((t.constantFrameRate&3)<<6|(t.numTemporalLayers&7)<<3|(t.temporalIdNested&1)<<2|t.lengthSizeMinusOne&3),e.push(t.arrays.length&255);for(let r of t.arrays){e.push((r.arrayCompleteness&1)<<7|0|r.nalUnitType&63),e.push(r.nalUnits.length>>8&255),e.push(r.nalUnits.length&255);for(let n of r.nalUnits){e.push(n.length>>8&255),e.push(n.length&255);for(let o=0;o<n.length;o++)e.push(n[o])}}return new Uint8Array(e)};var Dt={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}},ct=t=>{let e=new q(t);if(e.readBits(2)!==2)return null;let n=e.readBits(1),s=(e.readBits(1)<<1)+n;if(s===3&&e.skipBits(1),e.readBits(1)===1||e.readBits(1)!==0||(e.skipBits(2),e.readBits(24)!==4817730))return null;let c=8;s>=2&&(c=e.readBits(1)?12:10);let u=e.readBits(3),h=0,E=0;if(u!==7)if(E=e.readBits(1),s===1||s===3){let M=e.readBits(1),U=e.readBits(1);h=!M&&!U?3:M&&!U?2:1,e.skipBits(1)}else h=1;else h=3,E=1;let R=e.readBits(16),g=e.readBits(16),x=R+1,C=g+1,S=x*C,F=te(ee).level;for(let V of ee)if(S<=V.maxPictureSize){F=V.level;break}let y=Dt[u],P=y?.colourPrimaries??2,w=y?.transferCharacteristics??2,B=y?.matrixCoefficients??2;return{profile:s,level:F,bitDepth:c,chromaSubsampling:h,videoFullRangeFlag:E,colourPrimaries:P,transferCharacteristics:w,matrixCoefficients:B}};var Lt=function*(t){let e=new q(t),r=()=>{let n=0;for(let o=0;o<8;o++){let s=e.readAlignedByte();if(n+=(s&127)*2**(o*7),!(s&128))break;if(o===7&&s&128)return null}return n>2**32-1?null:n};for(;e.getBitsLeft()>=8;){e.skipBits(1);let n=e.readBits(4),o=e.readBits(1),s=e.readBits(1);e.skipBits(1),o&&e.skipBits(8);let a;if(s){let l=r();if(l===null)return;a=l}else a=Math.floor(e.getBitsLeft()/8);m(e.pos%8===0),yield{type:n,data:t.subarray(e.pos/8,e.pos/8+a)},e.skipBits(a*8)}},lt=t=>{for(let{type:e,data:r}of Lt(t)){if(e!==1)continue;let n=new q(r),o=n.readBits(3),s=n.readBits(1),a=n.readBits(1),l=0,f=0,c=0;if(a)l=n.readBits(5);else{let Y=n.readBits(1),k=0;if(Y){if(n.skipBits(32),n.skipBits(32),n.readBits(1)){let N=0;for(;N<32&&!n.readBits(1);)N++;N<32&&n.skipBits(N)}k=n.readBits(1),k&&(c=n.readBits(5),n.skipBits(32),n.skipBits(5),n.skipBits(5))}let v=n.readBits(1),z=n.readBits(5);for(let D=0;D<=z;D++){n.skipBits(12);let N=n.readBits(5);if(D===0&&(l=N),N>7){let T=n.readBits(1);D===0&&(f=T)}if(k&&n.readBits(1)){let O=c+1;n.skipBits(O),n.skipBits(O),n.skipBits(1)}v&&n.readBits(1)&&n.skipBits(4)}}let u=n.readBits(4),h=n.readBits(4),E=u+1;n.skipBits(E);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 Y=n.readBits(1);Y&&(n.skipBits(1),n.skipBits(1));let k=n.readBits(1),v=0;k?v=2:v=n.readBits(1),v>0&&(n.readBits(1)||n.skipBits(1)),Y&&n.skipBits(3)}n.skipBits(1),n.skipBits(1),n.skipBits(1);let x=n.readBits(1),C=8;o===2&&x?C=n.readBits(1)?12:10:o<=2&&(C=x?10:8);let S=0;o!==1&&(S=n.readBits(1));let F=2,y=2,P=2;n.readBits(1)&&(F=n.readBits(8),y=n.readBits(8),P=n.readBits(8));let B=0,V=1,M=1,U=0;return S?B=n.readBits(1):F===1&&y===13&&P===0?(B=1,V=0,M=0):(B=n.readBits(1),o===0?(V=1,M=1):o===1?(V=0,M=0):C===12?(V=n.readBits(1),M=V?n.readBits(1):0):(V=1,M=0),V&&M&&(U=n.readBits(2))),{profile:o,level:l,tier:f,bitDepth:C,monochrome:S,chromaSubsamplingX:V,chromaSubsamplingY:M,chromaSamplePosition:U,videoFullRangeFlag:B,colourPrimaries:F,transferCharacteristics:y,matrixCoefficients:P}}return null};var rn=[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 nn=new Uint8Array([5,4,65,67,45,51]),on=new Uint8Array([5,4,69,65,67,51]);var Wt={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},pe=class extends Ht{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(r,n){return n.bitrateMode==="quantizer"?r==="avc"||r==="hevc"||r==="vp9"||r==="av1":r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1"||r==="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 r=Q[this.codec];m(r!==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(r)},o=null;if(this.codec==="vp9"&&this.config.alpha==="keep")o=A.Codec.findEncoderByName(A.FF_ENCODER_LIBVPX_VP9)??A.Codec.findEncoder(r);else if(this.config.hardwareAcceleration==="prefer-software")o=n();else{let s=await Ue(r);s&&this.config.bitrateMode==="quantizer"&&!s.name?.endsWith("_nvenc")&&(s=null),o=s??n()}if(!o)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=o,this.config.bitrateMode!=="quantizer"&&await this.createCodecContext()}async createCodecContext(){m(this.codecContext===null);let r=new A.CodecContext;r.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 o=ue({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});r.width=this.config.width,r.height=this.config.height,r.pixelFormat=n,r.timeBase=new A.Rational(1,1e6),r.gopSize=60,r.framerate=new A.Rational(Math.round(this.config.framerate??0)||30,1),r.bitRate=this.config.bitrateMode==="quantizer"?0n:BigInt(this.config.bitrate??new zt("medium")._toVideoBitrate(this.codec,this.config.width,this.config.height)),r.sampleAspectRatio=new A.Rational(o.num,o.den),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let s=this.config.latencyMode==="realtime";if(this.avCodec.name==="libx264"?s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast")):this.avCodec.name==="libx265"?(r.setOption("x265-params","log-level=error"),s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(s&&r.setOption("deadline","realtime"),r.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(r.setOption("deadline","realtime"),s?r.setOption("cpu-used","8"):r.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"?(process.env.SVT_LOG="1",s&&r.setOption("preset","12")):(this.avCodec.name==="h264_nvenc"||this.avCodec.name==="hevc_nvenc")&&r.setOption("forced-idr","1"),this.config.bitrateMode==="quantizer"){m(this.quantizer!==null);let l;if(this.avCodec.name==="libaom-av1"||this.avCodec.name==="libsvtav1"?l=Math.round(this.quantizer/4):l=this.quantizer,this.avCodec.name==="libx264"||this.avCodec.name==="libx265")r.setOption("qp",String(l));else if(this.avCodec.name==="libvpx-vp9"||this.avCodec.name==="libaom-av1")r.setOption("crf",String(l));else if(this.avCodec.name==="libsvtav1")r.setOption("qp",String(l));else if(this.avCodec.name==="librav1e")r.setOption("qp",String(l));else if(this.avCodec.name?.endsWith("_nvenc"))r.setOption("rc","constqp"),r.setOption("qp",String(l));else throw new Error(`Encoder '${this.avCodec.name}' cannot be used for quantizer-based encoding.`);r.qMin=l,r.qMax=l}if(this.codec==="prores"){let l=Wt[this.config.codec];m(l!==void 0),r.setOption("profile",String(l))}let a=await r.open2();A.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=r}async encode(r,n){if(this.config.bitrateMode==="quantizer"){let c;if(this.codec==="avc"?c=n.avc?.quantizer:this.codec==="hevc"?c=n.hevc?.quantizer:this.codec==="vp9"?c=n.vp9?.quantizer:c=n.av1?.quantizer,m(c!=null),this.codecContext!==null&&c!==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=c}if(this.codecContext===null&&await this.createCodecContext(),m(this.codecContext),r._data instanceof W)this.frame.unref(),this.frame.ref(r._data.frame);else{if(r.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await se(r,this.frame,this.lastBuffer)}let o=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 c=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(c!==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=c;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),o=this.dstFrame}o.pts=BigInt(r.microsecondTimestamp),o.duration=BigInt(r.microsecondDuration),o.timeBase=new A.Rational(1,1e6),o.pictType=n?.keyFrame?A.AV_PICTURE_TYPE_I:A.AV_PICTURE_TYPE_NONE,o.keyFrame=n?.keyFrame?1:0;let a=re(this.preciseTimings,r.microsecondTimestamp,c=>c.microsecondTimestamp),l=a!==-1?this.preciseTimings[a]:null;l&&l.microsecondTimestamp===r.microsecondTimestamp?(l.timestamp!==r.timestamp&&(l.timestampIsValid=!1),l.duration!==r.duration&&(l.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let f=await this.codecContext.sendFrame(o);for(A.FFmpegError.throwIfError(f,"Send frame");;){let c=await this.codecContext.receivePacket(this.packet);if(c===A.AVERROR_EAGAIN||c===A.AVERROR_EOF)break;this.receivePacket(c)}}receivePacket(r){if(m(this.codecContext),A.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let n=H(this.packet.data),o=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=re(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),l=a!==-1?this.preciseTimings[a]:null;l&&l.microsecondTimestamp===Number(this.packet.pts)&&(l.timestampIsValid&&(o=l.timestamp),l.durationIsValid&&(s=l.duration));let f={},c=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 C=nt(this.packet.data);if(!C)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=it(C)}else{let C=st(this.packet.data);if(!C)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=at(C)}c=ne({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 C=[];for(let w of me(n))if(this.codec==="avc"){let B=Pe(n[w.offset]);B!==7&&B!==8&&B!==13&&C.push(w)}else{let B=fe(n[w.offset]);B!==33&&B!==34&&B!==32&&C.push(w)}let S=0;for(let w of C)S+=4+w.length;let F=new Uint8Array(S),y=new DataView(F.buffer),P=0;for(let w of C){let B=w.length;y.setUint32(P,B,!1),P+=4,F.set(n.subarray(w.offset,w.offset+w.length),P),P+=w.length}n=F}}else if(this.codec==="vp8")this.packetEmitted||(c=ne({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=ct(n);c=ne({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=lt(n);c=ne({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||(c=ne({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={},E=this.packet.getSideData(A.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);E&&(h.alpha=H(E).subarray(8));let R=new qt(n,this.packet.isKeyframe?"key":"delta",o,s,void 0,void 0,h);c!==null&&(f.decoderConfig={codec:c,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:ae(this.codecContext.colorPrimaries),matrix:le(this.codecContext.colorSpace),transfer:ce(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 r=await this.codecContext.sendFrame(null);for(A.FFmpegError.throwIfError(r,"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 Gt,CustomAudioDecoder as Yt}from"mediabunny";import*as I from"node-av";import{AudioSampleResource as Xt}from"mediabunny";import*as ie from"node-av";var $=class extends Xt{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof ie.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==ie.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=ze(this.frame.format);if(e===null){let r=ie.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${r} (${this.frame.format})`)}return e}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(e){return m(this.frame.data&&e<this.frame.data.length),H(this.frame.data[e])}},he=(t,e)=>{e.format=qe(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=J(t.numberOfChannels),e.allocBuffer(),m(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var ge=class extends Yt{constructor(){super(...arguments);this.codecContext=null}static supports(r,n){return r==="aac"||r==="opus"||r==="mp3"||r==="vorbis"||r==="flac"||r==="ac3"||r==="eac3"||r==="dts"}async init(){this.frame=new I.Frame,this.frame.alloc(),this.packet=new I.Packet,this.packet.alloc();let r=Q[this.codec];m(r!==void 0);let n=I.Codec.findDecoder(r);if(n===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let o=new I.CodecContext;o.allocContext3(n),o.sampleRate=this.config.sampleRate,o.channelLayout=J(this.config.numberOfChannels),o.timeBase=new I.Rational(1,this.config.sampleRate),o.codecType=I.AVMEDIA_TYPE_AUDIO,o.codecId=r,o.extraData=this.config.description?Buffer.from(H(this.config.description)):null;let s=await o.open2();I.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=o}async decode(r){m(this.codecContext),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.packet.dts=I.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(r.duration*this.config.sampleRate));let n=await this.codecContext.sendPacket(this.packet);for(I.FFmpegError.throwIfError(n,"Send packet"),this.packet.unref();;){let o=await this.codecContext.receiveFrame(this.frame);if(o===I.AVERROR_EAGAIN||o===I.AVERROR_EOF)break;this.receiveFrame(o)}}receiveFrame(r){I.FFmpegError.throwIfError(r,"Receive frame");let n=this.frame.clone();if(!n)throw new Error("Allocation failure during frame clone.");n.timeBase=new I.Rational(1,this.config.sampleRate),this.onSample(new Gt(new $(n)))}async flush(){m(this.codecContext);let r=await this.codecContext.sendPacket(null);for(I.FFmpegError.throwIfError(r,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===I.AVERROR_EAGAIN||n===I.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomAudioEncoder as Qt,Quality as $t,EncodedPacket as jt}from"mediabunny";import*as _ from"node-av";var dt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],ut=[1,2,4,5,6],Kt=16384,At=(t,e,r)=>{if(t<32e3||t>384e4)return!1;let n=r===6,o=r-(n?1:0),s=32*Math.ceil(Math.ceil(t*512/e)/32),a=132+(493+28*32)*o+(n?72:0);return s>=a&&s<=8*Kt};var Jt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Zt=[8e3,12e3,16e3,24e3,48e3],er=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],ft=[32e3,44100,48e3],Fe=1024,Ce=class extends Qt{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(r,n){let{numberOfChannels:o,sampleRate:s}=n;return r==="aac"&&o>=1&&o<=48&&Jt.includes(s)||r==="opus"&&o>=1&&o<=255&&Zt.includes(s)||r==="mp3"&&o>=1&&o<=2&&er.includes(s)||r==="vorbis"&&o>=1&&o<=255&&s<=2e5||r==="flac"&&o>=1&&o<=8&&s<=655350||r==="ac3"&&o>=1&&o<=6&&ft.includes(s)||r==="eac3"&&o>=1&&o<=16&&ft.includes(s)||r==="dts"&&ut.includes(o)&&dt.includes(s)&&At(mt(n,r),s,o)}async init(){this.frame=new _.Frame,this.frame.alloc(),this.packet=new _.Packet,this.packet.alloc();let r=Q[this.codec];m(r!==void 0);let n=_.Codec.findEncoder(r);if(!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=n,await this.createCodecContext()}async createCodecContext(){m(this.codecContext===null);let r=new _.CodecContext;r.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]),r.sampleRate=this.config.sampleRate,r.channelLayout=this.codec==="dts"?We(this.config.numberOfChannels):J(this.config.numberOfChannels),r.codecType=_.AVMEDIA_TYPE_AUDIO,r.codecId=Q[this.codec],r.sampleFormat=n,r.timeBase=new _.Rational(1,this.config.sampleRate),r.bitRate=BigInt(mt(this.config,this.codec)),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let o=this.codec==="dts"?_.Dictionary.fromObject({strict:-2}):null,s=await r.open2(this.avCodec,o);_.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=r}async encode(r){this.codecContext===null&&(await this.createCodecContext(),m(this.codecContext)),this.firstExpectedTimestamp??=r.timestamp,r._data instanceof $?(this.frame.unref(),this.frame.ref(r._data.frame)):he(r,this.frame),this.frame.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(r.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,l=J(this.frame.channels),f=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,l,this.frame.format,this.frame.sampleRate);_.FFmpegError.throwIfError(f,"allocSetOpts2");let c=this.resampler.init();_.FFmpegError.throwIfError(c,"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||Fe,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(){m(this.codecContext),m(this.resampler),m(this.dstFrame),m(this.nextResamplerPts!==null);let r=this.codecContext.frameSize||Fe;for(;!(this.resampler.getOutSamples(0)<r);)await this.resampler.convert(this.dstFrame.data,r,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(r)}async sendFrameAndReceivePackets(r){m(this.codecContext);let n=await this.codecContext.sendFrame(r);for(_.FFmpegError.throwIfError(n,"Send frame");;){let o=await this.codecContext.receivePacket(this.packet);if(o===_.AVERROR_EAGAIN||o===_.AVERROR_EOF)break;this.receivePacket(o)}}receivePacket(r){if(m(this.codecContext),m(this.firstExpectedTimestamp!==null),_.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let n=Number(this.packet.pts)/this.codecContext.sampleRate,o=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,c=this.codecContext.extraData?H(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!c)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let h=je(c);this.adtsHeaderTemplate=Je(h),c=void 0}}else if(this.codec==="opus"){if(!c)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!c)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!c)throw new Error("Extradata expected for FLAC.");c=new Uint8Array([102,76,97,67,128,0,0,c.byteLength,...c])}a={decoderConfig:{codec:f,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:c}}}if(this.adtsHeaderTemplate){let f=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,f);let c=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);c.set(this.adtsHeaderTemplate.header,0),c.set(s,this.adtsHeaderTemplate.header.byteLength),s=c}n+=this.outputTimestampOffset;let l=new jt(s,"key",n,o);this.packetEmitted=!0,this.onPacket(l,a)}async flush(){if(this.codecContext){e:if(this.resampler){m(this.resamplerInputSampleRate!==null);let r=this.resampler.getOutSamples(0);if(r===0)break e;let n=this.codecContext.frameSize||Fe;m(r<n);let o=Math.ceil((n-r)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(o),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()}},mt=(t,e)=>t.bitrate??new $t("medium")._toAudioBitrate(e)??0;import{registerProresDecoder as ir}from"@mediabunny/prores";var bt=Symbol.for("@mediabunny/server loaded");globalThis[bt]&&rr._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[bt]=!0;var Ct=!1,K={},Zn=(t={})=>{if(typeof t!="object"||!t)throw new TypeError("options must be an object.");if(t.hardwareContext!=null&&!(t.hardwareContext instanceof X.HardwareContext||typeof t.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");Ct||(Ct=!0,K=t,X.Log.setLevel(X.AV_LOG_ERROR),pt(Ae),ir(),ht(pe),pt(ge),ht(Ce),nr(Qe))},ei=async(t,e)=>{if(!(t instanceof gt)&&!(t instanceof tr))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(e instanceof X.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t instanceof gt){if(t._data instanceof W)e.unref(),e.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await se(t,e,null)}e.pts=BigInt(t.microsecondTimestamp),e.duration=BigInt(t.microsecondDuration),e.timeBase=new X.Rational(1,1e6)}else t._data instanceof $?(e.unref(),e.ref(t._data.frame)):he(t,e),e.timeBase=new X.Rational(1,t.sampleRate),e.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),e.duration=BigInt(t.numberOfFrames)};export{$ as AvFrameAudioSampleResource,W as AvFrameVideoSampleResource,K as _serverOptions,Zn as registerMediabunnyServer,ei as toAvFrame};
@@ -524,6 +524,8 @@ var assertNever = (x) => {
524
524
  throw new Error(`Unexpected value: ${x}`);
525
525
  };
526
526
  var SECOND_TO_MICROSECOND_FACTOR = 1e6 * (1 + Number.EPSILON);
527
+ var NativePromiseConstructor = (async () => {
528
+ })().constructor;
527
529
  var simplifyRational = (rational) => {
528
530
  assert(Number.isInteger(rational.num));
529
531
  assert(Number.isInteger(rational.den));
@@ -1028,37 +1030,73 @@ var parseAacAudioSpecificConfig = (bytes) => {
1028
1030
  throw new TypeError("AAC description must be at least 2 bytes long.");
1029
1031
  }
1030
1032
  const bitstream = new Bitstream(bytes);
1031
- let objectType = bitstream.readBits(5);
1032
- if (objectType === 31) {
1033
- objectType = 32 + bitstream.readBits(6);
1034
- }
1035
- const frequencyIndex = bitstream.readBits(4);
1036
- let sampleRate = null;
1037
- if (frequencyIndex === 15) {
1038
- sampleRate = bitstream.readBits(24);
1039
- } else {
1040
- if (frequencyIndex < aacFrequencyTable.length) {
1041
- sampleRate = aacFrequencyTable[frequencyIndex];
1042
- }
1043
- }
1033
+ const objectType = readAacObjectType(bitstream);
1034
+ const { frequencyIndex, sampleRate } = readAacSamplingFrequency(bitstream);
1044
1035
  const channelConfiguration = bitstream.readBits(4);
1045
1036
  let numberOfChannels = null;
1046
1037
  if (channelConfiguration >= 1 && channelConfiguration <= 7) {
1047
1038
  numberOfChannels = aacChannelMap[channelConfiguration];
1048
1039
  }
1040
+ let coreObjectType = objectType;
1041
+ let psPresent = false;
1042
+ let outputSampleRate = sampleRate;
1043
+ if (objectType === 5 || objectType === 29) {
1044
+ psPresent = objectType === 29;
1045
+ outputSampleRate = readAacSamplingFrequency(bitstream).sampleRate;
1046
+ coreObjectType = readAacObjectType(bitstream);
1047
+ if (coreObjectType === 22) {
1048
+ bitstream.skipBits(4);
1049
+ }
1050
+ } else {
1051
+ while (bitstream.getBitsLeft() > 15) {
1052
+ const searchStart = bitstream.pos;
1053
+ if (bitstream.readBits(11) !== 695) {
1054
+ bitstream.pos = searchStart + 1;
1055
+ continue;
1056
+ }
1057
+ if (readAacObjectType(bitstream) === 5 && bitstream.readBits(1)) {
1058
+ outputSampleRate = readAacSamplingFrequency(bitstream).sampleRate;
1059
+ if (bitstream.getBitsLeft() > 11 && bitstream.readBits(11) === 1352) {
1060
+ psPresent = !!bitstream.readBits(1);
1061
+ }
1062
+ }
1063
+ break;
1064
+ }
1065
+ }
1066
+ if (numberOfChannels !== null && numberOfChannels > 1) {
1067
+ psPresent = false;
1068
+ }
1049
1069
  return {
1050
1070
  objectType,
1071
+ coreObjectType,
1051
1072
  frequencyIndex,
1052
- sampleRate,
1053
1073
  channelConfiguration,
1054
- numberOfChannels
1074
+ outputSampleRate,
1075
+ outputNumberOfChannels: psPresent && numberOfChannels === 1 ? 2 : numberOfChannels
1076
+ };
1077
+ };
1078
+ var readAacObjectType = (bitstream) => {
1079
+ const objectType = bitstream.readBits(5);
1080
+ return objectType === 31 ? 32 + bitstream.readBits(6) : objectType;
1081
+ };
1082
+ var readAacSamplingFrequency = (bitstream) => {
1083
+ const frequencyIndex = bitstream.readBits(4);
1084
+ if (frequencyIndex === 15) {
1085
+ return {
1086
+ frequencyIndex,
1087
+ sampleRate: bitstream.readBits(24)
1088
+ };
1089
+ }
1090
+ return {
1091
+ frequencyIndex,
1092
+ sampleRate: frequencyIndex < aacFrequencyTable.length ? aacFrequencyTable[frequencyIndex] : null
1055
1093
  };
1056
1094
  };
1057
1095
  var buildAdtsHeaderTemplate = (config) => {
1058
1096
  const header = new Uint8Array(7);
1059
1097
  const bitstream = new Bitstream(header);
1060
- const { objectType, frequencyIndex, channelConfiguration } = config;
1061
- const profile = objectType - 1;
1098
+ const { coreObjectType, frequencyIndex, channelConfiguration } = config;
1099
+ const profile = coreObjectType - 1;
1062
1100
  bitstream.writeBits(12, 4095);
1063
1101
  bitstream.writeBits(1, 0);
1064
1102
  bitstream.writeBits(2, 0);
@@ -2237,6 +2275,20 @@ var serializeHevcDecoderConfigurationRecord = (record) => {
2237
2275
  }
2238
2276
  return new Uint8Array(bytes);
2239
2277
  };
2278
+ var VP9_COLOR_SPACE_TABLE = {
2279
+ 1: { colourPrimaries: 5, transferCharacteristics: 6, matrixCoefficients: 5 },
2280
+ // CS_BT_601
2281
+ 2: { colourPrimaries: 1, transferCharacteristics: 1, matrixCoefficients: 1 },
2282
+ // CS_BT_709
2283
+ 3: { colourPrimaries: 6, transferCharacteristics: 6, matrixCoefficients: 6 },
2284
+ // CS_SMPTE_170
2285
+ 4: { colourPrimaries: 7, transferCharacteristics: 7, matrixCoefficients: 7 },
2286
+ // CS_SMPTE_240
2287
+ 5: { colourPrimaries: 9, transferCharacteristics: 14, matrixCoefficients: 9 },
2288
+ // CS_BT_2020
2289
+ 7: { colourPrimaries: 1, transferCharacteristics: 13, matrixCoefficients: 0 }
2290
+ // CS_RGB (sRGB)
2291
+ };
2240
2292
  var extractVp9CodecInfoFromPacket = (packet) => {
2241
2293
  const bitstream = new Bitstream(packet);
2242
2294
  const frameMarker = bitstream.readBits(2);
@@ -2297,9 +2349,10 @@ var extractVp9CodecInfoFromPacket = (packet) => {
2297
2349
  break;
2298
2350
  }
2299
2351
  }
2300
- const matrixCoefficients = colorSpace === 7 ? 0 : colorSpace === 2 ? 1 : colorSpace === 1 ? 6 : 2;
2301
- const colourPrimaries = colorSpace === 2 ? 1 : colorSpace === 1 ? 6 : 2;
2302
- const transferCharacteristics = colorSpace === 2 ? 1 : colorSpace === 1 ? 6 : 2;
2352
+ const colorSpaceValues = VP9_COLOR_SPACE_TABLE[colorSpace];
2353
+ const colourPrimaries = colorSpaceValues?.colourPrimaries ?? 2;
2354
+ const transferCharacteristics = colorSpaceValues?.transferCharacteristics ?? 2;
2355
+ const matrixCoefficients = colorSpaceValues?.matrixCoefficients ?? 2;
2303
2356
  return {
2304
2357
  profile,
2305
2358
  level,
@@ -2317,7 +2370,7 @@ var iterateAv1PacketObus = function* (packet) {
2317
2370
  let value = 0;
2318
2371
  for (let i = 0; i < 8; i++) {
2319
2372
  const byte = bitstream.readAlignedByte();
2320
- value |= (byte & 127) << i * 7;
2373
+ value += (byte & 127) * 2 ** (i * 7);
2321
2374
  if (!(byte & 128)) {
2322
2375
  break;
2323
2376
  }
@@ -2325,7 +2378,7 @@ var iterateAv1PacketObus = function* (packet) {
2325
2378
  return null;
2326
2379
  }
2327
2380
  }
2328
- if (value >= 2 ** 32 - 1) {
2381
+ if (value > 2 ** 32 - 1) {
2329
2382
  return null;
2330
2383
  }
2331
2384
  return value;
@@ -2371,21 +2424,29 @@ var extractAv1CodecInfoFromPacket = (packet) => {
2371
2424
  seqLevel = bitstream.readBits(5);
2372
2425
  } else {
2373
2426
  const timingInfoPresentFlag = bitstream.readBits(1);
2427
+ let decoderModelInfoPresentFlag = 0;
2374
2428
  if (timingInfoPresentFlag) {
2375
2429
  bitstream.skipBits(32);
2376
2430
  bitstream.skipBits(32);
2377
2431
  const equalPictureInterval = bitstream.readBits(1);
2378
2432
  if (equalPictureInterval) {
2379
- return null;
2433
+ let leadingZeros = 0;
2434
+ while (leadingZeros < 32 && !bitstream.readBits(1)) {
2435
+ leadingZeros++;
2436
+ }
2437
+ if (leadingZeros < 32) {
2438
+ bitstream.skipBits(leadingZeros);
2439
+ }
2440
+ }
2441
+ decoderModelInfoPresentFlag = bitstream.readBits(1);
2442
+ if (decoderModelInfoPresentFlag) {
2443
+ bufferDelayLengthMinus1 = bitstream.readBits(5);
2444
+ bitstream.skipBits(32);
2445
+ bitstream.skipBits(5);
2446
+ bitstream.skipBits(5);
2380
2447
  }
2381
2448
  }
2382
- const decoderModelInfoPresentFlag = bitstream.readBits(1);
2383
- if (decoderModelInfoPresentFlag) {
2384
- bufferDelayLengthMinus1 = bitstream.readBits(5);
2385
- bitstream.skipBits(32);
2386
- bitstream.skipBits(5);
2387
- bitstream.skipBits(5);
2388
- }
2449
+ const initialDisplayDelayPresentFlag = bitstream.readBits(1);
2389
2450
  const operatingPointsCntMinus1 = bitstream.readBits(5);
2390
2451
  for (let i = 0; i <= operatingPointsCntMinus1; i++) {
2391
2452
  bitstream.skipBits(12);
@@ -2408,9 +2469,11 @@ var extractAv1CodecInfoFromPacket = (packet) => {
2408
2469
  bitstream.skipBits(1);
2409
2470
  }
2410
2471
  }
2411
- const initialDisplayDelayPresentFlag = bitstream.readBits(1);
2412
2472
  if (initialDisplayDelayPresentFlag) {
2413
- bitstream.skipBits(4);
2473
+ const initialDisplayDelayPresentForThisOp = bitstream.readBits(1);
2474
+ if (initialDisplayDelayPresentForThisOp) {
2475
+ bitstream.skipBits(4);
2476
+ }
2414
2477
  }
2415
2478
  }
2416
2479
  }
@@ -2475,10 +2538,27 @@ var extractAv1CodecInfoFromPacket = (packet) => {
2475
2538
  if (seqProfile !== 1) {
2476
2539
  monochrome = bitstream.readBits(1);
2477
2540
  }
2541
+ let colourPrimaries = 2;
2542
+ let transferCharacteristics = 2;
2543
+ let matrixCoefficients = 2;
2544
+ const colorDescriptionPresentFlag = bitstream.readBits(1);
2545
+ if (colorDescriptionPresentFlag) {
2546
+ colourPrimaries = bitstream.readBits(8);
2547
+ transferCharacteristics = bitstream.readBits(8);
2548
+ matrixCoefficients = bitstream.readBits(8);
2549
+ }
2550
+ let videoFullRangeFlag = 0;
2478
2551
  let chromaSubsamplingX = 1;
2479
2552
  let chromaSubsamplingY = 1;
2480
2553
  let chromaSamplePosition = 0;
2481
- if (!monochrome) {
2554
+ if (monochrome) {
2555
+ videoFullRangeFlag = bitstream.readBits(1);
2556
+ } else if (colourPrimaries === 1 && transferCharacteristics === 13 && matrixCoefficients === 0) {
2557
+ videoFullRangeFlag = 1;
2558
+ chromaSubsamplingX = 0;
2559
+ chromaSubsamplingY = 0;
2560
+ } else {
2561
+ videoFullRangeFlag = bitstream.readBits(1);
2482
2562
  if (seqProfile === 0) {
2483
2563
  chromaSubsamplingX = 1;
2484
2564
  chromaSubsamplingY = 1;
@@ -2488,9 +2568,10 @@ var extractAv1CodecInfoFromPacket = (packet) => {
2488
2568
  } else {
2489
2569
  if (bitDepth === 12) {
2490
2570
  chromaSubsamplingX = bitstream.readBits(1);
2491
- if (chromaSubsamplingX) {
2492
- chromaSubsamplingY = bitstream.readBits(1);
2493
- }
2571
+ chromaSubsamplingY = chromaSubsamplingX ? bitstream.readBits(1) : 0;
2572
+ } else {
2573
+ chromaSubsamplingX = 1;
2574
+ chromaSubsamplingY = 0;
2494
2575
  }
2495
2576
  }
2496
2577
  if (chromaSubsamplingX && chromaSubsamplingY) {
@@ -2505,7 +2586,11 @@ var extractAv1CodecInfoFromPacket = (packet) => {
2505
2586
  monochrome,
2506
2587
  chromaSubsamplingX,
2507
2588
  chromaSubsamplingY,
2508
- chromaSamplePosition
2589
+ chromaSamplePosition,
2590
+ videoFullRangeFlag,
2591
+ colourPrimaries,
2592
+ transferCharacteristics,
2593
+ matrixCoefficients
2509
2594
  };
2510
2595
  }
2511
2596
  return null;