@remotion/media-parser 4.0.327 → 4.0.330

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.
Files changed (32) hide show
  1. package/dist/containers/aac/parse-aac.js +1 -0
  2. package/dist/containers/flac/parse-streaminfo.js +1 -0
  3. package/dist/containers/iso-base-media/make-track.js +12 -1
  4. package/dist/containers/iso-base-media/mdat/calculate-jump-marks.d.ts +6 -1
  5. package/dist/containers/iso-base-media/mdat/calculate-jump-marks.js +18 -21
  6. package/dist/containers/iso-base-media/mdat/get-editlist.d.ts +3 -0
  7. package/dist/containers/iso-base-media/mdat/get-editlist.js +18 -1
  8. package/dist/containers/iso-base-media/mdat/mdat.js +24 -13
  9. package/dist/containers/mp3/parse-mpeg-header.js +1 -0
  10. package/dist/containers/riff/get-tracks-from-avi.js +2 -0
  11. package/dist/containers/transport-stream/handle-aac-packet.js +1 -0
  12. package/dist/containers/transport-stream/handle-avc-packet.js +1 -0
  13. package/dist/containers/wav/parse-fmt.js +1 -0
  14. package/dist/containers/webm/make-track.js +2 -0
  15. package/dist/esm/index.mjs +121 -50
  16. package/dist/esm/worker-server-entry.mjs +141 -70
  17. package/dist/esm/worker-web-entry.mjs +141 -70
  18. package/dist/get-tracks.d.ts +3 -0
  19. package/dist/index.d.ts +3 -2
  20. package/dist/normalize-video-rotation.d.ts +1 -0
  21. package/dist/normalize-video-rotation.js +7 -0
  22. package/dist/parse-loop.js +2 -0
  23. package/dist/print-timings.js +1 -0
  24. package/dist/state/iso-base-media/cached-sample-positions.d.ts +6 -5
  25. package/dist/state/iso-base-media/cached-sample-positions.js +14 -7
  26. package/dist/state/iso-base-media/iso-state.d.ts +2 -2
  27. package/dist/state/parser-state.d.ts +3 -2
  28. package/dist/state/timings.d.ts +1 -0
  29. package/dist/state/timings.js +1 -0
  30. package/dist/version.d.ts +1 -1
  31. package/dist/version.js +1 -1
  32. package/package.json +4 -3
@@ -3174,6 +3174,11 @@ var getVideoCodecString = (trakBox) => {
3174
3174
  return videoSample.format;
3175
3175
  };
3176
3176
 
3177
+ // src/normalize-video-rotation.ts
3178
+ var normalizeVideoRotation = (rotation) => {
3179
+ return (rotation % 360 + 360) % 360;
3180
+ };
3181
+
3177
3182
  // src/webcodecs-timescale.ts
3178
3183
  var WEBCODECS_TIMESCALE = 1e6;
3179
3184
 
@@ -3414,6 +3419,45 @@ var getVideoCodecFromIsoTrak = (trakBox) => {
3414
3419
  throw new Error("Could not find video codec");
3415
3420
  };
3416
3421
 
3422
+ // src/containers/iso-base-media/mdat/get-editlist.ts
3423
+ var findTrackStartTimeInSeconds = ({
3424
+ movieTimeScale,
3425
+ trakBox
3426
+ }) => {
3427
+ const elstBox = getElstBox(trakBox);
3428
+ if (!elstBox) {
3429
+ return 0;
3430
+ }
3431
+ const { entries } = elstBox;
3432
+ let dwellTime = 0;
3433
+ for (const entry of entries) {
3434
+ const { editDuration, mediaTime } = entry;
3435
+ if (mediaTime !== -1) {
3436
+ continue;
3437
+ }
3438
+ dwellTime += editDuration;
3439
+ }
3440
+ return dwellTime / movieTimeScale;
3441
+ };
3442
+ var findTrackMediaTimeOffsetInTrackTimescale = ({
3443
+ trakBox
3444
+ }) => {
3445
+ const elstBox = getElstBox(trakBox);
3446
+ if (!elstBox) {
3447
+ return 0;
3448
+ }
3449
+ const { entries } = elstBox;
3450
+ let dwellTime = 0;
3451
+ for (const entry of entries) {
3452
+ const { mediaTime } = entry;
3453
+ if (mediaTime === -1) {
3454
+ continue;
3455
+ }
3456
+ dwellTime += mediaTime;
3457
+ }
3458
+ return dwellTime;
3459
+ };
3460
+
3417
3461
  // src/containers/iso-base-media/make-track.ts
