@mediabunny/server 1.56.0 → 1.56.2

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 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};
8
+ import{AudioSample as ir,Logging as or,registerDecoder as Ct,registerEncoder as bt,registerVideoSampleTransformer as sr,VideoSample as xt}from"mediabunny";import*as X from"node-av";import{CustomVideoDecoder as It,VideoSample as wt}from"mediabunny";import*as C from"node-av";import*as o from"node-av";var j={avc:o.AV_CODEC_ID_H264,hevc:o.AV_CODEC_ID_HEVC,vp8:o.AV_CODEC_ID_VP8,vp9:o.AV_CODEC_ID_VP9,av1:o.AV_CODEC_ID_AV1,prores:o.AV_CODEC_ID_PRORES,aac:o.AV_CODEC_ID_AAC,opus:o.AV_CODEC_ID_OPUS,mp3:o.AV_CODEC_ID_MP3,vorbis:o.AV_CODEC_ID_VORBIS,flac:o.AV_CODEC_ID_FLAC,ac3:o.AV_CODEC_ID_AC3,eac3:o.AV_CODEC_ID_EAC3,dts:o.AV_CODEC_ID_DTS},Se,Ue=()=>$.hardwareContext!==void 0&&typeof $.hardwareContext!="function"?$.hardwareContext:(Se===void 0&&(Se=o.HardwareContext.auto()),Se),Oe=t=>{if(t!==null&&!(t instanceof o.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},ye=new Map,De=async t=>{if(typeof $.hardwareContext=="function"){let r=await $.hardwareContext(t);return Oe(r),r?.getDecoderCodec(t)??null}if(!ye.has(t)){let r=Ue();ye.set(t,r?.getDecoderCodec(t)??null)}return ye.get(t)},Ee=new Map,Le=async t=>{if(typeof $.hardwareContext=="function"){let r=await $.hardwareContext(t);return Oe(r),r?.getEncoderCodec(t)??null}if(!Ee.has(t)){let r=Ue();Ee.set(t,r?.getEncoderCodec(t)??null)}return Ee.get(t)},He=t=>{switch(t){case"bt709":return o.AVCOL_PRI_BT709;case"bt470bg":return o.AVCOL_PRI_BT470BG;case"smpte170m":return o.AVCOL_PRI_SMPTE170M;case"bt2020":return o.AVCOL_PRI_BT2020;case"smpte432":return o.AVCOL_PRI_SMPTE432}return null},ue=t=>{switch(t){case o.AVCOL_PRI_BT709:return"bt709";case o.AVCOL_PRI_BT470BG:return"bt470bg";case o.AVCOL_PRI_SMPTE170M:return"smpte170m";case o.AVCOL_PRI_BT2020:return"bt2020";case o.AVCOL_PRI_SMPTE432:return"smpte432"}return null},ze=t=>{switch(t){case"bt709":return o.AVCOL_TRC_BT709;case"smpte170m":return o.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return o.AVCOL_TRC_IEC61966_2_1;case"linear":return o.AVCOL_TRC_LINEAR;case"pq":return o.AVCOL_TRC_SMPTE2084;case"hlg":return o.AVCOL_TRC_ARIB_STD_B67}return null},Ae=t=>{switch(t){case o.AVCOL_TRC_BT709:return"bt709";case o.AVCOL_TRC_SMPTE170M:return"smpte170m";case o.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case o.AVCOL_TRC_LINEAR:return"linear";case o.AVCOL_TRC_SMPTE2084:return"pq";case o.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},qe=t=>{switch(t){case"rgb":return o.AVCOL_SPC_RGB;case"bt709":return o.AVCOL_SPC_BT709;case"bt470bg":return o.AVCOL_SPC_BT470BG;case"smpte170m":return o.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return o.AVCOL_SPC_BT2020_NCL}return null},fe=t=>{switch(t){case o.AVCOL_SPC_RGB:return"rgb";case o.AVCOL_SPC_BT709:return"bt709";case o.AVCOL_SPC_BT470BG:return"bt470bg";case o.AVCOL_SPC_SMPTE170M:return"smpte170m";case o.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},We=t=>{switch(t){case o.AV_PIX_FMT_YUV420P:return"I420";case o.AV_PIX_FMT_YUVJ420P:return"I420";case o.AV_PIX_FMT_YUV420P10LE:return"I420P10";case o.AV_PIX_FMT_YUV420P12LE:return"I420P12";case o.AV_PIX_FMT_YUVA420P:return"I420A";case o.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case o.AV_PIX_FMT_YUV422P:return"I422";case o.AV_PIX_FMT_YUVJ422P:return"I422";case o.AV_PIX_FMT_YUV422P10LE:return"I422P10";case o.AV_PIX_FMT_YUV422P12LE:return"I422P12";case o.AV_PIX_FMT_YUVA422P:return"I422A";case o.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case o.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case o.AV_PIX_FMT_YUV444P:return"I444";case o.AV_PIX_FMT_YUVJ444P:return"I444";case o.AV_PIX_FMT_YUV444P10LE:return"I444P10";case o.AV_PIX_FMT_YUV444P12LE:return"I444P12";case o.AV_PIX_FMT_YUVA444P:return"I444A";case o.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case o.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case o.AV_PIX_FMT_NV12:return"NV12";case o.AV_PIX_FMT_RGBA:return"RGBA";case o.AV_PIX_FMT_RGB0:return"RGBX";case o.AV_PIX_FMT_BGRA:return"BGRA";case o.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},Be=t=>{switch(t){case"I420":return o.AV_PIX_FMT_YUV420P;case"I420P10":return o.AV_PIX_FMT_YUV420P10LE;case"I420P12":return o.AV_PIX_FMT_YUV420P12LE;case"I420A":return o.AV_PIX_FMT_YUVA420P;case"I420AP10":return o.AV_PIX_FMT_YUVA420P10LE;case"I422":return o.AV_PIX_FMT_YUV422P;case"I422P10":return o.AV_PIX_FMT_YUV422P10LE;case"I422P12":return o.AV_PIX_FMT_YUV422P12LE;case"I422A":return o.AV_PIX_FMT_YUVA422P;case"I422AP10":return o.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return o.AV_PIX_FMT_YUVA422P12LE;case"I444":return o.AV_PIX_FMT_YUV444P;case"I444P10":return o.AV_PIX_FMT_YUV444P10LE;case"I444P12":return o.AV_PIX_FMT_YUV444P12LE;case"I444A":return o.AV_PIX_FMT_YUVA444P;case"I444AP10":return o.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return o.AV_PIX_FMT_YUVA444P12LE;case"NV12":return o.AV_PIX_FMT_NV12;case"RGBA":return o.AV_PIX_FMT_RGBA;case"RGBX":return o.AV_PIX_FMT_RGB0;case"BGRA":return o.AV_PIX_FMT_BGRA;case"BGRX":return o.AV_PIX_FMT_BGR0;default:return o.AV_PIX_FMT_NONE}},Xe=t=>{switch(t){case o.AV_SAMPLE_FMT_U8:return"u8";case o.AV_SAMPLE_FMT_S16:return"s16";case o.AV_SAMPLE_FMT_S32:return"s32";case o.AV_SAMPLE_FMT_FLT:return"f32";case o.AV_SAMPLE_FMT_U8P:return"u8-planar";case o.AV_SAMPLE_FMT_S16P:return"s16-planar";case o.AV_SAMPLE_FMT_S32P:return"s32-planar";case o.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},Ge=t=>{switch(t){case"u8":return o.AV_SAMPLE_FMT_U8;case"s16":return o.AV_SAMPLE_FMT_S16;case"s32":return o.AV_SAMPLE_FMT_S32;case"f32":return o.AV_SAMPLE_FMT_FLT;case"u8-planar":return o.AV_SAMPLE_FMT_U8P;case"s16-planar":return o.AV_SAMPLE_FMT_S16P;case"s32-planar":return o.AV_SAMPLE_FMT_S32P;case"f32-planar":return o.AV_SAMPLE_FMT_FLTP;default:return o.AV_SAMPLE_FMT_NONE}},re=t=>{switch(t){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return o.AV_CHANNEL_LAYOUT_QUAD;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return o.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}},St=0x603n,Ye=t=>{switch(t){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return{nbChannels:4,order:o.AV_CHANNEL_ORDER_NATIVE,mask:St};case 5:return o.AV_CHANNEL_LAYOUT_5POINT0;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1;default:return{nbChannels:t,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};var D=class D{constructor(){}static get level(){return D._level}static set level(r){if(r!==0&&r!==1&&r!==2&&r!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");D._level=r}static get _emitter(){return D._emitterInstance??=new me}static on(r,e,n){return D._emitter.on(r,e,n)}static _error(...r){D._emitter._emit("error",r),D._level>=1&&console.error(...r)}static _warn(...r){D._emitter._emit("warn",r),D._level>=2&&console.warn(...r)}static _info(...r){D._emitter._emit("info",r),D._level>=3&&console.info(...r)}};D._level=3,D._emitterInstance=null;var ne=D;function p(t){if(!t)throw new Error("Assertion failed.")}var oe=t=>t&&t[t.length-1];var d=t=>{let r=0;for(;t.readBits(1)===0&&r<32;)r++;if(r>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<r)-1+t.readBits(r)};var Y=t=>{let r=d(t);return(r&1)===0?-(r>>1):r+1>>1};var L=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Ie=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var Ke={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var Qe={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var $e={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var we=t=>[...t].map(r=>r.toString(16).padStart(2,"0")).join("");var Pe=t=>(t=t>>1&1431655765|(t&1431655765)<<1,t=t>>2&858993459|(t&858993459)<<2,t=t>>4&252645135|(t&252645135)<<4,t=t>>8&16711935|(t&16711935)<<8,t=t>>16&65535|(t&65535)<<16,t>>>0);var se=(t,r,e)=>{let n=0,i=t.length-1,s=-1;for(;n<=i;){let a=n+(i-n+1)/2|0;e(t[a])<=r?(s=a,n=a+1):i=a-1}return s};var Te=t=>{throw new Error(`Unexpected value: ${t}`)};var Ar=1e6*(1+Number.EPSILON);var fr=(async()=>{})().constructor;var pe=t=>{p(Number.isInteger(t.num)),p(Number.isInteger(t.den)),p(t.den!==0);let r=Math.abs(t.num),e=Math.abs(t.den);for(;e!==0;){let i=r%e;r=e,e=i}let n=r||1;return{num:t.num/n,den:t.den/n}};var me=class{constructor(){this._listeners=new Map}on(r,e,n){this._listeners.has(r)||this._listeners.set(r,new Set);let i={fn:e,once:n?.once??!1};return this._listeners.get(r).add(i),()=>{this._listeners.get(r)?.delete(i)}}_emit(...r){let[e,n]=r,i=this._listeners.get(e);if(i)for(let s of i){try{s.fn(n)}catch(a){console.error(a)}s.once&&i.delete(s)}}};import{VideoSampleResource as yt,VideoSampleColorSpace as Et,VideoSample as je}from"mediabunny";import*as m from"node-av";var Bt=new Set([m.AV_PIX_FMT_YUVJ411P,m.AV_PIX_FMT_YUVJ420P,m.AV_PIX_FMT_YUVJ422P,m.AV_PIX_FMT_YUVJ440P,m.AV_PIX_FMT_YUVJ444P]),W=class t extends yt{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(r){if(super(),!(r instanceof m.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(r.getMediaType()!==m.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=r}getFormat(){return We(this.frame.format)}getCodedWidth(){return this.frame.width}getCodedHeight(){return this.frame.height}getSquarePixelWidth(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?Math.round(this.frame.width*this.frame.sampleAspectRatio.num/this.frame.sampleAspectRatio.den):this.frame.width}getSquarePixelHeight(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?this.frame.height:Math.round(this.frame.height*this.frame.sampleAspectRatio.den/this.frame.sampleAspectRatio.num)}getColorSpace(){return new Et({primaries:ue(this.frame.colorPrimaries),transfer:Ae(this.frame.colorTrc),matrix:fe(this.frame.colorSpace),fullRange:this.frame.colorRange===m.AVCOL_RANGE_JPEG||Bt.has(this.frame.format)?!0:this.frame.colorRange===m.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return p(this.frame.data),this.frame.data.map((r,e)=>({data:L(r),stride:this.frame.linesize[e]}))}async toRgbSample(r,e){let n=this.frame.width,i=this.frame.height,s=new m.SoftwareScaleContext,a=this.frame.format,c=Be("RGBA");s.getContext(n,i,a,n,i,c,m.SWS_BILINEAR);let f=new m.Frame;f.width=n,f.height=i,f.format=c,f.alloc(),f.allocBuffer();let l=this.frame;try{await s.scaleFrame(f,l)}finally{s.freeContext()}return f.sampleAspectRatio=l.sampleAspectRatio,new je(new t(f),r)}},le=async(t,r,e)=>{p(t.format!==null),r.format=Be(t.format),r.width=t.codedWidth,r.height=t.codedHeight,r.sampleAspectRatio=new m.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),r.colorPrimaries=He(t.colorSpace.primaries??"unknown")??m.AVCOL_PRI_UNSPECIFIED,r.colorSpace=qe(t.colorSpace.matrix??"unknown")??m.AVCOL_SPC_UNSPECIFIED,r.colorTrc=ze(t.colorSpace.transfer??"unknown")??m.AVCOL_TRC_UNSPECIFIED,r.colorRange=t.colorSpace.fullRange===!1?m.AVCOL_RANGE_MPEG:t.colorSpace.fullRange===!0?m.AVCOL_RANGE_JPEG:m.AVCOL_RANGE_UNSPECIFIED;let n=t.allocationSize();return(!e||e.byteLength!==n)&&(e=Buffer.from({length:n})),await t.copyTo(e),r.fromBuffer(e),e},Je=async(t,r)=>{let e,n=!1;if(t._data instanceof W)e=t._data.frame;else{if(t.format===null)return null;e=new m.Frame,e.alloc(),n=!0,await le(t,e,null)}let i=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(i.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),i.push("setsar=1")),r.rotation===90?i.push("transpose=1"):r.rotation===180?i.push("transpose=1,transpose=1"):r.rotation===270&&i.push("transpose=2"),i.push(`crop=${Math.round(r.crop.width)}:${Math.round(r.crop.height)}:${Math.round(r.crop.left)}:${Math.round(r.crop.top)}`),r.fit==="fill"?i.push(`scale=${r.width}:${r.height}`):r.fit==="contain"?(i.push(`scale=${r.width}:${r.height}:force_original_aspect_ratio=decrease`),i.push(`pad=${r.width}:${r.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):r.fit==="cover"&&(i.push(`scale=${r.width}:${r.height}:force_original_aspect_ratio=increase`),i.push(`crop=${r.width}:${r.height}`)),i.push("setsar=1");let s=new m.FilterGraph;s.alloc();try{let a=`video_size=${e.width}x${e.height}:pix_fmt=${e.format}:time_base=1/1000000:pixel_aspect=${t.pixelAspectRatio.num}/${t.pixelAspectRatio.den}`,c=s.createFilter(m.Filter.getByName("buffer"),"src",a),f=s.createFilter(m.Filter.getByName("buffersink"),"sink");p(c&&f);let l=m.FilterInOut.createList([{name:"in",filterCtx:c,padIdx:0}]),u=m.FilterInOut.createList([{name:"out",filterCtx:f,padIdx:0}]),h=s.parsePtr(`[in]${i.join(",")}[out]`,u,l);m.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let _=await s.config();m.FFmpegError.throwIfError(_,"FilterGraph.config");let R=await c.buffersrcAddFrame(e);m.FFmpegError.throwIfError(R,"buffersrcAddFrame"),await c.buffersrcAddFrame(null);let g=new m.Frame;g.alloc();let x=await f.buffersinkGetFrame(g);return m.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new je(new W(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),n&&e.free()}};var he=class extends It{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(e,n){return e==="avc"||e==="hevc"||e==="vp8"||e==="vp9"||e==="av1"}async init(){this.frame=new C.Frame,this.frame.alloc(),this.packet=new C.Packet,this.packet.alloc()}async initCodecContext(e){p(this.codecContext===null);let n=j[this.codec];p(n!==void 0);let i;if(this.codec==="vp9"&&e.sideData.alpha?i=C.Codec.findDecoderByName(C.FF_DECODER_LIBVPX_VP9)??C.Codec.findDecoder(n):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?i=C.Codec.findDecoder(n):i=await De(n)??C.Codec.findDecoder(n),!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new C.CodecContext;s.allocContext3(i),this.pixelAspectRatio=pe({num:(this.config.displayAspectWidth??this.config.codedWidth??0)*(this.config.codedHeight??0),den:(this.config.displayAspectHeight??this.config.codedHeight??0)*(this.config.codedWidth??0)||1}),s.width=this.config.codedWidth??0,s.height=this.config.codedHeight??0,s.codecType=C.AVMEDIA_TYPE_VIDEO,s.codecId=n,s.extraData=this.config.description?Buffer.from(L(this.config.description)):null,s.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=C.Dictionary.fromObject({strict:C.FF_COMPLIANCE_STRICT}),c=await s.open2(i,a);C.FFmpegError.throwIfError(c,"Open codec context"),this.codecContext=s}async decode(e){if(this.codecContext===null&&await this.initCodecContext(e),p(this.codecContext),this.packet.isKeyframe=e.type==="key",this.packet.data=Buffer.from(e.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(e.microsecondTimestamp),this.packet.dts=C.AV_NOPTS_VALUE,this.packet.duration=BigInt(e.microsecondDuration),e.sideData.alpha){let a=Buffer.alloc(8+e.sideData.alpha.byteLength);a[7]=1,a.set(e.sideData.alpha,8),this.packet.addSideData(C.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let n=se(this.preciseTimings,e.microsecondTimestamp,a=>a.microsecondTimestamp),i=n!==-1?this.preciseTimings[n]:null;i&&i.microsecondTimestamp===e.microsecondTimestamp?(i.timestamp!==e.timestamp&&(i.timestampIsValid=!1),i.duration!==e.duration&&(i.durationIsValid=!1)):(this.preciseTimings.splice(n+1,0,{microsecondTimestamp:e.microsecondTimestamp,timestamp:e.timestamp,duration:e.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let s=await this.codecContext.sendPacket(this.packet);for(C.FFmpegError.throwIfError(s,"Send packet"),this.packet.unref();;){let a=await this.codecContext.receiveFrame(this.frame);if(a===C.AVERROR_EAGAIN||a===C.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(e){C.FFmpegError.throwIfError(e,"Receive frame"),this.frame.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let n=Number(this.frame.pts)/1e6,i=Number(this.frame.duration)/1e6,s=se(this.preciseTimings,Number(this.frame.pts),f=>f.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(n=a.timestamp),a.durationIsValid&&(i=a.duration));let c=this.frame.clone();if(!c)throw new Error("Frame clone allocation failed.");this.onSample(new wt(new W(c),{timestamp:n,duration:i}))}async flush(){if(!this.codecContext)return;let e=await this.codecContext.sendPacket(null);for(C.FFmpegError.throwIfError(e,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===C.AVERROR_EAGAIN||n===C.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomVideoEncoder as Wt,Quality as Xt,EncodedPacket as Gt}from"mediabunny";import*as A from"node-av";var z=class t{constructor(r){this.bytes=r;this.pos=0}seekToByte(r){this.pos=8*r}readBit(){let r=Math.floor(this.pos/8),e=this.bytes[r]??0,n=7-(this.pos&7),i=(e&1<<n)>>n;return this.pos++,i}readBits(r){if(r===1)return this.readBit();let e=0;for(let n=0;n<r;n++)e<<=1,e|=this.readBit();return e}writeBits(r,e){let n=this.pos+r;for(let i=this.pos;i<n;i++){let s=Math.floor(i/8),a=this.bytes[s],c=7-(i&7);a&=~(1<<c),a|=(e&1<<n-i-1)>>n-i-1<<c,this.bytes[s]=a}this.pos=n}copyBits(r,e){let n=0;for(n;n<r-7;n+=8)this.writeBits(8,e.readBits(8));let i=r-n;i>0&&this.writeBits(i,e.readBits(i))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let r=this.pos/8,e=this.bytes[r]??0;return this.pos+=8,e}skipBits(r){this.pos+=r}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let r=new t(this.bytes);return r.pos=this.pos,r}};var Ze=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Pt=[-1,1,2,3,4,5,6,8],et=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let r=new z(t),e=Re(r),{frequencyIndex:n,sampleRate:i}=Fe(r),s=r.readBits(4),a=null;s>=1&&s<=7&&(a=Pt[s]);let c=e,f=!1,l=i;if(e===5||e===29)f=e===29,l=Fe(r).sampleRate,c=Re(r),c===22&&r.skipBits(4);else for(;r.getBitsLeft()>15;){let u=r.pos;if(r.readBits(11)!==695){r.pos=u+1;continue}Re(r)===5&&r.readBits(1)&&(l=Fe(r).sampleRate,r.getBitsLeft()>11&&r.readBits(11)===1352&&(f=!!r.readBits(1)));break}return a!==null&&a>1&&(f=!1),{objectType:e,coreObjectType:c,frequencyIndex:n,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:f&&a===1?2:a}},Re=t=>{let r=t.readBits(5);return r===31?32+t.readBits(6):r},Fe=t=>{let r=t.readBits(4);return r===15?{frequencyIndex:r,sampleRate:t.readBits(24)}:{frequencyIndex:r,sampleRate:r<Ze.length?Ze[r]:null}};var tt=t=>{let r=new Uint8Array(7),e=new z(r),{coreObjectType:n,frequencyIndex:i,channelConfiguration:s}=t,a=n-1;return e.writeBits(12,4095),e.writeBits(1,0),e.writeBits(2,0),e.writeBits(1,1),e.writeBits(2,a),e.writeBits(4,i),e.writeBits(1,0),e.writeBits(3,s),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.skipBits(13),e.writeBits(11,2047),e.writeBits(2,0),{header:r,bitstream:e}};var Rt=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Ft=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],Lr=[...Ft,...Rt];var Ve=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}];var ie=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}];var rt=".01.01.01.01.00",nt=".0.110.01.01.01.0",Vt=["ap4x","ap4h","apch","apcn","apcs","apco"];var ae=t=>{let{codec:r,codecDescription:e,colorSpace:n,avcCodecInfo:i,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:c,proresFormat:f}=t;if(r==="avc"){if(p(t.avcType!==null),i){let l=new Uint8Array([i.avcProfileIndication,i.profileCompatibility,i.avcLevelIndication]);return`avc${t.avcType}.${we(l)}`}if(!e||e.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${t.avcType}.${we(e.subarray(1,4))}`}else if(r==="hevc"){let l,u,h,_,R,g;if(s)l=s.generalProfileSpace,u=s.generalProfileIdc,h=Pe(s.generalProfileCompatibilityFlags),_=s.generalTierFlag,R=s.generalLevelIdc,g=[...s.generalConstraintIndicatorFlags];else{if(!e||e.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let b=Ie(e),y=b.getUint8(1);l=y>>6&3,u=y&31,h=Pe(b.getUint32(2)),_=y>>5&1,R=b.getUint8(12),g=[];for(let E=0;E<6;E++)g.push(b.getUint8(6+E))}let x="hev1.";for(x+=["","A","B","C"][l]+u,x+=".",x+=h.toString(16).toUpperCase(),x+=".",x+=_===0?"L":"H",x+=R;g.length>0&&g[g.length-1]===0;)g.pop();return g.length>0&&(x+=".",x+=g.map(b=>b.toString(16).toUpperCase()).join(".")),x}else{if(r==="vp8")return"vp8";if(r==="vp9"){if(!a){let E=t.width*t.height,B=oe(ie).level;for(let T of ie)if(E<=T.maxPictureSize){B=T.level;break}return`vp09.00.${B.toString().padStart(2,"0")}.08`}let l=a.profile.toString().padStart(2,"0"),u=a.level.toString().padStart(2,"0"),h=a.bitDepth.toString().padStart(2,"0"),_=a.chromaSubsampling.toString().padStart(2,"0"),R=a.colourPrimaries.toString().padStart(2,"0"),g=a.transferCharacteristics.toString().padStart(2,"0"),x=a.matrixCoefficients.toString().padStart(2,"0"),b=a.videoFullRangeFlag.toString().padStart(2,"0"),y=`vp09.${l}.${u}.${h}.${_}`;return y+=`.${R}.${g}.${x}.${b}`,y.endsWith(rt)&&(y=y.slice(0,-rt.length)),y}else if(r==="av1"){if(!c){let T=t.width*t.height,w=oe(ie).level;for(let I of ie)if(T<=I.maxPictureSize){w=I.level;break}return`av01.0.${w.toString().padStart(2,"0")}M.08`}let l=c.profile,u=c.level.toString().padStart(2,"0"),h=c.tier?"H":"M",_=c.bitDepth.toString().padStart(2,"0"),R=c.monochrome?"1":"0",g=100*c.chromaSubsamplingX+10*c.chromaSubsamplingY+1*(c.chromaSubsamplingX&&c.chromaSubsamplingY?c.chromaSamplePosition:0),x=n?.primaries?Ke[n.primaries]:1,b=n?.transfer?Qe[n.transfer]:1,y=n?.matrix?$e[n.matrix]:1,E=n?.fullRange?1:0,B=`av01.${l}.${u}${h}.${_}`;return B+=`.${R}.${g.toString().padStart(3,"0")}`,B+=`.${x.toString().padStart(2,"0")}`,B+=`.${b.toString().padStart(2,"0")}`,B+=`.${y.toString().padStart(2,"0")}`,B+=`.${E}`,B.endsWith(nt)&&(B=B.slice(0,-nt.length)),B}else{if(r==="prores")return f??"apch";r!==null&&Te(r)}}throw new TypeError(`Unhandled codec '${r}'.`)};var Hr=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Vt];var Ce=function*(t){let r=0,e=-1;for(;r<t.length-2;){let n=t.indexOf(0,r);if(n===-1||n>=t.length-2)break;r=n;let i=0;if(r+3<t.length&&t[r+1]===0&&t[r+2]===0&&t[r+3]===1?i=4:t[r+1]===0&&t[r+2]===1&&(i=3),i===0){r++;continue}e!==-1&&r>e&&(yield{offset:e,length:r-e}),e=r+i,r=e}e!==-1&&e<t.length&&(yield{offset:e,length:t.length-e})};var Ne=t=>t&31,Me=t=>{let r=[],e=t.length;for(let n=0;n<e;n++)n+2<e&&t[n]===0&&t[n+1]===0&&t[n+2]===3?(r.push(0,0),n+=2):r.push(t[n]);return new Uint8Array(r)};var sn=new Uint8Array([0,0,0,1]);var st=t=>{try{let r=[],e=[],n=[];for(let c of Ce(t)){let f=t.subarray(c.offset,c.offset+c.length),l=Ne(f[0]);l===7?r.push(f):l===8?e.push(f):l===13&&n.push(f)}if(r.length===0||e.length===0)return null;let i=r[0],s=Nt(i);p(s!==null);let a=s.profileIdc===100||s.profileIdc===110||s.profileIdc===122||s.profileIdc===144;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:r,pictureParameterSets:e,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?n:null}}catch(r){return ne._error("Error building AVC Decoder Configuration Record:",r),null}},at=t=>{let r=[];r.push(t.configurationVersion),r.push(t.avcProfileIndication),r.push(t.profileCompatibility),r.push(t.avcLevelIndication),r.push(252|t.lengthSizeMinusOne&3),r.push(224|t.sequenceParameterSets.length&31);for(let e of t.sequenceParameterSets){let n=e.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(e[i])}r.push(t.pictureParameterSets.length);for(let e of t.pictureParameterSets){let n=e.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(e[i])}if((t.avcProfileIndication===100||t.avcProfileIndication===110||t.avcProfileIndication===122||t.avcProfileIndication===144)&&t.chromaFormat!==null){p(t.bitDepthLumaMinus8!==null),p(t.bitDepthChromaMinus8!==null),p(t.sequenceParameterSetExt!==null),r.push(252|t.chromaFormat&3),r.push(248|t.bitDepthLumaMinus8&7),r.push(248|t.bitDepthChromaMinus8&7),r.push(t.sequenceParameterSetExt.length);for(let e of t.sequenceParameterSetExt){let n=e.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(e[i])}}return new Uint8Array(r)};var ct={1:{num:1,den:1},2:{num:12,den:11},3:{num:10,den:11},4:{num:16,den:11},5:{num:40,den:33},6:{num:24,den:11},7:{num:20,den:11},8:{num:32,den:11},9:{num:80,den:33},10:{num:18,den:11},11:{num:15,den:11},12:{num:64,den:33},13:{num:160,den:99},14:{num:4,den:3},15:{num:3,den:2},16:{num:2,den:1}},Nt=t=>{try{let r=Me(t),e=new z(r);if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let i=e.readAlignedByte(),s=e.readAlignedByte(),a=e.readAlignedByte();d(e);let c=1,f=0,l=0,u=0;if((i===100||i===110||i===122||i===244||i===44||i===83||i===86||i===118||i===128)&&(c=d(e),c===3&&(u=e.readBits(1)),f=d(e),l=d(e),e.skipBits(1),e.readBits(1))){for(let V=0;V<(c!==3?8:12);V++)if(e.readBits(1)){let Q=V<6?16:64,G=8,O=8;for(let ee=0;ee<Q;ee++){if(O!==0){let te=Y(e);O=(G+te+256)%256}G=O===0?G:O}}}d(e);let h=d(e);if(h===0)d(e);else if(h===1){e.skipBits(1),Y(e),Y(e);let M=d(e);for(let V=0;V<M;V++)Y(e)}d(e),e.skipBits(1);let _=d(e),R=d(e),g=16*(_+1),x=16*(R+1),b=g,y=x,E=e.readBits(1);if(E||e.skipBits(1),e.skipBits(1),e.readBits(1)){let M=d(e),V=d(e),H=d(e),Q=d(e),G,O;if((u===0?c:0)===0)G=1,O=2-E;else{let te=c===3?1:2,de=c===1?2:1;G=te,O=de*(2-E)}b-=G*(M+V),y-=O*(H+Q)}let T=2,w=2,I=2,F=0,N={num:1,den:1},U=null,k=null,q=null,P=null,K=e.pos;if(e.readBits(1)){if(e.readBits(1)){let te=e.readBits(8);if(te===255)N={num:e.readBits(16),den:e.readBits(16)};else{let de=ct[te];de&&(N=de)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),F=e.readBits(1),e.readBits(1)&&(T=e.readBits(8),w=e.readBits(8),I=e.readBits(8))),e.readBits(1)&&(d(e),d(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let O=e.readBits(1);O&&it(e);let ee=e.readBits(1);ee&&it(e),(O||ee)&&e.skipBits(1),e.skipBits(1),q=e.pos,P=e.readBits(1),P&&(e.skipBits(1),d(e),d(e),d(e),d(e),U=d(e),k=d(e))}if(U===null){p(k===null);let M=s&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&M)U=0,k=0;else{let V=_+1,H=R+1,Q=(2-E)*H,G=Ve.find(ee=>ee.level>=a)??oe(Ve),O=Math.min(Math.floor(G.maxDpbMbs/(V*Q)),16);U=O,k=O}}return p(k!==null),{emulationUnpreventedBytes:r,profileIdc:i,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:E,chromaFormatIdc:c,bitDepthLumaMinus8:f,bitDepthChromaMinus8:l,codedWidth:g,codedHeight:x,displayWidth:b,displayHeight:y,pixelAspectRatio:N,colourPrimaries:T,matrixCoefficients:I,transferCharacteristics:w,fullRangeFlag:F,numReorderFrames:U,maxDecFrameBuffering:k,vuiParametersFlagBitOffset:K,bitstreamRestrictionFlagBitOffset:q,bitstreamRestrictionFlag:P}}catch(r){return ne._error("Error parsing AVC SPS:",r),null}},it=t=>{let r=d(t);t.skipBits(4),t.skipBits(4);for(let e=0;e<=r;e++)d(t),d(t),t.skipBits(1);t.skipBits(5),t.skipBits(5),t.skipBits(5),t.skipBits(5)};var ge=t=>t>>1&63,Mt=t=>{try{let r=new z(Me(t));r.skipBits(16),r.readBits(4);let e=r.readBits(3),n=r.readBits(1),{general_profile_space:i,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:c,general_constraint_indicator_flags:f,general_level_idc:l}=kt(r,e);d(r);let u=d(r),h=0;u===3&&(h=r.readBits(1));let _=d(r),R=d(r),g=_,x=R;if(r.readBits(1)){let P=d(r),K=d(r),Z=d(r),M=d(r),V=1,H=1,Q=h===0?u:0;Q===1?(V=2,H=2):Q===2&&(V=2,H=1),g-=(P+K)*V,x-=(Z+M)*H}let b=d(r),y=d(r);d(r);let B=r.readBits(1)?0:e,T=0;for(let P=B;P<=e;P++)d(r),T=d(r),d(r);d(r),d(r),d(r),d(r),d(r),d(r),r.readBits(1)&&r.readBits(1)&&Ut(r),r.skipBits(1),r.skipBits(1),r.readBits(1)&&(r.skipBits(4),r.skipBits(4),d(r),d(r),r.skipBits(1));let w=d(r);if(Ot(r,w),r.readBits(1)){let P=d(r);for(let K=0;K<P;K++)d(r),r.skipBits(1)}r.skipBits(1),r.skipBits(1);let I=2,F=2,N=2,U=0,k=0,q={num:1,den:1};if(r.readBits(1)){let P=Lt(r,e);q=P.pixelAspectRatio,I=P.colourPrimaries,F=P.transferCharacteristics,N=P.matrixCoefficients,U=P.fullRangeFlag,k=P.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:q,colourPrimaries:I,transferCharacteristics:F,matrixCoefficients:N,fullRangeFlag:U,maxDecFrameBuffering:T+1,spsMaxSubLayersMinus1:e,spsTemporalIdNestingFlag:n,generalProfileSpace:i,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:c,generalConstraintIndicatorFlags:f,generalLevelIdc:l,chromaFormatIdc:u,bitDepthLumaMinus8:b,bitDepthChromaMinus8:y,minSpatialSegmentationIdc:k}}catch(r){return ne._error("Error parsing HEVC SPS:",r),null}},lt=t=>{try{let r=[],e=[],n=[],i=[];for(let l of Ce(t)){let u=t.subarray(l.offset,l.offset+l.length),h=ge(u[0]);h===32?r.push(u):h===33?e.push(u):h===34?n.push(u):(h===39||h===40)&&i.push(u)}if(e.length===0||n.length===0)return null;let s=Mt(e[0]);if(!s)return null;let a=0;if(n.length>0){let l=n[0],u=new z(Me(l));u.skipBits(16),d(u),d(u),u.skipBits(1),u.skipBits(1),u.skipBits(3),u.skipBits(1),u.skipBits(1),d(u),d(u),Y(u),u.skipBits(1),u.skipBits(1),u.readBits(1)&&d(u),Y(u),Y(u),u.skipBits(1),u.skipBits(1),u.skipBits(1),u.skipBits(1);let h=u.readBits(1),_=u.readBits(1);!h&&!_?a=0:h&&!_?a=2:!h&&_?a=3:a=0}let c=[...r.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:r}]:[],...e.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:e}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:n}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:ge(i[0][0]),nalUnits:i}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:c}}catch(r){return ne._error("Error building HEVC Decoder Configuration Record:",r),null}},kt=(t,r)=>{let e=t.readBits(2),n=t.readBits(1),i=t.readBits(5),s=0;for(let u=0;u<32;u++)s=s<<1|t.readBits(1);let a=new Uint8Array(6);for(let u=0;u<6;u++)a[u]=t.readBits(8);let c=t.readBits(8),f=[],l=[];for(let u=0;u<r;u++)f.push(t.readBits(1)),l.push(t.readBits(1));if(r>0)for(let u=r;u<8;u++)t.skipBits(2);for(let u=0;u<r;u++)f[u]&&t.skipBits(88),l[u]&&t.skipBits(8);return{general_profile_space:e,general_tier_flag:n,general_profile_idc:i,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:c}},Ut=t=>{for(let r=0;r<4;r++)for(let e=0;e<(r===3?2:6);e++)if(!t.readBits(1))d(t);else{let i=Math.min(64,1<<4+(r<<1));r>1&&Y(t);for(let s=0;s<i;s++)Y(t)}},Ot=(t,r)=>{let e=[];for(let n=0;n<r;n++)e[n]=Dt(t,n,r,e)},Dt=(t,r,e,n)=>{let i=0,s=0,a=0;if(r!==0&&(s=t.readBits(1)),s){if(r===e){let f=d(t);a=r-(f+1)}else a=r-1;t.readBits(1),d(t);let c=n[a]??0;for(let f=0;f<=c;f++)t.readBits(1)||t.readBits(1);i=n[a]}else{let c=d(t),f=d(t);for(let l=0;l<c;l++)d(t),t.readBits(1);for(let l=0;l<f;l++)d(t),t.readBits(1);i=c+f}return i},Lt=(t,r)=>{let e=2,n=2,i=2,s=0,a=0,c={num:1,den:1};if(t.readBits(1)){let f=t.readBits(8);if(f===255)c={num:t.readBits(16),den:t.readBits(16)};else{let l=ct[f];l&&(c=l)}}return t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),s=t.readBits(1),t.readBits(1)&&(e=t.readBits(8),n=t.readBits(8),i=t.readBits(8))),t.readBits(1)&&(d(t),d(t)),t.readBits(1),t.readBits(1),t.readBits(1),t.readBits(1)&&(d(t),d(t),d(t),d(t)),t.readBits(1)&&(t.readBits(32),t.readBits(32),t.readBits(1)&&d(t),t.readBits(1)&&Ht(t,!0,r)),t.readBits(1)&&(t.readBits(1),t.readBits(1),t.readBits(1),a=d(t),d(t),d(t),d(t),d(t)),{pixelAspectRatio:c,colourPrimaries:e,transferCharacteristics:n,matrixCoefficients:i,fullRangeFlag:s,minSpatialSegmentationIdc:a}},Ht=(t,r,e)=>{let n=!1,i=!1,s=!1;r&&(n=t.readBits(1)===1,i=t.readBits(1)===1,(n||i)&&(s=t.readBits(1)===1,s&&(t.readBits(8),t.readBits(5),t.readBits(1),t.readBits(5)),t.readBits(4),t.readBits(4),s&&t.readBits(4),t.readBits(5),t.readBits(5),t.readBits(5)));for(let a=0;a<=e;a++){let c=t.readBits(1)===1,f=!0;c||(f=t.readBits(1)===1);let l=!1;f?d(t):l=t.readBits(1)===1;let u=1;l||(u=d(t)+1),n&&ot(t,u,s),i&&ot(t,u,s)}},ot=(t,r,e)=>{for(let n=0;n<r;n++)d(t),d(t),e&&(d(t),d(t)),t.readBits(1)},dt=t=>{let r=[];r.push(t.configurationVersion),r.push((t.generalProfileSpace&3)<<6|(t.generalTierFlag&1)<<5|t.generalProfileIdc&31),r.push(t.generalProfileCompatibilityFlags>>>24&255),r.push(t.generalProfileCompatibilityFlags>>>16&255),r.push(t.generalProfileCompatibilityFlags>>>8&255),r.push(t.generalProfileCompatibilityFlags&255),r.push(...t.generalConstraintIndicatorFlags),r.push(t.generalLevelIdc&255),r.push(240|t.minSpatialSegmentationIdc>>8&15),r.push(t.minSpatialSegmentationIdc&255),r.push(252|t.parallelismType&3),r.push(252|t.chromaFormatIdc&3),r.push(248|t.bitDepthLumaMinus8&7),r.push(248|t.bitDepthChromaMinus8&7),r.push(t.avgFrameRate>>8&255),r.push(t.avgFrameRate&255),r.push((t.constantFrameRate&3)<<6|(t.numTemporalLayers&7)<<3|(t.temporalIdNested&1)<<2|t.lengthSizeMinusOne&3),r.push(t.arrays.length&255);for(let e of t.arrays){r.push((e.arrayCompleteness&1)<<7|0|e.nalUnitType&63),r.push(e.nalUnits.length>>8&255),r.push(e.nalUnits.length&255);for(let n of e.nalUnits){r.push(n.length>>8&255),r.push(n.length&255);for(let i=0;i<n.length;i++)r.push(n[i])}}return new Uint8Array(r)};var zt={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},ut=t=>{let r=new z(t);if(r.readBits(2)!==2)return null;let n=r.readBits(1),s=(r.readBits(1)<<1)+n;if(s===3&&r.skipBits(1),r.readBits(1)===1||r.readBits(1)!==0||(r.skipBits(2),r.readBits(24)!==4817730))return null;let l=8;s>=2&&(l=r.readBits(1)?12:10);let u=r.readBits(3),h=0,_=0;if(u!==7)if(_=r.readBits(1),s===1||s===3){let N=r.readBits(1),U=r.readBits(1);h=!N&&!U?3:N&&!U?2:1,r.skipBits(1)}else h=1;else h=3,_=1;let R=r.readBits(16),g=r.readBits(16),x=R+1,b=g+1,y=x*b,E=oe(ie).level;for(let F of ie)if(y<=F.maxPictureSize){E=F.level;break}let B=zt[u],T=B?.colourPrimaries??2,w=B?.transferCharacteristics??2,I=B?.matrixCoefficients??2;return{profile:s,level:E,bitDepth:l,chromaSubsampling:h,videoFullRangeFlag:_,colourPrimaries:T,transferCharacteristics:w,matrixCoefficients:I}};var qt=function*(t){let r=new z(t),e=()=>{let n=0;for(let i=0;i<8;i++){let s=r.readAlignedByte();if(n+=(s&127)*2**(i*7),!(s&128))break;if(i===7&&s&128)return null}return n>2**32-1?null:n};for(;r.getBitsLeft()>=8;){r.skipBits(1);let n=r.readBits(4),i=r.readBits(1),s=r.readBits(1);r.skipBits(1),i&&r.skipBits(8);let a;if(s){let c=e();if(c===null)return;a=c}else a=Math.floor(r.getBitsLeft()/8);p(r.pos%8===0),yield{type:n,data:t.subarray(r.pos/8,r.pos/8+a)},r.skipBits(a*8)}},At=t=>{for(let{type:r,data:e}of qt(t)){if(r!==1)continue;let n=new z(e),i=n.readBits(3),s=n.readBits(1),a=n.readBits(1),c=0,f=0,l=0;if(a)c=n.readBits(5);else{let k=n.readBits(1),q=0;if(k){if(n.skipBits(32),n.skipBits(32),n.readBits(1)){let M=0;for(;M<32&&!n.readBits(1);)M++;M<32&&n.skipBits(M)}q=n.readBits(1),q&&(l=n.readBits(5),n.skipBits(32),n.skipBits(5),n.skipBits(5))}let P=n.readBits(1),K=n.readBits(5);for(let Z=0;Z<=K;Z++){n.skipBits(12);let M=n.readBits(5);if(Z===0&&(c=M),M>7){let V=n.readBits(1);Z===0&&(f=V)}if(q&&n.readBits(1)){let H=l+1;n.skipBits(H),n.skipBits(H),n.skipBits(1)}P&&n.readBits(1)&&n.skipBits(4)}}let u=n.readBits(4),h=n.readBits(4),_=u+1;n.skipBits(_);let R=h+1;n.skipBits(R);let g=0;if(a?g=0:g=n.readBits(1),g&&(n.skipBits(4),n.skipBits(3)),n.skipBits(1),n.skipBits(1),n.skipBits(1),!a){n.skipBits(1),n.skipBits(1),n.skipBits(1),n.skipBits(1);let k=n.readBits(1);k&&(n.skipBits(1),n.skipBits(1));let q=n.readBits(1),P=0;q?P=2:P=n.readBits(1),P>0&&(n.readBits(1)||n.skipBits(1)),k&&n.skipBits(3)}n.skipBits(1),n.skipBits(1),n.skipBits(1);let x=n.readBits(1),b=8;i===2&&x?b=n.readBits(1)?12:10:i<=2&&(b=x?10:8);let y=0;i!==1&&(y=n.readBits(1));let E=2,B=2,T=2;n.readBits(1)&&(E=n.readBits(8),B=n.readBits(8),T=n.readBits(8));let I=0,F=1,N=1,U=0;return y?I=n.readBits(1):E===1&&B===13&&T===0?(I=1,F=0,N=0):(I=n.readBits(1),i===0?(F=1,N=1):i===1?(F=0,N=0):b===12?(F=n.readBits(1),N=F?n.readBits(1):0):(F=1,N=0),F&&N&&(U=n.readBits(2))),{profile:i,level:c,tier:f,bitDepth:b,monochrome:y,chromaSubsamplingX:F,chromaSubsamplingY:N,chromaSamplePosition:U,videoFullRangeFlag:I,colourPrimaries:E,transferCharacteristics:B,matrixCoefficients:T}}return null};var an=[64*2,69*2,96*2,64*2,70*2,96*2,80*2,87*2,120*2,80*2,88*2,120*2,96*2,104*2,144*2,96*2,105*2,144*2,112*2,121*2,168*2,112*2,122*2,168*2,128*2,139*2,192*2,128*2,140*2,192*2,160*2,174*2,240*2,160*2,175*2,240*2,192*2,208*2,288*2,192*2,209*2,288*2,224*2,243*2,336*2,224*2,244*2,336*2,256*2,278*2,384*2,256*2,279*2,384*2,320*2,348*2,480*2,320*2,349*2,480*2,384*2,417*2,576*2,384*2,418*2,576*2,448*2,487*2,672*2,448*2,488*2,672*2,512*2,557*2,768*2,512*2,558*2,768*2,640*2,696*2,960*2,640*2,697*2,960*2,768*2,835*2,1152*2,768*2,836*2,1152*2,896*2,975*2,1344*2,896*2,976*2,1344*2,1024*2,1114*2,1536*2,1024*2,1115*2,1536*2,1152*2,1253*2,1728*2,1152*2,1254*2,1728*2,1280*2,1393*2,1920*2,1280*2,1394*2,1920*2];var cn=new Uint8Array([5,4,65,67,45,51]),ln=new Uint8Array([5,4,69,65,67,51]);var Yt={apco:A.AV_PROFILE_PRORES_PROXY,apcs:A.AV_PROFILE_PRORES_LT,apcn:A.AV_PROFILE_PRORES_STANDARD,apch:A.AV_PROFILE_PRORES_HQ,ap4h:A.AV_PROFILE_PRORES_4444,ap4x:A.AV_PROFILE_PRORES_XQ},be=class extends Wt{constructor(){super(...arguments);this.codecContext=null;this.scaler=null;this.dstFrame=null;this.lastBuffer=null;this.packetEmitted=!1;this.lastScalerKey=null;this.quantizer=null;this.preciseTimings=[]}static supports(e,n){return n.bitrateMode==="quantizer"?e==="avc"||e==="hevc"||e==="vp9"||e==="av1":e==="avc"||e==="hevc"||e==="vp8"||e==="vp9"||e==="av1"||e==="prores"}async init(){this.frame=new A.Frame,this.frame.alloc(),this.frame.timeBase=new A.Rational(1,1e6),this.packet=new A.Packet,this.packet.alloc();let e=j[this.codec];p(e!==void 0);let n=()=>{if(this.codec==="prores"){let s=A.Codec.findEncoderByName(A.FF_ENCODER_PRORES_KS);if(s)return s}return A.Codec.findEncoder(e)},i=null;if(this.codec==="vp9"&&this.config.alpha==="keep")i=A.Codec.findEncoderByName(A.FF_ENCODER_LIBVPX_VP9)??A.Codec.findEncoder(e);else if(this.config.hardwareAcceleration==="prefer-software")i=n();else{let s=await Le(e);s&&this.config.bitrateMode==="quantizer"&&!s.name?.endsWith("_nvenc")&&(s=null),i=s??n()}if(!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=i,this.config.bitrateMode!=="quantizer"&&await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let e=new A.CodecContext;e.allocContext3(this.avCodec);let n=A.AV_PIX_FMT_YUV420P;this.avCodec.pixelFormats&&(this.avCodec.pixelFormats.includes(A.AV_PIX_FMT_YUV420P)||(n=this.avCodec.pixelFormats[0]),this.config.alpha==="keep"&&(this.avCodec.pixelFormats.includes(A.AV_PIX_FMT_YUVA420P)?n=A.AV_PIX_FMT_YUVA420P:n=A.avcodecFindBestPixFmtOfList(this.avCodec.pixelFormats,A.AV_PIX_FMT_YUVA444P12LE)));let i=pe({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});e.width=this.config.width,e.height=this.config.height,e.pixelFormat=n,e.timeBase=new A.Rational(1,1e6),e.gopSize=60,e.framerate=new A.Rational(Math.round(this.config.framerate??0)||30,1),e.bitRate=this.config.bitrateMode==="quantizer"?0n:BigInt(this.config.bitrate??new Xt("medium")._toVideoBitrate(this.codec,this.config.width,this.config.height)),e.sampleAspectRatio=new A.Rational(i.num,i.den),this.config.bitrateMode==="constant"&&(e.rcMinRate=e.bitRate,e.rcMaxRate=e.bitRate);let s=this.config.latencyMode==="realtime";if(this.avCodec.name==="libx264"?s&&(e.setOption("tune","zerolatency"),e.setOption("preset","ultrafast")):this.avCodec.name==="libx265"?(e.setOption("x265-params","log-level=error"),s&&(e.setOption("tune","zerolatency"),e.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(s&&e.setOption("deadline","realtime"),e.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(e.setOption("deadline","realtime"),s?e.setOption("cpu-used","8"):e.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"?(process.env.SVT_LOG="1",s&&e.setOption("preset","12")):(this.avCodec.name==="h264_nvenc"||this.avCodec.name==="hevc_nvenc")&&e.setOption("forced-idr","1"),this.config.bitrateMode==="quantizer"){p(this.quantizer!==null);let c;if(this.avCodec.name==="libaom-av1"||this.avCodec.name==="libsvtav1"?c=Math.round(this.quantizer/4):c=this.quantizer,this.avCodec.name==="libx264"||this.avCodec.name==="libx265")e.setOption("qp",String(c));else if(this.avCodec.name==="libvpx-vp9"||this.avCodec.name==="libaom-av1")e.setOption("crf",String(c));else if(this.avCodec.name==="libsvtav1")e.setOption("qp",String(c));else if(this.avCodec.name==="librav1e")e.setOption("qp",String(c));else if(this.avCodec.name?.endsWith("_nvenc"))e.setOption("rc","constqp"),e.setOption("qp",String(c));else throw new Error(`Encoder '${this.avCodec.name}' cannot be used for quantizer-based encoding.`);e.qMin=c,e.qMax=c}if(this.codec==="prores"){let c=Yt[this.config.codec];p(c!==void 0),e.setOption("profile",String(c))}let a=await e.open2();A.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=e}async encode(e,n){if(this.config.bitrateMode==="quantizer"){let l;if(this.codec==="avc"?l=n.avc?.quantizer:this.codec==="hevc"?l=n.hevc?.quantizer:this.codec==="vp9"?l=n.vp9?.quantizer:l=n.av1?.quantizer,p(l!=null),this.codecContext!==null&&l!==this.quantizer){let u=await this.codecContext.sendFrame(null);for(A.FFmpegError.throwIfError(u,"Send frame");;){let h=await this.codecContext.receivePacket(this.packet);if(h===A.AVERROR_EAGAIN||h===A.AVERROR_EOF)break;this.receivePacket(h)}this.codecContext.freeContext(),this.codecContext=null}this.quantizer=l}if(this.codecContext===null&&await this.createCodecContext(),p(this.codecContext),e._data instanceof W)this.frame.unref(),this.frame.ref(e._data.frame);else{if(e.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await le(e,this.frame,this.lastBuffer)}let i=this.frame;if(this.codecContext.pixelFormat!==this.frame.format||this.codecContext.width!==this.frame.width||this.codecContext.height!==this.frame.height){this.scaler||(this.scaler=new A.SoftwareScaleContext);let l=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(l!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,A.SWS_FAST_BILINEAR),this.lastScalerKey=l;let h=this.scaler.initContext();A.FFmpegError.throwIfError(h,"initContext")}this.dstFrame||(this.dstFrame=new A.Frame,this.dstFrame.alloc(),this.dstFrame.width=this.codecContext.width,this.dstFrame.height=this.codecContext.height,this.dstFrame.format=this.codecContext.pixelFormat,this.dstFrame.allocBuffer()),await this.scaler.scaleFrame(this.dstFrame,this.frame),this.dstFrame.copyProps(this.frame),i=this.dstFrame}i.pts=BigInt(e.microsecondTimestamp),i.duration=BigInt(e.microsecondDuration),i.timeBase=new A.Rational(1,1e6),i.pictType=n?.keyFrame?A.AV_PICTURE_TYPE_I:A.AV_PICTURE_TYPE_NONE,i.keyFrame=n?.keyFrame?1:0;let a=se(this.preciseTimings,e.microsecondTimestamp,l=>l.microsecondTimestamp),c=a!==-1?this.preciseTimings[a]:null;c&&c.microsecondTimestamp===e.microsecondTimestamp?(c.timestamp!==e.timestamp&&(c.timestampIsValid=!1),c.duration!==e.duration&&(c.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:e.microsecondTimestamp,timestamp:e.timestamp,duration:e.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let f=await this.codecContext.sendFrame(i);for(A.FFmpegError.throwIfError(f,"Send frame");;){let l=await this.codecContext.receivePacket(this.packet);if(l===A.AVERROR_EAGAIN||l===A.AVERROR_EOF)break;this.receivePacket(l)}}receivePacket(e){if(p(this.codecContext),A.FFmpegError.throwIfError(e,"Receive packet"),!this.packet.data)return;let n=L(this.packet.data),i=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=se(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),c=a!==-1?this.preciseTimings[a]:null;c&&c.microsecondTimestamp===Number(this.packet.pts)&&(c.timestampIsValid&&(i=c.timestamp),c.durationIsValid&&(s=c.duration));let f={},l=null,u=null;if(this.codec==="avc"||this.codec==="hevc"){let g=!1;if(this.codec==="avc"?g=this.config.avc?.format==="annexb":g=this.config.hevc?.format==="annexb",!this.packetEmitted){let x;if(this.codec==="avc"){let b=st(this.packet.data);if(!b)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=at(b)}else{let b=lt(this.packet.data);if(!b)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=dt(b)}l=ae({width:this.config.width,height:this.config.height,codec:this.codec,codecDescription:x,colorSpace:null,avcType:1,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),g||(u=x)}if(!g){let b=[];for(let w of Ce(n))if(this.codec==="avc"){let I=Ne(n[w.offset]);I!==7&&I!==8&&I!==13&&b.push(w)}else{let I=ge(n[w.offset]);I!==33&&I!==34&&I!==32&&b.push(w)}let y=0;for(let w of b)y+=4+w.length;let E=new Uint8Array(y),B=new DataView(E.buffer),T=0;for(let w of b){let I=w.length;B.setUint32(T,I,!1),T+=4,E.set(n.subarray(w.offset,w.offset+w.length),T),T+=w.length}n=E}}else if(this.codec==="vp8")this.packetEmitted||(l=ae({width:this.config.width,height:this.config.height,codec:"vp8",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}));else if(this.codec==="vp9"){if(!this.packetEmitted){let g=ut(n);l=ae({width:this.config.width,height:this.config.height,codec:"vp9",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:g,av1CodecInfo:null,proresFormat:null})}}else if(this.codec==="av1"){if(!this.packetEmitted){let g=At(n);l=ae({width:this.config.width,height:this.config.height,codec:"av1",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:g,proresFormat:null})}}else if(this.codec==="prores")this.packetEmitted||(l=ae({width:this.config.width,height:this.config.height,codec:"prores",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:this.config.codec}));else throw new Error("Unreachable.");let h={},_=this.packet.getSideData(A.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);_&&(h.alpha=L(_).subarray(8));let R=new Gt(n,this.packet.isKeyframe?"key":"delta",i,s,void 0,void 0,h);l!==null&&(f.decoderConfig={codec:l,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:u??void 0,colorSpace:{primaries:ue(this.codecContext.colorPrimaries),matrix:fe(this.codecContext.colorSpace),transfer:Ae(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===A.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===A.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(R,f)}async flush(){if(this.codecContext){let e=await this.codecContext.sendFrame(null);for(A.FFmpegError.throwIfError(e,"Send frame");;){let n=await this.codecContext.receivePacket(this.packet);if(n===A.AVERROR_EAGAIN||n===A.AVERROR_EOF)break;this.receivePacket(n)}this.codecContext.freeContext(),this.codecContext=null}this.packetEmitted=!1}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.scaler?.freeContext(),this.dstFrame?.free()}};import{AudioSample as Qt,CustomAudioDecoder as $t}from"mediabunny";import*as S from"node-av";import{AudioSampleResource as Kt}from"mediabunny";import*as ce from"node-av";var J=class extends Kt{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(r){if(super(),!(r instanceof ce.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(r.getMediaType()!==ce.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=r}getFormat(){let r=Xe(this.frame.format);if(r===null){let e=ce.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${e} (${this.frame.format})`)}return r}getSampleRate(){return this.frame.sampleRate}getNumberOfChannels(){return this.frame.channels}getNumberOfFrames(){return this.frame.nbSamples}getTimestamp(){return Number(this.frame.pts)/this.frame.timeBase.den}close(){this.frame.free(),this._frame=null}getDataPlane(r){return p(this.frame.data&&r<this.frame.data.length),L(this.frame.data[r])}},xe=(t,r)=>{r.format=Ge(t.format),r.nbSamples=t.numberOfFrames,r.sampleRate=t.sampleRate,r.channelLayout=re(t.numberOfChannels),r.allocBuffer(),p(r.data);for(let e=0;e<r.data.length;e++)t.copyTo(r.data[e],{planeIndex:e})};var ve=class extends $t{constructor(){super(...arguments);this.codecContext=null}static supports(e,n){return e==="aac"||e==="opus"||e==="mp3"||e==="vorbis"||e==="flac"||e==="ac3"||e==="eac3"||e==="dts"}async init(){this.frame=new S.Frame,this.frame.alloc(),this.packet=new S.Packet,this.packet.alloc();let e=j[this.codec];p(e!==void 0);let n=S.Codec.findDecoder(e);if(n===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let i=new S.CodecContext;i.allocContext3(n),i.sampleRate=this.config.sampleRate,i.channelLayout=re(this.config.numberOfChannels),i.timeBase=new S.Rational(1,this.config.sampleRate),i.codecType=S.AVMEDIA_TYPE_AUDIO,i.codecId=e,i.extraData=this.config.description?Buffer.from(L(this.config.description)):null;let s=await i.open2();S.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=i}async decode(e){p(this.codecContext),this.packet.isKeyframe=e.type==="key",this.packet.data=Buffer.from(e.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(e.timestamp*this.config.sampleRate)),this.packet.dts=S.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(e.duration*this.config.sampleRate));let n=await this.codecContext.sendPacket(this.packet);for(S.FFmpegError.throwIfError(n,"Send packet"),this.packet.unref();;){let i=await this.codecContext.receiveFrame(this.frame);if(i===S.AVERROR_EAGAIN||i===S.AVERROR_EOF)break;this.receiveFrame(i)}}receiveFrame(e){S.FFmpegError.throwIfError(e,"Receive frame");let n=this.frame.clone();if(!n)throw new Error("Allocation failure during frame clone.");n.timeBase=new S.Rational(1,this.config.sampleRate),this.onSample(new Qt(new J(n)))}async flush(){p(this.codecContext);let e=await this.codecContext.sendPacket(null);for(S.FFmpegError.throwIfError(e,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===S.AVERROR_EAGAIN||n===S.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomAudioEncoder as Jt,Quality as Zt,EncodedPacket as er}from"mediabunny";import*as v from"node-av";var ft=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],mt=[1,2,4,5,6],jt=16384,pt=(t,r,e)=>{if(t<32e3||t>384e4)return!1;let n=e===6,i=e-(n?1:0),s=32*Math.ceil(Math.ceil(t*512/r)/32),a=132+(493+28*32)*i+(n?72:0);return s>=a&&s<=8*jt};var tr=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],rr=[8e3,12e3,16e3,24e3,48e3],nr=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],ht=[32e3,44100,48e3],ke=1024,_e=class extends Jt{constructor(){super(...arguments);this.codecContext=null;this.resampler=null;this.dstFrame=null;this.firstExpectedTimestamp=null;this.outputTimestampOffset=0;this.inputParametersKey=null;this.resamplerInputSampleRate=null;this.nextResamplerPts=null;this.packetEmitted=!1;this.adtsHeaderTemplate=null}static supports(e,n){let{numberOfChannels:i,sampleRate:s}=n;return e==="aac"&&i>=1&&i<=48&&tr.includes(s)||e==="opus"&&i>=1&&i<=255&&rr.includes(s)||e==="mp3"&&i>=1&&i<=2&&nr.includes(s)||e==="vorbis"&&i>=1&&i<=255&&s<=2e5||e==="flac"&&i>=1&&i<=8&&s<=655350||e==="ac3"&&i>=1&&i<=6&&ht.includes(s)||e==="eac3"&&i>=1&&i<=16&&ht.includes(s)||e==="dts"&&mt.includes(i)&&ft.includes(s)&&pt(gt(n,e),s,i)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let e=j[this.codec];p(e!==void 0);let n=v.Codec.findEncoder(e);if(!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=n,await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let e=new v.CodecContext;e.allocContext3(this.avCodec);let n=v.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(v.AV_SAMPLE_FMT_FLTP)&&(n=this.avCodec.sampleFormats[0]),e.sampleRate=this.config.sampleRate,e.channelLayout=this.codec==="dts"?Ye(this.config.numberOfChannels):re(this.config.numberOfChannels),e.codecType=v.AVMEDIA_TYPE_AUDIO,e.codecId=j[this.codec],e.sampleFormat=n,e.timeBase=new v.Rational(1,this.config.sampleRate),e.bitRate=BigInt(gt(this.config,this.codec)),this.config.bitrateMode==="constant"&&(e.rcMinRate=e.bitRate,e.rcMaxRate=e.bitRate);let i=this.codec==="dts"?v.Dictionary.fromObject({strict:-2}):null,s=await e.open2(this.avCodec,i);v.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=e}async encode(e){this.codecContext===null&&(await this.createCodecContext(),p(this.codecContext)),this.firstExpectedTimestamp??=e.timestamp,e._data instanceof J?(this.frame.unref(),this.frame.ref(e._data.frame)):xe(e,this.frame),this.frame.pts=BigInt(Math.round(e.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(e.duration*this.config.sampleRate)),this.frame.timeBase=new v.Rational(1,this.config.sampleRate);let n=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==n)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=n,this.codecContext.frameSize>0||this.codecContext.sampleFormat!==this.frame.format||this.codecContext.sampleRate!==this.frame.sampleRate||this.codecContext.channels!==this.frame.channels){if(!this.resampler){this.resampler=new v.SoftwareResampleContext,this.resamplerInputSampleRate=this.frame.sampleRate;let a=this.codecContext.channelLayout,c=re(this.frame.channels),f=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,c,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(f,"allocSetOpts2");let l=this.resampler.init();v.FFmpegError.throwIfError(l,"init"),this.dstFrame=new v.Frame,this.dstFrame.alloc(),this.dstFrame.channelLayout=a,this.dstFrame.sampleRate=this.codecContext.sampleRate,this.dstFrame.format=this.codecContext.sampleFormat,this.dstFrame.nbSamples=this.codecContext.frameSize||ke,this.dstFrame.duration=BigInt(this.dstFrame.nbSamples),this.dstFrame.allocBuffer(),this.nextResamplerPts=this.frame.pts}let s=this.frame.data;if(!s)throw new DOMException("Frame has no data","EncodingError");await this.resampler.convert(null,0,s,this.frame.nbSamples),await this.pullResampledFrames()}else await this.sendFrameAndReceivePackets(this.frame)}async pullResampledFrames(){p(this.codecContext),p(this.resampler),p(this.dstFrame),p(this.nextResamplerPts!==null);let e=this.codecContext.frameSize||ke;for(;!(this.resampler.getOutSamples(0)<e);)await this.resampler.convert(this.dstFrame.data,e,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(e)}async sendFrameAndReceivePackets(e){p(this.codecContext);let n=await this.codecContext.sendFrame(e);for(v.FFmpegError.throwIfError(n,"Send frame");;){let i=await this.codecContext.receivePacket(this.packet);if(i===v.AVERROR_EAGAIN||i===v.AVERROR_EOF)break;this.receivePacket(i)}}receivePacket(e){if(p(this.codecContext),p(this.firstExpectedTimestamp!==null),v.FFmpegError.throwIfError(e,"Receive packet"),!this.packet.data)return;let n=Number(this.packet.pts)/this.codecContext.sampleRate,i=Number(this.packet.duration)/this.codecContext.sampleRate,s=this.packet.data,a;if(this.packetEmitted)a={};else{this.outputTimestampOffset=Math.max(this.firstExpectedTimestamp-n,0);let f=this.config.codec,l=this.codecContext.extraData?L(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!l)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let h=et(l);this.adtsHeaderTemplate=tt(h),l=void 0}}else if(this.codec==="opus"){if(!l)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!l)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!l)throw new Error("Extradata expected for FLAC.");l=new Uint8Array([102,76,97,67,128,0,0,l.byteLength,...l])}a={decoderConfig:{codec:f,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:l}}}if(this.adtsHeaderTemplate){let f=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,f);let l=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);l.set(this.adtsHeaderTemplate.header,0),l.set(s,this.adtsHeaderTemplate.header.byteLength),s=l}n+=this.outputTimestampOffset;let c=new er(s,"key",n,i);this.packetEmitted=!0,this.onPacket(c,a)}async flush(){if(this.codecContext){e:if(this.resampler){p(this.resamplerInputSampleRate!==null);let e=this.resampler.getOutSamples(0);if(e===0)break e;let n=this.codecContext.frameSize||ke;p(e<n);let i=Math.ceil((n-e)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(i),await this.pullResampledFrames()}await this.sendFrameAndReceivePackets(null),this.codecContext.freeContext(),this.codecContext=null,this.packetEmitted=!1,this.firstExpectedTimestamp=null,this.outputTimestampOffset=0,this.adtsHeaderTemplate=null,this.resampler?.free(),this.resampler=null,this.inputParametersKey=null,this.resamplerInputSampleRate=null,this.nextResamplerPts=null,this.dstFrame?.free(),this.dstFrame=null}}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.dstFrame?.free(),this.resampler?.free()}},gt=(t,r)=>t.bitrate??new Zt("medium")._toAudioBitrate(r)??0;import{registerProresDecoder as ar}from"@mediabunny/prores";var _t=Symbol.for("@mediabunny/server loaded");globalThis[_t]&&or._error(`[WARNING]
9
+ @mediabunny/server was loaded twice. This will likely cause the package not to work correctly. Check if multiple dependencies are importing different versions of @mediabunny/server, or if something is being bundled incorrectly.`);globalThis[_t]=!0;var vt=!1,$={},ni=(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.");vt||(vt=!0,$=t,X.Log.setLevel(X.AV_LOG_ERROR),Ct(he),ar(),bt(be),Ct(ve),bt(_e),sr(Je))},ii=async(t,r)=>{if(!(t instanceof xt)&&!(t instanceof ir))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(r instanceof X.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t instanceof xt){if(t._data instanceof W)r.unref(),r.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await le(t,r,null)}r.pts=BigInt(t.microsecondTimestamp),r.duration=BigInt(t.microsecondDuration),r.timeBase=new X.Rational(1,1e6)}else t._data instanceof J?(r.unref(),r.ref(t._data.frame)):xe(t,r),r.timeBase=new X.Rational(1,t.sampleRate),r.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),r.duration=BigInt(t.numberOfFrames)};export{J as AvFrameAudioSampleResource,W as AvFrameVideoSampleResource,$ as _serverOptions,ni as registerMediabunnyServer,ii as toAvFrame};
@@ -830,7 +830,8 @@ var NodeAvVideoDecoder = class extends CustomVideoDecoder {
830
830
  codecContext.codecId = codecId;
831
831
  codecContext.extraData = this.config.description ? Buffer.from(toUint8Array(this.config.description)) : null;
832
832
  codecContext.sampleAspectRatio = new NodeAv3.Rational(this.pixelAspectRatio.num, this.pixelAspectRatio.den);
833
- const ret = await codecContext.open2();
833
+ const options = NodeAv3.Dictionary.fromObject({ strict: NodeAv3.FF_COMPLIANCE_STRICT });
834
+ const ret = await codecContext.open2(codec, options);
834
835
  NodeAv3.FFmpegError.throwIfError(ret, "Open codec context");
835
836
  this.codecContext = codecContext;
836
837
  }
@@ -986,6 +987,16 @@ var Bitstream = class _Bitstream {
986
987
  }
987
988
  this.pos = end;
988
989
  }
990
+ copyBits(n, other) {
991
+ let i = 0;
992
+ for (i; i < n - 7; i += 8) {
993
+ this.writeBits(8, other.readBits(8));
994
+ }
995
+ const leftover = n - i;
996
+ if (leftover > 0) {
997
+ this.writeBits(leftover, other.readBits(leftover));
998
+ }
999
+ }
989
1000
  readAlignedByte() {
990
1001
  if (this.pos % 8 !== 0) {
991
1002
  throw new Error("Bitstream is not byte-aligned.");
@@ -1495,8 +1506,7 @@ var serializeAvcDecoderConfigurationRecord = (record) => {
1495
1506
  bytes.push(pps[i]);
1496
1507
  }
1497
1508
  }
1498
- if (record.avcProfileIndication === 100 || record.avcProfileIndication === 110 || record.avcProfileIndication === 122 || record.avcProfileIndication === 144) {
1499
- assert(record.chromaFormat !== null);
1509
+ if ((record.avcProfileIndication === 100 || record.avcProfileIndication === 110 || record.avcProfileIndication === 122 || record.avcProfileIndication === 144) && record.chromaFormat !== null) {
1500
1510
  assert(record.bitDepthLumaMinus8 !== null);
1501
1511
  assert(record.bitDepthChromaMinus8 !== null);
1502
1512
  assert(record.sequenceParameterSetExt !== null);
@@ -1535,7 +1545,8 @@ var AVC_HEVC_ASPECT_RATIO_IDC_TABLE = {
1535
1545
  };
1536
1546
  var parseAvcSps = (sps) => {
1537
1547
  try {
1538
- const bitstream = new Bitstream(removeEmulationPreventionBytes(sps));
1548
+ const emulationUnpreventedBytes = removeEmulationPreventionBytes(sps);
1549
+ const bitstream = new Bitstream(emulationUnpreventedBytes);
1539
1550
  bitstream.skipBits(1);
1540
1551
  bitstream.skipBits(2);
1541
1552
  const nalUnitType = bitstream.readBits(5);
@@ -1631,6 +1642,9 @@ var parseAvcSps = (sps) => {
1631
1642
  let pixelAspectRatio = { num: 1, den: 1 };
1632
1643
  let numReorderFrames = null;
1633
1644
  let maxDecFrameBuffering = null;
1645
+ let bitstreamRestrictionFlagBitOffset = null;
1646
+ let bitstreamRestrictionFlag = null;
1647
+ const vuiParametersFlagBitOffset = bitstream.pos;
1634
1648
  const vuiParametersPresentFlag = bitstream.readBits(1);
1635
1649
  if (vuiParametersPresentFlag) {
1636
1650
  const aspectRatioInfoPresentFlag = bitstream.readBits(1);
@@ -1686,7 +1700,8 @@ var parseAvcSps = (sps) => {
1686
1700
  bitstream.skipBits(1);
1687
1701
  }
1688
1702
  bitstream.skipBits(1);
1689
- const bitstreamRestrictionFlag = bitstream.readBits(1);
1703
+ bitstreamRestrictionFlagBitOffset = bitstream.pos;
1704
+ bitstreamRestrictionFlag = bitstream.readBits(1);
1690
1705
  if (bitstreamRestrictionFlag) {
1691
1706
  bitstream.skipBits(1);
1692
1707
  readExpGolomb(bitstream);
@@ -1720,6 +1735,7 @@ var parseAvcSps = (sps) => {
1720
1735
  }
1721
1736
  assert(maxDecFrameBuffering !== null);
1722
1737
  return {
1738
+ emulationUnpreventedBytes,
1723
1739
  profileIdc,
1724
1740
  constraintFlags,
1725
1741
  levelIdc,
@@ -1737,7 +1753,10 @@ var parseAvcSps = (sps) => {
1737
1753
  transferCharacteristics,
1738
1754
  fullRangeFlag,
1739
1755
  numReorderFrames,
1740
- maxDecFrameBuffering
1756
+ maxDecFrameBuffering,
1757
+ vuiParametersFlagBitOffset,
1758
+ bitstreamRestrictionFlagBitOffset,
1759
+ bitstreamRestrictionFlag
1741
1760
  };
1742
1761
  } catch (error) {
1743
1762
  Logging._error("Error parsing AVC SPS:", error);
@@ -1 +1 @@
1
- {"version":3,"file":"video-decoder.d.ts","sourceRoot":"","sources":["../../../src/video-decoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAe,KAAK,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrH,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAKlC,qBAAa,kBAAmB,SAAQ,kBAAkB;IACzD,KAAK,EAAG,MAAM,CAAC,KAAK,CAAC;IACrB,MAAM,EAAG,MAAM,CAAC,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAQ;IAChD,gBAAgB,EAAG,QAAQ,CAAC;IAG5B,cAAc,EAAE;QACf,oBAAoB,EAAE,MAAM,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,eAAe,EAAE,OAAO,CAAC;KACzB,EAAE,CAAM;WAGO,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAI1E,IAAI;IAOJ,gBAAgB,CAAC,MAAM,EAAE,aAAa;IAiDtC,MAAM,CAAC,MAAM,EAAE,aAAa;IAqElC,YAAY,CAAC,GAAG,EAAE,MAAM;IAuClB,KAAK;IAuBX,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;CAK3B"}
1
+ {"version":3,"file":"video-decoder.d.ts","sourceRoot":"","sources":["../../../src/video-decoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,aAAa,EAAe,KAAK,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrH,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAKlC,qBAAa,kBAAmB,SAAQ,kBAAkB;IACzD,KAAK,EAAG,MAAM,CAAC,KAAK,CAAC;IACrB,MAAM,EAAG,MAAM,CAAC,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAQ;IAChD,gBAAgB,EAAG,QAAQ,CAAC;IAG5B,cAAc,EAAE;QACf,oBAAoB,EAAE,MAAM,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,eAAe,EAAE,OAAO,CAAC;KACzB,EAAE,CAAM;WAGO,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAI1E,IAAI;IAOJ,gBAAgB,CAAC,MAAM,EAAE,aAAa;IAqDtC,MAAM,CAAC,MAAM,EAAE,aAAa;IAqElC,YAAY,CAAC,GAAG,EAAE,MAAM;IAuClB,KAAK;IAuBX,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;CAK3B"}
@@ -101,7 +101,10 @@ class NodeAvVideoDecoder extends mediabunny_1.CustomVideoDecoder {
101
101
  ? Buffer.from((0, misc_2.toUint8Array)(this.config.description))
102
102
  : null;
103
103
  codecContext.sampleAspectRatio = new NodeAv.Rational(this.pixelAspectRatio.num, this.pixelAspectRatio.den);
104
- const ret = await codecContext.open2();
104
+ // Honor inferred H.264 reorder buffering even when bitstream restrictions aren't explicitly signaled
105
+ // See https://github.com/Vanilagy/mediabunny/issues/488
106
+ const options = NodeAv.Dictionary.fromObject({ strict: NodeAv.FF_COMPLIANCE_STRICT });
107
+ const ret = await codecContext.open2(codec, options);
105
108
  NodeAv.FFmpegError.throwIfError(ret, 'Open codec context');
106
109
  this.codecContext = codecContext;
107
110
  }