mediabunny 1.7.2 → 1.7.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.
@@ -5607,7 +5607,7 @@ var Mediabunny = (() => {
5607
5607
  };
5608
5608
  var MAX_VAR_INT_SIZE = 8;
5609
5609
  var MIN_HEADER_SIZE = 2;
5610
- var MAX_HEADER_SIZE = 4 + MAX_VAR_INT_SIZE;
5610
+ var MAX_HEADER_SIZE = 2 * MAX_VAR_INT_SIZE;
5611
5611
  var EBMLReader = class {
5612
5612
  constructor(reader) {
5613
5613
  this.reader = reader;
@@ -5631,9 +5631,12 @@ var Mediabunny = (() => {
5631
5631
  readVarIntSize() {
5632
5632
  const { view: view2, offset } = this.reader.getViewAndOffset(this.pos, this.pos + 1);
5633
5633
  const firstByte = view2.getUint8(offset);
5634
+ if (firstByte === 0) {
5635
+ return null;
5636
+ }
5634
5637
  let width = 1;
5635
5638
  let mask = 128;
5636
- while ((firstByte & mask) === 0 && width < 8) {
5639
+ while ((firstByte & mask) === 0) {
5637
5640
  width++;
5638
5641
  mask >>= 1;
5639
5642
  }
@@ -5642,9 +5645,12 @@ var Mediabunny = (() => {
5642
5645
  readVarInt() {
5643
5646
  const { view: view2, offset } = this.reader.getViewAndOffset(this.pos, this.pos + 1);
5644
5647
  const firstByte = view2.getUint8(offset);
5648
+ if (firstByte === 0) {
5649
+ return null;
5650
+ }
5645
5651
  let width = 1;
5646
5652
  let mask = 1 << 7;
5647
- while ((firstByte & mask) === 0 && width < MAX_VAR_INT_SIZE) {
5653
+ while ((firstByte & mask) === 0) {
5648
5654
  width++;
5649
5655
  mask >>= 1;
5650
5656
  }
@@ -5700,6 +5706,9 @@ var Mediabunny = (() => {
5700
5706
  }
5701
5707
  readElementId() {
5702
5708
  const size = this.readVarIntSize();
5709
+ if (size === null) {
5710
+ return null;
5711
+ }
5703
5712
  const id = this.readUnsignedInt(size);
5704
5713
  return id;
5705
5714
  }
@@ -5718,6 +5727,9 @@ var Mediabunny = (() => {
5718
5727
  }
5719
5728
  readElementHeader() {
5720
5729
  const id = this.readElementId();
5730
+ if (id === null) {
5731
+ return null;
5732
+ }
5721
5733
  const size = this.readElementSize();
5722
5734
  return { id, size };
5723
5735
  }
@@ -5725,12 +5737,15 @@ var Mediabunny = (() => {
5725
5737
  async searchForNextElementId(ids, until) {
5726
5738
  const loadChunkSize = 2 ** 20;
5727
5739
  const idsSet = new Set(ids);
5728
- while (this.pos < until - MAX_HEADER_SIZE) {
5729
- if (!this.reader.rangeIsLoaded(this.pos, this.pos + MAX_HEADER_SIZE)) {
5740
+ while (this.pos <= until - MIN_HEADER_SIZE) {
5741
+ if (!this.reader.rangeIsLoaded(this.pos, Math.min(this.pos + MAX_HEADER_SIZE, until))) {
5730
5742
  await this.reader.loadRange(this.pos, Math.min(this.pos + loadChunkSize, until));
5731
5743
  }
5732
5744
  const elementStartPos = this.pos;
5733
5745
  const elementHeader = this.readElementHeader();
5746
+ if (!elementHeader) {
5747
+ break;
5748
+ }
5734
5749
  if (idsSet.has(elementHeader.id)) {
5735
5750
  return elementStartPos;
5736
5751
  }
@@ -10774,13 +10789,9 @@ ${cue.notes ?? ""}`;
10774
10789
  this.lastMultipleOfKeyFrameInterval = multipleOfKeyFrameInterval;
10775
10790
  if (this.customEncoder) {
10776
10791
  this.customEncoderQueueSize++;
10777
- const promise = this.customEncoderCallSerializer.call(() => this.customEncoder.encode(videoSample, finalEncodeOptions)).then(() => {
10778
- this.customEncoderQueueSize--;
10779
- if (shouldClose) {
10780
- videoSample.close();
10781
- }
10782
- }).catch((error) => {
10783
- this.encoderError ??= error;
10792
+ const clonedSample = videoSample.clone();
10793
+ const promise = this.customEncoderCallSerializer.call(() => this.customEncoder.encode(clonedSample, finalEncodeOptions)).then(() => this.customEncoderQueueSize--).catch((error) => this.encoderError ??= error).finally(() => {
10794
+ clonedSample.close();
10784
10795
  });
10785
10796
  if (this.customEncoderQueueSize >= 4) {
10786
10797
  await promise;
@@ -10863,6 +10874,7 @@ ${cue.notes ?? ""}`;
10863
10874
  void this.muxer.addEncodedVideoPacket(this.source._connectedTrack, packet, meta);
10864
10875
  },
10865
10876
  error: (error) => {
10877
+ error.stack = new Error().stack;
10866
10878
  this.encoderError ??= error;
10867
10879
  }
10868
10880
  });
@@ -10897,7 +10909,6 @@ ${cue.notes ?? ""}`;
10897
10909
  }
10898
10910
  checkForEncoderError() {
10899
10911
  if (this.encoderError) {
10900
- this.encoderError.stack = new Error().stack;
10901
10912
  throw this.encoderError;
10902
10913
  }
10903
10914
  }
@@ -11203,13 +11214,9 @@ ${cue.notes ?? ""}`;
11203
11214
  assert(this.encoderInitialized);
11204
11215
  if (this.customEncoder) {
11205
11216
  this.customEncoderQueueSize++;
11206
- const promise = this.customEncoderCallSerializer.call(() => this.customEncoder.encode(audioSample)).then(() => {
11207
- this.customEncoderQueueSize--;
11208
- if (shouldClose) {
11209
- audioSample.close();
11210
- }
11211
- }).catch((error) => {
11212
- this.encoderError ??= error;
11217
+ const clonedSample = audioSample.clone();
11218
+ const promise = this.customEncoderCallSerializer.call(() => this.customEncoder.encode(clonedSample)).then(() => this.customEncoderQueueSize--).catch((error) => this.encoderError ??= error).finally(() => {
11219
+ clonedSample.close();
11213
11220
  });
11214
11221
  if (this.customEncoderQueueSize >= 4) {
11215
11222
  await promise;
@@ -11345,6 +11352,7 @@ ${cue.notes ?? ""}`;
11345
11352
  void this.muxer.addEncodedAudioPacket(this.source._connectedTrack, packet, meta);
11346
11353
  },
11347
11354
  error: (error) => {
11355
+ error.stack = new Error().stack;
11348
11356
  this.encoderError ??= error;
11349
11357
  }
11350
11358
  });
@@ -11476,7 +11484,6 @@ ${cue.notes ?? ""}`;
11476
11484
  }
11477
11485
  checkForEncoderError() {
11478
11486
  if (this.encoderError) {
11479
- this.encoderError.stack = new Error().stack;
11480
11487
  throw this.encoderError;
11481
11488
  }
11482
11489
  }
@@ -14300,6 +14307,9 @@ ${cue.notes ?? ""}`;
14300
14307
  this.metadataReader.pos + MAX_HEADER_SIZE
14301
14308
  );
14302
14309
  const header = this.metadataReader.readElementHeader();
14310
+ if (!header) {
14311
+ break;
14312
+ }
14303
14313
  const id = header.id;
14304
14314
  let size = header.size;
14305
14315
  const startPos = this.metadataReader.pos;
@@ -14355,13 +14365,17 @@ ${cue.notes ?? ""}`;
14355
14365
  this.metadataReader.pos + 2 ** 14
14356
14366
  );
14357
14367
  let clusterEncountered = false;
14358
- while (this.metadataReader.pos < this.currentSegment.elementEndPos) {
14368
+ while (this.metadataReader.pos <= this.currentSegment.elementEndPos - MIN_HEADER_SIZE) {
14359
14369
  await this.metadataReader.reader.loadRange(
14360
14370
  this.metadataReader.pos,
14361
14371
  this.metadataReader.pos + MAX_HEADER_SIZE
14362
14372
  );
14363
14373
  const elementStartPos = this.metadataReader.pos;
14364
- const { id, size } = this.metadataReader.readElementHeader();
14374
+ const header = this.metadataReader.readElementHeader();
14375
+ if (!header) {
14376
+ break;
14377
+ }
14378
+ const { id, size } = header;
14365
14379
  const dataStartPos = this.metadataReader.pos;
14366
14380
  const metadataElementIndex = METADATA_ELEMENTS.findIndex((x) => x.id === id);
14367
14381
  if (metadataElementIndex !== -1) {
@@ -14414,7 +14428,9 @@ ${cue.notes ?? ""}`;
14414
14428
  this.metadataReader.pos + 2 ** 12
14415
14429
  // Load a larger range, assuming the correct element will be there
14416
14430
  );
14417
- const { id, size } = this.metadataReader.readElementHeader();
14431
+ const header = this.metadataReader.readElementHeader();
14432
+ if (!header) continue;
14433
+ const { id, size } = header;
14418
14434
  if (id !== target.id) continue;
14419
14435
  assertDefinedSize(size);
14420
14436
  this.currentSegment[target.flag] = true;
@@ -14465,6 +14481,7 @@ ${cue.notes ?? ""}`;
14465
14481
  await this.metadataReader.reader.loadRange(this.metadataReader.pos, this.metadataReader.pos + MAX_HEADER_SIZE);
14466
14482
  const elementStartPos = this.metadataReader.pos;
14467
14483
  const elementHeader = this.metadataReader.readElementHeader();
14484
+ assert(elementHeader);
14468
14485
  const id = elementHeader.id;
14469
14486
  let size = elementHeader.size;
14470
14487
  const dataStartPos = this.metadataReader.pos;
@@ -14649,11 +14666,18 @@ ${cue.notes ?? ""}`;
14649
14666
  readContiguousElements(reader, totalSize) {
14650
14667
  const startIndex = reader.pos;
14651
14668
  while (reader.pos - startIndex <= totalSize - MIN_HEADER_SIZE) {
14652
- this.traverseElement(reader);
14669
+ const foundElement = this.traverseElement(reader);
14670
+ if (!foundElement) {
14671
+ break;
14672
+ }
14653
14673
  }
14654
14674
  }
14655
14675
  traverseElement(reader) {
14656
- const { id, size } = reader.readElementHeader();
14676
+ const header = reader.readElementHeader();
14677
+ if (!header) {
14678
+ return false;
14679
+ }
14680
+ const { id, size } = header;
14657
14681
  const dataStartPos = reader.pos;
14658
14682
  assertDefinedSize(size);
14659
14683
  switch (id) {
@@ -15050,6 +15074,7 @@ ${cue.notes ?? ""}`;
15050
15074
  {
15051
15075
  if (!this.currentCluster) break;
15052
15076
  const trackNumber = reader.readVarInt();
15077
+ if (trackNumber === null) break;
15053
15078
  const relativeTimestamp = reader.readS16();
15054
15079
  const flags = reader.readU8();
15055
15080
  const isKeyFrame = !!(flags & 128);
@@ -15085,6 +15110,7 @@ ${cue.notes ?? ""}`;
15085
15110
  {
15086
15111
  if (!this.currentCluster) break;
15087
15112
  const trackNumber = reader.readVarInt();
15113
+ if (trackNumber === null) break;
15088
15114
  const relativeTimestamp = reader.readS16();
15089
15115
  const flags = reader.readU8();
15090
15116
  const lacing = flags >> 1 & 3;
@@ -15121,6 +15147,7 @@ ${cue.notes ?? ""}`;
15121
15147
  break;
15122
15148
  }
15123
15149
  reader.pos = dataStartPos + size;
15150
+ return true;
15124
15151
  }
15125
15152
  };
15126
15153
  var MatroskaTrackBacking = class {
@@ -15420,7 +15447,7 @@ ${cue.notes ?? ""}`;
15420
15447
  metadataReader.pos = cuePoint.clusterPosition;
15421
15448
  }
15422
15449
  }
15423
- while (metadataReader.pos < segment.elementEndPos) {
15450
+ while (metadataReader.pos <= segment.elementEndPos - MIN_HEADER_SIZE) {
15424
15451
  if (prevCluster) {
15425
15452
  const trackData = prevCluster.trackData.get(this.internalTrack.id);
15426
15453
  if (trackData && trackData.startTimestamp > latestTimestamp) {
@@ -15435,6 +15462,9 @@ ${cue.notes ?? ""}`;
15435
15462
  await metadataReader.reader.loadRange(metadataReader.pos, metadataReader.pos + MAX_HEADER_SIZE);
15436
15463
  const elementStartPos = metadataReader.pos;
15437
15464
  const elementHeader = metadataReader.readElementHeader();
15465
+ if (!elementHeader) {
15466
+ break;
15467
+ }
15438
15468
  const id = elementHeader.id;
15439
15469
  let size = elementHeader.size;
15440
15470
  const dataStartPos = metadataReader.pos;
@@ -16640,6 +16670,9 @@ ${cue.notes ?? ""}`;
16640
16670
  return "video/quicktime";
16641
16671
  }
16642
16672
  };
16673
+ function foo() {
16674
+ return 5;
16675
+ }
16643
16676
  var MatroskaInputFormat = class extends InputFormat {
16644
16677
  /** @internal */
16645
16678
  async isSupportedEBMLOfDocType(input, desiredDocType) {
@@ -16649,6 +16682,10 @@ ${cue.notes ?? ""}`;
16649
16682
  }
16650
16683
  const ebmlReader = new EBMLReader(input._mainReader);
16651
16684
  const varIntSize = ebmlReader.readVarIntSize();
16685
+ if (varIntSize === null) {
16686
+ return false;
16687
+ }
16688
+ foo();
16652
16689
  if (varIntSize < 1 || varIntSize > 8) {
16653
16690
  return false;
16654
16691
  }
@@ -16661,8 +16698,10 @@ ${cue.notes ?? ""}`;
16661
16698
  return false;
16662
16699
  }
16663
16700
  const startPos = ebmlReader.pos;
16664
- while (ebmlReader.pos < startPos + dataSize) {
16665
- const { id: id2, size } = ebmlReader.readElementHeader();
16701
+ while (ebmlReader.pos <= startPos + dataSize - MIN_HEADER_SIZE) {
16702
+ const header = ebmlReader.readElementHeader();
16703
+ if (!header) break;
16704
+ const { id: id2, size } = header;
16666
16705
  const dataStartPos = ebmlReader.pos;
16667
16706
  if (size === null) return false;
16668
16707
  switch (id2) {