@bendyline/squisq-video-react 2.4.24 → 2.4.25
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/NOTICE.md +9 -9
- package/README.md +1 -1
- package/THIRD_PARTY_LICENSES.txt +2 -2
- package/dist/{chunk-OLFWEKY5.js → chunk-7RONIAPM.js} +1 -1
- package/dist/{chunk-A52VG7RA.js → chunk-CWLDLWSE.js} +1 -1
- package/dist/{chunk-BOSF6GLF.js → chunk-IOLZNTKA.js} +1 -1
- package/dist/{chunk-JDIMPME5.js → chunk-JVGUGMEZ.js} +1 -1
- package/dist/{chunk-JQLHRJY3.js → chunk-NTLNXUMA.js} +1 -1
- package/dist/{chunk-C7NEHV5X.js → chunk-R4P6O5U6.js} +240 -93
- package/dist/{chunk-FMQI6WK2.js → chunk-UVDJINCK.js} +1 -1
- package/dist/{chunk-BNNLPKT2.js → chunk-Y5ZQ6M43.js} +1 -1
- package/dist/components/index.d.ts +3 -3
- package/dist/components/index.js +5 -5
- package/dist/cover-image/index.d.ts +2 -2
- package/dist/cover-image/index.js +3 -3
- package/dist/dashboard-image/index.d.ts +2 -2
- package/dist/dashboard-image/index.js +2 -2
- package/dist/encoder/index.js +1 -1
- package/dist/hooks/index.js +3 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +7 -7
- package/dist/{lossyEncoder-EIXBAOLG.js → lossyEncoder-55PXLHLE.js} +1 -1
- package/dist/media-edit/index.js +1 -1
- package/dist/{mediaEditEngine-JLZ4Z5BB.js → mediaEditEngine-OBNK6I2B.js} +2 -2
- package/dist/workers/mediaEdit.worker.js +2 -2
- package/package.json +7 -7
package/NOTICE.md
CHANGED
|
@@ -8,12 +8,12 @@ Third-party components remain under their respective license terms.
|
|
|
8
8
|
|
|
9
9
|
| Package | Version | License | Repository |
|
|
10
10
|
| ----------------------- | -------------------- | ---------------- | ----------------------------------------- |
|
|
11
|
-
| @ffmpeg/core | 0.12.
|
|
11
|
+
| @ffmpeg/core | 0.12.10 | GPL-2.0-or-later | https://github.com/ffmpegwasm/ffmpeg.wasm |
|
|
12
12
|
| @ffmpeg/ffmpeg | 0.12.15 | MIT | https://github.com/ffmpegwasm/ffmpeg.wasm |
|
|
13
13
|
| @ffmpeg/util | 0.12.2 | MIT | https://github.com/ffmpegwasm/ffmpeg.wasm |
|
|
14
14
|
| @shiguredo/rnnoise-wasm | 2025.1.5 | Apache-2.0 | https://github.com/shiguredo/rnnoise-wasm |
|
|
15
15
|
| html2canvas | 1.4.1 | MIT | https://github.com/niklasvh/html2canvas |
|
|
16
|
-
| mediabunny _(bundled)_ | 1.
|
|
16
|
+
| mediabunny _(bundled)_ | 1.61.0 | MPL-2.0 | https://github.com/Vanilagy/mediabunny |
|
|
17
17
|
| mp4-muxer _(bundled)_ | 5.2.2 | MIT | https://github.com/Vanilagy/mp4-muxer |
|
|
18
18
|
| react _(peer)_ | ^18.0.0 \|\| ^19.0.0 | MIT | https://github.com/facebook/react |
|
|
19
19
|
| react-dom _(peer)_ | ^18.0.0 \|\| ^19.0.0 | MIT | https://github.com/facebook/react |
|
|
@@ -21,20 +21,20 @@ Third-party components remain under their respective license terms.
|
|
|
21
21
|
## @ffmpeg/core WebAssembly runtime
|
|
22
22
|
|
|
23
23
|
@ffmpeg/core is a WebAssembly build with an upstream dependency on the FFmpeg
|
|
24
|
-
project and external libraries. Version 0.12.
|
|
24
|
+
project and external libraries. Version 0.12.10 declares GPL-2.0-or-later. A
|
|
25
25
|
verbatim copy of GPLv2 is included as COPYING.GPL-2.0.txt. Hosts that publish
|
|
26
26
|
ffmpeg-core.js or ffmpeg-core.wasm must preserve the applicable notices,
|
|
27
27
|
provide the GPL text, and provide equivalent access to the corresponding
|
|
28
28
|
source for the exact binaries.
|
|
29
29
|
|
|
30
|
-
Squisq's demo site uses the unmodified ESM files from @ffmpeg/core@0.12.
|
|
31
|
-
Upstream identifies ffmpeg.wasm release v12.
|
|
32
|
-
|
|
30
|
+
Squisq's demo site uses the unmodified ESM files from @ffmpeg/core@0.12.10.
|
|
31
|
+
Upstream identifies ffmpeg.wasm release v12.15, commit
|
|
32
|
+
71aa99d37c02a7b4c435275ca9ef50e612f6efa1, as the source release containing
|
|
33
33
|
that package version:
|
|
34
34
|
|
|
35
|
-
- https://github.com/ffmpegwasm/ffmpeg.wasm/releases/tag/v12.
|
|
36
|
-
- https://github.com/ffmpegwasm/ffmpeg.wasm/tree/
|
|
37
|
-
- https://github.com/ffmpegwasm/ffmpeg.wasm/archive/refs/tags/v12.
|
|
35
|
+
- https://github.com/ffmpegwasm/ffmpeg.wasm/releases/tag/v12.15
|
|
36
|
+
- https://github.com/ffmpegwasm/ffmpeg.wasm/tree/71aa99d37c02a7b4c435275ca9ef50e612f6efa1
|
|
37
|
+
- https://github.com/ffmpegwasm/ffmpeg.wasm/archive/refs/tags/v12.15.tar.gz
|
|
38
38
|
- https://ffmpegwasm.netlify.app/docs/contribution/core/
|
|
39
39
|
|
|
40
40
|
mp4-muxer is bundled as a private runtime implementation detail so its legacy
|
package/README.md
CHANGED
|
@@ -270,7 +270,7 @@ Squisq-authored code in this package is
|
|
|
270
270
|
[MIT licensed](https://github.com/bendyline/squisq/blob/main/LICENSE).
|
|
271
271
|
|
|
272
272
|
The separately distributed `@ffmpeg/core` WebAssembly runtime has an upstream
|
|
273
|
-
dependency on FFmpeg and external libraries. The 0.12.
|
|
273
|
+
dependency on FFmpeg and external libraries. The 0.12.10 package declares
|
|
274
274
|
GPL-2.0-or-later and is distributed under those terms. This package ships
|
|
275
275
|
[`NOTICE.md`](./NOTICE.md) and the complete
|
|
276
276
|
[`COPYING.GPL-2.0.txt`](./COPYING.GPL-2.0.txt). Hosts that publish
|
package/THIRD_PARTY_LICENSES.txt
CHANGED
|
@@ -6,7 +6,7 @@ repository license, the pinned upstream copy is vendored and identified below.
|
|
|
6
6
|
|
|
7
7
|
COMPONENTS
|
|
8
8
|
- @ffmpeg/ffmpeg@0.12.15 (MIT); files: VENDORED-ffmpeg-wasm-0.12.15.txt
|
|
9
|
-
- mediabunny@1.
|
|
9
|
+
- mediabunny@1.61.0 (MPL-2.0); files: LICENSE
|
|
10
10
|
- mp4-muxer@5.2.2 (MIT); files: LICENSE
|
|
11
11
|
|
|
12
12
|
==============================================================================
|
|
@@ -35,7 +35,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
|
35
35
|
SOFTWARE.
|
|
36
36
|
|
|
37
37
|
==============================================================================
|
|
38
|
-
mediabunny@1.
|
|
38
|
+
mediabunny@1.61.0 - LICENSE
|
|
39
39
|
==============================================================================
|
|
40
40
|
Mozilla Public License Version 2.0
|
|
41
41
|
==================================
|
|
@@ -7,7 +7,7 @@ var inlineDenoiser = createRnnoiseDenoiserFactory(
|
|
|
7
7
|
() => import("@shiguredo/rnnoise-wasm").then(({ Rnnoise }) => Rnnoise.load())
|
|
8
8
|
);
|
|
9
9
|
async function inlineEngine() {
|
|
10
|
-
return import("./mediaEditEngine-
|
|
10
|
+
return import("./mediaEditEngine-OBNK6I2B.js");
|
|
11
11
|
}
|
|
12
12
|
function inlineOptions(options) {
|
|
13
13
|
return { ...options, denoiser: options.denoiser ?? inlineDenoiser };
|
|
@@ -2885,13 +2885,13 @@ var getWriteFunction = (format) => {
|
|
|
2885
2885
|
switch (format) {
|
|
2886
2886
|
case "u8":
|
|
2887
2887
|
case "u8-planar":
|
|
2888
|
-
return (view2, offset, value) => view2.setUint8(offset, clamp((value
|
|
2888
|
+
return (view2, offset, value) => view2.setUint8(offset, clamp(Math.round(value * 128) + 128, 0, 255));
|
|
2889
2889
|
case "s16":
|
|
2890
2890
|
case "s16-planar":
|
|
2891
|
-
return (view2, offset, value) => view2.setInt16(offset, clamp(Math.round(value *
|
|
2891
|
+
return (view2, offset, value) => view2.setInt16(offset, clamp(Math.round(value * 32768), -32768, 32767), true);
|
|
2892
2892
|
case "s32":
|
|
2893
2893
|
case "s32-planar":
|
|
2894
|
-
return (view2, offset, value) => view2.setInt32(offset, clamp(Math.round(value *
|
|
2894
|
+
return (view2, offset, value) => view2.setInt32(offset, clamp(Math.round(value * 2147483648), -2147483648, 2147483647), true);
|
|
2895
2895
|
case "f32":
|
|
2896
2896
|
case "f32-planar":
|
|
2897
2897
|
return (view2, offset, value) => view2.setFloat32(offset, value, true);
|
|
@@ -3222,6 +3222,10 @@ var findAacFrequencyIndex = (sampleRate) => {
|
|
|
3222
3222
|
var AC3_SAMPLE_RATES = [48e3, 44100, 32e3];
|
|
3223
3223
|
var EAC3_REDUCED_SAMPLE_RATES = [24e3, 22050, 16e3];
|
|
3224
3224
|
|
|
3225
|
+
// ../../node_modules/mediabunny/dist/modules/src/version.js
|
|
3226
|
+
var VERSION = "1.61.0";
|
|
3227
|
+
var VERSIONED_NAME = `Mediabunny v${VERSION}`;
|
|
3228
|
+
|
|
3225
3229
|
// ../../node_modules/mediabunny/dist/modules/src/codec-data.js
|
|
3226
3230
|
var AvcNalUnitType;
|
|
3227
3231
|
(function(AvcNalUnitType2) {
|
|
@@ -5256,6 +5260,15 @@ var readVorbisComments = (bytes2, metadataTags) => {
|
|
|
5256
5260
|
}
|
|
5257
5261
|
;
|
|
5258
5262
|
break;
|
|
5263
|
+
case "BPM":
|
|
5264
|
+
{
|
|
5265
|
+
const bpm = Number.parseInt(value, 10);
|
|
5266
|
+
if (Number.isInteger(bpm) && bpm > 0) {
|
|
5267
|
+
metadataTags.beatsPerMinute ?? (metadataTags.beatsPerMinute = bpm);
|
|
5268
|
+
}
|
|
5269
|
+
}
|
|
5270
|
+
;
|
|
5271
|
+
break;
|
|
5259
5272
|
case "GENRE":
|
|
5260
5273
|
{
|
|
5261
5274
|
metadataTags.genre ?? (metadataTags.genre = value);
|
|
@@ -6434,7 +6447,7 @@ var inferCodecFromCodecString = (codecString) => {
|
|
|
6434
6447
|
return "mp3";
|
|
6435
6448
|
} else if (codecString.startsWith("mp4a.40.") || codecString === "mp4a.67") {
|
|
6436
6449
|
return "aac";
|
|
6437
|
-
} else if (codecString === "opus") {
|
|
6450
|
+
} else if (codecString === "opus" || codecString === "Opus") {
|
|
6438
6451
|
return "opus";
|
|
6439
6452
|
} else if (codecString === "vorbis") {
|
|
6440
6453
|
return "vorbis";
|
|
@@ -7204,7 +7217,7 @@ var formatSubtitleTimestamp = (timestamp) => {
|
|
|
7204
7217
|
var toUlaw = (s16) => {
|
|
7205
7218
|
const MULAW_MAX = 8191;
|
|
7206
7219
|
const MULAW_BIAS = 33;
|
|
7207
|
-
let number = s16;
|
|
7220
|
+
let number = s16 >> 2;
|
|
7208
7221
|
let mask = 4096;
|
|
7209
7222
|
let sign = 0;
|
|
7210
7223
|
let position = 12;
|
|
@@ -7235,7 +7248,7 @@ var fromUlaw = (u82) => {
|
|
|
7235
7248
|
}
|
|
7236
7249
|
position = ((number & 240) >> 4) + 5;
|
|
7237
7250
|
const decoded = (1 << position | (number & 15) << position - 4 | 1 << position - 5) - MULAW_BIAS;
|
|
7238
|
-
return sign === 0 ? decoded : -decoded;
|
|
7251
|
+
return (sign === 0 ? decoded : -decoded) << 2;
|
|
7239
7252
|
};
|
|
7240
7253
|
var toAlaw = (s16) => {
|
|
7241
7254
|
const ALAW_MAX = 4095;
|
|
@@ -7243,9 +7256,10 @@ var toAlaw = (s16) => {
|
|
|
7243
7256
|
let sign = 0;
|
|
7244
7257
|
let position = 11;
|
|
7245
7258
|
let lsb = 0;
|
|
7246
|
-
let number = s16;
|
|
7259
|
+
let number = s16 >> 3;
|
|
7247
7260
|
if (number < 0) {
|
|
7248
|
-
number = -number;
|
|
7261
|
+
number = -number - 1;
|
|
7262
|
+
} else {
|
|
7249
7263
|
sign = 128;
|
|
7250
7264
|
}
|
|
7251
7265
|
if (number > ALAW_MAX) {
|
|
@@ -7273,7 +7287,7 @@ var fromAlaw = (u82) => {
|
|
|
7273
7287
|
} else {
|
|
7274
7288
|
decoded = number << 1 | 1;
|
|
7275
7289
|
}
|
|
7276
|
-
return sign === 0 ? decoded :
|
|
7290
|
+
return (sign === 0 ? -decoded : decoded) << 3;
|
|
7277
7291
|
};
|
|
7278
7292
|
|
|
7279
7293
|
// ../../node_modules/mediabunny/dist/modules/src/packet.js
|
|
@@ -7450,7 +7464,6 @@ var AudioResampler = class {
|
|
|
7450
7464
|
this.onSample = options.onSample;
|
|
7451
7465
|
this.bufferSizeInFrames = Math.floor(this.targetSampleRate * 5);
|
|
7452
7466
|
this.bufferSizeInSamples = this.bufferSizeInFrames * this.targetNumberOfChannels;
|
|
7453
|
-
this.outputBuffer = new Float32Array(this.bufferSizeInSamples);
|
|
7454
7467
|
}
|
|
7455
7468
|
/**
|
|
7456
7469
|
* Sets up the channel mixer to handle up/downmixing in the case where input and output channel counts don't match.
|
|
@@ -7543,6 +7556,9 @@ var AudioResampler = class {
|
|
|
7543
7556
|
this.sourceSampleRate = audioSample.sampleRate;
|
|
7544
7557
|
this.sourceNumberOfChannels = audioSample.numberOfChannels;
|
|
7545
7558
|
this.startTime = audioSample.timestamp;
|
|
7559
|
+
const overflowFrames = Math.ceil(this.targetSampleRate / this.sourceSampleRate);
|
|
7560
|
+
this.bufferCapacityInFrames = this.bufferSizeInFrames + overflowFrames;
|
|
7561
|
+
this.outputBuffer = new Float32Array(this.bufferCapacityInFrames * this.targetNumberOfChannels);
|
|
7546
7562
|
this.tempSourceBuffer = new Float32Array(this.sourceSampleRate * this.sourceNumberOfChannels);
|
|
7547
7563
|
this.doChannelMixerSetup();
|
|
7548
7564
|
}
|
|
@@ -7560,12 +7576,12 @@ var AudioResampler = class {
|
|
|
7560
7576
|
if (outputFrame < this.bufferStartFrame) {
|
|
7561
7577
|
continue;
|
|
7562
7578
|
}
|
|
7563
|
-
while (outputFrame >= this.bufferStartFrame + this.
|
|
7579
|
+
while (outputFrame >= this.bufferStartFrame + this.bufferCapacityInFrames) {
|
|
7564
7580
|
await this.finalizeCurrentBuffer();
|
|
7565
7581
|
this.bufferStartFrame += this.bufferSizeInFrames;
|
|
7566
7582
|
}
|
|
7567
7583
|
const bufferFrameIndex = outputFrame - this.bufferStartFrame;
|
|
7568
|
-
assert(bufferFrameIndex < this.
|
|
7584
|
+
assert(bufferFrameIndex < this.bufferCapacityInFrames);
|
|
7569
7585
|
const outputTime = outputFrame / this.targetSampleRate;
|
|
7570
7586
|
const inputTime = outputTime - inputStartTime;
|
|
7571
7587
|
const sourcePosition = inputTime * this.sourceSampleRate;
|
|
@@ -7597,7 +7613,7 @@ var AudioResampler = class {
|
|
|
7597
7613
|
return;
|
|
7598
7614
|
}
|
|
7599
7615
|
assert(this.startTime !== null);
|
|
7600
|
-
const samplesWritten = (this.maxWrittenFrame + 1) * this.targetNumberOfChannels;
|
|
7616
|
+
const samplesWritten = Math.min(this.maxWrittenFrame + 1, this.bufferSizeInFrames) * this.targetNumberOfChannels;
|
|
7601
7617
|
const outputData = new Float32Array(samplesWritten);
|
|
7602
7618
|
outputData.set(this.outputBuffer.subarray(0, samplesWritten));
|
|
7603
7619
|
const audioSample = new AudioSample({
|
|
@@ -7608,11 +7624,15 @@ var AudioResampler = class {
|
|
|
7608
7624
|
data: outputData
|
|
7609
7625
|
});
|
|
7610
7626
|
await this.onSample(audioSample);
|
|
7611
|
-
this.outputBuffer.
|
|
7612
|
-
this.
|
|
7627
|
+
this.outputBuffer.copyWithin(0, this.bufferSizeInSamples);
|
|
7628
|
+
this.outputBuffer.fill(0, this.outputBuffer.length - this.bufferSizeInSamples);
|
|
7629
|
+
this.maxWrittenFrame = this.maxWrittenFrame >= this.bufferSizeInFrames ? this.maxWrittenFrame - this.bufferSizeInFrames : null;
|
|
7613
7630
|
}
|
|
7614
|
-
finalize() {
|
|
7615
|
-
|
|
7631
|
+
async finalize() {
|
|
7632
|
+
while (this.maxWrittenFrame !== null) {
|
|
7633
|
+
await this.finalizeCurrentBuffer();
|
|
7634
|
+
this.bufferStartFrame += this.bufferSizeInFrames;
|
|
7635
|
+
}
|
|
7616
7636
|
}
|
|
7617
7637
|
};
|
|
7618
7638
|
|
|
@@ -7686,7 +7706,6 @@ var VideoSource = class extends MediaSource {
|
|
|
7686
7706
|
/** Internal constructor. */
|
|
7687
7707
|
constructor(codec) {
|
|
7688
7708
|
super();
|
|
7689
|
-
this._connectedTrack = null;
|
|
7690
7709
|
if (!VIDEO_CODECS.includes(codec)) {
|
|
7691
7710
|
throw new TypeError(`Invalid video codec '${codec}'. Must be one of: ${VIDEO_CODECS.join(", ")}.`);
|
|
7692
7711
|
}
|
|
@@ -7697,7 +7716,6 @@ var AudioSource = class extends MediaSource {
|
|
|
7697
7716
|
/** Internal constructor. */
|
|
7698
7717
|
constructor(codec) {
|
|
7699
7718
|
super();
|
|
7700
|
-
this._connectedTrack = null;
|
|
7701
7719
|
if (!AUDIO_CODECS.includes(codec)) {
|
|
7702
7720
|
throw new TypeError(`Invalid audio codec '${codec}'. Must be one of: ${AUDIO_CODECS.join(", ")}.`);
|
|
7703
7721
|
}
|
|
@@ -7901,14 +7919,17 @@ var AudioEncoderWrapper = class {
|
|
|
7901
7919
|
const outputView = new DataView(outputBuffer);
|
|
7902
7920
|
outputs.push({ frameCount, view: outputView });
|
|
7903
7921
|
}
|
|
7904
|
-
const
|
|
7905
|
-
const
|
|
7922
|
+
const isS32 = audioSample.format === "s32" || audioSample.format === "s32-planar";
|
|
7923
|
+
const readFormat = isS32 ? "s32-planar" : "f32-planar";
|
|
7924
|
+
const scale = isS32 ? 1 / 2147483648 : 1;
|
|
7925
|
+
const allocationSize = audioSample.allocationSize({ planeIndex: 0, format: readFormat });
|
|
7926
|
+
const values = isS32 ? new Int32Array(allocationSize / 4) : new Float32Array(allocationSize / 4);
|
|
7906
7927
|
for (let i = 0; i < numberOfChannels; i++) {
|
|
7907
|
-
audioSample.copyTo(
|
|
7928
|
+
audioSample.copyTo(values, { planeIndex: i, format: readFormat });
|
|
7908
7929
|
for (let j = 0; j < outputs.length; j++) {
|
|
7909
7930
|
const { frameCount, view: view2 } = outputs[j];
|
|
7910
7931
|
for (let k = 0; k < frameCount; k++) {
|
|
7911
|
-
this.writeOutputValue(view2, (k * numberOfChannels + i) * this.outputSampleSize,
|
|
7932
|
+
this.writeOutputValue(view2, (k * numberOfChannels + i) * this.outputSampleSize, values[j * CHUNK_SIZE + k] * scale);
|
|
7912
7933
|
}
|
|
7913
7934
|
}
|
|
7914
7935
|
}
|
|
@@ -8031,19 +8052,19 @@ var AudioEncoderWrapper = class {
|
|
|
8031
8052
|
case 1:
|
|
8032
8053
|
{
|
|
8033
8054
|
if (dataType === "unsigned") {
|
|
8034
|
-
this.writeOutputValue = (view2, byteOffset, value) => view2.setUint8(byteOffset, clamp((value
|
|
8055
|
+
this.writeOutputValue = (view2, byteOffset, value) => view2.setUint8(byteOffset, clamp(Math.round(value * 128) + 128, 0, 255));
|
|
8035
8056
|
} else if (dataType === "signed") {
|
|
8036
8057
|
this.writeOutputValue = (view2, byteOffset, value) => {
|
|
8037
8058
|
view2.setInt8(byteOffset, clamp(Math.round(value * 128), -128, 127));
|
|
8038
8059
|
};
|
|
8039
8060
|
} else if (dataType === "ulaw") {
|
|
8040
8061
|
this.writeOutputValue = (view2, byteOffset, value) => {
|
|
8041
|
-
const int16 = clamp(Math.
|
|
8062
|
+
const int16 = clamp(Math.round(value * 32768), -32768, 32767);
|
|
8042
8063
|
view2.setUint8(byteOffset, toUlaw(int16));
|
|
8043
8064
|
};
|
|
8044
8065
|
} else if (dataType === "alaw") {
|
|
8045
8066
|
this.writeOutputValue = (view2, byteOffset, value) => {
|
|
8046
|
-
const int16 = clamp(Math.
|
|
8067
|
+
const int16 = clamp(Math.round(value * 32768), -32768, 32767);
|
|
8047
8068
|
view2.setUint8(byteOffset, toAlaw(int16));
|
|
8048
8069
|
};
|
|
8049
8070
|
} else {
|
|
@@ -8055,9 +8076,9 @@ var AudioEncoderWrapper = class {
|
|
|
8055
8076
|
case 2:
|
|
8056
8077
|
{
|
|
8057
8078
|
if (dataType === "unsigned") {
|
|
8058
|
-
this.writeOutputValue = (view2, byteOffset, value) => view2.setUint16(byteOffset, clamp((value
|
|
8079
|
+
this.writeOutputValue = (view2, byteOffset, value) => view2.setUint16(byteOffset, clamp(Math.round(value * 32768) + 32768, 0, 65535), littleEndian);
|
|
8059
8080
|
} else if (dataType === "signed") {
|
|
8060
|
-
this.writeOutputValue = (view2, byteOffset, value) => view2.setInt16(byteOffset, clamp(Math.round(value *
|
|
8081
|
+
this.writeOutputValue = (view2, byteOffset, value) => view2.setInt16(byteOffset, clamp(Math.round(value * 32768), -32768, 32767), littleEndian);
|
|
8061
8082
|
} else {
|
|
8062
8083
|
assert(false);
|
|
8063
8084
|
}
|
|
@@ -8067,9 +8088,9 @@ var AudioEncoderWrapper = class {
|
|
|
8067
8088
|
case 3:
|
|
8068
8089
|
{
|
|
8069
8090
|
if (dataType === "unsigned") {
|
|
8070
|
-
this.writeOutputValue = (view2, byteOffset, value) => setUint24(view2, byteOffset, clamp((value
|
|
8091
|
+
this.writeOutputValue = (view2, byteOffset, value) => setUint24(view2, byteOffset, clamp(Math.round(value * 8388608) + 8388608, 0, 16777215), littleEndian);
|
|
8071
8092
|
} else if (dataType === "signed") {
|
|
8072
|
-
this.writeOutputValue = (view2, byteOffset, value) => setInt24(view2, byteOffset, clamp(Math.round(value *
|
|
8093
|
+
this.writeOutputValue = (view2, byteOffset, value) => setInt24(view2, byteOffset, clamp(Math.round(value * 8388608), -8388608, 8388607), littleEndian);
|
|
8073
8094
|
} else {
|
|
8074
8095
|
assert(false);
|
|
8075
8096
|
}
|
|
@@ -8079,9 +8100,9 @@ var AudioEncoderWrapper = class {
|
|
|
8079
8100
|
case 4:
|
|
8080
8101
|
{
|
|
8081
8102
|
if (dataType === "unsigned") {
|
|
8082
|
-
this.writeOutputValue = (view2, byteOffset, value) => view2.setUint32(byteOffset, clamp((value
|
|
8103
|
+
this.writeOutputValue = (view2, byteOffset, value) => view2.setUint32(byteOffset, clamp(Math.round(value * 2147483648) + 2147483648, 0, 4294967295), littleEndian);
|
|
8083
8104
|
} else if (dataType === "signed") {
|
|
8084
|
-
this.writeOutputValue = (view2, byteOffset, value) => view2.setInt32(byteOffset, clamp(Math.round(value *
|
|
8105
|
+
this.writeOutputValue = (view2, byteOffset, value) => view2.setInt32(byteOffset, clamp(Math.round(value * 2147483648), -2147483648, 2147483647), littleEndian);
|
|
8085
8106
|
} else if (dataType === "float") {
|
|
8086
8107
|
this.writeOutputValue = (view2, byteOffset, value) => view2.setFloat32(byteOffset, value, littleEndian);
|
|
8087
8108
|
} else {
|
|
@@ -8183,7 +8204,6 @@ var SubtitleSource = class extends MediaSource {
|
|
|
8183
8204
|
/** Internal constructor. */
|
|
8184
8205
|
constructor(codec) {
|
|
8185
8206
|
super();
|
|
8186
|
-
this._connectedTrack = null;
|
|
8187
8207
|
if (!SUBTITLE_CODECS.includes(codec)) {
|
|
8188
8208
|
throw new TypeError(`Invalid subtitle codec '${codec}'. Must be one of: ${SUBTITLE_CODECS.join(", ")}.`);
|
|
8189
8209
|
}
|
|
@@ -8591,6 +8611,9 @@ var validateMetadataTags = (tags) => {
|
|
|
8591
8611
|
if (tags.date !== void 0 && (!(tags.date instanceof Date) || Number.isNaN(tags.date.getTime()))) {
|
|
8592
8612
|
throw new TypeError("tags.date, when provided, must be a valid Date.");
|
|
8593
8613
|
}
|
|
8614
|
+
if (tags.beatsPerMinute !== void 0 && (!Number.isInteger(tags.beatsPerMinute) || tags.beatsPerMinute <= 0)) {
|
|
8615
|
+
throw new TypeError("tags.beatsPerMinute, when provided, must be a positive integer.");
|
|
8616
|
+
}
|
|
8594
8617
|
if (tags.lyrics !== void 0 && typeof tags.lyrics !== "string") {
|
|
8595
8618
|
throw new TypeError("tags.lyrics, when provided, must be a string.");
|
|
8596
8619
|
}
|
|
@@ -8628,7 +8651,7 @@ var validateMetadataTags = (tags) => {
|
|
|
8628
8651
|
}
|
|
8629
8652
|
};
|
|
8630
8653
|
var metadataTagsAreEmpty = (tags) => {
|
|
8631
|
-
return tags.title === void 0 && tags.description === void 0 && tags.artist === void 0 && tags.album === void 0 && tags.albumArtist === void 0 && tags.trackNumber === void 0 && tags.tracksTotal === void 0 && tags.discNumber === void 0 && tags.discsTotal === void 0 && tags.genre === void 0 && tags.date === void 0 && tags.lyrics === void 0 && (!tags.images || tags.images.length === 0) && tags.comment === void 0 && (tags.raw === void 0 || Object.keys(tags.raw).length === 0);
|
|
8654
|
+
return tags.title === void 0 && tags.description === void 0 && tags.artist === void 0 && tags.album === void 0 && tags.albumArtist === void 0 && tags.trackNumber === void 0 && tags.tracksTotal === void 0 && tags.discNumber === void 0 && tags.discsTotal === void 0 && tags.genre === void 0 && tags.beatsPerMinute === void 0 && tags.date === void 0 && tags.lyrics === void 0 && (!tags.images || tags.images.length === 0) && tags.comment === void 0 && (tags.raw === void 0 || Object.keys(tags.raw).length === 0);
|
|
8632
8655
|
};
|
|
8633
8656
|
var DEFAULT_TRACK_DISPOSITION = {
|
|
8634
8657
|
default: true,
|
|
@@ -9206,7 +9229,7 @@ var IsobmffDemuxer = class _IsobmffDemuxer extends Demuxer {
|
|
|
9206
9229
|
}
|
|
9207
9230
|
}
|
|
9208
9231
|
traverseBox(slice) {
|
|
9209
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G;
|
|
9232
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G, _H;
|
|
9210
9233
|
const startPos = slice.filePos;
|
|
9211
9234
|
const boxInfo = readBoxHeader(slice);
|
|
9212
9235
|
if (!boxInfo) {
|
|
@@ -10960,18 +10983,29 @@ var IsobmffDemuxer = class _IsobmffDemuxer extends Demuxer {
|
|
|
10960
10983
|
}
|
|
10961
10984
|
;
|
|
10962
10985
|
break;
|
|
10986
|
+
case "tmpo":
|
|
10987
|
+
{
|
|
10988
|
+
if (data instanceof Uint8Array && data.length >= 2) {
|
|
10989
|
+
const bpm = toDataView(data).getInt16(0, false);
|
|
10990
|
+
if (bpm > 0) {
|
|
10991
|
+
(_z = this.metadataTags).beatsPerMinute ?? (_z.beatsPerMinute = bpm);
|
|
10992
|
+
}
|
|
10993
|
+
}
|
|
10994
|
+
}
|
|
10995
|
+
;
|
|
10996
|
+
break;
|
|
10963
10997
|
case "covr":
|
|
10964
10998
|
case "com.apple.quicktime.artwork":
|
|
10965
10999
|
{
|
|
10966
11000
|
if (data instanceof RichImageData) {
|
|
10967
|
-
(
|
|
11001
|
+
(_A = this.metadataTags).images ?? (_A.images = []);
|
|
10968
11002
|
this.metadataTags.images.push({
|
|
10969
11003
|
data: data.data,
|
|
10970
11004
|
kind: "coverFront",
|
|
10971
11005
|
mimeType: data.mimeType
|
|
10972
11006
|
});
|
|
10973
11007
|
} else if (data instanceof Uint8Array) {
|
|
10974
|
-
(
|
|
11008
|
+
(_B = this.metadataTags).images ?? (_B.images = []);
|
|
10975
11009
|
this.metadataTags.images.push({
|
|
10976
11010
|
data,
|
|
10977
11011
|
kind: "coverFront",
|
|
@@ -10988,10 +11022,10 @@ var IsobmffDemuxer = class _IsobmffDemuxer extends Demuxer {
|
|
|
10988
11022
|
const trackNum = Number.parseInt(parts[0], 10);
|
|
10989
11023
|
const tracksTotal = parts[1] && Number.parseInt(parts[1], 10);
|
|
10990
11024
|
if (Number.isInteger(trackNum) && trackNum > 0) {
|
|
10991
|
-
(
|
|
11025
|
+
(_C = this.metadataTags).trackNumber ?? (_C.trackNumber = trackNum);
|
|
10992
11026
|
}
|
|
10993
11027
|
if (tracksTotal && Number.isInteger(tracksTotal) && tracksTotal > 0) {
|
|
10994
|
-
(
|
|
11028
|
+
(_D = this.metadataTags).tracksTotal ?? (_D.tracksTotal = tracksTotal);
|
|
10995
11029
|
}
|
|
10996
11030
|
}
|
|
10997
11031
|
}
|
|
@@ -11004,10 +11038,10 @@ var IsobmffDemuxer = class _IsobmffDemuxer extends Demuxer {
|
|
|
11004
11038
|
const trackNumber = view2.getUint16(2, false);
|
|
11005
11039
|
const tracksTotal = view2.getUint16(4, false);
|
|
11006
11040
|
if (trackNumber > 0) {
|
|
11007
|
-
(
|
|
11041
|
+
(_E = this.metadataTags).trackNumber ?? (_E.trackNumber = trackNumber);
|
|
11008
11042
|
}
|
|
11009
11043
|
if (tracksTotal > 0) {
|
|
11010
|
-
(
|
|
11044
|
+
(_F = this.metadataTags).tracksTotal ?? (_F.tracksTotal = tracksTotal);
|
|
11011
11045
|
}
|
|
11012
11046
|
}
|
|
11013
11047
|
}
|
|
@@ -11021,10 +11055,10 @@ var IsobmffDemuxer = class _IsobmffDemuxer extends Demuxer {
|
|
|
11021
11055
|
const discNumber = view2.getUint16(2, false);
|
|
11022
11056
|
const discNumberMax = view2.getUint16(4, false);
|
|
11023
11057
|
if (discNumber > 0) {
|
|
11024
|
-
(
|
|
11058
|
+
(_G = this.metadataTags).discNumber ?? (_G.discNumber = discNumber);
|
|
11025
11059
|
}
|
|
11026
11060
|
if (discNumberMax > 0) {
|
|
11027
|
-
(
|
|
11061
|
+
(_H = this.metadataTags).discsTotal ?? (_H.discsTotal = discNumberMax);
|
|
11028
11062
|
}
|
|
11029
11063
|
}
|
|
11030
11064
|
}
|
|
@@ -11412,7 +11446,6 @@ var IsobmffVideoTrackBacking = class extends IsobmffTrackBacking {
|
|
|
11412
11446
|
constructor(internalTrack) {
|
|
11413
11447
|
super(internalTrack);
|
|
11414
11448
|
this.decoderConfigPromise = null;
|
|
11415
|
-
this.internalTrack = internalTrack;
|
|
11416
11449
|
}
|
|
11417
11450
|
getType() {
|
|
11418
11451
|
return "video";
|
|
@@ -11510,7 +11543,6 @@ var IsobmffAudioTrackBacking = class extends IsobmffTrackBacking {
|
|
|
11510
11543
|
constructor(internalTrack) {
|
|
11511
11544
|
super(internalTrack);
|
|
11512
11545
|
this.decoderConfigPromise = null;
|
|
11513
|
-
this.internalTrack = internalTrack;
|
|
11514
11546
|
}
|
|
11515
11547
|
getType() {
|
|
11516
11548
|
return "audio";
|
|
@@ -12657,6 +12689,7 @@ var MatroskaDemuxer = class extends Demuxer {
|
|
|
12657
12689
|
};
|
|
12658
12690
|
this.segments.push(this.currentSegment);
|
|
12659
12691
|
let currentPos = segmentDataStart;
|
|
12692
|
+
const visitedSeekHeadPositions = /* @__PURE__ */ new Set();
|
|
12660
12693
|
while (this.currentSegment.elementEndPos === null || currentPos < this.currentSegment.elementEndPos) {
|
|
12661
12694
|
let slice = this.reader.requestSliceRange(currentPos, MIN_HEADER_SIZE, MAX_HEADER_SIZE);
|
|
12662
12695
|
if (isThenable(slice))
|
|
@@ -12680,6 +12713,9 @@ var MatroskaDemuxer = class extends Demuxer {
|
|
|
12680
12713
|
if (metadataElementIndex !== -1) {
|
|
12681
12714
|
const field = METADATA_ELEMENTS[metadataElementIndex].flag;
|
|
12682
12715
|
this.currentSegment[field] = true;
|
|
12716
|
+
if (id === EBMLId.SeekHead) {
|
|
12717
|
+
visitedSeekHeadPositions.add(elementStartPos - segmentDataStart);
|
|
12718
|
+
}
|
|
12683
12719
|
assertDefinedSize(size);
|
|
12684
12720
|
let slice2 = this.reader.requestSlice(dataStartPos, size);
|
|
12685
12721
|
if (isThenable(slice2))
|
|
@@ -12710,6 +12746,31 @@ var MatroskaDemuxer = class extends Demuxer {
|
|
|
12710
12746
|
currentPos = dataStartPos + size;
|
|
12711
12747
|
}
|
|
12712
12748
|
}
|
|
12749
|
+
if (this.reader.fileSize !== null) {
|
|
12750
|
+
while (true) {
|
|
12751
|
+
const seekEntry = this.currentSegment.seekEntries.find((x) => x.id === EBMLId.SeekHead && !visitedSeekHeadPositions.has(x.segmentPosition));
|
|
12752
|
+
if (!seekEntry) {
|
|
12753
|
+
break;
|
|
12754
|
+
}
|
|
12755
|
+
visitedSeekHeadPositions.add(seekEntry.segmentPosition);
|
|
12756
|
+
let slice = this.reader.requestSliceRange(segmentDataStart + seekEntry.segmentPosition, MIN_HEADER_SIZE, MAX_HEADER_SIZE);
|
|
12757
|
+
if (isThenable(slice))
|
|
12758
|
+
slice = await slice;
|
|
12759
|
+
if (!slice)
|
|
12760
|
+
continue;
|
|
12761
|
+
const header = readElementHeader(slice);
|
|
12762
|
+
if (!header || header.id !== EBMLId.SeekHead)
|
|
12763
|
+
continue;
|
|
12764
|
+
const { size } = header;
|
|
12765
|
+
assertDefinedSize(size);
|
|
12766
|
+
let dataSlice = this.reader.requestSlice(slice.filePos, size);
|
|
12767
|
+
if (isThenable(dataSlice))
|
|
12768
|
+
dataSlice = await dataSlice;
|
|
12769
|
+
if (!dataSlice)
|
|
12770
|
+
continue;
|
|
12771
|
+
this.readContiguousElements(dataSlice);
|
|
12772
|
+
}
|
|
12773
|
+
}
|
|
12713
12774
|
this.currentSegment.seekEntries.sort((a, b) => a.segmentPosition - b.segmentPosition);
|
|
12714
12775
|
if (this.reader.fileSize !== null) {
|
|
12715
12776
|
for (const seekEntry of this.currentSegment.seekEntries) {
|
|
@@ -14076,6 +14137,15 @@ var MatroskaDemuxer = class extends Demuxer {
|
|
|
14076
14137
|
}
|
|
14077
14138
|
;
|
|
14078
14139
|
break;
|
|
14140
|
+
case "bpm":
|
|
14141
|
+
{
|
|
14142
|
+
const bpm = Number.parseInt(value, 10);
|
|
14143
|
+
if (Number.isInteger(bpm) && bpm > 0) {
|
|
14144
|
+
metadataTags.beatsPerMinute ?? (metadataTags.beatsPerMinute = bpm);
|
|
14145
|
+
}
|
|
14146
|
+
}
|
|
14147
|
+
;
|
|
14148
|
+
break;
|
|
14079
14149
|
case "comment":
|
|
14080
14150
|
{
|
|
14081
14151
|
metadataTags.comment ?? (metadataTags.comment = value);
|
|
@@ -14130,21 +14200,11 @@ var MatroskaDemuxer = class extends Demuxer {
|
|
|
14130
14200
|
}
|
|
14131
14201
|
}
|
|
14132
14202
|
}
|
|
14133
|
-
|
|
14203
|
+
getDurationFromMetadata(segment) {
|
|
14134
14204
|
if (segment.duration <= 0) {
|
|
14135
14205
|
return null;
|
|
14136
14206
|
}
|
|
14137
|
-
|
|
14138
|
-
for (const track of segment.tracks) {
|
|
14139
|
-
assert(track.trackBacking);
|
|
14140
|
-
const firstPacket = await track.trackBacking.getFirstPacket({ metadataOnly: true });
|
|
14141
|
-
if (firstPacket) {
|
|
14142
|
-
minTimestamp = Math.min(minTimestamp ?? Infinity, firstPacket.timestamp);
|
|
14143
|
-
}
|
|
14144
|
-
}
|
|
14145
|
-
let endTimestamp = segment.duration / segment.timestampFactor;
|
|
14146
|
-
endTimestamp += minTimestamp ?? 0;
|
|
14147
|
-
return endTimestamp;
|
|
14207
|
+
return segment.duration / segment.timestampFactor;
|
|
14148
14208
|
}
|
|
14149
14209
|
};
|
|
14150
14210
|
var MatroskaTrackBacking = class {
|
|
@@ -14485,7 +14545,6 @@ var MatroskaVideoTrackBacking = class extends MatroskaTrackBacking {
|
|
|
14485
14545
|
constructor(internalTrack) {
|
|
14486
14546
|
super(internalTrack);
|
|
14487
14547
|
this.decoderConfigPromise = null;
|
|
14488
|
-
this.internalTrack = internalTrack;
|
|
14489
14548
|
}
|
|
14490
14549
|
getType() {
|
|
14491
14550
|
return "video";
|
|
@@ -14577,7 +14636,6 @@ var MatroskaAudioTrackBacking = class extends MatroskaTrackBacking {
|
|
|
14577
14636
|
constructor(internalTrack) {
|
|
14578
14637
|
super(internalTrack);
|
|
14579
14638
|
this.decoderConfigPromise = null;
|
|
14580
|
-
this.internalTrack = internalTrack;
|
|
14581
14639
|
}
|
|
14582
14640
|
getType() {
|
|
14583
14641
|
return "audio";
|
|
@@ -15327,6 +15385,7 @@ var OggAudioTrackBacking = class {
|
|
|
15327
15385
|
this.encodedPacketToMetadata = /* @__PURE__ */ new WeakMap();
|
|
15328
15386
|
this.sequentialScanCache = [];
|
|
15329
15387
|
this.sequentialScanMutex = new AsyncMutex();
|
|
15388
|
+
this.firstTimestampInSamplesPromise = null;
|
|
15330
15389
|
this.internalSampleRate = bitstream.codecInfo.codec === "opus" ? OPUS_SAMPLE_RATE : bitstream.sampleRate;
|
|
15331
15390
|
}
|
|
15332
15391
|
getType() {
|
|
@@ -15408,8 +15467,17 @@ var OggAudioTrackBacking = class {
|
|
|
15408
15467
|
if (!packet) {
|
|
15409
15468
|
return null;
|
|
15410
15469
|
}
|
|
15411
|
-
const
|
|
15412
|
-
const
|
|
15470
|
+
const sampleMetadata = extractSampleMetadata(packet.data, this.bitstream.codecInfo, additional.vorbisLastBlocksize);
|
|
15471
|
+
const { vorbisBlockSize } = sampleMetadata;
|
|
15472
|
+
let { durationInSamples } = sampleMetadata;
|
|
15473
|
+
const isEos = !!(packet.endPage.headerType & 4);
|
|
15474
|
+
if (isEos && packet.endSegmentIndex === packet.endPage.lacingValues.length - 1) {
|
|
15475
|
+
const endTimestampInSamples2 = this.granulePositionToTimestampInSamples(packet.endPage.granulePosition);
|
|
15476
|
+
durationInSamples = clamp(endTimestampInSamples2 - additional.timestampInSamples, 0, durationInSamples);
|
|
15477
|
+
}
|
|
15478
|
+
const startTimestampInSamples = Math.max(additional.timestampInSamples, 0);
|
|
15479
|
+
const endTimestampInSamples = Math.max(additional.timestampInSamples + durationInSamples, 0);
|
|
15480
|
+
const encodedPacket = new EncodedPacket(options.metadataOnly ? PLACEHOLDER_DATA : packet.data, "key", startTimestampInSamples / this.internalSampleRate, (endTimestampInSamples - startTimestampInSamples) / this.internalSampleRate, packet.endPage.headerStartPos + packet.endSegmentIndex, packet.data.byteLength);
|
|
15413
15481
|
this.encodedPacketToMetadata.set(encodedPacket, {
|
|
15414
15482
|
packet,
|
|
15415
15483
|
timestampInSamples: additional.timestampInSamples,
|
|
@@ -15419,17 +15487,44 @@ var OggAudioTrackBacking = class {
|
|
|
15419
15487
|
});
|
|
15420
15488
|
return encodedPacket;
|
|
15421
15489
|
}
|
|
15490
|
+
getFirstTimestampInSamples() {
|
|
15491
|
+
return this.firstTimestampInSamplesPromise ?? (this.firstTimestampInSamplesPromise = (async () => {
|
|
15492
|
+
const defaultTimestampInSamples = this.granulePositionToTimestampInSamples(0);
|
|
15493
|
+
assert(this.bitstream.lastMetadataPacket);
|
|
15494
|
+
let position = await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);
|
|
15495
|
+
if (!position) {
|
|
15496
|
+
return defaultTimestampInSamples;
|
|
15497
|
+
}
|
|
15498
|
+
let firstEndPage = null;
|
|
15499
|
+
let totalDurationInSamples = 0;
|
|
15500
|
+
let vorbisLastBlocksize = null;
|
|
15501
|
+
while (position) {
|
|
15502
|
+
const packet = await this.demuxer.readPacket(position.startPage, position.startSegmentIndex);
|
|
15503
|
+
if (!packet) {
|
|
15504
|
+
break;
|
|
15505
|
+
}
|
|
15506
|
+
firstEndPage ?? (firstEndPage = packet.endPage);
|
|
15507
|
+
if (packet.endPage.headerStartPos !== firstEndPage.headerStartPos) {
|
|
15508
|
+
break;
|
|
15509
|
+
}
|
|
15510
|
+
const { durationInSamples, vorbisBlockSize } = extractSampleMetadata(packet.data, this.bitstream.codecInfo, vorbisLastBlocksize);
|
|
15511
|
+
totalDurationInSamples += durationInSamples;
|
|
15512
|
+
vorbisLastBlocksize = vorbisBlockSize;
|
|
15513
|
+
position = await this.demuxer.findNextPacketStart(packet);
|
|
15514
|
+
}
|
|
15515
|
+
if (!firstEndPage) {
|
|
15516
|
+
return defaultTimestampInSamples;
|
|
15517
|
+
}
|
|
15518
|
+
return defaultTimestampInSamples + Math.max(firstEndPage.granulePosition - totalDurationInSamples, 0);
|
|
15519
|
+
})());
|
|
15520
|
+
}
|
|
15422
15521
|
async getFirstPacket(options) {
|
|
15423
15522
|
assert(this.bitstream.lastMetadataPacket);
|
|
15424
15523
|
const packetPosition = await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);
|
|
15425
15524
|
if (!packetPosition) {
|
|
15426
15525
|
return null;
|
|
15427
15526
|
}
|
|
15428
|
-
|
|
15429
|
-
if (this.bitstream.codecInfo.codec === "opus") {
|
|
15430
|
-
assert(this.bitstream.codecInfo.opusInfo);
|
|
15431
|
-
timestampInSamples -= this.bitstream.codecInfo.opusInfo.preSkip;
|
|
15432
|
-
}
|
|
15527
|
+
const timestampInSamples = await this.getFirstTimestampInSamples();
|
|
15433
15528
|
const packet = await this.demuxer.readPacket(packetPosition.startPage, packetPosition.startSegmentIndex);
|
|
15434
15529
|
return this.createEncodedPacketFromOggPacket(packet, {
|
|
15435
15530
|
timestampInSamples,
|
|
@@ -15457,10 +15552,11 @@ var OggAudioTrackBacking = class {
|
|
|
15457
15552
|
return this.getPacketSequential(timestamp, options);
|
|
15458
15553
|
}
|
|
15459
15554
|
const timestampInSamples = roundIfAlmostInteger(timestamp * this.internalSampleRate);
|
|
15460
|
-
|
|
15555
|
+
const firstTimestampInSamples = await this.getFirstTimestampInSamples();
|
|
15556
|
+
if (timestampInSamples === Math.max(firstTimestampInSamples, 0)) {
|
|
15461
15557
|
return this.getFirstPacket(options);
|
|
15462
15558
|
}
|
|
15463
|
-
if (timestampInSamples < 0) {
|
|
15559
|
+
if (timestampInSamples < Math.max(firstTimestampInSamples, 0)) {
|
|
15464
15560
|
return null;
|
|
15465
15561
|
}
|
|
15466
15562
|
assert(this.bitstream.lastMetadataPacket);
|
|
@@ -15483,6 +15579,9 @@ var OggAudioTrackBacking = class {
|
|
|
15483
15579
|
assert(searchSlice);
|
|
15484
15580
|
const found = findNextPageHeader(searchSlice, until);
|
|
15485
15581
|
if (!found) {
|
|
15582
|
+
if (high <= mid + MIN_PAGE_HEADER_SIZE) {
|
|
15583
|
+
break outer;
|
|
15584
|
+
}
|
|
15486
15585
|
high = mid + MIN_PAGE_HEADER_SIZE;
|
|
15487
15586
|
continue outer;
|
|
15488
15587
|
}
|
|
@@ -15560,7 +15659,7 @@ var OggAudioTrackBacking = class {
|
|
|
15560
15659
|
let endPage = currentPage;
|
|
15561
15660
|
let endSegmentIndex = 0;
|
|
15562
15661
|
if (currentPage.headerStartPos === startPosition.startPage.headerStartPos) {
|
|
15563
|
-
currentTimestampInSamples =
|
|
15662
|
+
currentTimestampInSamples = firstTimestampInSamples;
|
|
15564
15663
|
currentTimestampIsCorrect = true;
|
|
15565
15664
|
currentSegmentIndex = 0;
|
|
15566
15665
|
} else {
|
|
@@ -15673,6 +15772,9 @@ var OggAudioTrackBacking = class {
|
|
|
15673
15772
|
}, options);
|
|
15674
15773
|
} else {
|
|
15675
15774
|
currentPacket = await this.getFirstPacket(options);
|
|
15775
|
+
if (currentPacket && currentPacket.timestamp > timestamp) {
|
|
15776
|
+
return null;
|
|
15777
|
+
}
|
|
15676
15778
|
}
|
|
15677
15779
|
let i = 0;
|
|
15678
15780
|
while (currentPacket && currentPacket.timestamp < timestamp) {
|
|
@@ -17374,7 +17476,8 @@ var BlobSource = class extends Source {
|
|
|
17374
17476
|
}
|
|
17375
17477
|
this._orchestrator.signalWorkerStoppedRunning(worker);
|
|
17376
17478
|
if (worker.aborted) {
|
|
17377
|
-
await reader?.cancel()
|
|
17479
|
+
await reader?.cancel().catch(() => {
|
|
17480
|
+
});
|
|
17378
17481
|
}
|
|
17379
17482
|
}
|
|
17380
17483
|
/** @internal */
|
|
@@ -20281,7 +20384,6 @@ var InputVideoTrack = class extends InputTrack {
|
|
|
20281
20384
|
constructor(input, backing) {
|
|
20282
20385
|
super(input, backing);
|
|
20283
20386
|
this._pixelAspectRatioCache = null;
|
|
20284
|
-
this._backing = backing;
|
|
20285
20387
|
}
|
|
20286
20388
|
get type() {
|
|
20287
20389
|
return "video";
|
|
@@ -20614,7 +20716,6 @@ var InputAudioTrack = class extends InputTrack {
|
|
|
20614
20716
|
/** @internal */
|
|
20615
20717
|
constructor(input, backing) {
|
|
20616
20718
|
super(input, backing);
|
|
20617
|
-
this._backing = backing;
|
|
20618
20719
|
}
|
|
20619
20720
|
get type() {
|
|
20620
20721
|
return "audio";
|
|
@@ -20682,7 +20783,7 @@ var InputAudioTrack = class extends InputTrack {
|
|
|
20682
20783
|
if (customAudioDecoders.some((x) => x.supports(codec, decoderConfig))) {
|
|
20683
20784
|
return true;
|
|
20684
20785
|
}
|
|
20685
|
-
if (decoderConfig.codec
|
|
20786
|
+
if (PCM_AUDIO_CODECS.includes(decoderConfig.codec)) {
|
|
20686
20787
|
return true;
|
|
20687
20788
|
} else {
|
|
20688
20789
|
if (typeof AudioDecoder === "undefined") {
|
|
@@ -22053,6 +22154,17 @@ var parseId3V2Tag = (slice, header, tags) => {
|
|
|
22053
22154
|
}
|
|
22054
22155
|
;
|
|
22055
22156
|
break;
|
|
22157
|
+
case "TBPM":
|
|
22158
|
+
case "TBP":
|
|
22159
|
+
{
|
|
22160
|
+
const bpmText = reader.readId3V2EncodingAndText(frameEndPos);
|
|
22161
|
+
const bpm = Number.parseInt(bpmText, 10);
|
|
22162
|
+
if (Number.isInteger(bpm)) {
|
|
22163
|
+
tags.beatsPerMinute ?? (tags.beatsPerMinute = bpm);
|
|
22164
|
+
}
|
|
22165
|
+
}
|
|
22166
|
+
;
|
|
22167
|
+
break;
|
|
22056
22168
|
case "USLT":
|
|
22057
22169
|
case "ULT":
|
|
22058
22170
|
{
|
|
@@ -22374,6 +22486,13 @@ var Id3V2Writer = class {
|
|
|
22374
22486
|
}
|
|
22375
22487
|
;
|
|
22376
22488
|
break;
|
|
22489
|
+
case "beatsPerMinute":
|
|
22490
|
+
{
|
|
22491
|
+
this.writeId3V2TextFrame("TBPM", `${value}`);
|
|
22492
|
+
writtenTags.add("TBPM");
|
|
22493
|
+
}
|
|
22494
|
+
;
|
|
22495
|
+
break;
|
|
22377
22496
|
case "lyrics":
|
|
22378
22497
|
{
|
|
22379
22498
|
this.writeId3V2LyricsFrame(value);
|
|
@@ -23172,10 +23291,10 @@ var videoSampleDescription = (compressionType, trackData) => box(compressionType
|
|
|
23172
23291
|
u16(1),
|
|
23173
23292
|
// Frame count
|
|
23174
23293
|
// Compressor name
|
|
23175
|
-
u8(
|
|
23294
|
+
u8(VERSIONED_NAME.length),
|
|
23176
23295
|
// Weird Pascal-style string
|
|
23177
|
-
ascii(
|
|
23178
|
-
Array(31 -
|
|
23296
|
+
ascii(VERSIONED_NAME),
|
|
23297
|
+
Array(31 - VERSIONED_NAME.length).fill(0),
|
|
23179
23298
|
u16(trackData.info.hasAlphaChannel ? 32 : 24),
|
|
23180
23299
|
// Depth
|
|
23181
23300
|
i16(65535)
|
|
@@ -23943,6 +24062,7 @@ var addQuickTimeMetadataTagBoxes = (boxes, tags) => {
|
|
|
23943
24062
|
case "discsTotal":
|
|
23944
24063
|
case "trackNumber":
|
|
23945
24064
|
case "tracksTotal":
|
|
24065
|
+
case "beatsPerMinute":
|
|
23946
24066
|
case "images":
|
|
23947
24067
|
{
|
|
23948
24068
|
}
|
|
@@ -24025,6 +24145,20 @@ var generateMetadataPairs = (tags, isMdta) => {
|
|
|
24025
24145
|
}
|
|
24026
24146
|
;
|
|
24027
24147
|
break;
|
|
24148
|
+
case "beatsPerMinute":
|
|
24149
|
+
{
|
|
24150
|
+
if (!isMdta) {
|
|
24151
|
+
pairs.push({ key: "tmpo", value: box("data", [
|
|
24152
|
+
u32(21),
|
|
24153
|
+
// Type indicator
|
|
24154
|
+
u32(0),
|
|
24155
|
+
// Locale indicator
|
|
24156
|
+
u16(value)
|
|
24157
|
+
]) });
|
|
24158
|
+
}
|
|
24159
|
+
}
|
|
24160
|
+
;
|
|
24161
|
+
break;
|
|
24028
24162
|
case "lyrics":
|
|
24029
24163
|
{
|
|
24030
24164
|
pairs.push({ key: isMdta ? "lyrics" : "\xA9lyr", value: dataStringBoxLong(value) });
|
|
@@ -25544,7 +25678,6 @@ var IsobmffMuxer = class extends Muxer {
|
|
|
25544
25678
|
// ../../node_modules/mediabunny/dist/modules/src/matroska/matroska-muxer.js
|
|
25545
25679
|
var MIN_CLUSTER_TIMESTAMP_MS = -(2 ** 15);
|
|
25546
25680
|
var MAX_CLUSTER_TIMESTAMP_MS = 2 ** 15 - 1;
|
|
25547
|
-
var APP_NAME = "Mediabunny";
|
|
25548
25681
|
var SEGMENT_SIZE_BYTES = 6;
|
|
25549
25682
|
var CLUSTER_SIZE_BYTES = 5;
|
|
25550
25683
|
var TRACK_TYPE_MAP = {
|
|
@@ -25601,7 +25734,7 @@ var MatroskaMuxer = class extends Muxer {
|
|
|
25601
25734
|
{ id: EBMLId.EBMLMaxIDLength, data: 4 },
|
|
25602
25735
|
{ id: EBMLId.EBMLMaxSizeLength, data: 8 },
|
|
25603
25736
|
{ id: EBMLId.DocType, data: this.format instanceof WebMOutputFormat ? "webm" : "matroska" },
|
|
25604
|
-
{ id: EBMLId.DocTypeVersion, data:
|
|
25737
|
+
{ id: EBMLId.DocTypeVersion, data: 4 },
|
|
25605
25738
|
{ id: EBMLId.DocTypeReadVersion, data: 2 }
|
|
25606
25739
|
] };
|
|
25607
25740
|
this.ebmlWriter.writeEBML(ebmlHeader);
|
|
@@ -25624,14 +25757,6 @@ var MatroskaMuxer = class extends Muxer {
|
|
|
25624
25757
|
const kaxAttachments = new Uint8Array([25, 65, 164, 105]);
|
|
25625
25758
|
const kaxTags = new Uint8Array([18, 84, 195, 103]);
|
|
25626
25759
|
const seekHead = { id: EBMLId.SeekHead, data: [
|
|
25627
|
-
{ id: EBMLId.Seek, data: [
|
|
25628
|
-
{ id: EBMLId.SeekID, data: kaxCues },
|
|
25629
|
-
{
|
|
25630
|
-
id: EBMLId.SeekPosition,
|
|
25631
|
-
size: 5,
|
|
25632
|
-
data: writeOffsets ? this.ebmlWriter.offsets.get(this.cues) - this.segmentDataOffset : 0
|
|
25633
|
-
}
|
|
25634
|
-
] },
|
|
25635
25760
|
{ id: EBMLId.Seek, data: [
|
|
25636
25761
|
{ id: EBMLId.SeekID, data: kaxInfo },
|
|
25637
25762
|
{
|
|
@@ -25663,7 +25788,15 @@ var MatroskaMuxer = class extends Muxer {
|
|
|
25663
25788
|
size: 5,
|
|
25664
25789
|
data: writeOffsets ? this.ebmlWriter.offsets.get(this.tagsElement) - this.segmentDataOffset : 0
|
|
25665
25790
|
}
|
|
25666
|
-
] } : null
|
|
25791
|
+
] } : null,
|
|
25792
|
+
{ id: EBMLId.Seek, data: [
|
|
25793
|
+
{ id: EBMLId.SeekID, data: kaxCues },
|
|
25794
|
+
{
|
|
25795
|
+
id: EBMLId.SeekPosition,
|
|
25796
|
+
size: 5,
|
|
25797
|
+
data: writeOffsets ? this.ebmlWriter.offsets.get(this.cues) - this.segmentDataOffset : 0
|
|
25798
|
+
}
|
|
25799
|
+
] }
|
|
25667
25800
|
] };
|
|
25668
25801
|
this.seekHead = seekHead;
|
|
25669
25802
|
}
|
|
@@ -25672,8 +25805,8 @@ var MatroskaMuxer = class extends Muxer {
|
|
|
25672
25805
|
this.segmentDuration = segmentDuration;
|
|
25673
25806
|
const segmentInfo = { id: EBMLId.Info, data: [
|
|
25674
25807
|
{ id: EBMLId.TimestampScale, data: 1e6 },
|
|
25675
|
-
{ id: EBMLId.MuxingApp, data:
|
|
25676
|
-
{ id: EBMLId.WritingApp, data:
|
|
25808
|
+
{ id: EBMLId.MuxingApp, data: VERSIONED_NAME },
|
|
25809
|
+
{ id: EBMLId.WritingApp, data: VERSIONED_NAME },
|
|
25677
25810
|
!this.format._options.appendOnly ? segmentDuration : null
|
|
25678
25811
|
] };
|
|
25679
25812
|
this.segmentInfo = segmentInfo;
|
|
@@ -25715,8 +25848,7 @@ var MatroskaMuxer = class extends Muxer {
|
|
|
25715
25848
|
{ id: EBMLId.Language, data: trackData.track.metadata.languageCode ?? UNDETERMINED_LANGUAGE },
|
|
25716
25849
|
{ id: EBMLId.CodecID, data: codecId },
|
|
25717
25850
|
trackData.codecPrivate ? { id: EBMLId.CodecPrivate, data: toUint8Array(trackData.codecPrivate) } : null,
|
|
25718
|
-
{ id: EBMLId.
|
|
25719
|
-
{ id: EBMLId.SeekPreRoll, data: seekPreRollNs },
|
|
25851
|
+
seekPreRollNs > 0 ? { id: EBMLId.SeekPreRoll, data: seekPreRollNs } : null,
|
|
25720
25852
|
trackData.track.metadata.name !== void 0 ? { id: EBMLId.Name, data: new EBMLUnicodeString(trackData.track.metadata.name) } : null,
|
|
25721
25853
|
trackData.type === "video" ? this.videoSpecificTrackInfo(trackData) : null,
|
|
25722
25854
|
trackData.type === "audio" ? this.audioSpecificTrackInfo(trackData) : null,
|
|
@@ -25879,6 +26011,13 @@ var MatroskaMuxer = class extends Muxer {
|
|
|
25879
26011
|
}
|
|
25880
26012
|
;
|
|
25881
26013
|
break;
|
|
26014
|
+
case "beatsPerMinute":
|
|
26015
|
+
{
|
|
26016
|
+
addSimpleTag("BPM", value.toString());
|
|
26017
|
+
writtenTags.add("BPM");
|
|
26018
|
+
}
|
|
26019
|
+
;
|
|
26020
|
+
break;
|
|
25882
26021
|
case "comment":
|
|
25883
26022
|
{
|
|
25884
26023
|
addSimpleTag("COMMENT", value);
|
|
@@ -26107,7 +26246,7 @@ var MatroskaMuxer = class extends Muxer {
|
|
|
26107
26246
|
height: meta.decoderConfig.codedHeight,
|
|
26108
26247
|
aspectRatio,
|
|
26109
26248
|
decoderConfig: meta.decoderConfig,
|
|
26110
|
-
alphaMode: packet ? !!packet.sideData.alpha : null
|
|
26249
|
+
alphaMode: track.metadata.canBeTransparent || (packet ? !!packet.sideData.alpha : null)
|
|
26111
26250
|
},
|
|
26112
26251
|
chunkQueue: [],
|
|
26113
26252
|
lastWrittenMsTimestamp: null,
|
|
@@ -26528,7 +26667,7 @@ ${cue.notes ?? ""}`;
|
|
|
26528
26667
|
const segmentSize = this.writer.getPos() - this.segmentDataOffset;
|
|
26529
26668
|
this.writer.seek(this.ebmlWriter.offsets.get(this.segment) + 4);
|
|
26530
26669
|
this.ebmlWriter.writeVarInt(segmentSize, SEGMENT_SIZE_BYTES);
|
|
26531
|
-
const duration = this.startTimestamp === Infinity ? 0 : this.endTimestamp
|
|
26670
|
+
const duration = this.startTimestamp === Infinity ? 0 : this.endTimestamp;
|
|
26532
26671
|
this.segmentDuration.data = new EBMLFloat64(duration);
|
|
26533
26672
|
this.writer.seek(this.ebmlWriter.offsets.get(this.segmentDuration));
|
|
26534
26673
|
this.ebmlWriter.writeEBML(this.segmentDuration);
|
|
@@ -26776,6 +26915,7 @@ var WaveMuxer = class extends Muxer {
|
|
|
26776
26915
|
case "discNumber":
|
|
26777
26916
|
case "tracksTotal":
|
|
26778
26917
|
case "discsTotal":
|
|
26918
|
+
case "beatsPerMinute":
|
|
26779
26919
|
case "description":
|
|
26780
26920
|
case "lyrics":
|
|
26781
26921
|
case "images":
|
|
@@ -27145,6 +27285,12 @@ var Output = class extends EventEmitter {
|
|
|
27145
27285
|
if (metadata.frameRate !== void 0 && (!Number.isFinite(metadata.frameRate) || metadata.frameRate <= 0)) {
|
|
27146
27286
|
throw new TypeError(`Invalid video frame rate: ${metadata.frameRate}. Must be a positive number.`);
|
|
27147
27287
|
}
|
|
27288
|
+
if (metadata.hasOnlyKeyPackets !== void 0 && typeof metadata.hasOnlyKeyPackets !== "boolean") {
|
|
27289
|
+
throw new TypeError("metadata.hasOnlyKeyPackets, when provided, must be a boolean.");
|
|
27290
|
+
}
|
|
27291
|
+
if (metadata.canBeTransparent !== void 0 && typeof metadata.canBeTransparent !== "boolean") {
|
|
27292
|
+
throw new TypeError("metadata.canBeTransparent, when provided, must be a boolean.");
|
|
27293
|
+
}
|
|
27148
27294
|
if (metadata.decoderConfig !== void 0) {
|
|
27149
27295
|
validateVideoChunkMetadata({ decoderConfig: metadata.decoderConfig }, source._codec);
|
|
27150
27296
|
}
|
|
@@ -27768,6 +27914,7 @@ mediabunny/dist/modules/src/sample.js:
|
|
|
27768
27914
|
mediabunny/dist/modules/shared/bitstream.js:
|
|
27769
27915
|
mediabunny/dist/modules/shared/aac-misc.js:
|
|
27770
27916
|
mediabunny/dist/modules/shared/ac3-misc.js:
|
|
27917
|
+
mediabunny/dist/modules/src/version.js:
|
|
27771
27918
|
mediabunny/dist/modules/src/codec-data.js:
|
|
27772
27919
|
mediabunny/dist/modules/src/codec.js:
|
|
27773
27920
|
mediabunny/dist/modules/src/custom-coder.js:
|
|
@@ -92,7 +92,7 @@ function createWavStreamWriter(sampleRate, channels, options = {}) {
|
|
|
92
92
|
// src/audioFile/audioFileEncoder.ts
|
|
93
93
|
var lossyModule = null;
|
|
94
94
|
function loadLossyModule() {
|
|
95
|
-
lossyModule ?? (lossyModule = import("./lossyEncoder-
|
|
95
|
+
lossyModule ?? (lossyModule = import("./lossyEncoder-55PXLHLE.js"));
|
|
96
96
|
return lossyModule;
|
|
97
97
|
}
|
|
98
98
|
function validateOptions(options) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react from 'react';
|
|
2
2
|
import { Doc, MediaProvider } from '@bendyline/squisq/schemas';
|
|
3
3
|
import { e as MediaEditRenderManager } from '../mediaEditRenderManager-W_o6RRhT.js';
|
|
4
4
|
import { b as VideoExportConfig, f as VideoOutputFormat } from '../useVideoExport-DsNDpjmO.js';
|
|
@@ -66,7 +66,7 @@ interface VideoExportPalette {
|
|
|
66
66
|
success: string;
|
|
67
67
|
danger: string;
|
|
68
68
|
}
|
|
69
|
-
declare function VideoExportModal({ doc, playerScript, mediaProvider, images, audio, mediaEditRenders, defaultConfig, colorScheme, uiPalette, saveOutput, saveActionLabel, onClose, }: VideoExportModalProps):
|
|
69
|
+
declare function VideoExportModal({ doc, playerScript, mediaProvider, images, audio, mediaEditRenders, defaultConfig, colorScheme, uiPalette, saveOutput, saveActionLabel, onClose, }: VideoExportModalProps): react.JSX.Element;
|
|
70
70
|
|
|
71
71
|
interface VideoExportButtonProps {
|
|
72
72
|
/** The document to export */
|
|
@@ -104,6 +104,6 @@ interface VideoExportButtonProps {
|
|
|
104
104
|
/** Whether the button is disabled */
|
|
105
105
|
disabled?: boolean;
|
|
106
106
|
}
|
|
107
|
-
declare function VideoExportButton({ doc, playerScript, mediaProvider, images, audio, defaultConfig, colorScheme, uiPalette, saveOutput, saveActionLabel, label, style, disabled, }: VideoExportButtonProps):
|
|
107
|
+
declare function VideoExportButton({ doc, playerScript, mediaProvider, images, audio, defaultConfig, colorScheme, uiPalette, saveOutput, saveActionLabel, label, style, disabled, }: VideoExportButtonProps): react.JSX.Element;
|
|
108
108
|
|
|
109
109
|
export { VideoExportButton, type VideoExportButtonProps, VideoExportModal, type VideoExportModalProps, type VideoExportPalette };
|
package/dist/components/index.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VideoExportButton,
|
|
3
3
|
VideoExportModal
|
|
4
|
-
} from "../chunk-
|
|
4
|
+
} from "../chunk-NTLNXUMA.js";
|
|
5
5
|
import {
|
|
6
6
|
CoverImageExportModal,
|
|
7
7
|
coverImageFilename,
|
|
8
8
|
validateCoverImageDimensions
|
|
9
|
-
} from "../chunk-
|
|
9
|
+
} from "../chunk-JVGUGMEZ.js";
|
|
10
10
|
import "../chunk-3NJDHK62.js";
|
|
11
|
-
import "../chunk-
|
|
12
|
-
import "../chunk-
|
|
13
|
-
import "../chunk-
|
|
11
|
+
import "../chunk-IOLZNTKA.js";
|
|
12
|
+
import "../chunk-CWLDLWSE.js";
|
|
13
|
+
import "../chunk-R4P6O5U6.js";
|
|
14
14
|
import "../chunk-RIXBIX3H.js";
|
|
15
15
|
import "../chunk-5MFQMJ5Z.js";
|
|
16
16
|
export {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react from 'react';
|
|
2
2
|
import { Doc, MediaProvider, Theme } from '@bendyline/squisq/schemas';
|
|
3
3
|
import { CoverSlideTemplate } from '@bendyline/squisq/doc';
|
|
4
4
|
import { I as ImageExportFormat } from '../imageExportShared-B6nqWtE-.js';
|
|
@@ -19,6 +19,6 @@ interface CoverImageExportModalProps {
|
|
|
19
19
|
}
|
|
20
20
|
declare function validateCoverImageDimensions(width: number, height: number): string | null;
|
|
21
21
|
declare function coverImageFilename(requestedName: string | undefined, format: CoverImageExportFormat): string;
|
|
22
|
-
declare function CoverImageExportModal({ doc, mediaProvider, theme, coverSlideTemplate, defaultWidth, defaultHeight, defaultFileName, colorScheme, saveOutput, onClose, }: CoverImageExportModalProps):
|
|
22
|
+
declare function CoverImageExportModal({ doc, mediaProvider, theme, coverSlideTemplate, defaultWidth, defaultHeight, defaultFileName, colorScheme, saveOutput, onClose, }: CoverImageExportModalProps): react.JSX.Element;
|
|
23
23
|
|
|
24
24
|
export { type CoverImageExportFormat, CoverImageExportModal, type CoverImageExportModalProps, coverImageFilename, validateCoverImageDimensions };
|
|
@@ -2,10 +2,10 @@ import {
|
|
|
2
2
|
CoverImageExportModal,
|
|
3
3
|
coverImageFilename,
|
|
4
4
|
validateCoverImageDimensions
|
|
5
|
-
} from "../chunk-
|
|
5
|
+
} from "../chunk-JVGUGMEZ.js";
|
|
6
6
|
import "../chunk-3NJDHK62.js";
|
|
7
|
-
import "../chunk-
|
|
8
|
-
import "../chunk-
|
|
7
|
+
import "../chunk-CWLDLWSE.js";
|
|
8
|
+
import "../chunk-R4P6O5U6.js";
|
|
9
9
|
export {
|
|
10
10
|
CoverImageExportModal,
|
|
11
11
|
coverImageFilename,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as react from 'react';
|
|
2
2
|
import { Doc, MediaProvider, Theme } from '@bendyline/squisq/schemas';
|
|
3
3
|
import { DashboardStyleId } from '@bendyline/squisq/doc';
|
|
4
4
|
import { DashboardResolutionId } from '@bendyline/squisq-video';
|
|
@@ -24,6 +24,6 @@ interface DashboardImageExportModalProps {
|
|
|
24
24
|
saveOutput?: (blob: Blob, filename: string) => boolean | void | Promise<boolean | void>;
|
|
25
25
|
onClose: () => void;
|
|
26
26
|
}
|
|
27
|
-
declare function DashboardImageExportModal({ doc, mediaProvider, theme, defaultResolution, defaultLayout, defaultShowTitle, defaultStyle, defaultFileName, colorScheme, saveOutput, onClose, }: DashboardImageExportModalProps):
|
|
27
|
+
declare function DashboardImageExportModal({ doc, mediaProvider, theme, defaultResolution, defaultLayout, defaultShowTitle, defaultStyle, defaultFileName, colorScheme, saveOutput, onClose, }: DashboardImageExportModalProps): react.JSX.Element;
|
|
28
28
|
|
|
29
29
|
export { type DashboardImageExportFormat, DashboardImageExportModal, type DashboardImageExportModalProps };
|
|
@@ -7,8 +7,8 @@ import {
|
|
|
7
7
|
} from "../chunk-3NJDHK62.js";
|
|
8
8
|
import {
|
|
9
9
|
useFrameCapture
|
|
10
|
-
} from "../chunk-
|
|
11
|
-
import "../chunk-
|
|
10
|
+
} from "../chunk-CWLDLWSE.js";
|
|
11
|
+
import "../chunk-R4P6O5U6.js";
|
|
12
12
|
|
|
13
13
|
// src/DashboardImageExportModal.tsx
|
|
14
14
|
import { useCallback, useId, useMemo, useRef, useState } from "react";
|
package/dist/encoder/index.js
CHANGED
package/dist/hooks/index.js
CHANGED
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
resolveVideoCoverFramePlan,
|
|
4
4
|
resolveVideoExportCover,
|
|
5
5
|
useVideoExport
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-IOLZNTKA.js";
|
|
7
7
|
import {
|
|
8
8
|
useFrameCapture
|
|
9
|
-
} from "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
} from "../chunk-CWLDLWSE.js";
|
|
10
|
+
import "../chunk-R4P6O5U6.js";
|
|
11
11
|
import "../chunk-RIXBIX3H.js";
|
|
12
12
|
import "../chunk-5MFQMJ5Z.js";
|
|
13
13
|
export {
|
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export { AudioTimelineClip, FfmpegWasmLoadConfig } from '@bendyline/squisq-video
|
|
|
7
7
|
export { AudioFileEncoder, AudioFileEncoderOptions, AudioFileFormat, RenderDocumentAudioOptions, createAudioFileEncoder, renderAudioTimeline, renderDocumentAudio, supportedAudioFileFormats, supportsWebCodecsAac } from './encoder/index.js';
|
|
8
8
|
export { M as MediaEditJobOptions, a as MediaEditPausesRequest, b as MediaEditPausesResult, c as MediaEditPreviewRequest, d as MediaEditPreviewResult, e as MediaEditRenderManager, f as MediaEditRenderManagerOptions, g as MediaEditRenderRequest, h as MediaEditRenderResult, i as MediaEditRenderState, j as MediaEditRenderStatus, k as MediaEditRenderer, l as MediaEditRendererOptions, m as createMediaEditRenderManager, n as createMediaEditRenderer } from './mediaEditRenderManager-W_o6RRhT.js';
|
|
9
9
|
export { MediaEditRendersView, useMediaEditRenders, useMediaEditStatus, useProcessedAudio } from './media-edit/index.js';
|
|
10
|
-
import 'react
|
|
10
|
+
import 'react';
|
|
11
11
|
import '@bendyline/squisq/schemas';
|
|
12
12
|
import '@bendyline/squisq/doc';
|
|
13
13
|
import './imageExportShared-B6nqWtE-.js';
|
package/dist/index.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import {
|
|
2
2
|
VideoExportButton,
|
|
3
3
|
VideoExportModal
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-NTLNXUMA.js";
|
|
5
5
|
import {
|
|
6
6
|
CoverImageExportModal,
|
|
7
7
|
coverImageFilename,
|
|
8
8
|
validateCoverImageDimensions
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-JVGUGMEZ.js";
|
|
10
10
|
import "./chunk-3NJDHK62.js";
|
|
11
11
|
import {
|
|
12
12
|
DEFAULT_VIDEO_COVER_PRE_ROLL_SECONDS,
|
|
13
13
|
resolveVideoCoverFramePlan,
|
|
14
14
|
resolveVideoExportCover,
|
|
15
15
|
useVideoExport
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-IOLZNTKA.js";
|
|
17
17
|
import {
|
|
18
18
|
useFrameCapture
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
19
|
+
} from "./chunk-CWLDLWSE.js";
|
|
20
|
+
import "./chunk-R4P6O5U6.js";
|
|
21
21
|
import {
|
|
22
22
|
createAudioFileEncoder,
|
|
23
23
|
supportedAudioFileFormats
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-UVDJINCK.js";
|
|
25
25
|
import "./chunk-2W6JQSIY.js";
|
|
26
26
|
import {
|
|
27
27
|
createEncoder,
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
useMediaEditRenders,
|
|
38
38
|
useMediaEditStatus,
|
|
39
39
|
useProcessedAudio
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-7RONIAPM.js";
|
|
41
41
|
import "./chunk-TL2IMDIZ.js";
|
|
42
42
|
import "./chunk-5MFQMJ5Z.js";
|
|
43
43
|
export {
|
package/dist/media-edit/index.js
CHANGED
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
analyzeMediaEditPauses,
|
|
4
4
|
previewMediaEditAudio,
|
|
5
5
|
renderMediaEditAudio
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-Y5ZQ6M43.js";
|
|
7
|
+
import "./chunk-R4P6O5U6.js";
|
|
8
8
|
export {
|
|
9
9
|
analyzeMediaEditAudio,
|
|
10
10
|
analyzeMediaEditPauses,
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
analyzeMediaEditPauses,
|
|
4
4
|
previewMediaEditAudio,
|
|
5
5
|
renderMediaEditAudio
|
|
6
|
-
} from "../chunk-
|
|
7
|
-
import "../chunk-
|
|
6
|
+
} from "../chunk-Y5ZQ6M43.js";
|
|
7
|
+
import "../chunk-R4P6O5U6.js";
|
|
8
8
|
import {
|
|
9
9
|
createRnnoiseDenoiserFactory
|
|
10
10
|
} from "../chunk-TL2IMDIZ.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bendyline/squisq-video-react",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.25",
|
|
4
4
|
"description": "React components for browser-based MP4 and animated-GIF export of Squisq documents",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Bendyline",
|
|
@@ -77,19 +77,19 @@
|
|
|
77
77
|
"react-dom": "^18.0.0 || ^19.0.0"
|
|
78
78
|
},
|
|
79
79
|
"dependencies": {
|
|
80
|
-
"@bendyline/squisq": "2.11.
|
|
81
|
-
"@bendyline/squisq-video": "2.3.
|
|
82
|
-
"@bendyline/squisq-react": "2.11.
|
|
83
|
-
"@ffmpeg/core": "0.12.
|
|
80
|
+
"@bendyline/squisq": "2.11.19",
|
|
81
|
+
"@bendyline/squisq-video": "2.3.23",
|
|
82
|
+
"@bendyline/squisq-react": "2.11.21",
|
|
83
|
+
"@ffmpeg/core": "0.12.10",
|
|
84
84
|
"@ffmpeg/ffmpeg": "0.12.15",
|
|
85
85
|
"@ffmpeg/util": "0.12.2",
|
|
86
86
|
"@shiguredo/rnnoise-wasm": "2025.1.5",
|
|
87
87
|
"html2canvas": "1.4.1"
|
|
88
88
|
},
|
|
89
89
|
"devDependencies": {
|
|
90
|
-
"@types/react": "18.3.
|
|
90
|
+
"@types/react": "18.3.31",
|
|
91
91
|
"@types/react-dom": "18.3.7",
|
|
92
|
-
"mediabunny": "1.
|
|
92
|
+
"mediabunny": "1.61.0",
|
|
93
93
|
"mp4-muxer": "5.2.2",
|
|
94
94
|
"react": "18.3.1",
|
|
95
95
|
"react-dom": "18.3.1",
|