mediabunny 1.7.3 → 1.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles/mediabunny.cjs +62 -15
- package/dist/bundles/mediabunny.min.cjs +4 -4
- package/dist/bundles/mediabunny.min.mjs +5 -5
- package/dist/bundles/mediabunny.mjs +62 -15
- package/dist/modules/src/conversion.js +2 -2
- package/dist/modules/src/input-format.d.ts.map +1 -1
- package/dist/modules/src/input-format.js +13 -3
- package/dist/modules/src/matroska/ebml.d.ts +4 -4
- package/dist/modules/src/matroska/ebml.d.ts.map +1 -1
- package/dist/modules/src/matroska/ebml.js +20 -5
- package/dist/modules/src/matroska/matroska-demuxer.d.ts +1 -1
- package/dist/modules/src/matroska/matroska-demuxer.d.ts.map +1 -1
- package/dist/modules/src/matroska/matroska-demuxer.js +32 -6
- package/dist/modules/src/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/conversion.ts +2 -2
- package/src/input-format.ts +16 -3
- package/src/matroska/ebml.ts +25 -6
- package/src/matroska/matroska-demuxer.ts +38 -7
|
@@ -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 =
|
|
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
|
|
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
|
|
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
|
|
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
|
}
|
|
@@ -14292,6 +14307,9 @@ ${cue.notes ?? ""}`;
|
|
|
14292
14307
|
this.metadataReader.pos + MAX_HEADER_SIZE
|
|
14293
14308
|
);
|
|
14294
14309
|
const header = this.metadataReader.readElementHeader();
|
|
14310
|
+
if (!header) {
|
|
14311
|
+
break;
|
|
14312
|
+
}
|
|
14295
14313
|
const id = header.id;
|
|
14296
14314
|
let size = header.size;
|
|
14297
14315
|
const startPos = this.metadataReader.pos;
|
|
@@ -14347,13 +14365,17 @@ ${cue.notes ?? ""}`;
|
|
|
14347
14365
|
this.metadataReader.pos + 2 ** 14
|
|
14348
14366
|
);
|
|
14349
14367
|
let clusterEncountered = false;
|
|
14350
|
-
while (this.metadataReader.pos
|
|
14368
|
+
while (this.metadataReader.pos <= this.currentSegment.elementEndPos - MIN_HEADER_SIZE) {
|
|
14351
14369
|
await this.metadataReader.reader.loadRange(
|
|
14352
14370
|
this.metadataReader.pos,
|
|
14353
14371
|
this.metadataReader.pos + MAX_HEADER_SIZE
|
|
14354
14372
|
);
|
|
14355
14373
|
const elementStartPos = this.metadataReader.pos;
|
|
14356
|
-
const
|
|
14374
|
+
const header = this.metadataReader.readElementHeader();
|
|
14375
|
+
if (!header) {
|
|
14376
|
+
break;
|
|
14377
|
+
}
|
|
14378
|
+
const { id, size } = header;
|
|
14357
14379
|
const dataStartPos = this.metadataReader.pos;
|
|
14358
14380
|
const metadataElementIndex = METADATA_ELEMENTS.findIndex((x) => x.id === id);
|
|
14359
14381
|
if (metadataElementIndex !== -1) {
|
|
@@ -14406,7 +14428,9 @@ ${cue.notes ?? ""}`;
|
|
|
14406
14428
|
this.metadataReader.pos + 2 ** 12
|
|
14407
14429
|
// Load a larger range, assuming the correct element will be there
|
|
14408
14430
|
);
|
|
14409
|
-
const
|
|
14431
|
+
const header = this.metadataReader.readElementHeader();
|
|
14432
|
+
if (!header) continue;
|
|
14433
|
+
const { id, size } = header;
|
|
14410
14434
|
if (id !== target.id) continue;
|
|
14411
14435
|
assertDefinedSize(size);
|
|
14412
14436
|
this.currentSegment[target.flag] = true;
|
|
@@ -14457,6 +14481,7 @@ ${cue.notes ?? ""}`;
|
|
|
14457
14481
|
await this.metadataReader.reader.loadRange(this.metadataReader.pos, this.metadataReader.pos + MAX_HEADER_SIZE);
|
|
14458
14482
|
const elementStartPos = this.metadataReader.pos;
|
|
14459
14483
|
const elementHeader = this.metadataReader.readElementHeader();
|
|
14484
|
+
assert(elementHeader);
|
|
14460
14485
|
const id = elementHeader.id;
|
|
14461
14486
|
let size = elementHeader.size;
|
|
14462
14487
|
const dataStartPos = this.metadataReader.pos;
|
|
@@ -14641,11 +14666,18 @@ ${cue.notes ?? ""}`;
|
|
|
14641
14666
|
readContiguousElements(reader, totalSize) {
|
|
14642
14667
|
const startIndex = reader.pos;
|
|
14643
14668
|
while (reader.pos - startIndex <= totalSize - MIN_HEADER_SIZE) {
|
|
14644
|
-
this.traverseElement(reader);
|
|
14669
|
+
const foundElement = this.traverseElement(reader);
|
|
14670
|
+
if (!foundElement) {
|
|
14671
|
+
break;
|
|
14672
|
+
}
|
|
14645
14673
|
}
|
|
14646
14674
|
}
|
|
14647
14675
|
traverseElement(reader) {
|
|
14648
|
-
const
|
|
14676
|
+
const header = reader.readElementHeader();
|
|
14677
|
+
if (!header) {
|
|
14678
|
+
return false;
|
|
14679
|
+
}
|
|
14680
|
+
const { id, size } = header;
|
|
14649
14681
|
const dataStartPos = reader.pos;
|
|
14650
14682
|
assertDefinedSize(size);
|
|
14651
14683
|
switch (id) {
|
|
@@ -15042,6 +15074,7 @@ ${cue.notes ?? ""}`;
|
|
|
15042
15074
|
{
|
|
15043
15075
|
if (!this.currentCluster) break;
|
|
15044
15076
|
const trackNumber = reader.readVarInt();
|
|
15077
|
+
if (trackNumber === null) break;
|
|
15045
15078
|
const relativeTimestamp = reader.readS16();
|
|
15046
15079
|
const flags = reader.readU8();
|
|
15047
15080
|
const isKeyFrame = !!(flags & 128);
|
|
@@ -15077,6 +15110,7 @@ ${cue.notes ?? ""}`;
|
|
|
15077
15110
|
{
|
|
15078
15111
|
if (!this.currentCluster) break;
|
|
15079
15112
|
const trackNumber = reader.readVarInt();
|
|
15113
|
+
if (trackNumber === null) break;
|
|
15080
15114
|
const relativeTimestamp = reader.readS16();
|
|
15081
15115
|
const flags = reader.readU8();
|
|
15082
15116
|
const lacing = flags >> 1 & 3;
|
|
@@ -15113,6 +15147,7 @@ ${cue.notes ?? ""}`;
|
|
|
15113
15147
|
break;
|
|
15114
15148
|
}
|
|
15115
15149
|
reader.pos = dataStartPos + size;
|
|
15150
|
+
return true;
|
|
15116
15151
|
}
|
|
15117
15152
|
};
|
|
15118
15153
|
var MatroskaTrackBacking = class {
|
|
@@ -15412,7 +15447,7 @@ ${cue.notes ?? ""}`;
|
|
|
15412
15447
|
metadataReader.pos = cuePoint.clusterPosition;
|
|
15413
15448
|
}
|
|
15414
15449
|
}
|
|
15415
|
-
while (metadataReader.pos
|
|
15450
|
+
while (metadataReader.pos <= segment.elementEndPos - MIN_HEADER_SIZE) {
|
|
15416
15451
|
if (prevCluster) {
|
|
15417
15452
|
const trackData = prevCluster.trackData.get(this.internalTrack.id);
|
|
15418
15453
|
if (trackData && trackData.startTimestamp > latestTimestamp) {
|
|
@@ -15427,6 +15462,9 @@ ${cue.notes ?? ""}`;
|
|
|
15427
15462
|
await metadataReader.reader.loadRange(metadataReader.pos, metadataReader.pos + MAX_HEADER_SIZE);
|
|
15428
15463
|
const elementStartPos = metadataReader.pos;
|
|
15429
15464
|
const elementHeader = metadataReader.readElementHeader();
|
|
15465
|
+
if (!elementHeader) {
|
|
15466
|
+
break;
|
|
15467
|
+
}
|
|
15430
15468
|
const id = elementHeader.id;
|
|
15431
15469
|
let size = elementHeader.size;
|
|
15432
15470
|
const dataStartPos = metadataReader.pos;
|
|
@@ -16632,6 +16670,9 @@ ${cue.notes ?? ""}`;
|
|
|
16632
16670
|
return "video/quicktime";
|
|
16633
16671
|
}
|
|
16634
16672
|
};
|
|
16673
|
+
function foo() {
|
|
16674
|
+
return 5;
|
|
16675
|
+
}
|
|
16635
16676
|
var MatroskaInputFormat = class extends InputFormat {
|
|
16636
16677
|
/** @internal */
|
|
16637
16678
|
async isSupportedEBMLOfDocType(input, desiredDocType) {
|
|
@@ -16641,6 +16682,10 @@ ${cue.notes ?? ""}`;
|
|
|
16641
16682
|
}
|
|
16642
16683
|
const ebmlReader = new EBMLReader(input._mainReader);
|
|
16643
16684
|
const varIntSize = ebmlReader.readVarIntSize();
|
|
16685
|
+
if (varIntSize === null) {
|
|
16686
|
+
return false;
|
|
16687
|
+
}
|
|
16688
|
+
foo();
|
|
16644
16689
|
if (varIntSize < 1 || varIntSize > 8) {
|
|
16645
16690
|
return false;
|
|
16646
16691
|
}
|
|
@@ -16653,8 +16698,10 @@ ${cue.notes ?? ""}`;
|
|
|
16653
16698
|
return false;
|
|
16654
16699
|
}
|
|
16655
16700
|
const startPos = ebmlReader.pos;
|
|
16656
|
-
while (ebmlReader.pos
|
|
16657
|
-
const
|
|
16701
|
+
while (ebmlReader.pos <= startPos + dataSize - MIN_HEADER_SIZE) {
|
|
16702
|
+
const header = ebmlReader.readElementHeader();
|
|
16703
|
+
if (!header) break;
|
|
16704
|
+
const { id: id2, size } = header;
|
|
16658
16705
|
const dataStartPos = ebmlReader.pos;
|
|
16659
16706
|
if (size === null) return false;
|
|
16660
16707
|
switch (id2) {
|
|
@@ -17297,7 +17344,7 @@ ${cue.notes ?? ""}`;
|
|
|
17297
17344
|
return;
|
|
17298
17345
|
}
|
|
17299
17346
|
let adjustedSampleTimestamp = Math.max(timestamp - this._startTimestamp, 0);
|
|
17300
|
-
lastCanvasEndTimestamp =
|
|
17347
|
+
lastCanvasEndTimestamp = adjustedSampleTimestamp + duration;
|
|
17301
17348
|
if (frameRate !== void 0) {
|
|
17302
17349
|
const alignedTimestamp = Math.floor(adjustedSampleTimestamp * frameRate) / frameRate;
|
|
17303
17350
|
if (lastCanvas !== null) {
|
|
@@ -17359,7 +17406,7 @@ ${cue.notes ?? ""}`;
|
|
|
17359
17406
|
return;
|
|
17360
17407
|
}
|
|
17361
17408
|
let adjustedSampleTimestamp = Math.max(sample.timestamp - this._startTimestamp, 0);
|
|
17362
|
-
lastSampleEndTimestamp =
|
|
17409
|
+
lastSampleEndTimestamp = adjustedSampleTimestamp + sample.duration;
|
|
17363
17410
|
if (frameRate !== void 0) {
|
|
17364
17411
|
const alignedTimestamp = Math.floor(adjustedSampleTimestamp * frameRate) / frameRate;
|
|
17365
17412
|
if (lastSample !== null) {
|