@mediabunny/server 1.55.2 → 1.55.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -560,6 +560,8 @@ var MediabunnyServer = (() => {
560
560
  throw new Error(`Unexpected value: ${x}`);
561
561
  };
562
562
  var SECOND_TO_MICROSECOND_FACTOR = 1e6 * (1 + Number.EPSILON);
563
+ var NativePromiseConstructor = (async () => {
564
+ })().constructor;
563
565
  var simplifyRational = (rational) => {
564
566
  assert(Number.isInteger(rational.num));
565
567
  assert(Number.isInteger(rational.den));
@@ -1056,37 +1058,73 @@ var MediabunnyServer = (() => {
1056
1058
  throw new TypeError("AAC description must be at least 2 bytes long.");
1057
1059
  }
1058
1060
  const bitstream = new Bitstream(bytes);
1059
- let objectType = bitstream.readBits(5);
1060
- if (objectType === 31) {
1061
- objectType = 32 + bitstream.readBits(6);
1062
- }
1063
- const frequencyIndex = bitstream.readBits(4);
1064
- let sampleRate = null;
1065
- if (frequencyIndex === 15) {
1066
- sampleRate = bitstream.readBits(24);
1067
- } else {
1068
- if (frequencyIndex < aacFrequencyTable.length) {
1069
- sampleRate = aacFrequencyTable[frequencyIndex];
1070
- }
1071
- }
1061
+ const objectType = readAacObjectType(bitstream);
1062
+ const { frequencyIndex, sampleRate } = readAacSamplingFrequency(bitstream);
1072
1063
  const channelConfiguration = bitstream.readBits(4);
1073
1064
  let numberOfChannels = null;
1074
1065
  if (channelConfiguration >= 1 && channelConfiguration <= 7) {
1075
1066
  numberOfChannels = aacChannelMap[channelConfiguration];
1076
1067
  }
1068
+ let coreObjectType = objectType;
1069
+ let psPresent = false;
1070
+ let outputSampleRate = sampleRate;
1071
+ if (objectType === 5 || objectType === 29) {
1072
+ psPresent = objectType === 29;
1073
+ outputSampleRate = readAacSamplingFrequency(bitstream).sampleRate;
1074
+ coreObjectType = readAacObjectType(bitstream);
1075
+ if (coreObjectType === 22) {
1076
+ bitstream.skipBits(4);
1077
+ }
1078
+ } else {
1079
+ while (bitstream.getBitsLeft() > 15) {
1080
+ const searchStart = bitstream.pos;
1081
+ if (bitstream.readBits(11) !== 695) {
1082
+ bitstream.pos = searchStart + 1;
1083
+ continue;
1084
+ }
1085
+ if (readAacObjectType(bitstream) === 5 && bitstream.readBits(1)) {
1086
+ outputSampleRate = readAacSamplingFrequency(bitstream).sampleRate;
1087
+ if (bitstream.getBitsLeft() > 11 && bitstream.readBits(11) === 1352) {
1088
+ psPresent = !!bitstream.readBits(1);
1089
+ }
1090
+ }
1091
+ break;
1092
+ }
1093
+ }
1094
+ if (numberOfChannels !== null && numberOfChannels > 1) {
1095
+ psPresent = false;
1096
+ }
1077
1097
  return {
1078
1098
  objectType,
1099
+ coreObjectType,
1079
1100
  frequencyIndex,
1080
- sampleRate,
1081
1101
  channelConfiguration,
1082
- numberOfChannels
1102
+ outputSampleRate,
1103
+ outputNumberOfChannels: psPresent && numberOfChannels === 1 ? 2 : numberOfChannels
1104
+ };
1105
+ };
1106
+ var readAacObjectType = (bitstream) => {
1107
+ const objectType = bitstream.readBits(5);
1108
+ return objectType === 31 ? 32 + bitstream.readBits(6) : objectType;
1109
+ };
1110
+ var readAacSamplingFrequency = (bitstream) => {
1111
+ const frequencyIndex = bitstream.readBits(4);
1112
+ if (frequencyIndex === 15) {
1113
+ return {
1114
+ frequencyIndex,
1115
+ sampleRate: bitstream.readBits(24)
1116
+ };
1117
+ }
1118
+ return {
1119
+ frequencyIndex,
1120
+ sampleRate: frequencyIndex < aacFrequencyTable.length ? aacFrequencyTable[frequencyIndex] : null
1083
1121
  };
1084
1122
  };
1085
1123
  var buildAdtsHeaderTemplate = (config) => {
1086
1124
  const header = new Uint8Array(7);
1087
1125
  const bitstream = new Bitstream(header);
1088
- const { objectType, frequencyIndex, channelConfiguration } = config;
1089
- const profile = objectType - 1;
1126
+ const { coreObjectType, frequencyIndex, channelConfiguration } = config;
1127
+ const profile = coreObjectType - 1;
1090
1128
  bitstream.writeBits(12, 4095);
1091
1129
  bitstream.writeBits(1, 0);
1092
1130
  bitstream.writeBits(2, 0);
@@ -2265,6 +2303,20 @@ var MediabunnyServer = (() => {
2265
2303
  }
2266
2304
  return new Uint8Array(bytes);
2267
2305
  };
2306
+ var VP9_COLOR_SPACE_TABLE = {
2307
+ 1: { colourPrimaries: 5, transferCharacteristics: 6, matrixCoefficients: 5 },
2308
+ // CS_BT_601
2309
+ 2: { colourPrimaries: 1, transferCharacteristics: 1, matrixCoefficients: 1 },
2310
+ // CS_BT_709
2311
+ 3: { colourPrimaries: 6, transferCharacteristics: 6, matrixCoefficients: 6 },
2312
+ // CS_SMPTE_170
2313
+ 4: { colourPrimaries: 7, transferCharacteristics: 7, matrixCoefficients: 7 },
2314
+ // CS_SMPTE_240
2315
+ 5: { colourPrimaries: 9, transferCharacteristics: 14, matrixCoefficients: 9 },
2316
+ // CS_BT_2020
2317
+ 7: { colourPrimaries: 1, transferCharacteristics: 13, matrixCoefficients: 0 }
2318
+ // CS_RGB (sRGB)
2319
+ };
2268
2320
  var extractVp9CodecInfoFromPacket = (packet) => {
2269
2321
  const bitstream = new Bitstream(packet);
2270
2322
  const frameMarker = bitstream.readBits(2);
@@ -2325,9 +2377,10 @@ var MediabunnyServer = (() => {
2325
2377
  break;
2326
2378
  }
2327
2379
  }
2328
- const matrixCoefficients = colorSpace === 7 ? 0 : colorSpace === 2 ? 1 : colorSpace === 1 ? 6 : 2;
2329
- const colourPrimaries = colorSpace === 2 ? 1 : colorSpace === 1 ? 6 : 2;
2330
- const transferCharacteristics = colorSpace === 2 ? 1 : colorSpace === 1 ? 6 : 2;
2380
+ const colorSpaceValues = VP9_COLOR_SPACE_TABLE[colorSpace];
2381
+ const colourPrimaries = colorSpaceValues?.colourPrimaries ?? 2;
2382
+ const transferCharacteristics = colorSpaceValues?.transferCharacteristics ?? 2;
2383
+ const matrixCoefficients = colorSpaceValues?.matrixCoefficients ?? 2;
2331
2384
  return {
2332
2385
  profile,
2333
2386
  level,
@@ -2345,7 +2398,7 @@ var MediabunnyServer = (() => {
2345
2398
  let value = 0;
2346
2399
  for (let i = 0; i < 8; i++) {
2347
2400
  const byte = bitstream.readAlignedByte();
2348
- value |= (byte & 127) << i * 7;
2401
+ value += (byte & 127) * 2 ** (i * 7);
2349
2402
  if (!(byte & 128)) {
2350
2403
  break;
2351
2404
  }
@@ -2353,7 +2406,7 @@ var MediabunnyServer = (() => {
2353
2406
  return null;
2354
2407
  }
2355
2408
  }
2356
- if (value >= 2 ** 32 - 1) {
2409
+ if (value > 2 ** 32 - 1) {
2357
2410
  return null;
2358
2411
  }
2359
2412
  return value;
@@ -2399,21 +2452,29 @@ var MediabunnyServer = (() => {
2399
2452
  seqLevel = bitstream.readBits(5);
2400
2453
  } else {
2401
2454
  const timingInfoPresentFlag = bitstream.readBits(1);
2455
+ let decoderModelInfoPresentFlag = 0;
2402
2456
  if (timingInfoPresentFlag) {
2403
2457
  bitstream.skipBits(32);
2404
2458
  bitstream.skipBits(32);
2405
2459
  const equalPictureInterval = bitstream.readBits(1);
2406
2460
  if (equalPictureInterval) {
2407
- return null;
2461
+ let leadingZeros = 0;
2462
+ while (leadingZeros < 32 && !bitstream.readBits(1)) {
2463
+ leadingZeros++;
2464
+ }
2465
+ if (leadingZeros < 32) {
2466
+ bitstream.skipBits(leadingZeros);
2467
+ }
2468
+ }
2469
+ decoderModelInfoPresentFlag = bitstream.readBits(1);
2470
+ if (decoderModelInfoPresentFlag) {
2471
+ bufferDelayLengthMinus1 = bitstream.readBits(5);
2472
+ bitstream.skipBits(32);
2473
+ bitstream.skipBits(5);
2474
+ bitstream.skipBits(5);
2408
2475
  }
2409
2476
  }
2410
- const decoderModelInfoPresentFlag = bitstream.readBits(1);
2411
- if (decoderModelInfoPresentFlag) {
2412
- bufferDelayLengthMinus1 = bitstream.readBits(5);
2413
- bitstream.skipBits(32);
2414
- bitstream.skipBits(5);
2415
- bitstream.skipBits(5);
2416
- }
2477
+ const initialDisplayDelayPresentFlag = bitstream.readBits(1);
2417
2478
  const operatingPointsCntMinus1 = bitstream.readBits(5);
2418
2479
  for (let i = 0; i <= operatingPointsCntMinus1; i++) {
2419
2480
  bitstream.skipBits(12);
@@ -2436,9 +2497,11 @@ var MediabunnyServer = (() => {
2436
2497
  bitstream.skipBits(1);
2437
2498
  }
2438
2499
  }
2439
- const initialDisplayDelayPresentFlag = bitstream.readBits(1);
2440
2500
  if (initialDisplayDelayPresentFlag) {
2441
- bitstream.skipBits(4);
2501
+ const initialDisplayDelayPresentForThisOp = bitstream.readBits(1);
2502
+ if (initialDisplayDelayPresentForThisOp) {
2503
+ bitstream.skipBits(4);
2504
+ }
2442
2505
  }
2443
2506
  }
2444
2507
  }
@@ -2503,10 +2566,27 @@ var MediabunnyServer = (() => {
2503
2566
  if (seqProfile !== 1) {
2504
2567
  monochrome = bitstream.readBits(1);
2505
2568
  }
2569
+ let colourPrimaries = 2;
2570
+ let transferCharacteristics = 2;
2571
+ let matrixCoefficients = 2;
2572
+ const colorDescriptionPresentFlag = bitstream.readBits(1);
2573
+ if (colorDescriptionPresentFlag) {
2574
+ colourPrimaries = bitstream.readBits(8);
2575
+ transferCharacteristics = bitstream.readBits(8);
2576
+ matrixCoefficients = bitstream.readBits(8);
2577
+ }
2578
+ let videoFullRangeFlag = 0;
2506
2579
  let chromaSubsamplingX = 1;
2507
2580
  let chromaSubsamplingY = 1;
2508
2581
  let chromaSamplePosition = 0;
2509
- if (!monochrome) {
2582
+ if (monochrome) {
2583
+ videoFullRangeFlag = bitstream.readBits(1);
2584
+ } else if (colourPrimaries === 1 && transferCharacteristics === 13 && matrixCoefficients === 0) {
2585
+ videoFullRangeFlag = 1;
2586
+ chromaSubsamplingX = 0;
2587
+ chromaSubsamplingY = 0;
2588
+ } else {
2589
+ videoFullRangeFlag = bitstream.readBits(1);
2510
2590
  if (seqProfile === 0) {
2511
2591
  chromaSubsamplingX = 1;
2512
2592
  chromaSubsamplingY = 1;
@@ -2516,9 +2596,10 @@ var MediabunnyServer = (() => {
2516
2596
  } else {
2517
2597
  if (bitDepth === 12) {
2518
2598
  chromaSubsamplingX = bitstream.readBits(1);
2519
- if (chromaSubsamplingX) {
2520
- chromaSubsamplingY = bitstream.readBits(1);
2521
- }
2599
+ chromaSubsamplingY = chromaSubsamplingX ? bitstream.readBits(1) : 0;
2600
+ } else {
2601
+ chromaSubsamplingX = 1;
2602
+ chromaSubsamplingY = 0;
2522
2603
  }
2523
2604
  }
2524
2605
  if (chromaSubsamplingX && chromaSubsamplingY) {
@@ -2533,7 +2614,11 @@ var MediabunnyServer = (() => {
2533
2614
  monochrome,
2534
2615
  chromaSubsamplingX,
2535
2616
  chromaSubsamplingY,
2536
- chromaSamplePosition
2617
+ chromaSamplePosition,
2618
+ videoFullRangeFlag,
2619
+ colourPrimaries,
2620
+ transferCharacteristics,
2621
+ matrixCoefficients
2537
2622
  };
2538
2623
  }
2539
2624
  return null;
@@ -5,6 +5,6 @@
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
- "use strict";var MediabunnyServer=(()=>{var Bt=Object.create;var me=Object.defineProperty;var wt=Object.getOwnPropertyDescriptor;var It=Object.getOwnPropertyNames;var Tt=Object.getPrototypeOf,Ft=Object.prototype.hasOwnProperty;var N=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Pt=(t,e)=>{for(var r in e)me(t,r,{get:e[r],enumerable:!0})},ze=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of It(e))!Ft.call(t,o)&&o!==r&&me(t,o,{get:()=>e[o],enumerable:!(n=wt(e,o))||n.enumerable});return t};var j=(t,e,r)=>(r=t!=null?Bt(Tt(t)):{},ze(e||!t||!t.__esModule?me(r,"default",{value:t,enumerable:!0}):r,t)),Rt=t=>ze(me({},"__esModule",{value:!0}),t);var rr={};Pt(rr,{AvFrameAudioSampleResource:()=>Q,AvFrameVideoSampleResource:()=>q,_serverOptions:()=>Y,registerMediabunnyServer:()=>er,toAvFrame:()=>tr});var k=N("mediabunny"),X=j(N("node-av"));var xe=N("mediabunny"),b=j(N("node-av"));var i=j(N("node-av"));var $={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},Ie,He=()=>Y.hardwareContext!==void 0&&typeof Y.hardwareContext!="function"?Y.hardwareContext:(Ie===void 0&&(Ie=i.HardwareContext.auto()),Ie),qe=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.")},Te=new Map,We=async t=>{if(typeof Y.hardwareContext=="function"){let e=await Y.hardwareContext(t);return qe(e),e?.getDecoderCodec(t)??null}if(!Te.has(t)){let e=He();Te.set(t,e?.getDecoderCodec(t)??null)}return Te.get(t)},Fe=new Map,Xe=async t=>{if(typeof Y.hardwareContext=="function"){let e=await Y.hardwareContext(t);return qe(e),e?.getEncoderCodec(t)??null}if(!Fe.has(t)){let e=He();Fe.set(t,e?.getEncoderCodec(t)??null)}return Fe.get(t)},Ge=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},fe=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},Ye=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},pe=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},Ke=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},he=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},Qe=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}},Pe=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}},$e=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}},Je=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}},ee=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}}},Vt=0x603n,je=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:Vt};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 U=class U{constructor(){}static get level(){return U._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.");U._level=e}static get _emitter(){return U._emitterInstance??=new ge}static on(e,r,n){return U._emitter.on(e,r,n)}static _error(...e){U._emitter._emit("error",e),U._level>=1&&console.error(...e)}static _warn(...e){U._emitter._emit("warn",e),U._level>=2&&console.warn(...e)}static _info(...e){U._emitter._emit("info",e),U._level>=3&&console.info(...e)}};U._level=3,U._emitterInstance=null;var te=U;function f(t){if(!t)throw new Error("Assertion failed.")}var ie=t=>t&&t[t.length-1];var A=t=>{let e=0;for(;t.readBits(1)===0&&e<32;)e++;if(e>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<e)-1+t.readBits(e)},K=t=>{let e=A(t);return(e&1)===0?-(e>>1):e+1>>1};var O=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Re=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var Ze={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var et={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var tt={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Ve=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var Ne=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 oe=(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 Me=t=>{throw new Error(`Unexpected value: ${t}`)};var cr=1e6*(1+Number.EPSILON);var Ce=t=>{f(Number.isInteger(t.num)),f(Number.isInteger(t.den)),f(t.den!==0);let e=Math.abs(t.num),r=Math.abs(t.den);for(;r!==0;){let o=e%r;e=r,r=o}let n=e||1;return{num:t.num/n,den:t.den/n}};var ge=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)}}};var re=N("mediabunny"),p=j(N("node-av"));var Nt=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]),q=class t extends re.VideoSampleResource{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 Qe(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 re.VideoSampleColorSpace({primaries:fe(this.frame.colorPrimaries),transfer:pe(this.frame.colorTrc),matrix:he(this.frame.colorSpace),fullRange:this.frame.colorRange===p.AVCOL_RANGE_JPEG||Nt.has(this.frame.format)?!0:this.frame.colorRange===p.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return f(this.frame.data),this.frame.data.map((e,r)=>({data:O(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=Pe("RGBA");s.getContext(n,o,a,n,o,l,p.SWS_BILINEAR);let m=new p.Frame;m.width=n,m.height=o,m.format=l,m.alloc(),m.allocBuffer();let c=this.frame;try{await s.scaleFrame(m,c)}finally{s.freeContext()}return m.sampleAspectRatio=c.sampleAspectRatio,new re.VideoSample(new t(m),e)}},Ae=async(t,e,r)=>{f(t.format!==null),e.format=Pe(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new p.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=Ge(t.colorSpace.primaries??"unknown")??p.AVCOL_PRI_UNSPECIFIED,e.colorSpace=Ke(t.colorSpace.matrix??"unknown")??p.AVCOL_SPC_UNSPECIFIED,e.colorTrc=Ye(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},rt=async(t,e)=>{let r,n=!1;if(t._data instanceof q)r=t._data.frame;else{if(t.format===null)return null;r=new p.Frame,r.alloc(),n=!0,await Ae(t,r,null)}let o=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(o.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),o.push("setsar=1")),e.rotation===90?o.push("transpose=1"):e.rotation===180?o.push("transpose=1,transpose=1"):e.rotation===270&&o.push("transpose=2"),o.push(`crop=${Math.round(e.crop.width)}:${Math.round(e.crop.height)}:${Math.round(e.crop.left)}:${Math.round(e.crop.top)}`),e.fit==="fill"?o.push(`scale=${e.width}:${e.height}`):e.fit==="contain"?(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=decrease`),o.push(`pad=${e.width}:${e.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):e.fit==="cover"&&(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=increase`),o.push(`crop=${e.width}:${e.height}`)),o.push("setsar=1");let s=new p.FilterGraph;s.alloc();try{let a=`video_size=${r.width}x${r.height}:pix_fmt=${r.format}:time_base=1/1000000:pixel_aspect=${t.pixelAspectRatio.num}/${t.pixelAspectRatio.den}`,l=s.createFilter(p.Filter.getByName("buffer"),"src",a),m=s.createFilter(p.Filter.getByName("buffersink"),"sink");f(l&&m);let c=p.FilterInOut.createList([{name:"in",filterCtx:l,padIdx:0}]),d=p.FilterInOut.createList([{name:"out",filterCtx:m,padIdx:0}]),h=s.parsePtr(`[in]${o.join(",")}[out]`,d,c);p.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let y=await s.config();p.FFmpegError.throwIfError(y,"FilterGraph.config");let F=await l.buffersrcAddFrame(r);p.FFmpegError.throwIfError(F,"buffersrcAddFrame"),await l.buffersrcAddFrame(null);let g=new p.Frame;g.alloc();let x=await m.buffersinkGetFrame(g);return p.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new re.VideoSample(new q(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),n&&r.free()}};var be=class extends xe.CustomVideoDecoder{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(r,n){return r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1"}async init(){this.frame=new b.Frame,this.frame.alloc(),this.packet=new b.Packet,this.packet.alloc()}async initCodecContext(r){f(this.codecContext===null);let n=$[this.codec];f(n!==void 0);let o;if(this.codec==="vp9"&&r.sideData.alpha?o=b.Codec.findDecoderByName(b.FF_DECODER_LIBVPX_VP9)??b.Codec.findDecoder(n):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?o=b.Codec.findDecoder(n):o=await We(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=Ce({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(O(this.config.description)):null,s.sampleAspectRatio=new b.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=await s.open2();b.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=s}async decode(r){if(this.codecContext===null&&await this.initCodecContext(r),f(this.codecContext),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(r.microsecondTimestamp),this.packet.dts=b.AV_NOPTS_VALUE,this.packet.duration=BigInt(r.microsecondDuration),r.sideData.alpha){let a=Buffer.alloc(8+r.sideData.alpha.byteLength);a[7]=1,a.set(r.sideData.alpha,8),this.packet.addSideData(b.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let n=oe(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=oe(this.preciseTimings,Number(this.frame.pts),m=>m.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(n=a.timestamp),a.durationIsValid&&(o=a.duration));let l=this.frame.clone();if(!l)throw new Error("Frame clone allocation failed.");this.onSample(new xe.VideoSample(new q(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()}};var ae=N("mediabunny"),u=j(N("node-av"));var W=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 nt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Mt=[-1,1,2,3,4,5,6,8],it=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new W(t),r=e.readBits(5);r===31&&(r=32+e.readBits(6));let n=e.readBits(4),o=null;n===15?o=e.readBits(24):n<nt.length&&(o=nt[n]);let s=e.readBits(4),a=null;return s>=1&&s<=7&&(a=Mt[s]),{objectType:r,frequencyIndex:n,sampleRate:o,channelConfiguration:s,numberOfChannels:a}};var ot=t=>{let e=new Uint8Array(7),r=new W(e),{objectType:n,frequencyIndex:o,channelConfiguration:s}=t,a=n-1;return r.writeBits(12,4095),r.writeBits(1,0),r.writeBits(2,0),r.writeBits(1,1),r.writeBits(2,a),r.writeBits(4,o),r.writeBits(1,0),r.writeBits(3,s),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.skipBits(13),r.writeBits(11,2047),r.writeBits(2,0),{header:e,bitstream:r}};var Ut=["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"],Ot=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],Fr=[...Ot,...Ut];var ke=[{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 ne=[{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 st=".01.01.01.01.00",at=".0.110.01.01.01.0",Lt=["ap4x","ap4h","apch","apcn","apcs","apco"];var se=t=>{let{codec:e,codecDescription:r,colorSpace:n,avcCodecInfo:o,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:l,proresFormat:m}=t;if(e==="avc"){if(f(t.avcType!==null),o){let c=new Uint8Array([o.avcProfileIndication,o.profileCompatibility,o.avcLevelIndication]);return`avc${t.avcType}.${Ve(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}.${Ve(r.subarray(1,4))}`}else if(e==="hevc"){let c,d,h,y,F,g;if(s)c=s.generalProfileSpace,d=s.generalProfileIdc,h=Ne(s.generalProfileCompatibilityFlags),y=s.generalTierFlag,F=s.generalLevelIdc,g=[...s.generalConstraintIndicatorFlags];else{if(!r||r.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let C=Re(r),_=C.getUint8(1);c=_>>6&3,d=_&31,h=Ne(C.getUint32(2)),y=_>>5&1,F=C.getUint8(12),g=[];for(let T=0;T<6;T++)g.push(C.getUint8(6+T))}let x="hev1.";for(x+=["","A","B","C"][c]+d,x+=".",x+=h.toString(16).toUpperCase(),x+=".",x+=y===0?"L":"H",x+=F;g.length>0&&g[g.length-1]===0;)g.pop();return g.length>0&&(x+=".",x+=g.map(C=>C.toString(16).toUpperCase()).join(".")),x}else{if(e==="vp8")return"vp8";if(e==="vp9"){if(!a){let T=t.width*t.height,B=ie(ne).level;for(let P of ne)if(T<=P.maxPictureSize){B=P.level;break}return`vp09.00.${B.toString().padStart(2,"0")}.08`}let c=a.profile.toString().padStart(2,"0"),d=a.level.toString().padStart(2,"0"),h=a.bitDepth.toString().padStart(2,"0"),y=a.chromaSubsampling.toString().padStart(2,"0"),F=a.colourPrimaries.toString().padStart(2,"0"),g=a.transferCharacteristics.toString().padStart(2,"0"),x=a.matrixCoefficients.toString().padStart(2,"0"),C=a.videoFullRangeFlag.toString().padStart(2,"0"),_=`vp09.${c}.${d}.${h}.${y}`;return _+=`.${F}.${g}.${x}.${C}`,_.endsWith(st)&&(_=_.slice(0,-st.length)),_}else if(e==="av1"){if(!l){let P=t.width*t.height,w=ie(ne).level;for(let E of ne)if(P<=E.maxPictureSize){w=E.level;break}return`av01.0.${w.toString().padStart(2,"0")}M.08`}let c=l.profile,d=l.level.toString().padStart(2,"0"),h=l.tier?"H":"M",y=l.bitDepth.toString().padStart(2,"0"),F=l.monochrome?"1":"0",g=100*l.chromaSubsamplingX+10*l.chromaSubsamplingY+1*(l.chromaSubsamplingX&&l.chromaSubsamplingY?l.chromaSamplePosition:0),x=n?.primaries?Ze[n.primaries]:1,C=n?.transfer?et[n.transfer]:1,_=n?.matrix?tt[n.matrix]:1,T=n?.fullRange?1:0,B=`av01.${c}.${d}${h}.${y}`;return B+=`.${F}.${g.toString().padStart(3,"0")}`,B+=`.${x.toString().padStart(2,"0")}`,B+=`.${C.toString().padStart(2,"0")}`,B+=`.${_.toString().padStart(2,"0")}`,B+=`.${T}`,B.endsWith(at)&&(B=B.slice(0,-at.length)),B}else{if(e==="prores")return m??"apch";e!==null&&Me(e)}}throw new TypeError(`Unhandled codec '${e}'.`)};var Pr=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Lt];var _e=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 Ue=t=>t&31,Oe=t=>{let e=[],r=t.length;for(let n=0;n<r;n++)n+2<r&&t[n]===0&&t[n+1]===0&&t[n+2]===3?(e.push(0,0),n+=2):e.push(t[n]);return new Uint8Array(e)},Qr=new Uint8Array([0,0,0,1]);var dt=t=>{try{let e=[],r=[],n=[];for(let l of _e(t)){let m=t.subarray(l.offset,l.offset+l.length),c=Ue(m[0]);c===7?e.push(m):c===8?r.push(m):c===13&&n.push(m)}if(e.length===0||r.length===0)return null;let o=e[0],s=Dt(o);f(s!==null);let a=s.profileIdc===100||s.profileIdc===110||s.profileIdc===122||s.profileIdc===144;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:e,pictureParameterSets:r,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?n:null}}catch(e){return te._error("Error building AVC Decoder Configuration Record:",e),null}},At=t=>{let e=[];e.push(t.configurationVersion),e.push(t.avcProfileIndication),e.push(t.profileCompatibility),e.push(t.avcLevelIndication),e.push(252|t.lengthSizeMinusOne&3),e.push(224|t.sequenceParameterSets.length&31);for(let r of t.sequenceParameterSets){let n=r.byteLength;e.push(n>>8),e.push(n&255);for(let o=0;o<n;o++)e.push(r[o])}e.push(t.pictureParameterSets.length);for(let r of t.pictureParameterSets){let n=r.byteLength;e.push(n>>8),e.push(n&255);for(let o=0;o<n;o++)e.push(r[o])}if(t.avcProfileIndication===100||t.avcProfileIndication===110||t.avcProfileIndication===122||t.avcProfileIndication===144){f(t.chromaFormat!==null),f(t.bitDepthLumaMinus8!==null),f(t.bitDepthChromaMinus8!==null),f(t.sequenceParameterSetExt!==null),e.push(252|t.chromaFormat&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.sequenceParameterSetExt.length);for(let r of t.sequenceParameterSetExt){let n=r.byteLength;e.push(n>>8),e.push(n&255);for(let o=0;o<n;o++)e.push(r[o])}}return new Uint8Array(e)};var ut={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}},Dt=t=>{try{let e=new W(Oe(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let n=e.readAlignedByte(),o=e.readAlignedByte(),s=e.readAlignedByte();A(e);let a=1,l=0,m=0,c=0;if((n===100||n===110||n===122||n===244||n===44||n===83||n===86||n===118||n===128)&&(a=A(e),a===3&&(c=e.readBits(1)),l=A(e),m=A(e),e.skipBits(1),e.readBits(1))){for(let S=0;S<(a!==3?8:12);S++)if(e.readBits(1)){let J=S<6?16:64,z=8,V=8;for(let H=0;H<J;H++){if(V!==0){let Z=K(e);V=(z+Z+256)%256}z=V===0?z:V}}}A(e);let d=A(e);if(d===0)A(e);else if(d===1){e.skipBits(1),K(e),K(e);let L=A(e);for(let S=0;S<L;S++)K(e)}A(e),e.skipBits(1);let h=A(e),y=A(e),F=16*(h+1),g=16*(y+1),x=F,C=g,_=e.readBits(1);if(_||e.skipBits(1),e.skipBits(1),e.readBits(1)){let L=A(e),S=A(e),G=A(e),J=A(e),z,V;if((c===0?a:0)===0)z=1,V=2-_;else{let Z=a===3?1:2,de=a===1?2:1;z=Z,V=de*(2-_)}x-=z*(L+S),C-=V*(G+J)}let B=2,P=2,w=2,E=0,M={num:1,den:1},R=null,D=null;if(e.readBits(1)){if(e.readBits(1)){let de=e.readBits(8);if(de===255)M={num:e.readBits(16),den:e.readBits(16)};else{let De=ut[de];De&&(M=De)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),E=e.readBits(1),e.readBits(1)&&(B=e.readBits(8),P=e.readBits(8),w=e.readBits(8))),e.readBits(1)&&(A(e),A(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let V=e.readBits(1);V&&ct(e);let H=e.readBits(1);H&&ct(e),(V||H)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),A(e),A(e),A(e),A(e),R=A(e),D=A(e))}if(R===null){f(D===null);let L=o&16;if((n===44||n===86||n===100||n===110||n===122||n===244)&&L)R=0,D=0;else{let S=h+1,G=y+1,J=(2-_)*G,z=ke.find(H=>H.level>=s)??ie(ke),V=Math.min(Math.floor(z.maxDpbMbs/(S*J)),16);R=V,D=V}}return f(D!==null),{profileIdc:n,constraintFlags:o,levelIdc:s,frameMbsOnlyFlag:_,chromaFormatIdc:a,bitDepthLumaMinus8:l,bitDepthChromaMinus8:m,codedWidth:F,codedHeight:g,displayWidth:x,displayHeight:C,pixelAspectRatio:M,colourPrimaries:B,matrixCoefficients:w,transferCharacteristics:P,fullRangeFlag:E,numReorderFrames:R,maxDecFrameBuffering:D}}catch(e){return te._error("Error parsing AVC SPS:",e),null}},ct=t=>{let e=A(t);t.skipBits(4),t.skipBits(4);for(let r=0;r<=e;r++)A(t),A(t),t.skipBits(1);t.skipBits(5),t.skipBits(5),t.skipBits(5),t.skipBits(5)};var ve=t=>t>>1&63,zt=t=>{try{let e=new W(Oe(t));e.skipBits(16),e.readBits(4);let r=e.readBits(3),n=e.readBits(1),{general_profile_space:o,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:l,general_constraint_indicator_flags:m,general_level_idc:c}=Ht(e,r);A(e);let d=A(e),h=0;d===3&&(h=e.readBits(1));let y=A(e),F=A(e),g=y,x=F;if(e.readBits(1)){let S=A(e),G=A(e),J=A(e),z=A(e),V=1,H=1,Z=h===0?d:0;Z===1?(V=2,H=2):Z===2&&(V=2,H=1),g-=(S+G)*V,x-=(J+z)*H}let C=A(e),_=A(e);A(e);let B=e.readBits(1)?0:r,P=0;for(let S=B;S<=r;S++)A(e),P=A(e),A(e);A(e),A(e),A(e),A(e),A(e),A(e),e.readBits(1)&&e.readBits(1)&&qt(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),A(e),A(e),e.skipBits(1));let w=A(e);if(Wt(e,w),e.readBits(1)){let S=A(e);for(let G=0;G<S;G++)A(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let E=2,M=2,R=2,D=0,ue=0,L={num:1,den:1};if(e.readBits(1)){let S=Gt(e,r);L=S.pixelAspectRatio,E=S.colourPrimaries,M=S.transferCharacteristics,R=S.matrixCoefficients,D=S.fullRangeFlag,ue=S.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:L,colourPrimaries:E,transferCharacteristics:M,matrixCoefficients:R,fullRangeFlag:D,maxDecFrameBuffering:P+1,spsMaxSubLayersMinus1:r,spsTemporalIdNestingFlag:n,generalProfileSpace:o,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:l,generalConstraintIndicatorFlags:m,generalLevelIdc:c,chromaFormatIdc:d,bitDepthLumaMinus8:C,bitDepthChromaMinus8:_,minSpatialSegmentationIdc:ue}}catch(e){return te._error("Error parsing HEVC SPS:",e),null}},mt=t=>{try{let e=[],r=[],n=[],o=[];for(let c of _e(t)){let d=t.subarray(c.offset,c.offset+c.length),h=ve(d[0]);h===32?e.push(d):h===33?r.push(d):h===34?n.push(d):(h===39||h===40)&&o.push(d)}if(r.length===0||n.length===0)return null;let s=zt(r[0]);if(!s)return null;let a=0;if(n.length>0){let c=n[0],d=new W(Oe(c));d.skipBits(16),A(d),A(d),d.skipBits(1),d.skipBits(1),d.skipBits(3),d.skipBits(1),d.skipBits(1),A(d),A(d),K(d),d.skipBits(1),d.skipBits(1),d.readBits(1)&&A(d),K(d),K(d),d.skipBits(1),d.skipBits(1),d.skipBits(1),d.skipBits(1);let h=d.readBits(1),y=d.readBits(1);!h&&!y?a=0:h&&!y?a=2:!h&&y?a=3:a=0}let l=[...e.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:r}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:n}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:ve(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 te._error("Error building HEVC Decoder Configuration Record:",e),null}},Ht=(t,e)=>{let r=t.readBits(2),n=t.readBits(1),o=t.readBits(5),s=0;for(let d=0;d<32;d++)s=s<<1|t.readBits(1);let a=new Uint8Array(6);for(let d=0;d<6;d++)a[d]=t.readBits(8);let l=t.readBits(8),m=[],c=[];for(let d=0;d<e;d++)m.push(t.readBits(1)),c.push(t.readBits(1));if(e>0)for(let d=e;d<8;d++)t.skipBits(2);for(let d=0;d<e;d++)m[d]&&t.skipBits(88),c[d]&&t.skipBits(8);return{general_profile_space:r,general_tier_flag:n,general_profile_idc:o,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:l}},qt=t=>{for(let e=0;e<4;e++)for(let r=0;r<(e===3?2:6);r++)if(!t.readBits(1))A(t);else{let o=Math.min(64,1<<4+(e<<1));e>1&&K(t);for(let s=0;s<o;s++)K(t)}},Wt=(t,e)=>{let r=[];for(let n=0;n<e;n++)r[n]=Xt(t,n,e,r)},Xt=(t,e,r,n)=>{let o=0,s=0,a=0;if(e!==0&&(s=t.readBits(1)),s){if(e===r){let m=A(t);a=e-(m+1)}else a=e-1;t.readBits(1),A(t);let l=n[a]??0;for(let m=0;m<=l;m++)t.readBits(1)||t.readBits(1);o=n[a]}else{let l=A(t),m=A(t);for(let c=0;c<l;c++)A(t),t.readBits(1);for(let c=0;c<m;c++)A(t),t.readBits(1);o=l+m}return o},Gt=(t,e)=>{let r=2,n=2,o=2,s=0,a=0,l={num:1,den:1};if(t.readBits(1)){let m=t.readBits(8);if(m===255)l={num:t.readBits(16),den:t.readBits(16)};else{let c=ut[m];c&&(l=c)}}return t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),s=t.readBits(1),t.readBits(1)&&(r=t.readBits(8),n=t.readBits(8),o=t.readBits(8))),t.readBits(1)&&(A(t),A(t)),t.readBits(1),t.readBits(1),t.readBits(1),t.readBits(1)&&(A(t),A(t),A(t),A(t)),t.readBits(1)&&(t.readBits(32),t.readBits(32),t.readBits(1)&&A(t),t.readBits(1)&&Yt(t,!0,e)),t.readBits(1)&&(t.readBits(1),t.readBits(1),t.readBits(1),a=A(t),A(t),A(t),A(t),A(t)),{pixelAspectRatio:l,colourPrimaries:r,transferCharacteristics:n,matrixCoefficients:o,fullRangeFlag:s,minSpatialSegmentationIdc:a}},Yt=(t,e,r)=>{let n=!1,o=!1,s=!1;e&&(n=t.readBits(1)===1,o=t.readBits(1)===1,(n||o)&&(s=t.readBits(1)===1,s&&(t.readBits(8),t.readBits(5),t.readBits(1),t.readBits(5)),t.readBits(4),t.readBits(4),s&&t.readBits(4),t.readBits(5),t.readBits(5),t.readBits(5)));for(let a=0;a<=r;a++){let l=t.readBits(1)===1,m=!0;l||(m=t.readBits(1)===1);let c=!1;m?A(t):c=t.readBits(1)===1;let d=1;c||(d=A(t)+1),n&&lt(t,d,s),o&&lt(t,d,s)}},lt=(t,e,r)=>{for(let n=0;n<e;n++)A(t),A(t),r&&(A(t),A(t)),t.readBits(1)},ft=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 pt=t=>{let e=new W(t);if(e.readBits(2)!==2)return null;let n=e.readBits(1),s=(e.readBits(1)<<1)+n;if(s===3&&e.skipBits(1),e.readBits(1)===1||e.readBits(1)!==0||(e.skipBits(2),e.readBits(24)!==4817730))return null;let c=8;s>=2&&(c=e.readBits(1)?12:10);let d=e.readBits(3),h=0,y=0;if(d!==7)if(y=e.readBits(1),s===1||s===3){let M=e.readBits(1),R=e.readBits(1);h=!M&&!R?3:M&&!R?2:1,e.skipBits(1)}else h=1;else h=3,y=1;let F=e.readBits(16),g=e.readBits(16),x=F+1,C=g+1,_=x*C,T=ie(ne).level;for(let E of ne)if(_<=E.maxPictureSize){T=E.level;break}return{profile:s,level:T,bitDepth:c,chromaSubsampling:h,videoFullRangeFlag:y,colourPrimaries:d===2?1:d===1?6:2,transferCharacteristics:d===2?1:d===1?6:2,matrixCoefficients:d===7?0:d===2?1:d===1?6:2}},Kt=function*(t){let e=new W(t),r=()=>{let n=0;for(let o=0;o<8;o++){let s=e.readAlignedByte();if(n|=(s&127)<<o*7,!(s&128))break;if(o===7&&s&128)return null}return n>=2**32-1?null:n};for(;e.getBitsLeft()>=8;){e.skipBits(1);let n=e.readBits(4),o=e.readBits(1),s=e.readBits(1);e.skipBits(1),o&&e.skipBits(8);let a;if(s){let l=r();if(l===null)return;a=l}else a=Math.floor(e.getBitsLeft()/8);f(e.pos%8===0),yield{type:n,data:t.subarray(e.pos/8,e.pos/8+a)},e.skipBits(a*8)}},ht=t=>{for(let{type:e,data:r}of Kt(t)){if(e!==1)continue;let n=new W(r),o=n.readBits(3),s=n.readBits(1),a=n.readBits(1),l=0,m=0,c=0;if(a)l=n.readBits(5);else{if(n.readBits(1)&&(n.skipBits(32),n.skipBits(32),n.readBits(1)))return null;let E=n.readBits(1);E&&(c=n.readBits(5),n.skipBits(32),n.skipBits(5),n.skipBits(5));let M=n.readBits(5);for(let R=0;R<=M;R++){n.skipBits(12);let D=n.readBits(5);if(R===0&&(l=D),D>7){let L=n.readBits(1);R===0&&(m=L)}if(E&&n.readBits(1)){let S=c+1;n.skipBits(S),n.skipBits(S),n.skipBits(1)}n.readBits(1)&&n.skipBits(4)}}let d=n.readBits(4),h=n.readBits(4),y=d+1;n.skipBits(y);let F=h+1;n.skipBits(F);let g=0;if(a?g=0:g=n.readBits(1),g&&(n.skipBits(4),n.skipBits(3)),n.skipBits(1),n.skipBits(1),n.skipBits(1),!a){n.skipBits(1),n.skipBits(1),n.skipBits(1),n.skipBits(1);let w=n.readBits(1);w&&(n.skipBits(1),n.skipBits(1));let E=n.readBits(1),M=0;E?M=2:M=n.readBits(1),M>0&&(n.readBits(1)||n.skipBits(1)),w&&n.skipBits(3)}n.skipBits(1),n.skipBits(1),n.skipBits(1);let x=n.readBits(1),C=8;o===2&&x?C=n.readBits(1)?12:10:o<=2&&(C=x?10:8);let _=0;o!==1&&(_=n.readBits(1));let T=1,B=1,P=0;return _||(o===0?(T=1,B=1):o===1?(T=0,B=0):C===12&&(T=n.readBits(1),T&&(B=n.readBits(1))),T&&B&&(P=n.readBits(2))),{profile:o,level:l,tier:m,bitDepth:C,monochrome:_,chromaSubsamplingX:T,chromaSubsamplingY:B,chromaSamplePosition:P}}return null};var $r=[64*2,69*2,96*2,64*2,70*2,96*2,80*2,87*2,120*2,80*2,88*2,120*2,96*2,104*2,144*2,96*2,105*2,144*2,112*2,121*2,168*2,112*2,122*2,168*2,128*2,139*2,192*2,128*2,140*2,192*2,160*2,174*2,240*2,160*2,175*2,240*2,192*2,208*2,288*2,192*2,209*2,288*2,224*2,243*2,336*2,224*2,244*2,336*2,256*2,278*2,384*2,256*2,279*2,384*2,320*2,348*2,480*2,320*2,349*2,480*2,384*2,417*2,576*2,384*2,418*2,576*2,448*2,487*2,672*2,448*2,488*2,672*2,512*2,557*2,768*2,512*2,558*2,768*2,640*2,696*2,960*2,640*2,697*2,960*2,768*2,835*2,1152*2,768*2,836*2,1152*2,896*2,975*2,1344*2,896*2,976*2,1344*2,1024*2,1114*2,1536*2,1024*2,1115*2,1536*2,1152*2,1253*2,1728*2,1152*2,1254*2,1728*2,1280*2,1393*2,1920*2,1280*2,1394*2,1920*2];var Jr=new Uint8Array([5,4,65,67,45,51]),jr=new Uint8Array([5,4,69,65,67,51]);var Qt={apco:u.AV_PROFILE_PRORES_PROXY,apcs:u.AV_PROFILE_PRORES_LT,apcn:u.AV_PROFILE_PRORES_STANDARD,apch:u.AV_PROFILE_PRORES_HQ,ap4h:u.AV_PROFILE_PRORES_4444,ap4x:u.AV_PROFILE_PRORES_XQ},Ee=class extends ae.CustomVideoEncoder{constructor(){super(...arguments);this.codecContext=null;this.scaler=null;this.dstFrame=null;this.lastBuffer=null;this.packetEmitted=!1;this.lastScalerKey=null;this.quantizer=null;this.preciseTimings=[]}static supports(r,n){return n.bitrateMode==="quantizer"?r==="avc"||r==="hevc"||r==="vp9"||r==="av1":r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1"||r==="prores"}async init(){this.frame=new u.Frame,this.frame.alloc(),this.frame.timeBase=new u.Rational(1,1e6),this.packet=new u.Packet,this.packet.alloc();let r=$[this.codec];f(r!==void 0);let n=()=>{if(this.codec==="prores"){let s=u.Codec.findEncoderByName(u.FF_ENCODER_PRORES_KS);if(s)return s}return u.Codec.findEncoder(r)},o=null;if(this.codec==="vp9"&&this.config.alpha==="keep")o=u.Codec.findEncoderByName(u.FF_ENCODER_LIBVPX_VP9)??u.Codec.findEncoder(r);else if(this.config.hardwareAcceleration==="prefer-software")o=n();else{let s=await Xe(r);s&&this.config.bitrateMode==="quantizer"&&!s.name?.endsWith("_nvenc")&&(s=null),o=s??n()}if(!o)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=o,this.config.bitrateMode!=="quantizer"&&await this.createCodecContext()}async createCodecContext(){f(this.codecContext===null);let r=new u.CodecContext;r.allocContext3(this.avCodec);let n=u.AV_PIX_FMT_YUV420P;this.avCodec.pixelFormats&&(this.avCodec.pixelFormats.includes(u.AV_PIX_FMT_YUV420P)||(n=this.avCodec.pixelFormats[0]),this.config.alpha==="keep"&&(this.avCodec.pixelFormats.includes(u.AV_PIX_FMT_YUVA420P)?n=u.AV_PIX_FMT_YUVA420P:n=u.avcodecFindBestPixFmtOfList(this.avCodec.pixelFormats,u.AV_PIX_FMT_YUVA444P12LE)));let o=Ce({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});r.width=this.config.width,r.height=this.config.height,r.pixelFormat=n,r.timeBase=new u.Rational(1,1e6),r.gopSize=60,r.framerate=new u.Rational(Math.round(this.config.framerate??0)||30,1),r.bitRate=this.config.bitrateMode==="quantizer"?0n:BigInt(this.config.bitrate??new ae.Quality("medium")._toVideoBitrate(this.codec,this.config.width,this.config.height)),r.sampleAspectRatio=new u.Rational(o.num,o.den),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let s=this.config.latencyMode==="realtime";if(this.avCodec.name==="libx264"?s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast")):this.avCodec.name==="libx265"?(r.setOption("x265-params","log-level=error"),s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(s&&r.setOption("deadline","realtime"),r.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(r.setOption("deadline","realtime"),s?r.setOption("cpu-used","8"):r.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"?(process.env.SVT_LOG="1",s&&r.setOption("preset","12")):(this.avCodec.name==="h264_nvenc"||this.avCodec.name==="hevc_nvenc")&&r.setOption("forced-idr","1"),this.config.bitrateMode==="quantizer"){f(this.quantizer!==null);let l;if(this.avCodec.name==="libaom-av1"||this.avCodec.name==="libsvtav1"?l=Math.round(this.quantizer/4):l=this.quantizer,this.avCodec.name==="libx264"||this.avCodec.name==="libx265")r.setOption("qp",String(l));else if(this.avCodec.name==="libvpx-vp9"||this.avCodec.name==="libaom-av1")r.setOption("crf",String(l));else if(this.avCodec.name==="libsvtav1")r.setOption("qp",String(l));else if(this.avCodec.name==="librav1e")r.setOption("qp",String(l));else if(this.avCodec.name?.endsWith("_nvenc"))r.setOption("rc","constqp"),r.setOption("qp",String(l));else throw new Error(`Encoder '${this.avCodec.name}' cannot be used for quantizer-based encoding.`);r.qMin=l,r.qMax=l}if(this.codec==="prores"){let l=Qt[this.config.codec];f(l!==void 0),r.setOption("profile",String(l))}let a=await r.open2();u.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=r}async encode(r,n){if(this.config.bitrateMode==="quantizer"){let c;if(this.codec==="avc"?c=n.avc?.quantizer:this.codec==="hevc"?c=n.hevc?.quantizer:this.codec==="vp9"?c=n.vp9?.quantizer:c=n.av1?.quantizer,f(c!=null),this.codecContext!==null&&c!==this.quantizer){let d=await this.codecContext.sendFrame(null);for(u.FFmpegError.throwIfError(d,"Send frame");;){let h=await this.codecContext.receivePacket(this.packet);if(h===u.AVERROR_EAGAIN||h===u.AVERROR_EOF)break;this.receivePacket(h)}this.codecContext.freeContext(),this.codecContext=null}this.quantizer=c}if(this.codecContext===null&&await this.createCodecContext(),f(this.codecContext),r._data instanceof q)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 Ae(r,this.frame,this.lastBuffer)}let o=this.frame;if(this.codecContext.pixelFormat!==this.frame.format||this.codecContext.width!==this.frame.width||this.codecContext.height!==this.frame.height){this.scaler||(this.scaler=new u.SoftwareScaleContext);let c=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(c!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,u.SWS_FAST_BILINEAR),this.lastScalerKey=c;let h=this.scaler.initContext();u.FFmpegError.throwIfError(h,"initContext")}this.dstFrame||(this.dstFrame=new u.Frame,this.dstFrame.alloc(),this.dstFrame.width=this.codecContext.width,this.dstFrame.height=this.codecContext.height,this.dstFrame.format=this.codecContext.pixelFormat,this.dstFrame.allocBuffer()),await this.scaler.scaleFrame(this.dstFrame,this.frame),this.dstFrame.copyProps(this.frame),o=this.dstFrame}o.pts=BigInt(r.microsecondTimestamp),o.duration=BigInt(r.microsecondDuration),o.timeBase=new u.Rational(1,1e6),o.pictType=n?.keyFrame?u.AV_PICTURE_TYPE_I:u.AV_PICTURE_TYPE_NONE,o.keyFrame=n?.keyFrame?1:0;let a=oe(this.preciseTimings,r.microsecondTimestamp,c=>c.microsecondTimestamp),l=a!==-1?this.preciseTimings[a]:null;l&&l.microsecondTimestamp===r.microsecondTimestamp?(l.timestamp!==r.timestamp&&(l.timestampIsValid=!1),l.duration!==r.duration&&(l.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let m=await this.codecContext.sendFrame(o);for(u.FFmpegError.throwIfError(m,"Send frame");;){let c=await this.codecContext.receivePacket(this.packet);if(c===u.AVERROR_EAGAIN||c===u.AVERROR_EOF)break;this.receivePacket(c)}}receivePacket(r){if(f(this.codecContext),u.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let n=O(this.packet.data),o=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=oe(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),l=a!==-1?this.preciseTimings[a]:null;l&&l.microsecondTimestamp===Number(this.packet.pts)&&(l.timestampIsValid&&(o=l.timestamp),l.durationIsValid&&(s=l.duration));let m={},c=null,d=null;if(this.codec==="avc"||this.codec==="hevc"){let g=!1;if(this.codec==="avc"?g=this.config.avc?.format==="annexb":g=this.config.hevc?.format==="annexb",!this.packetEmitted){let x;if(this.codec==="avc"){let C=dt(this.packet.data);if(!C)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=At(C)}else{let C=mt(this.packet.data);if(!C)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=ft(C)}c=se({width:this.config.width,height:this.config.height,codec:this.codec,codecDescription:x,colorSpace:null,avcType:1,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),g||(d=x)}if(!g){let C=[];for(let w of _e(n))if(this.codec==="avc"){let E=Ue(n[w.offset]);E!==7&&E!==8&&E!==13&&C.push(w)}else{let E=ve(n[w.offset]);E!==33&&E!==34&&E!==32&&C.push(w)}let _=0;for(let w of C)_+=4+w.length;let T=new Uint8Array(_),B=new DataView(T.buffer),P=0;for(let w of C){let E=w.length;B.setUint32(P,E,!1),P+=4,T.set(n.subarray(w.offset,w.offset+w.length),P),P+=w.length}n=T}}else if(this.codec==="vp8")this.packetEmitted||(c=se({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=pt(n);c=se({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=ht(n);c=se({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=se({width:this.config.width,height:this.config.height,codec:"prores",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:this.config.codec}));else throw new Error("Unreachable.");let h={},y=this.packet.getSideData(u.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);y&&(h.alpha=O(y).subarray(8));let F=new ae.EncodedPacket(n,this.packet.isKeyframe?"key":"delta",o,s,void 0,void 0,h);c!==null&&(m.decoderConfig={codec:c,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:d??void 0,colorSpace:{primaries:fe(this.codecContext.colorPrimaries),matrix:he(this.codecContext.colorSpace),transfer:pe(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===u.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===u.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(F,m)}async flush(){if(this.codecContext){let r=await this.codecContext.sendFrame(null);for(u.FFmpegError.throwIfError(r,"Send frame");;){let n=await this.codecContext.receivePacket(this.packet);if(n===u.AVERROR_EAGAIN||n===u.AVERROR_EOF)break;this.receivePacket(n)}this.codecContext.freeContext(),this.codecContext=null}this.packetEmitted=!1}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.scaler?.freeContext(),this.dstFrame?.free()}};var Be=N("mediabunny"),I=j(N("node-av"));var gt=N("mediabunny"),ce=j(N("node-av"));var Q=class extends gt.AudioSampleResource{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof ce.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==ce.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=$e(this.frame.format);if(e===null){let r=ce.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${r} (${this.frame.format})`)}return e}getSampleRate(){return this.frame.sampleRate}getNumberOfChannels(){return this.frame.channels}getNumberOfFrames(){return this.frame.nbSamples}getTimestamp(){return Number(this.frame.pts)/this.frame.timeBase.den}close(){this.frame.free(),this._frame=null}getDataPlane(e){return f(this.frame.data&&e<this.frame.data.length),O(this.frame.data[e])}},Se=(t,e)=>{e.format=Je(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=ee(t.numberOfChannels),e.allocBuffer(),f(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var ye=class extends Be.CustomAudioDecoder{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=$[this.codec];f(r!==void 0);let n=I.Codec.findDecoder(r);if(n===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let o=new I.CodecContext;o.allocContext3(n),o.sampleRate=this.config.sampleRate,o.channelLayout=ee(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(O(this.config.description)):null;let s=await o.open2();I.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=o}async decode(r){f(this.codecContext),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.packet.dts=I.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(r.duration*this.config.sampleRate));let n=await this.codecContext.sendPacket(this.packet);for(I.FFmpegError.throwIfError(n,"Send packet"),this.packet.unref();;){let o=await this.codecContext.receiveFrame(this.frame);if(o===I.AVERROR_EAGAIN||o===I.AVERROR_EOF)break;this.receiveFrame(o)}}receiveFrame(r){I.FFmpegError.throwIfError(r,"Receive frame");let n=this.frame.clone();if(!n)throw new Error("Allocation failure during frame clone.");n.timeBase=new I.Rational(1,this.config.sampleRate),this.onSample(new Be.AudioSample(new Q(n)))}async flush(){f(this.codecContext);let r=await this.codecContext.sendPacket(null);for(I.FFmpegError.throwIfError(r,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===I.AVERROR_EAGAIN||n===I.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};var le=N("mediabunny"),v=j(N("node-av"));var Ct=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],bt=[1,2,4,5,6],$t=16384,xt=(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*$t};var Jt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],jt=[8e3,12e3,16e3,24e3,48e3],Zt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],vt=[32e3,44100,48e3],Le=1024,we=class extends le.CustomAudioEncoder{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&&jt.includes(s)||r==="mp3"&&o>=1&&o<=2&&Zt.includes(s)||r==="vorbis"&&o>=1&&o<=255&&s<=2e5||r==="flac"&&o>=1&&o<=8&&s<=655350||r==="ac3"&&o>=1&&o<=6&&vt.includes(s)||r==="eac3"&&o>=1&&o<=16&&vt.includes(s)||r==="dts"&&bt.includes(o)&&Ct.includes(s)&&xt(_t(n,r),s,o)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let r=$[this.codec];f(r!==void 0);let n=v.Codec.findEncoder(r);if(!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=n,await this.createCodecContext()}async createCodecContext(){f(this.codecContext===null);let r=new v.CodecContext;r.allocContext3(this.avCodec);let n=v.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(v.AV_SAMPLE_FMT_FLTP)&&(n=this.avCodec.sampleFormats[0]),r.sampleRate=this.config.sampleRate,r.channelLayout=this.codec==="dts"?je(this.config.numberOfChannels):ee(this.config.numberOfChannels),r.codecType=v.AVMEDIA_TYPE_AUDIO,r.codecId=$[this.codec],r.sampleFormat=n,r.timeBase=new v.Rational(1,this.config.sampleRate),r.bitRate=BigInt(_t(this.config,this.codec)),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let o=this.codec==="dts"?v.Dictionary.fromObject({strict:-2}):null,s=await r.open2(this.avCodec,o);v.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=r}async encode(r){this.codecContext===null&&(await this.createCodecContext(),f(this.codecContext)),this.firstExpectedTimestamp??=r.timestamp,r._data instanceof Q?(this.frame.unref(),this.frame.ref(r._data.frame)):Se(r,this.frame),this.frame.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(r.duration*this.config.sampleRate)),this.frame.timeBase=new v.Rational(1,this.config.sampleRate);let n=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==n)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=n,this.codecContext.frameSize>0||this.codecContext.sampleFormat!==this.frame.format||this.codecContext.sampleRate!==this.frame.sampleRate||this.codecContext.channels!==this.frame.channels){if(!this.resampler){this.resampler=new v.SoftwareResampleContext,this.resamplerInputSampleRate=this.frame.sampleRate;let a=this.codecContext.channelLayout,l=ee(this.frame.channels),m=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,l,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(m,"allocSetOpts2");let c=this.resampler.init();v.FFmpegError.throwIfError(c,"init"),this.dstFrame=new v.Frame,this.dstFrame.alloc(),this.dstFrame.channelLayout=a,this.dstFrame.sampleRate=this.codecContext.sampleRate,this.dstFrame.format=this.codecContext.sampleFormat,this.dstFrame.nbSamples=this.codecContext.frameSize||Le,this.dstFrame.duration=BigInt(this.dstFrame.nbSamples),this.dstFrame.allocBuffer(),this.nextResamplerPts=this.frame.pts}let s=this.frame.data;if(!s)throw new DOMException("Frame has no data","EncodingError");await this.resampler.convert(null,0,s,this.frame.nbSamples),await this.pullResampledFrames()}else await this.sendFrameAndReceivePackets(this.frame)}async pullResampledFrames(){f(this.codecContext),f(this.resampler),f(this.dstFrame),f(this.nextResamplerPts!==null);let r=this.codecContext.frameSize||Le;for(;!(this.resampler.getOutSamples(0)<r);)await this.resampler.convert(this.dstFrame.data,r,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(r)}async sendFrameAndReceivePackets(r){f(this.codecContext);let n=await this.codecContext.sendFrame(r);for(v.FFmpegError.throwIfError(n,"Send frame");;){let o=await this.codecContext.receivePacket(this.packet);if(o===v.AVERROR_EAGAIN||o===v.AVERROR_EOF)break;this.receivePacket(o)}}receivePacket(r){if(f(this.codecContext),f(this.firstExpectedTimestamp!==null),v.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let n=Number(this.packet.pts)/this.codecContext.sampleRate,o=Number(this.packet.duration)/this.codecContext.sampleRate,s=this.packet.data,a;if(this.packetEmitted)a={};else{this.outputTimestampOffset=Math.max(this.firstExpectedTimestamp-n,0);let m=this.config.codec,c=this.codecContext.extraData?O(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=it(c);this.adtsHeaderTemplate=ot(h),c=void 0}}else if(this.codec==="opus"){if(!c)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!c)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!c)throw new Error("Extradata expected for FLAC.");c=new Uint8Array([102,76,97,67,128,0,0,c.byteLength,...c])}a={decoderConfig:{codec:m,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:c}}}if(this.adtsHeaderTemplate){let m=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,m);let c=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);c.set(this.adtsHeaderTemplate.header,0),c.set(s,this.adtsHeaderTemplate.header.byteLength),s=c}n+=this.outputTimestampOffset;let l=new le.EncodedPacket(s,"key",n,o);this.packetEmitted=!0,this.onPacket(l,a)}async flush(){if(this.codecContext){e:if(this.resampler){f(this.resamplerInputSampleRate!==null);let r=this.resampler.getOutSamples(0);if(r===0)break e;let n=this.codecContext.frameSize||Le;f(r<n);let o=Math.ceil((n-r)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(o),await this.pullResampledFrames()}await this.sendFrameAndReceivePackets(null),this.codecContext.freeContext(),this.codecContext=null,this.packetEmitted=!1,this.firstExpectedTimestamp=null,this.outputTimestampOffset=0,this.adtsHeaderTemplate=null,this.resampler?.free(),this.resampler=null,this.inputParametersKey=null,this.resamplerInputSampleRate=null,this.nextResamplerPts=null,this.dstFrame?.free(),this.dstFrame=null}}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.dstFrame?.free(),this.resampler?.free()}},_t=(t,e)=>t.bitrate??new le.Quality("medium")._toAudioBitrate(e)??0;var St=N("@mediabunny/prores");var yt=Symbol.for("@mediabunny/server loaded");globalThis[yt]&&k.Logging._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[yt]=!0;var Et=!1,Y={},er=(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.");Et||(Et=!0,Y=t,X.Log.setLevel(X.AV_LOG_ERROR),(0,k.registerDecoder)(be),(0,St.registerProresDecoder)(),(0,k.registerEncoder)(Ee),(0,k.registerDecoder)(ye),(0,k.registerEncoder)(we),(0,k.registerVideoSampleTransformer)(rt))},tr=async(t,e)=>{if(!(t instanceof k.VideoSample)&&!(t instanceof k.AudioSample))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 k.VideoSample){if(t._data instanceof q)e.unref(),e.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await Ae(t,e,null)}e.pts=BigInt(t.microsecondTimestamp),e.duration=BigInt(t.microsecondDuration),e.timeBase=new X.Rational(1,1e6)}else t._data instanceof Q?(e.unref(),e.ref(t._data.frame)):Se(t,e),e.timeBase=new X.Rational(1,t.sampleRate),e.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),e.duration=BigInt(t.numberOfFrames)};return Rt(rr);})();
8
+ "use strict";var MediabunnyServer=(()=>{var wt=Object.create;var fe=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var Pt=Object.getOwnPropertyNames;var Rt=Object.getPrototypeOf,Ft=Object.prototype.hasOwnProperty;var U=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var Vt=(t,e)=>{for(var r in e)fe(t,r,{get:e[r],enumerable:!0})},qe=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Pt(e))!Ft.call(t,o)&&o!==r&&fe(t,o,{get:()=>e[o],enumerable:!(n=Tt(e,o))||n.enumerable});return t};var Z=(t,e,r)=>(r=t!=null?wt(Rt(t)):{},qe(e||!t||!t.__esModule?fe(r,"default",{value:t,enumerable:!0}):r,t)),Nt=t=>qe(fe({},"__esModule",{value:!0}),t);var or={};Vt(or,{AvFrameAudioSampleResource:()=>$,AvFrameVideoSampleResource:()=>X,_serverOptions:()=>K,registerMediabunnyServer:()=>nr,toAvFrame:()=>ir});var L=U("mediabunny"),Y=Z(U("node-av"));var xe=U("mediabunny"),b=Z(U("node-av"));var i=Z(U("node-av"));var J={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},we,We=()=>K.hardwareContext!==void 0&&typeof K.hardwareContext!="function"?K.hardwareContext:(we===void 0&&(we=i.HardwareContext.auto()),we),Xe=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.")},Te=new Map,Ge=async t=>{if(typeof K.hardwareContext=="function"){let e=await K.hardwareContext(t);return Xe(e),e?.getDecoderCodec(t)??null}if(!Te.has(t)){let e=We();Te.set(t,e?.getDecoderCodec(t)??null)}return Te.get(t)},Pe=new Map,Ye=async t=>{if(typeof K.hardwareContext=="function"){let e=await K.hardwareContext(t);return Xe(e),e?.getEncoderCodec(t)??null}if(!Pe.has(t)){let e=We();Pe.set(t,e?.getEncoderCodec(t)??null)}return Pe.get(t)},Ke=t=>{switch(t){case"bt709":return i.AVCOL_PRI_BT709;case"bt470bg":return i.AVCOL_PRI_BT470BG;case"smpte170m":return i.AVCOL_PRI_SMPTE170M;case"bt2020":return i.AVCOL_PRI_BT2020;case"smpte432":return i.AVCOL_PRI_SMPTE432}return null},me=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},Qe=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},pe=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},$e=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},he=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},je=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}},Re=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}},Je=t=>{switch(t){case i.AV_SAMPLE_FMT_U8:return"u8";case i.AV_SAMPLE_FMT_S16:return"s16";case i.AV_SAMPLE_FMT_S32:return"s32";case i.AV_SAMPLE_FMT_FLT:return"f32";case i.AV_SAMPLE_FMT_U8P:return"u8-planar";case i.AV_SAMPLE_FMT_S16P:return"s16-planar";case i.AV_SAMPLE_FMT_S32P:return"s32-planar";case i.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},Ze=t=>{switch(t){case"u8":return i.AV_SAMPLE_FMT_U8;case"s16":return i.AV_SAMPLE_FMT_S16;case"s32":return i.AV_SAMPLE_FMT_S32;case"f32":return i.AV_SAMPLE_FMT_FLT;case"u8-planar":return i.AV_SAMPLE_FMT_U8P;case"s16-planar":return i.AV_SAMPLE_FMT_S16P;case"s32-planar":return i.AV_SAMPLE_FMT_S32P;case"f32-planar":return i.AV_SAMPLE_FMT_FLTP;default:return i.AV_SAMPLE_FMT_NONE}},te=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}}},Mt=0x603n,et=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:Mt};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 z=class z{constructor(){}static get level(){return z._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.");z._level=e}static get _emitter(){return z._emitterInstance??=new ge}static on(e,r,n){return z._emitter.on(e,r,n)}static _error(...e){z._emitter._emit("error",e),z._level>=1&&console.error(...e)}static _warn(...e){z._emitter._emit("warn",e),z._level>=2&&console.warn(...e)}static _info(...e){z._emitter._emit("info",e),z._level>=3&&console.info(...e)}};z._level=3,z._emitterInstance=null;var re=z;function m(t){if(!t)throw new Error("Assertion failed.")}var oe=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)},Q=t=>{let e=d(t);return(e&1)===0?-(e>>1):e+1>>1};var q=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Fe=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var tt={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var rt={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var nt={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Ve=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var Ne=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,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 Me=t=>{throw new Error(`Unexpected value: ${t}`)};var ur=1e6*(1+Number.EPSILON);var Ar=(async()=>{})().constructor;var Ce=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 ge=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)}}};var ne=U("mediabunny"),p=Z(U("node-av"));var kt=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]),X=class t extends ne.VideoSampleResource{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 je(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 ne.VideoSampleColorSpace({primaries:me(this.frame.colorPrimaries),transfer:pe(this.frame.colorTrc),matrix:he(this.frame.colorSpace),fullRange:this.frame.colorRange===p.AVCOL_RANGE_JPEG||kt.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:q(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=Re("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 ne.VideoSample(new t(f),e)}},Ae=async(t,e,r)=>{m(t.format!==null),e.format=Re(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new p.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=Ke(t.colorSpace.primaries??"unknown")??p.AVCOL_PRI_UNSPECIFIED,e.colorSpace=$e(t.colorSpace.matrix??"unknown")??p.AVCOL_SPC_UNSPECIFIED,e.colorTrc=Qe(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},it=async(t,e)=>{let r,n=!1;if(t._data instanceof X)r=t._data.frame;else{if(t.format===null)return null;r=new p.Frame,r.alloc(),n=!0,await Ae(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 ne.VideoSample(new X(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),n&&r.free()}};var be=class extends xe.CustomVideoDecoder{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=J[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 Ge(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=Ce({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(q(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=se(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=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&&(o=a.duration));let l=this.frame.clone();if(!l)throw new Error("Frame clone allocation failed.");this.onSample(new xe.VideoSample(new X(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()}};var ce=U("mediabunny"),A=Z(U("node-av"));var G=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 ot=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Ut=[-1,1,2,3,4,5,6,8],st=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new G(t),r=ke(e),{frequencyIndex:n,sampleRate:o}=Ue(e),s=e.readBits(4),a=null;s>=1&&s<=7&&(a=Ut[s]);let l=r,f=!1,c=o;if(r===5||r===29)f=r===29,c=Ue(e).sampleRate,l=ke(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}ke(e)===5&&e.readBits(1)&&(c=Ue(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}},ke=t=>{let e=t.readBits(5);return e===31?32+t.readBits(6):e},Ue=t=>{let e=t.readBits(4);return e===15?{frequencyIndex:e,sampleRate:t.readBits(24)}:{frequencyIndex:e,sampleRate:e<ot.length?ot[e]:null}};var at=t=>{let e=new Uint8Array(7),r=new G(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 Dt=["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"],Lt=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],Ur=[...Lt,...Dt];var Oe=[{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 ct=".01.01.01.01.00",lt=".0.110.01.01.01.0",Ht=["ap4x","ap4h","apch","apcn","apcs","apco"];var ae=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}.${Ve(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}.${Ve(r.subarray(1,4))}`}else if(e==="hevc"){let c,u,h,E,R,g;if(s)c=s.generalProfileSpace,u=s.generalProfileIdc,h=Ne(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=Fe(r),S=C.getUint8(1);c=S>>6&3,u=S&31,h=Ne(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=oe(ie).level;for(let P of ie)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(ct)&&(S=S.slice(0,-ct.length)),S}else if(e==="av1"){if(!l){let P=t.width*t.height,w=oe(ie).level;for(let B of ie)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?tt[n.primaries]:1,C=n?.transfer?rt[n.transfer]:1,S=n?.matrix?nt[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(lt)&&(y=y.slice(0,-lt.length)),y}else{if(e==="prores")return f??"apch";e!==null&&Me(e)}}throw new TypeError(`Unhandled codec '${e}'.`)};var Or=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Ht];var _e=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 De=t=>t&31,Le=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 At=t=>{try{let e=[],r=[],n=[];for(let l of _e(t)){let f=t.subarray(l.offset,l.offset+l.length),c=De(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=zt(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 re._error("Error building AVC Decoder Configuration Record:",e),null}},ft=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 mt={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}},zt=t=>{try{let e=new G(Le(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 H=v<6?16:64,N=8,T=8;for(let D=0;D<H;D++){if(T!==0){let ee=Q(e);T=(N+ee+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),Q(e),Q(e);let k=d(e);for(let v=0;v<k;v++)Q(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),W=d(e),H=d(e),N,T;if((c===0?a:0)===0)N=1,T=2-S;else{let ee=a===3?1:2,ue=a===1?2:1;N=ee,T=ue*(2-S)}x-=N*(k+v),C-=T*(W+H)}let y=2,P=2,w=2,B=0,V={num:1,den:1},M=null,O=null;if(e.readBits(1)){if(e.readBits(1)){let ue=e.readBits(8);if(ue===255)V={num:e.readBits(16),den:e.readBits(16)};else{let ze=mt[ue];ze&&(V=ze)}}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&&dt(e);let D=e.readBits(1);D&&dt(e),(T||D)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),d(e),d(e),d(e),d(e),M=d(e),O=d(e))}if(M===null){m(O===null);let k=o&16;if((n===44||n===86||n===100||n===110||n===122||n===244)&&k)M=0,O=0;else{let v=h+1,W=E+1,H=(2-S)*W,N=Oe.find(D=>D.level>=s)??oe(Oe),T=Math.min(Math.floor(N.maxDpbMbs/(v*H)),16);M=T,O=T}}return m(O!==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:O}}catch(e){return re._error("Error parsing AVC SPS:",e),null}},dt=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 ve=t=>t>>1&63,qt=t=>{try{let e=new G(Le(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}=Wt(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),W=d(e),H=d(e),N=d(e),T=1,D=1,ee=h===0?u:0;ee===1?(T=2,D=2):ee===2&&(T=2,D=1),g-=(v+W)*T,x-=(H+N)*D}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)&&Xt(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(Gt(e,w),e.readBits(1)){let v=d(e);for(let W=0;W<v;W++)d(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let B=2,V=2,M=2,O=0,j=0,k={num:1,den:1};if(e.readBits(1)){let v=Kt(e,r);k=v.pixelAspectRatio,B=v.colourPrimaries,V=v.transferCharacteristics,M=v.matrixCoefficients,O=v.fullRangeFlag,j=v.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:k,colourPrimaries:B,transferCharacteristics:V,matrixCoefficients:M,fullRangeFlag:O,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:j}}catch(e){return re._error("Error parsing HEVC SPS:",e),null}},pt=t=>{try{let e=[],r=[],n=[],o=[];for(let c of _e(t)){let u=t.subarray(c.offset,c.offset+c.length),h=ve(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=qt(r[0]);if(!s)return null;let a=0;if(n.length>0){let c=n[0],u=new G(Le(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),Q(u),u.skipBits(1),u.skipBits(1),u.readBits(1)&&d(u),Q(u),Q(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:ve(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 re._error("Error building HEVC Decoder Configuration Record:",e),null}},Wt=(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}},Xt=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&&Q(t);for(let s=0;s<o;s++)Q(t)}},Gt=(t,e)=>{let r=[];for(let n=0;n<e;n++)r[n]=Yt(t,n,e,r)},Yt=(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},Kt=(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=mt[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)&&Qt(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}},Qt=(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&&ut(t,u,s),o&&ut(t,u,s)}},ut=(t,e,r)=>{for(let n=0;n<e;n++)d(t),d(t),r&&(d(t),d(t)),t.readBits(1)},ht=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 $t={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}},gt=t=>{let e=new G(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),O=e.readBits(1);h=!M&&!O?3:M&&!O?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=oe(ie).level;for(let V of ie)if(S<=V.maxPictureSize){F=V.level;break}let y=$t[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 jt=function*(t){let e=new G(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)}},Ct=t=>{for(let{type:e,data:r}of jt(t)){if(e!==1)continue;let n=new G(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 j=n.readBits(1),k=0;if(j){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),W=n.readBits(5);for(let H=0;H<=W;H++){n.skipBits(12);let N=n.readBits(5);if(H===0&&(l=N),N>7){let T=n.readBits(1);H===0&&(f=T)}if(k&&n.readBits(1)){let D=c+1;n.skipBits(D),n.skipBits(D),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 j=n.readBits(1);j&&(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)),j&&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,O=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&&(O=n.readBits(2))),{profile:o,level:l,tier:f,bitDepth:C,monochrome:S,chromaSubsamplingX:V,chromaSubsamplingY:M,chromaSamplePosition:O,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 Jt={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},Se=class extends ce.CustomVideoEncoder{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=J[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 Ye(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=Ce({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 ce.Quality("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=Jt[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 X)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 Ae(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=se(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=q(this.packet.data),o=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=se(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=At(this.packet.data);if(!C)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=ft(C)}else{let C=pt(this.packet.data);if(!C)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=ht(C)}c=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 C=[];for(let w of _e(n))if(this.codec==="avc"){let B=De(n[w.offset]);B!==7&&B!==8&&B!==13&&C.push(w)}else{let B=ve(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=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=gt(n);c=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=Ct(n);c=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||(c=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={},E=this.packet.getSideData(A.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);E&&(h.alpha=q(E).subarray(8));let R=new ce.EncodedPacket(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:me(this.codecContext.colorPrimaries),matrix:he(this.codecContext.colorSpace),transfer:pe(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()}};var Ie=U("mediabunny"),I=Z(U("node-av"));var bt=U("mediabunny"),le=Z(U("node-av"));var $=class extends bt.AudioSampleResource{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof le.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==le.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=Je(this.frame.format);if(e===null){let r=le.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),q(this.frame.data[e])}},Ee=(t,e)=>{e.format=Ze(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=te(t.numberOfChannels),e.allocBuffer(),m(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var ye=class extends Ie.CustomAudioDecoder{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=J[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=te(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(q(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 Ie.AudioSample(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()}};var de=U("mediabunny"),_=Z(U("node-av"));var xt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],vt=[1,2,4,5,6],Zt=16384,_t=(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*Zt};var er=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],tr=[8e3,12e3,16e3,24e3,48e3],rr=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],St=[32e3,44100,48e3],He=1024,Be=class extends de.CustomAudioEncoder{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&&er.includes(s)||r==="opus"&&o>=1&&o<=255&&tr.includes(s)||r==="mp3"&&o>=1&&o<=2&&rr.includes(s)||r==="vorbis"&&o>=1&&o<=255&&s<=2e5||r==="flac"&&o>=1&&o<=8&&s<=655350||r==="ac3"&&o>=1&&o<=6&&St.includes(s)||r==="eac3"&&o>=1&&o<=16&&St.includes(s)||r==="dts"&&vt.includes(o)&&xt.includes(s)&&_t(Et(n,r),s,o)}async init(){this.frame=new _.Frame,this.frame.alloc(),this.packet=new _.Packet,this.packet.alloc();let r=J[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"?et(this.config.numberOfChannels):te(this.config.numberOfChannels),r.codecType=_.AVMEDIA_TYPE_AUDIO,r.codecId=J[this.codec],r.sampleFormat=n,r.timeBase=new _.Rational(1,this.config.sampleRate),r.bitRate=BigInt(Et(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)):Ee(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=te(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||He,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||He;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?q(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=st(c);this.adtsHeaderTemplate=at(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 de.EncodedPacket(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||He;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()}},Et=(t,e)=>t.bitrate??new de.Quality("medium")._toAudioBitrate(e)??0;var It=U("@mediabunny/prores");var Bt=Symbol.for("@mediabunny/server loaded");globalThis[Bt]&&L.Logging._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 yt=!1,K={},nr=(t={})=>{if(typeof t!="object"||!t)throw new TypeError("options must be an object.");if(t.hardwareContext!=null&&!(t.hardwareContext instanceof Y.HardwareContext||typeof t.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");yt||(yt=!0,K=t,Y.Log.setLevel(Y.AV_LOG_ERROR),(0,L.registerDecoder)(be),(0,It.registerProresDecoder)(),(0,L.registerEncoder)(Se),(0,L.registerDecoder)(ye),(0,L.registerEncoder)(Be),(0,L.registerVideoSampleTransformer)(it))},ir=async(t,e)=>{if(!(t instanceof L.VideoSample)&&!(t instanceof L.AudioSample))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(e instanceof Y.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t instanceof L.VideoSample){if(t._data instanceof X)e.unref(),e.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await Ae(t,e,null)}e.pts=BigInt(t.microsecondTimestamp),e.duration=BigInt(t.microsecondDuration),e.timeBase=new Y.Rational(1,1e6)}else t._data instanceof $?(e.unref(),e.ref(t._data.frame)):Ee(t,e),e.timeBase=new Y.Rational(1,t.sampleRate),e.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),e.duration=BigInt(t.numberOfFrames)};return Nt(or);})();
10
10
  if (typeof module === "object" && typeof module.exports === "object") Object.assign(module.exports, MediabunnyServer)