3418
3462
  var makeBaseMediaTrack = (trakBox, startTimeInSeconds) => {
3419
3463
  const tkhdBox = getTkhdBox(trakBox);
@@ -3454,7 +3498,10 @@ var makeBaseMediaTrack = (trakBox, startTimeInSeconds) => {
3454
3498
  codecData: actual.codecPrivate,
3455
3499
  codecEnum,
3456
3500
  startInSeconds: startTimeInSeconds,
3457
- timescale: WEBCODECS_TIMESCALE
3501
+ timescale: WEBCODECS_TIMESCALE,
3502
+ trackMediaTimeOffsetInTrackTimescale: findTrackMediaTimeOffsetInTrackTimescale({
3503
+ trakBox
3504
+ })
3458
3505
  };
3459
3506
  }
3460
3507
  if (!trakBoxContainsVideo(trakBox)) {
@@ -3464,7 +3511,10 @@ var makeBaseMediaTrack = (trakBox, startTimeInSeconds) => {
3464
3511
  originalTimescale: timescaleAndDuration.timescale,
3465
3512
  trakBox,
3466
3513
  startInSeconds: startTimeInSeconds,
3467
- timescale: WEBCODECS_TIMESCALE
3514
+ timescale: WEBCODECS_TIMESCALE,
3515
+ trackMediaTimeOffsetInTrackTimescale: findTrackMediaTimeOffsetInTrackTimescale({
3516
+ trakBox
3517
+ })
3468
3518
  };
3469
3519
  }
3470
3520
  const videoSample = getStsdVideoConfig(trakBox);
@@ -3506,39 +3556,21 @@ var makeBaseMediaTrack = (trakBox, startTimeInSeconds) => {
3506
3556
  codedHeight: videoSample.height,
3507
3557
  displayAspectWidth,
3508
3558
  displayAspectHeight,
3509
- rotation,
3559
+ rotation: normalizeVideoRotation(0 - rotation),
3510
3560
  codecData: privateData,
3511
3561
  colorSpace: mediaParserAdvancedColorToWebCodecsColor(advancedColor),
3512
3562
  advancedColor,
3513
3563
  codecEnum: getVideoCodecFromIsoTrak(trakBox),
3514
3564
  fps: getFpsFromMp4TrakBox(trakBox),
3515
3565
  startInSeconds: startTimeInSeconds,
3516
- timescale: WEBCODECS_TIMESCALE
3566
+ timescale: WEBCODECS_TIMESCALE,
3567
+ trackMediaTimeOffsetInTrackTimescale: findTrackMediaTimeOffsetInTrackTimescale({
3568
+ trakBox
3569
+ })
3517
3570
  };
3518
3571
  return track;
3519
3572
  };
3520
3573
 
3521
- // src/containers/iso-base-media/mdat/get-editlist.ts
3522
- var findTrackStartTimeInSeconds = ({
3523
- movieTimeScale,
3524
- trakBox
3525
- }) => {
3526
- const elstBox = getElstBox(trakBox);
3527
- if (!elstBox) {
3528
- return 0;
3529
- }
3530
- const { entries } = elstBox;
3531
- let dwellTime = 0;
3532
- for (const entry of entries) {
3533
- const { editDuration, mediaTime } = entry;
3534
- if (mediaTime !== -1) {
3535
- continue;
3536
- }
3537
- dwellTime += editDuration;
3538
- }
3539
- return dwellTime / movieTimeScale;
3540
- };
3541
-
3542
3574
  // src/containers/avc/codec-string.ts
