Skip to content

Commit caa7893

Browse files
authored
Merge pull request #5440 from remotion-dev/use-without-arraybuffer-resize
2 parents 7979e23 + dcf96e0 commit caa7893

28 files changed

+263
-120
lines changed

packages/media-parser/src/containers/avc/parse-avc.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,11 @@ const findEnd = (buffer: Uint8Array) => {
316316
};
317317

318318
const inspect = (buffer: Uint8Array, avcState: AvcState): AvcInfo | null => {
319-
const iterator = getArrayBufferIterator(buffer, buffer.byteLength);
319+
const iterator = getArrayBufferIterator({
320+
initialData: buffer,
321+
maxBytes: buffer.byteLength,
322+
logLevel: 'error',
323+
});
320324
iterator.startReadingBits();
321325
iterator.getBits(1); // forbidden_zero_bit
322326
const nal_ref_idc = iterator.getBits(2); // nal_ref_idc

packages/media-parser/src/containers/flac/parse-flac-frame.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,11 @@ const emitSample = async ({
9191
data: Uint8Array;
9292
offset: number;
9393
}) => {
94-
const iterator = getArrayBufferIterator(data, data.length);
94+
const iterator = getArrayBufferIterator({
95+
initialData: data,
96+
maxBytes: data.length,
97+
logLevel: 'error',
98+
});
9599
const parsed = parseFrameHeader({iterator, state});
96100
if (!parsed) {
97101
throw new Error('Invalid CRC');

packages/media-parser/src/containers/iso-base-media/get-moov-atom.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,11 @@ export const getMoovAtom = async ({
7272
}
7373
: null;
7474

75-
const iterator: BufferIterator = getArrayBufferIterator(
76-
new Uint8Array([]),
77-
state.contentLength - endOfMdat,
78-
);
75+
const iterator: BufferIterator = getArrayBufferIterator({
76+
initialData: new Uint8Array([]),
77+
maxBytes: state.contentLength - endOfMdat,
78+
logLevel: 'error',
79+
});
7980

8081
while (true) {
8182
const result = await reader.reader.read();

packages/media-parser/src/containers/iso-base-media/mfra/get-mfra-atom.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ export const getMfraAtom = async ({
3030
prefetchCache,
3131
});
3232

33-
const iterator = getArrayBufferIterator(new Uint8Array(), parentSize);
33+
const iterator = getArrayBufferIterator({
34+
initialData: new Uint8Array(),
35+
maxBytes: parentSize,
36+
logLevel: 'error',
37+
});
3438
while (true) {
3539
const res = await result.reader.reader.read();
3640
if (res.value) {

packages/media-parser/src/containers/iso-base-media/mfra/get-mfro-atom.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ export const getMfroAtom = async ({
3434
}
3535

3636
result.reader.abort();
37-
const iterator = getArrayBufferIterator(value, value.length);
37+
const iterator = getArrayBufferIterator({
38+
initialData: value,
39+
maxBytes: value.length,
40+
logLevel: 'error',
41+
});
3842
const size = iterator.getUint32();
3943
if (size !== 16) {
4044
iterator.destroy();

packages/media-parser/src/containers/iso-base-media/moov/mvhd.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,23 @@ export const parseMvhd = ({
5555
const durationInSeconds = Number(durationInUnits) / timeScale;
5656

5757
const rateArray = iterator.getSlice(4);
58-
const rateView = getArrayBufferIterator(rateArray, rateArray.length);
58+
const rateView = getArrayBufferIterator({
59+
initialData: rateArray,
60+
maxBytes: rateArray.length,
61+
logLevel: 'error',
62+
});
5963
const rate =
6064
rateView.getInt8() * 10 +
6165
rateView.getInt8() +
6266
rateView.getInt8() * 0.1 +
6367
rateView.getInt8() * 0.01;
6468

6569
const volumeArray = iterator.getSlice(2);
66-
const volumeView = getArrayBufferIterator(volumeArray, volumeArray.length);
70+
const volumeView = getArrayBufferIterator({
71+
initialData: volumeArray,
72+
maxBytes: volumeArray.length,
73+
logLevel: 'error',
74+
});
6775

6876
const volume = volumeView.getInt8() + volumeView.getInt8() * 0.1;
6977

packages/media-parser/src/containers/iso-base-media/parse-icc-profile.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ type Entry = {
3838
};
3939

4040
export const parseIccProfile = (data: Uint8Array): IccProfile => {
41-
const iterator = getArrayBufferIterator(data, data.length);
41+
const iterator = getArrayBufferIterator({
42+
initialData: data,
43+
maxBytes: data.length,
44+
logLevel: 'error',
45+
});
4246
const size = iterator.getUint32();
4347
if (size !== data.length) {
4448
throw new Error('Invalid ICC profile size');
@@ -96,7 +100,11 @@ export const parseIccProfile = (data: Uint8Array): IccProfile => {
96100
entry.tag === 'bXYZ' ||
97101
entry.tag === 'wtpt'
98102
) {
99-
const it = getArrayBufferIterator(found, found.length);
103+
const it = getArrayBufferIterator({
104+
initialData: found,
105+
maxBytes: found.length,
106+
logLevel: 'error',
107+
});
100108
it.discard(4);
101109

102110
const x = it.getInt32() / 65536;

packages/media-parser/src/containers/riff/seek/fetch-idx1.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,11 @@ export const fetchIdx1 = async ({
4242
throw new Error('Content length is null');
4343
}
4444

45-
const iterator = getArrayBufferIterator(
46-
new Uint8Array(),
47-
contentLength - position + 1,
48-
);
45+
const iterator = getArrayBufferIterator({
46+
initialData: new Uint8Array(),
47+
maxBytes: contentLength - position + 1,
48+
logLevel: 'error',
49+
});
4950
while (true) {
5051
const res = await result.reader.reader.read();
5152
if (res.value) {

packages/media-parser/src/containers/transport-stream/adts-header.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@ export const readAdtsHeader = (buffer: Uint8Array) => {
99
return null;
1010
}
1111

12-
const iterator = getArrayBufferIterator(buffer, buffer.byteLength);
12+
const iterator = getArrayBufferIterator({
13+
initialData: buffer,
14+
maxBytes: buffer.byteLength,
15+
logLevel: 'error',
16+
});
1317

1418
iterator.startReadingBits();
1519
const bits = iterator.getBits(12);

packages/media-parser/src/containers/webm/av1-codec-private.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,11 @@ export const parseAv1PrivateData = (
55
data: Uint8Array,
66
colrAtom: ColorParameterBox | null,
77
) => {
8-
const iterator = getArrayBufferIterator(data, data.byteLength);
8+
const iterator = getArrayBufferIterator({
9+
initialData: data,
10+
maxBytes: data.byteLength,
11+
logLevel: 'error',
12+
});
913
iterator.startReadingBits();
1014
if (iterator.getBits(1) !== 1) {
1115
iterator.destroy();

packages/media-parser/src/containers/webm/description.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,11 @@ export const getAudioDescription = (
5959

6060
const vorbisBooks = privateData.slice(offset);
6161

62-
const bufferIterator = getArrayBufferIterator(
63-
vorbisInfo.slice(0),
64-
vorbisInfo.length,
65-
);
62+
const bufferIterator = getArrayBufferIterator({
63+
initialData: vorbisInfo.slice(0),
64+
maxBytes: vorbisInfo.length,
65+
logLevel: 'error',
66+
});
6667

6768
// type
6869
bufferIterator.getUint8();

packages/media-parser/src/containers/webm/get-sample-from-block.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,11 @@ export const getSampleFromBlock = async ({
125125
onVideoTrack: MediaParserOnVideoTrack | null;
126126
avcState: AvcState;
127127
}): Promise<SampleResult> => {
128-
const iterator = getArrayBufferIterator(ebml.value, ebml.value.length);
128+
const iterator = getArrayBufferIterator({
129+
initialData: ebml.value,
130+
maxBytes: ebml.value.length,
131+
logLevel: 'error',
132+
});
129133
const trackNumber = iterator.getVint();
130134
if (trackNumber === null) {
131135
throw new Error('Not enough data to get track number, should not happen');

packages/media-parser/src/containers/webm/make-track.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,11 @@ const getMatroskaVideoCodecString = ({
109109

110110
if (codec.value === 'V_MPEGH/ISO/HEVC') {
111111
const priv = getPrivateData(track);
112-
const iterator = getArrayBufferIterator(
113-
priv as Uint8Array,
114-
(priv as Uint8Array).length,
115-
);
112+
const iterator = getArrayBufferIterator({
113+
initialData: priv as Uint8Array,
114+
maxBytes: (priv as Uint8Array).length,
115+
logLevel: 'error',
116+
});
116117

117118
return 'hvc1.' + getHvc1CodecString(iterator);
118119
}
@@ -216,10 +217,11 @@ const getMatroskaAudioCodecString = (track: TrackEntry): string => {
216217
if (codec.value === 'A_AAC') {
217218
const priv = getPrivateData(track);
218219

219-
const iterator = getArrayBufferIterator(
220-
priv as Uint8Array,
221-
(priv as Uint8Array).length,
222-
);
220+
const iterator = getArrayBufferIterator({
221+
initialData: priv as Uint8Array,
222+
maxBytes: (priv as Uint8Array).length,
223+
logLevel: 'error',
224+
});
223225

224226
iterator.startReadingBits();
225227
/**

packages/media-parser/src/containers/webm/seek/fetch-web-cues.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,11 @@ export const fetchWebmCues = async ({
3737
}
3838

3939
result.reader.abort();
40-
const iterator = getArrayBufferIterator(value, value.length);
40+
const iterator = getArrayBufferIterator({
41+
initialData: value,
42+
maxBytes: value.length,
43+
logLevel: 'error',
44+
});
4145
const segment = await expectSegment({
4246
iterator,
4347
logLevel,

0 commit comments

Comments
 (0)