3543
3575
  var getCodecStringFromSpsAndPps = (sps) => {
3544
3576
  return `avc1.${sps.spsData.profile.toString(16).padStart(2, "0")}${sps.spsData.compatibility.toString(16).padStart(2, "0")}${sps.spsData.level.toString(16).padStart(2, "0")}`;
@@ -3639,7 +3671,8 @@ var makeAviAudioTrack = ({
3639
3671
  originalTimescale: MEDIA_PARSER_RIFF_TIMESCALE,
3640
3672
  trackId: index,
3641
3673
  startInSeconds: 0,
3642
- timescale: WEBCODECS_TIMESCALE
3674
+ timescale: WEBCODECS_TIMESCALE,
3675
+ trackMediaTimeOffsetInTrackTimescale: 0
3643
3676
  };
3644
3677
  };
3645
3678
  var makeAviVideoTrack = ({
@@ -3684,7 +3717,8 @@ var makeAviVideoTrack = ({
3684
3717
  },
3685
3718
  fps: strh.rate / strh.scale,
3686
3719
  startInSeconds: 0,
3687
- timescale: WEBCODECS_TIMESCALE
3720
+ timescale: WEBCODECS_TIMESCALE,
3721
+ trackMediaTimeOffsetInTrackTimescale: 0
3688
3722
  };
3689
3723
  };
3690
3724
  var getTracksFromAvi = (structure, state) => {
@@ -4351,7 +4385,8 @@ var getTrack = ({
4351
4385
  codecEnum,
4352
4386
  fps: null,
4353
4387
  startInSeconds: 0,
4354
- timescale: WEBCODECS_TIMESCALE
4388
+ timescale: WEBCODECS_TIMESCALE,
4389
+ trackMediaTimeOffsetInTrackTimescale: 0
4355
4390
  };
4356
4391
  }
4357
4392
  if (trackTypeToString(trackType2.value.value) === "audio") {
@@ -4375,7 +4410,8 @@ var getTrack = ({
4375
4410
  track
4376
4411
  }),
4377
4412
  startInSeconds: 0,
4378
- timescale: WEBCODECS_TIMESCALE
4413
+ timescale: WEBCODECS_TIMESCALE,
4414
+ trackMediaTimeOffsetInTrackTimescale: 0
4379
4415
  };
4380
4416
  }
4381
4417
  return null;
@@ -7213,7 +7249,8 @@ var handleAvcPacket = async ({
7213
7249
  colorSpace: mediaParserAdvancedColorToWebCodecsColor(advancedColor),
7214
7250
  advancedColor,
7215
7251
  startInSeconds: 0,
7216
- timescale: WEBCODECS_TIMESCALE
7252
+ timescale: WEBCODECS_TIMESCALE,
7253
+ trackMediaTimeOffsetInTrackTimescale: 0
7217
7254
  };
7218
7255
  await registerVideoTrack({
7219
7256
  track,
@@ -8865,7 +8902,8 @@ var parseAac = async (state) => {
8865
8902
  trackId: 0,
8866
8903
  type: "audio",
8867
8904
  startInSeconds: 0,
8868
- timescale: WEBCODECS_TIMESCALE
8905
+ timescale: WEBCODECS_TIMESCALE,
8906
+ trackMediaTimeOffsetInTrackTimescale: 0
8869
8907
  },
8870
8908
  registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
8871
8909
  tracks: state.callbacks.tracks,
@@ -9272,7 +9310,8 @@ var parseStreamInfo = async ({
9272
9310
  originalTimescale: WEBCODECS_TIMESCALE,
9273
9311
  trackId: 0,
9274
9312
  startInSeconds: 0,
9275
- timescale: WEBCODECS_TIMESCALE
9313
+ timescale: WEBCODECS_TIMESCALE,
9314
+ trackMediaTimeOffsetInTrackTimescale: 0
9276
9315
  },
9277
9316
  registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
9278
9317
  tracks: state.callbacks.tracks,
@@ -9373,7 +9412,10 @@ var calculateFlatSamples = ({
9373
9412
  if (!moov) {
9374
9413
  throw new Error("No moov box found");
9375
9414
  }
9376
- const flatSamples = tracks2.map((track) => {
9415
+ const offsets = [];
9416
+ const trackIds = [];
9417
+ const map = new Map;
9418
+ for (const track of tracks2) {
9377
9419
  const trakBox = getTrakBoxByTrackId(moov, track.trackId);
9378
9420
  if (!trakBox) {
9379
9421
  throw new Error("No trak box found");
@@ -9384,14 +9426,17 @@ var calculateFlatSamples = ({
9384
9426
  moofComplete,
9385
9427
  trexBoxes: getTrexBoxes(moov)
9386
9428
  });
9387
- return samplePositions.map((samplePosition) => {
9388
- return {
9429
+ trackIds.push(track.trackId);
9430
+ for (const samplePosition of samplePositions) {
9431
+ offsets.push(samplePosition.offset);
9432
+ map.set(samplePosition.offset, {
9389
9433
  track,
9390
9434
  samplePosition
9391
- };
9392
- });
9393
- });
9394
- return flatSamples;
9435
+ });
9436
+ }
9437
+ }
9438
+ offsets.sort((a, b) => a - b);
9439
+ return { flatSamples: map, offsets, trackIds };
9395
9440
  };
9396
9441
  var cachedSamplePositionsState = () => {
9397
9442
  const cachedForMdatStart = {};
@@ -11715,31 +11760,36 @@ var getMoovAtom = async ({
11715
11760
  // src/containers/iso-base-media/mdat/calculate-jump-marks.ts
11716
11761
  var MAX_SPREAD_IN_SECONDS = 8;
11717
11762
  var getKey = (samplePositionTrack) => {
11718
- return `${samplePositionTrack.track.trackId}-${samplePositionTrack.samplePosition.decodingTimestamp}`;
11763
+ return `${samplePositionTrack.track.trackId}-${samplePositionTrack.samplePosition.decodingTimestamp}.${samplePositionTrack.samplePosition.offset}`;
11719
11764
  };
11720
11765
  var findBestJump = ({
11721
- allSamplesSortedByOffset,
11766
+ sampleMap,
11767
+ offsetsSorted,
11722
11768
  visited,
11723
11769
  progresses
11724
11770
  }) => {
11725
11771
  const minProgress = Math.min(...Object.values(progresses));
11726
11772
  const trackNumberWithLowestProgress = Object.entries(progresses).find(([, progress]) => progress === minProgress)?.[0];
11727
- const firstSampleAboveMinProgress = allSamplesSortedByOffset.findIndex((sample) => sample.track.trackId === Number(trackNumberWithLowestProgress) && !visited.has(getKey(sample)));
11773
+ const firstSampleAboveMinProgress = offsetsSorted.findIndex((offset) => sampleMap.get(offset).track.trackId === Number(trackNumberWithLowestProgress) && !visited.has(getKey(sampleMap.get(offset))));
11728
11774
  return firstSampleAboveMinProgress;
11729
11775
  };
11730
- var calculateJumpMarks = (samplePositionTracks, endOfMdat) => {
11776
+ var calculateJumpMarks = ({
11777
+ sampleMap,
11778
+ offsetsSorted,
11779
+ trackIds,
11780
+ endOfMdat
11781
+ }) => {
11731
11782
  const progresses = {};
11732
- for (const track of samplePositionTracks) {
11733
- progresses[track[0].track.trackId] = 0;
11783
+ for (const trackId of trackIds) {
11784
+ progresses[trackId] = 0;
11734
11785
  }
11735
11786
  const jumpMarks = [];
11736
- const allSamplesSortedByOffset = samplePositionTracks.flat(1).filter((s) => s.track.type === "audio" || s.track.type === "video").sort((a, b) => a.samplePosition.offset - b.samplePosition.offset);
11737
11787
  let indexToVisit = 0;
11738
11788
  const visited = new Set;
11739
11789
  let rollOverToProcess = false;
11740
11790
  const increaseIndex = () => {
11741
11791
  indexToVisit++;
11742
- if (indexToVisit >= allSamplesSortedByOffset.length) {
11792
+ if (indexToVisit >= offsetsSorted.length) {
11743
11793
  rollOverToProcess = true;
11744
11794
  indexToVisit = 0;
11745
11795
  }
@@ -11753,23 +11803,24 @@ var calculateJumpMarks = (samplePositionTracks, endOfMdat) => {
11753
11803
  }
11754
11804
  const jumpMark = {
11755
11805
  afterSampleWithOffset: lastVisitedSample.samplePosition.offset,
11756
- jumpToOffset: allSamplesSortedByOffset[firstSampleAboveMinProgress].samplePosition.offset
11806
+ jumpToOffset: offsetsSorted[firstSampleAboveMinProgress]
11757
11807
  };
11758
11808
  indexToVisit = firstSampleAboveMinProgress;
11759
11809
  jumpMarks.push(jumpMark);
11760
11810
  };
11761
11811
  const addFinalJumpIfNecessary = () => {
11762
- if (indexToVisit === allSamplesSortedByOffset.length - 1) {
11812
+ if (indexToVisit === offsetsSorted.length - 1) {
11763
11813
  return;
11764
11814
  }
11765
11815
  jumpMarks.push({
11766
- afterSampleWithOffset: allSamplesSortedByOffset[indexToVisit].samplePosition.offset,
11816
+ afterSampleWithOffset: offsetsSorted[indexToVisit],
11767
11817
  jumpToOffset: endOfMdat
11768
11818
  });
11769
11819
  };
11770
11820
  const considerJump = () => {
11771
11821
  const firstSampleAboveMinProgress = findBestJump({
11772
- allSamplesSortedByOffset,
11822
+ sampleMap,
11823
+ offsetsSorted,
11773
11824
  visited,
11774
11825
  progresses
11775
11826
  });
@@ -11779,14 +11830,14 @@ var calculateJumpMarks = (samplePositionTracks, endOfMdat) => {
11779
11830
  } else {
11780
11831
  while (true) {
11781
11832
  increaseIndex();
11782
- if (!visited.has(getKey(allSamplesSortedByOffset[indexToVisit]))) {
11833
+ if (!visited.has(getKey(sampleMap.get(offsetsSorted[indexToVisit])))) {
11783
11834
  break;
11784
11835
  }
11785
11836
  }
11786
11837
  }
11787
11838
  };
11788
11839
  while (true) {
11789
- const currentSamplePosition = allSamplesSortedByOffset[indexToVisit];
11840
+ const currentSamplePosition = sampleMap.get(offsetsSorted[indexToVisit]);
11790
11841
  const sampleKey = getKey(currentSamplePosition);
11791
11842
  if (visited.has(sampleKey)) {
11792
11843
  considerJump();
@@ -11804,7 +11855,7 @@ var calculateJumpMarks = (samplePositionTracks, endOfMdat) => {
11804
11855
  rollOverToProcess = false;
11805
11856
  }
11806
11857
  lastVisitedSample = currentSamplePosition;
11807
- if (visited.size === allSamplesSortedByOffset.length) {
11858
+ if (visited.size === offsetsSorted.length) {
11808
11859
  addFinalJumpIfNecessary();
11809
11860
  break;
11810
11861
  }
@@ -11814,7 +11865,7 @@ var calculateJumpMarks = (samplePositionTracks, endOfMdat) => {
11814
11865
  const maxProgress = Math.max(...progressValues);
11815
11866
  const minProgress = Math.min(...progressValues);
11816
11867
  const spread = maxProgress - minProgress;
11817
- if (visited.size === allSamplesSortedByOffset.length) {
11868
+ if (visited.size === offsetsSorted.length) {
11818
11869
  addFinalJumpIfNecessary();
11819
11870
  break;
11820
11871
  }
@@ -11896,24 +11947,32 @@ var parseMdatSection = async (state) => {
11896
11947
  return parseMdatSection(state);
11897
11948
  }
11898
11949
  if (!state.iso.flatSamples.getSamples(mediaSection.start)) {
11899
- const flattedSamples = calculateFlatSamples({
11950
+ const {
11951
+ flatSamples: flatSamplesMap,
11952
+ offsets,
11953
+ trackIds
11954
+ } = calculateFlatSamples({
11900
11955
  state,
11901
11956
  mediaSectionStart: mediaSection.start
11902
11957
  });
11903
- const calcedJumpMarks = calculateJumpMarks(flattedSamples, endOfMdat);
11958
+ const calcedJumpMarks = calculateJumpMarks({
11959
+ sampleMap: flatSamplesMap,
11960
+ offsetsSorted: offsets,
11961
+ trackIds,
11962
+ endOfMdat
11963
+ });
11904
11964
  state.iso.flatSamples.setJumpMarks(mediaSection.start, calcedJumpMarks);
11905
- state.iso.flatSamples.setSamples(mediaSection.start, flattedSamples.flat(1));
11965
+ state.iso.flatSamples.setSamples(mediaSection.start, flatSamplesMap);
11906
11966
  }
11907
11967
  const flatSamples = state.iso.flatSamples.getSamples(mediaSection.start);
11908
11968
  const jumpMarks = state.iso.flatSamples.getJumpMarks(mediaSection.start);
11909
11969
  const { iterator } = state;
11910
- const samplesWithIndex = flatSamples.find((sample) => {
11911
- return sample.samplePosition.offset === iterator.counter.getOffset();
11912
- });
11970
+ const samplesWithIndex = flatSamples.get(iterator.counter.getOffset());
11913
11971
  if (!samplesWithIndex) {
11914
- const nextSample_ = flatSamples.filter((s) => s.samplePosition.offset > iterator.counter.getOffset()).sort((a, b) => a.samplePosition.offset - b.samplePosition.offset)[0];
11972
+ const offsets = Array.from(flatSamples.keys());
11973
+ const nextSample_ = offsets.filter((s) => s > iterator.counter.getOffset()).sort((a, b) => a - b)[0];
11915
11974
  if (nextSample_) {
11916
- iterator.discard(nextSample_.samplePosition.offset - iterator.counter.getOffset());
11975
+ iterator.discard(nextSample_ - iterator.counter.getOffset());
11917
11976
  return null;
11918
11977
  }
11919
11978
  Log.verbose(state.logLevel, "Could not find sample at offset", iterator.counter.getOffset(), "skipping to end of mdat");
@@ -11935,9 +11994,14 @@ var parseMdatSection = async (state) => {
11935
11994
  bigEndian,
11936
11995
  chunkSize
11937
11996
  } = samplesWithIndex.samplePosition;
11938
- const { originalTimescale, startInSeconds } = samplesWithIndex.track;
11939
- const cts = rawCts + startInSeconds * originalTimescale;
11940
- const dts = rawDts + startInSeconds * originalTimescale;
11997
+ const {
11998
+ originalTimescale,
11999
+ startInSeconds,
12000
+ trackMediaTimeOffsetInTrackTimescale,
12001
+ timescale: trackTimescale
12002
+ } = samplesWithIndex.track;
12003
+ const cts = rawCts + startInSeconds * originalTimescale - trackMediaTimeOffsetInTrackTimescale / trackTimescale * WEBCODECS_TIMESCALE;
12004
+ const dts = rawDts + startInSeconds * originalTimescale - trackMediaTimeOffsetInTrackTimescale / trackTimescale * WEBCODECS_TIMESCALE;
11941
12005
  const bytes = postprocessBytes({
11942
12006
  bytes: iterator.getSlice(samplesWithIndex.samplePosition.size),
11943
12007
  bigEndian,
@@ -13315,7 +13379,8 @@ var parseMpegHeader = async ({
13315
13379
  originalTimescale: 1e6,
13316
13380
  trackId: 0,
13317
13381
  startInSeconds: 0,
13318
- timescale: WEBCODECS_TIMESCALE
13382
+ timescale: WEBCODECS_TIMESCALE,
13383
+ trackMediaTimeOffsetInTrackTimescale: 0
13319
13384
  },
13320
13385
  registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
13321
13386
  tracks: state.callbacks.tracks,
@@ -14402,7 +14467,8 @@ var handleAacPacket = async ({
14402
14467
  numberOfChannels: channelConfiguration,
14403
14468
  sampleRate,
14404
14469
  startInSeconds: 0,
14405
- timescale: WEBCODECS_TIMESCALE
14470
+ timescale: WEBCODECS_TIMESCALE,
14471
+ trackMediaTimeOffsetInTrackTimescale: 0
14406
14472
  };
14407
14473
  await registerAudioTrack({
14408
14474
  track,
@@ -15035,7 +15101,8 @@ var parseFmt = async ({
15035
15101
  originalTimescale: 1e6,
15036
15102
  trackId: 0,
15037
15103
  startInSeconds: 0,
15038
- timescale: WEBCODECS_TIMESCALE
15104
+ timescale: WEBCODECS_TIMESCALE,
15105
+ trackMediaTimeOffsetInTrackTimescale: 0
15039
15106
  },
15040
15107
  container: "wav",
15041
15108
  registerAudioSampleCallback: state.callbacks.registerAudioSampleCallback,
@@ -16033,9 +16100,11 @@ var parseLoop = async ({
16033
16100
  try {
16034
16101
  await triggerInfoEmit(state);
16035
16102
  await state.controller._internals.checkForAbortAndPause();
16103
+ const parseLoopStart = Date.now();
16036
16104
  const result = await runParseIteration({
16037
16105
  state
16038
16106
  });
16107
+ state.timings.timeInParseLoop += Date.now() - parseLoopStart;
16039
16108
  if (result !== null && result.action === "fetch-more-data") {
16040
16109
  Log.verbose(state.logLevel, `Need to fetch ${result.bytesNeeded} more bytes before we can continue`);
16041
16110
  const startBytesRemaining = state.iterator.bytesRemaining();
@@ -16124,6 +16193,7 @@ var printTimings = (state) => {
16124
16193
  Log.verbose(state.logLevel, `Time seeking: ${state.timings.timeSeeking}ms`);
16125
16194
  Log.verbose(state.logLevel, `Time checking if done: ${state.timings.timeCheckingIfDone}ms`);
16126
16195
  Log.verbose(state.logLevel, `Time freeing data: ${state.timings.timeFreeingData}ms`);
16196
+ Log.verbose(state.logLevel, `Time in parse loop: ${state.timings.timeInParseLoop}ms`);
16127
16197
  };
16128
16198
 
16129
16199
  // src/remotion-license-acknowledge.ts
@@ -17728,7 +17798,8 @@ var timingsState = () => {
17728
17798
  timeReadingData: 0,
17729
17799
  timeSeeking: 0,
17730
17800
  timeCheckingIfDone: 0,
17731
- timeFreeingData: 0
17801
+ timeFreeingData: 0,
17802
+ timeInParseLoop: 0
17732
17803
  };
17733
17804
  };
17734
17805