This build was committed by a bot.

This commit is contained in:
github-actions[bot]
2026-10-20 03:00:08 +00:00
parent b4bae470c1
commit 32d7bd6bd2
7 changed files with 652 additions and 605 deletions
-2
View File
@@ -1,2 +0,0 @@
import { t as require___vite_browser_external } from "./src-CvA4YsQY.js";
export default require___vite_browser_external();
+2
View File
@@ -0,0 +1,2 @@
import { t as require___vite_browser_external } from "./src-DlKePj_l.js";
export default require___vite_browser_external();
File diff suppressed because it is too large Load Diff
@@ -1,6 +1,6 @@
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/__vite-browser-external-BTR76MVM.js","assets/src-CvA4YsQY.js"])))=>i.map(i=>d[i]); const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/__vite-browser-external-ey8rhZ1c.js","assets/src-DlKePj_l.js"])))=>i.map(i=>d[i]);
import { t as __vitePreload } from "./index-Ceaeycxj.js"; import { t as __vitePreload } from "./index-DRwc6SUn.js";
import { CustomAudioEncoder, EncodedPacket, Logging, n as __require$1, r as __toESM, registerEncoder } from "./src-CvA4YsQY.js"; import { CustomAudioEncoder, EncodedPacket, Logging, n as __require$1, r as __toESM, registerEncoder } from "./src-DlKePj_l.js";
//#region node_modules/@mediabunny/aac-encoder/dist/bundles/mediabunny-aac-encoder.mjs //#region node_modules/@mediabunny/aac-encoder/dist/bundles/mediabunny-aac-encoder.mjs
/*! /*!
* Copyright (c) 2026-present, Vanilagy and contributors * Copyright (c) 2026-present, Vanilagy and contributors
@@ -192,7 +192,7 @@ async function inlineWorker(scriptText) {
let Worker3; let Worker3;
try { try {
Worker3 = (await __vitePreload(async () => { Worker3 = (await __vitePreload(async () => {
const { Worker } = await import("./__vite-browser-external-BTR76MVM.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1)); const { Worker } = await import("./__vite-browser-external-ey8rhZ1c.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1));
return { Worker }; return { Worker };
}, __vite__mapDeps([0,1]))).Worker; }, __vite__mapDeps([0,1]))).Worker;
} catch { } catch {
+182 -55
View File
@@ -671,6 +671,14 @@ var isChromium = () => {
if (isChromiumCache !== null) return isChromiumCache; if (isChromiumCache !== null) return isChromiumCache;
return isChromiumCache = !!(typeof navigator !== "undefined" && (navigator.vendor?.includes("Google Inc") || /Chrome/.test(navigator.userAgent))); return isChromiumCache = !!(typeof navigator !== "undefined" && (navigator.vendor?.includes("Google Inc") || /Chrome/.test(navigator.userAgent)));
}; };
var chromiumVersionCache = null;
var getChromiumVersion = () => {
if (chromiumVersionCache !== null) return chromiumVersionCache;
if (typeof navigator === "undefined") return null;
const match = /\bChrome\/(\d+)/.exec(navigator.userAgent);
if (!match) return null;
return chromiumVersionCache = Number(match[1]);
};
var missingWebCodecsClassMessage = (className) => { var missingWebCodecsClassMessage = (className) => {
if (typeof globalThis.isSecureContext !== "undefined" && !globalThis.isSecureContext) return `${className} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`; if (typeof globalThis.isSecureContext !== "undefined" && !globalThis.isSecureContext) return `${className} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`;
return `${className} is not available in this environment.`; return `${className} is not available in this environment.`;
@@ -1466,7 +1474,7 @@ var EAC3_REDUCED_SAMPLE_RATES = [
* License, v. 2.0. If a copy of the MPL was not distributed with this * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/. * file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/ */
var VERSIONED_NAME = `Mediabunny v1.61.4`; var VERSIONED_NAME = `Mediabunny v1.61.6`;
//#endregion //#endregion
//#region node_modules/mediabunny/dist/modules/src/codec-data.js //#region node_modules/mediabunny/dist/modules/src/codec-data.js
/*! /*!
@@ -5571,6 +5579,35 @@ var readIsomVariableInteger = (slice) => {
} }
return result; return result;
}; };
var readEsDescriptor = (slice) => {
if (readU8(slice) !== 3) throw new Error("Invalid esds: expected ES_Descriptor.");
readIsomVariableInteger(slice);
slice.skip(2);
const mixed = readU8(slice);
const streamDependenceFlag = (mixed & 128) !== 0;
const urlFlag = (mixed & 64) !== 0;
const ocrStreamFlag = (mixed & 32) !== 0;
if (streamDependenceFlag) slice.skip(2);
if (urlFlag) {
const urlLength = readU8(slice);
slice.skip(urlLength);
}
if (ocrStreamFlag) slice.skip(2);
if (readU8(slice) !== 4) throw new Error("Invalid esds: expected DecoderConfigDescriptor.");
const decoderConfigDescriptorLength = readIsomVariableInteger(slice);
const payloadStart = slice.filePos;
const objectTypeIndication = readU8(slice);
slice.skip(12);
let decoderSpecificInfo = null;
if (decoderConfigDescriptorLength > slice.filePos - payloadStart) {
if (readU8(slice) !== 5) throw new Error("Invalid esds: expected DecoderSpecificInfo.");
decoderSpecificInfo = readBytes(slice, readIsomVariableInteger(slice));
}
return {
objectTypeIndication,
decoderSpecificInfo
};
};
var readMetadataStringShort = (slice) => { var readMetadataStringShort = (slice) => {
let stringLength = readU16Be(slice); let stringLength = readU16Be(slice);
slice.skip(2); slice.skip(2);
@@ -6603,23 +6640,7 @@ var IsobmffDemuxer = class IsobmffDemuxer extends Demuxer {
const track = this.currentTrack; const track = this.currentTrack;
if (!track || track.info?.type !== "audio") break; if (!track || track.info?.type !== "audio") break;
slice.skip(4); slice.skip(4);
assert(readU8(slice) === 3); const { objectTypeIndication, decoderSpecificInfo } = readEsDescriptor(slice);
readIsomVariableInteger(slice);
slice.skip(2);
const mixed = readU8(slice);
const streamDependenceFlag = (mixed & 128) !== 0;
const urlFlag = (mixed & 64) !== 0;
const ocrStreamFlag = (mixed & 32) !== 0;
if (streamDependenceFlag) slice.skip(2);
if (urlFlag) {
const urlLength = readU8(slice);
slice.skip(urlLength);
}
if (ocrStreamFlag) slice.skip(2);
assert(readU8(slice) === 4);
const decoderConfigDescriptorLength = readIsomVariableInteger(slice);
const payloadStart = slice.filePos;
const objectTypeIndication = readU8(slice);
if (objectTypeIndication === 64 || objectTypeIndication === 103) { if (objectTypeIndication === 64 || objectTypeIndication === 103) {
track.info.codec = "aac"; track.info.codec = "aac";
track.info.aacCodecInfo = { track.info.aacCodecInfo = {
@@ -6630,11 +6651,8 @@ var IsobmffDemuxer = class IsobmffDemuxer extends Demuxer {
else if (objectTypeIndication === 221) track.info.codec = "vorbis"; else if (objectTypeIndication === 221) track.info.codec = "vorbis";
else if (objectTypeIndication === 169) track.info.codec = "dts"; else if (objectTypeIndication === 169) track.info.codec = "dts";
else Logging._warn(`Unsupported audio codec (objectTypeIndication ${objectTypeIndication}) - discarding track.`); else Logging._warn(`Unsupported audio codec (objectTypeIndication ${objectTypeIndication}) - discarding track.`);
slice.skip(12); if (decoderSpecificInfo) {
if (decoderConfigDescriptorLength > slice.filePos - payloadStart) { track.info.codecDescription = decoderSpecificInfo;
assert(readU8(slice) === 5);
const decoderSpecificInfoLength = readIsomVariableInteger(slice);
track.info.codecDescription = readBytes(slice, decoderSpecificInfoLength);
if (track.info.codec === "aac") { if (track.info.codec === "aac") {
const audioSpecificConfig = parseAacAudioSpecificConfig(track.info.codecDescription); const audioSpecificConfig = parseAacAudioSpecificConfig(track.info.codecDescription);
if (audioSpecificConfig.outputNumberOfChannels !== null) track.info.numberOfChannels = audioSpecificConfig.outputNumberOfChannels; if (audioSpecificConfig.outputNumberOfChannels !== null) track.info.numberOfChannels = audioSpecificConfig.outputNumberOfChannels;
@@ -14192,7 +14210,10 @@ var SegmentedInputInputTrackBacking = class {
continue; continue;
} }
const firstPacket = await nextTrack._backing.getFirstPacket(options); const firstPacket = await nextTrack._backing.getFirstPacket(options);
if (!firstPacket) return null; if (!firstPacket) {
currentSegment = nextSegment;
continue;
}
return this.createAdjustedPacket(firstPacket, nextSegment, nextTrack); return this.createAdjustedPacket(firstPacket, nextSegment, nextTrack);
} }
} }
@@ -14521,7 +14542,7 @@ var CustomPathedSource = class extends PathedSource {
/** @internal */ /** @internal */
_dispose() { _dispose() {
if (this._root) this._root.free(); if (this._root) this._root.free();
else if (this._rootRequest) this._rootRequest.then((ref) => ref.free()); else if (this._rootRequest) this._rootRequest.then((ref) => ref.free()).catch(() => {});
} }
}; };
/** /**
@@ -16258,7 +16279,7 @@ var HlsSegmentedInput = class extends SegmentedInput {
return input; return input;
} }
async getLiveRefreshInterval() { async getLiveRefreshInterval() {
if (this.getRemainingWaitTimeMs() === 0) await this.runUpdateSegments(); if (!this.streamHasEnded && this.getRemainingWaitTimeMs() === 0) await this.runUpdateSegments();
return this.streamHasEnded ? null : this.refreshInterval; return this.streamHasEnded ? null : this.refreshInterval;
} }
}; };
@@ -17751,7 +17772,13 @@ var VideoSample = class VideoSample {
this.squarePixelHeight = data.displayHeight; this.squarePixelHeight = data.displayHeight;
this.timestamp = init?.timestamp ?? data.timestamp / 1e6; this.timestamp = init?.timestamp ?? data.timestamp / 1e6;
this.duration = init?.duration ?? (data.duration ?? 0) / 1e6; this.duration = init?.duration ?? (data.duration ?? 0) / 1e6;
this.colorSpace = new VideoSampleColorSpace(data.colorSpace); const { primaries, transfer, matrix, fullRange } = data.colorSpace;
this.colorSpace = new VideoSampleColorSpace({
primaries: primaries !== null && primaries in COLOR_PRIMARIES_MAP ? primaries : null,
transfer: transfer !== null && transfer in TRANSFER_CHARACTERISTICS_MAP ? transfer : null,
matrix: matrix !== null && matrix in MATRIX_COEFFICIENTS_MAP ? matrix : null,
fullRange
});
} else if (typeof HTMLImageElement !== "undefined" && data instanceof HTMLImageElement || typeof SVGImageElement !== "undefined" && data instanceof SVGImageElement || typeof ImageBitmap !== "undefined" && data instanceof ImageBitmap || typeof HTMLVideoElement !== "undefined" && data instanceof HTMLVideoElement || typeof HTMLCanvasElement !== "undefined" && data instanceof HTMLCanvasElement || typeof OffscreenCanvas !== "undefined" && data instanceof OffscreenCanvas) { } else if (typeof HTMLImageElement !== "undefined" && data instanceof HTMLImageElement || typeof SVGImageElement !== "undefined" && data instanceof SVGImageElement || typeof ImageBitmap !== "undefined" && data instanceof ImageBitmap || typeof HTMLVideoElement !== "undefined" && data instanceof HTMLVideoElement || typeof HTMLCanvasElement !== "undefined" && data instanceof HTMLCanvasElement || typeof OffscreenCanvas !== "undefined" && data instanceof OffscreenCanvas) {
if (!init || typeof init !== "object") throw new TypeError("init must be an object."); if (!init || typeof init !== "object") throw new TypeError("init must be an object.");
if (init.rotation !== void 0 && ![ if (init.rotation !== void 0 && ![
@@ -19621,11 +19648,16 @@ var VIDEO_CODEC_QUANTIZER_SUPPORT = {
worst: 41, worst: 41,
best: 16 best: 16
}, },
vp9: { vp9: (getChromiumVersion() ?? Infinity) < 145 ? {
min: 0, min: 0,
max: 63, max: 63,
worst: 52, worst: 52,
best: 20 best: 20
} : {
min: 0,
max: 255,
worst: 208,
best: 80
}, },
av1: { av1: {
min: 0, min: 0,
@@ -20297,10 +20329,12 @@ var EncodedPacketSink = class {
}; };
} }
}; };
var MAX_QUEUE_SIZE = 4;
var DecoderWrapper = class { var DecoderWrapper = class {
constructor(onSample, onError) { constructor(onSample, onError) {
this.onSample = onSample; this.onSample = onSample;
this.onError = onError; this.onError = onError;
this.onDequeue = null;
} }
}; };
/** /**
@@ -20357,14 +20391,14 @@ var BaseMediaSampleSink = class {
onQueueNotEmpty(); onQueueNotEmpty();
} }
}); });
decoder.onDequeue = () => onQueueDequeue();
const packetSink = this._createPacketSink(); const packetSink = this._createPacketSink();
const keyPacket = await packetSink.getKeyPacket(startTimestamp, packetRetrievalOptions) ?? await packetSink.getFirstKeyPacket(packetRetrievalOptions); const keyPacket = await packetSink.getKeyPacket(startTimestamp, packetRetrievalOptions) ?? await packetSink.getFirstKeyPacket(packetRetrievalOptions);
let currentPacket = keyPacket; let currentPacket = keyPacket;
const packets = packetSink.packets(keyPacket ?? void 0, void 0, packetRetrievalOptions); const packets = packetSink.packets(keyPacket ?? void 0, void 0, packetRetrievalOptions);
await packets.next(); await packets.next();
while (currentPacket && !ended && !this._track.input._disposed) { while (currentPacket && !ended && !this._track.input._disposed) {
const maxQueueSize = computeMaxQueueSize(sampleQueue.length); if (sampleQueue.length + decoder.getDecodeQueueSize() >= MAX_QUEUE_SIZE) {
if (sampleQueue.length + decoder.getDecodeQueueSize() > maxQueueSize) {
({promise: queueDequeue, resolve: onQueueDequeue} = promiseWithResolvers()); ({promise: queueDequeue, resolve: onQueueDequeue} = promiseWithResolvers());
await queueDequeue; await queueDequeue;
continue; continue;
@@ -20376,7 +20410,10 @@ var BaseMediaSampleSink = class {
} }
await packets.return(); await packets.return();
if (!terminated && !this._track.input._disposed) await decoder.flush(); if (!terminated && !this._track.input._disposed) await decoder.flush();
if (!firstSampleQueued && lastSample) sampleQueue.push(lastSample); if (!firstSampleQueued && lastSample) {
sampleQueue.push(lastSample);
lastSample = null;
}
decoderIsFlushed = true; decoderIsFlushed = true;
onQueueNotEmpty(); onQueueNotEmpty();
})().catch((error) => { })().catch((error) => {
@@ -20485,6 +20522,7 @@ var BaseMediaSampleSink = class {
onQueueNotEmpty(); onQueueNotEmpty();
} }
}); });
decoder.onDequeue = () => onQueueDequeue();
const packetSink = this._createPacketSink(); const packetSink = this._createPacketSink();
let lastPacket = null; let lastPacket = null;
let lastKeyPacket = null; let lastKeyPacket = null;
@@ -20495,8 +20533,7 @@ var BaseMediaSampleSink = class {
let currentPacket = lastKeyPacket; let currentPacket = lastKeyPacket;
decoder.decode(currentPacket); decoder.decode(currentPacket);
while (currentPacket.sequenceNumber < maxSequenceNumber) { while (currentPacket.sequenceNumber < maxSequenceNumber) {
const maxQueueSize = computeMaxQueueSize(sampleQueue.length); while (sampleQueue.length + decoder.getDecodeQueueSize() >= MAX_QUEUE_SIZE && !terminated) {
while (sampleQueue.length + decoder.getDecodeQueueSize() > maxQueueSize && !terminated) {
({promise: queueDequeue, resolve: onQueueDequeue} = promiseWithResolvers()); ({promise: queueDequeue, resolve: onQueueDequeue} = promiseWithResolvers());
await queueDequeue; await queueDequeue;
} }
@@ -20603,9 +20640,6 @@ var BaseMediaSampleSink = class {
}; };
} }
}; };
var computeMaxQueueSize = (decodedSampleQueueSize) => {
return decodedSampleQueueSize === 0 ? 40 : 8;
};
var VideoDecoderWrapper = class extends DecoderWrapper { var VideoDecoderWrapper = class extends DecoderWrapper {
constructor(onSample, onError, codec, decoderConfig, rotation, flip, timeResolution) { constructor(onSample, onError, codec, decoderConfig, rotation, flip, timeResolution) {
super(onSample, onError); super(onSample, onError);
@@ -20700,6 +20734,9 @@ var VideoDecoderWrapper = class extends DecoderWrapper {
this.onError(error); this.onError(error);
} }
}); });
this.decoder.addEventListener("dequeue", () => {
this.onDequeue?.();
});
this.decoder.configure(this.decoderConfig); this.decoder.configure(this.decoderConfig);
} }
} }
@@ -20717,7 +20754,10 @@ var VideoDecoderWrapper = class extends DecoderWrapper {
} }
if (this.customDecoder) { if (this.customDecoder) {
this.customDecoderQueueSize++; this.customDecoderQueueSize++;
this.customDecoderCallSerializer.call(() => this.customDecoder.decode(packet)).catch((error) => this.onError(error)).finally(() => this.customDecoderQueueSize--); this.customDecoderCallSerializer.call(() => this.customDecoder.decode(packet)).catch((error) => this.onError(error)).finally(() => {
this.customDecoderQueueSize--;
this.onDequeue?.();
});
} else { } else {
assert(this.decoder); assert(this.decoder);
if (!isWebKit()) insertSorted(this.inputTimestamps, packet.timestamp, (x) => x); if (!isWebKit()) insertSorted(this.inputTimestamps, packet.timestamp, (x) => x);
@@ -20788,6 +20828,9 @@ var VideoDecoderWrapper = class extends DecoderWrapper {
this.onError(error); this.onError(error);
} }
}); });
this.alphaDecoder.addEventListener("dequeue", () => {
this.onDequeue?.();
});
this.alphaDecoder.configure({ this.alphaDecoder.configure({
...this.decoderConfig, ...this.decoderConfig,
colorSpace: { colorSpace: {
@@ -21416,6 +21459,9 @@ var AudioDecoderWrapper = class extends DecoderWrapper {
this.onError(error); this.onError(error);
} }
}); });
this.decoder.addEventListener("dequeue", () => {
this.onDequeue?.();
});
this.decoder.configure(decoderConfig); this.decoder.configure(decoderConfig);
} }
} }
@@ -21429,7 +21475,10 @@ var AudioDecoderWrapper = class extends DecoderWrapper {
decode(packet) { decode(packet) {
if (this.customDecoder) { if (this.customDecoder) {
this.customDecoderQueueSize++; this.customDecoderQueueSize++;
this.customDecoderCallSerializer.call(() => this.customDecoder.decode(packet)).catch((error) => this.onError(error)).finally(() => this.customDecoderQueueSize--); this.customDecoderCallSerializer.call(() => this.customDecoder.decode(packet)).catch((error) => this.onError(error)).finally(() => {
this.customDecoderQueueSize--;
this.onDequeue?.();
});
} else { } else {
assert(this.decoder); assert(this.decoder);
this.expectedFirstTimestamp ??= packet.timestamp; this.expectedFirstTimestamp ??= packet.timestamp;
@@ -22736,6 +22785,10 @@ var Input = class Input extends EventEmitter {
if (cachedPromiseEntry) return cachedPromiseEntry.promise.then((x) => x.sourceRef.source.ref()); if (cachedPromiseEntry) return cachedPromiseEntry.promise.then((x) => x.sourceRef.source.ref());
const promise = (async () => { const promise = (async () => {
const sourceRef = await this._getSourceUncached(request); const sourceRef = await this._getSourceUncached(request);
if (this._disposed) {
sourceRef.free();
throw new InputDisposedError();
}
if (arrayCount(this._sourceCache, (x) => x.cacheGroup === cacheGroup && x.sourceRef.source._refCount === 1) >= 4) { if (arrayCount(this._sourceCache, (x) => x.cacheGroup === cacheGroup && x.sourceRef.source._refCount === 1) >= 4) {
const minAgeIndex = arrayArgmin(this._sourceCache, (x) => x.cacheGroup === cacheGroup && x.sourceRef.source._refCount === 1 ? x.age : Infinity); const minAgeIndex = arrayArgmin(this._sourceCache, (x) => x.cacheGroup === cacheGroup && x.sourceRef.source._refCount === 1 ? x.age : Infinity);
assert(minAgeIndex !== -1); assert(minAgeIndex !== -1);
@@ -30023,6 +30076,7 @@ var VideoEncoderWrapper = class {
this.muxer = null; this.muxer = null;
this.lastMultipleOfKeyFrameInterval = -1; this.lastMultipleOfKeyFrameInterval = -1;
this.emittedEncoderPackets = 0; this.emittedEncoderPackets = 0;
this.chunkTimestampsAreShiftedByDuration = false;
this.codedWidth = null; this.codedWidth = null;
this.codedHeight = null; this.codedHeight = null;
this.outputWidth = null; this.outputWidth = null;
@@ -30316,6 +30370,7 @@ var VideoEncoderWrapper = class {
await this.customEncoder.init(); await this.customEncoder.init();
} else { } else {
this.encoderConfig = encoderConfig; this.encoderConfig = encoderConfig;
if (this.encodingConfig.codec === "avc" && isFirefox()) this.chunkTimestampsAreShiftedByDuration = await detectAvcChunkTimestampShift();
this.createWebCodecsEncoders(); this.createWebCodecsEncoders();
} }
assert(this.source._connectedTrack); assert(this.source._connectedTrack);
@@ -30403,7 +30458,8 @@ var VideoEncoderWrapper = class {
let packet = EncodedPacket.fromEncodedChunk(colorChunk, sideData); let packet = EncodedPacket.fromEncodedChunk(colorChunk, sideData);
const encoderConfig = this.encoderConfig; const encoderConfig = this.encoderConfig;
assert(encoderConfig); assert(encoderConfig);
if (meta?.decoderConfig) meta.decoderConfig.codec = extractVideoCodecString({ if (meta?.decoderConfig) {
meta.decoderConfig.codec = extractVideoCodecString({
width: encoderConfig.width, width: encoderConfig.width,
height: encoderConfig.height, height: encoderConfig.height,
codec: this.encodingConfig.codec, codec: this.encodingConfig.codec,
@@ -30416,11 +30472,33 @@ var VideoEncoderWrapper = class {
av1CodecInfo: this.encodingConfig.codec === "av1" ? extractAv1CodecInfoFromPacket(packet.data) : null, av1CodecInfo: this.encodingConfig.codec === "av1" ? extractAv1CodecInfoFromPacket(packet.data) : null,
proresFormat: null proresFormat: null
}); });
const preciseTimingIndex = binarySearchLessOrEqual(this.preciseTimings, colorChunk.timestamp, (x) => x.microsecondTimestamp); if (this.encodingConfig.codec === "avc" && meta.decoderConfig.description && isFirefox()) {
const parsed = deserializeAvcDecoderConfigurationRecord(toUint8Array(meta.decoderConfig.description));
let sps = parsed?.sequenceParameterSets[0];
if (sps && sps[0] === sps[1]) {
assert(parsed);
sps = sps.subarray(1);
let pps = parsed.pictureParameterSets[0];
if (pps) pps = pps.subarray(1);
const record = serializeAvcDecoderConfigurationRecord({
...parsed,
sequenceParameterSets: [sps],
pictureParameterSets: pps ? [pps] : []
});
meta.decoderConfig.description = record;
}
}
}
let microsecondTimestamp = colorChunk.timestamp;
if (this.chunkTimestampsAreShiftedByDuration) {
microsecondTimestamp -= colorChunk.duration ?? 0;
packet = packet.clone({ timestamp: microsecondTimestamp / 1e6 });
}
const preciseTimingIndex = binarySearchLessOrEqual(this.preciseTimings, microsecondTimestamp, (x) => x.microsecondTimestamp);
const entry = preciseTimingIndex !== -1 ? this.preciseTimings[preciseTimingIndex] : null; const entry = preciseTimingIndex !== -1 ? this.preciseTimings[preciseTimingIndex] : null;
let actualType = null; let actualType = null;
if (this.emittedEncoderPackets === 0 && packet.type === "delta" && meta?.decoderConfig) actualType = determineVideoPacketType(this.encodingConfig.codec, meta.decoderConfig, packet.data); if (this.emittedEncoderPackets === 0 && packet.type === "delta" && meta?.decoderConfig) actualType = determineVideoPacketType(this.encodingConfig.codec, meta.decoderConfig, packet.data);
if (entry && entry.microsecondTimestamp === colorChunk.timestamp || actualType !== null) packet = packet.clone({ if (entry && entry.microsecondTimestamp === microsecondTimestamp || actualType !== null) packet = packet.clone({
timestamp: entry?.timestampIsValid ? entry.timestamp : void 0, timestamp: entry?.timestampIsValid ? entry.timestamp : void 0,
duration: entry?.durationIsValid ? entry.duration : void 0, duration: entry?.durationIsValid ? entry.duration : void 0,
type: actualType ?? void 0 type: actualType ?? void 0
@@ -30484,6 +30562,40 @@ var VideoEncoderWrapper = class {
if (this.errorSet) throw this.error; if (this.errorSet) throw this.error;
} }
}; };
var avcChunkTimestampShiftPromise = null;
var detectAvcChunkTimestampShift = () => {
return avcChunkTimestampShiftPromise ??= (async () => {
let chunkTimestamp = null;
const encoder = new VideoEncoder({
output: (chunk) => {
chunkTimestamp ??= chunk.timestamp;
},
error: () => {}
});
try {
encoder.configure({
codec: "avc1.64001f",
width: 1280,
height: 720
});
const frame = new VideoFrame(new Uint8Array(1280 * 720 * 1.5), {
format: "I420",
codedWidth: 1280,
codedHeight: 720,
timestamp: 0,
duration: 500
});
encoder.encode(frame, { keyFrame: true });
frame.close();
await encoder.flush();
} catch {
return false;
} finally {
if (encoder.state !== "closed") encoder.close();
}
return chunkTimestamp === 500;
})();
};
var splitterWorkerUrl = null; var splitterWorkerUrl = null;
/** Utility class for splitting a composite frame into separate color and alpha parts on the CPU in a worker. */ /** Utility class for splitting a composite frame into separate color and alpha parts on the CPU in a worker. */
var ColorAlphaSplitter = class { var ColorAlphaSplitter = class {
@@ -31249,6 +31361,10 @@ var AudioEncoderWrapper = class {
this.encoder = new AudioEncoder({ this.encoder = new AudioEncoder({
output: (chunk, meta) => { output: (chunk, meta) => {
if (this.encodingConfig.codec === "aac" && meta?.decoderConfig) { if (this.encodingConfig.codec === "aac" && meta?.decoderConfig) {
if (meta.decoderConfig.description && meta.decoderConfig.description.byteLength > 0 && toUint8Array(meta.decoderConfig.description)[0] === 3) {
const { decoderSpecificInfo } = readEsDescriptor(FileSlice.tempFromBytes(toUint8Array(meta.decoderConfig.description)));
meta.decoderConfig.description = decoderSpecificInfo ?? void 0;
}
let needsDescriptionOverwrite = false; let needsDescriptionOverwrite = false;
if (!meta.decoderConfig.description || meta.decoderConfig.description.byteLength < 2) needsDescriptionOverwrite = true; if (!meta.decoderConfig.description || meta.decoderConfig.description.byteLength < 2) needsDescriptionOverwrite = true;
else needsDescriptionOverwrite = parseAacAudioSpecificConfig(toUint8Array(meta.decoderConfig.description)).objectType === 0; else needsDescriptionOverwrite = parseAacAudioSpecificConfig(toUint8Array(meta.decoderConfig.description)).objectType === 0;
@@ -34151,6 +34267,8 @@ var Conversion = class Conversion {
this._computeProgress = false; this._computeProgress = false;
/** @internal */ /** @internal */
this._lastProgress = 0; this._lastProgress = 0;
/** @internal */
this._lastProcessedTime = 0;
/** /**
* Whether this conversion, as it has been configured, is valid and can be executed. If this field is `false`, check * Whether this conversion, as it has been configured, is valid and can be executed. If this field is `false`, check
* the `discardedTracks` field for reasons. Composable conversions are always valid, even if they utilize * the `discardedTracks` field for reasons. Composable conversions are always valid, even if they utilize
@@ -34409,10 +34527,7 @@ Tracks were discarded because your environment is not able to encode any of the
this._state = isDone ? "done" : "idle"; this._state = isDone ? "done" : "idle";
if (isDone) { if (isDone) {
if (!this._composable) await this.output.finalize(); if (!this._composable) await this.output.finalize();
if (this._computeProgress) { if (this._computeProgress) this.onProgress?.(1, this._lastProcessedTime);
const minTimestamp = Math.min(...this._maxTimestamps.values());
this.onProgress?.(1, minTimestamp);
}
} }
} }
/** /**
@@ -34545,13 +34660,13 @@ Tracks were discarded because your environment is not able to encode any of the
sideData: alpha === "discard" ? {} : packet.sideData, sideData: alpha === "discard" ? {} : packet.sideData,
type: packetType type: packetType
}); });
this._reportProgress(outputTrackId, modifiedPacket.timestamp + modifiedPacket.duration); this._updateProgress(outputTrackId, modifiedPacket.timestamp + modifiedPacket.duration);
await source.add(modifiedPacket, meta); await source.add(modifiedPacket, meta);
if (this._synchronizer.shouldWait(outputTrackId, modifiedPacket.timestamp)) await this._synchronizer.wait(modifiedPacket.timestamp); if (this._synchronizer.shouldWait(outputTrackId, modifiedPacket.timestamp)) await this._synchronizer.wait(modifiedPacket.timestamp);
await this._checkpoint(pump, modifiedPacket.timestamp); await this._checkpoint(pump, modifiedPacket.timestamp);
} }
source.close(); source.close();
this._synchronizer.closeTrack(outputTrackId); this._closeTrack(outputTrackId);
}); });
} else { } else {
if (!await track.canDecode()) { if (!await track.canDecode()) {
@@ -34657,7 +34772,7 @@ Tracks were discarded because your environment is not able to encode any of the
if (clampedStartTimestamp >= clampedEndTimestamp) continue; if (clampedStartTimestamp >= clampedEndTimestamp) continue;
sample.setTimestamp(clampedStartTimestamp + this._timestampOffset); sample.setTimestamp(clampedStartTimestamp + this._timestampOffset);
sample.setDuration(clampedEndTimestamp - clampedStartTimestamp); sample.setDuration(clampedEndTimestamp - clampedStartTimestamp);
this._reportProgress(outputTrackId, sample.timestamp + sample.duration); this._updateProgress(outputTrackId, sample.timestamp + sample.duration);
await source.add(sample); await source.add(sample);
sample.close(); sample.close();
if (lastSampleTimestamp !== null) { if (lastSampleTimestamp !== null) {
@@ -34672,7 +34787,7 @@ Tracks were discarded because your environment is not able to encode any of the
} }
} }
source.close(); source.close();
this._synchronizer.closeTrack(outputTrackId); this._closeTrack(outputTrackId);
}); });
} }
let ownGroup = null; let ownGroup = null;
@@ -34773,13 +34888,13 @@ Tracks were discarded because your environment is not able to encode any of the
timestamp: packetTimestamp, timestamp: packetTimestamp,
duration: packet.duration duration: packet.duration
}); });
this._reportProgress(outputTrackId, modifiedPacket.timestamp + modifiedPacket.duration); this._updateProgress(outputTrackId, modifiedPacket.timestamp + modifiedPacket.duration);
await source.add(modifiedPacket, meta); await source.add(modifiedPacket, meta);
if (this._synchronizer.shouldWait(outputTrackId, modifiedPacket.timestamp)) await this._synchronizer.wait(modifiedPacket.timestamp); if (this._synchronizer.shouldWait(outputTrackId, modifiedPacket.timestamp)) await this._synchronizer.wait(modifiedPacket.timestamp);
await this._checkpoint(pump, modifiedPacket.timestamp); await this._checkpoint(pump, modifiedPacket.timestamp);
} }
source.close(); source.close();
this._synchronizer.closeTrack(outputTrackId); this._closeTrack(outputTrackId);
}); });
} else { } else {
if (!await track.canDecode()) { if (!await track.canDecode()) {
@@ -34905,7 +35020,7 @@ Tracks were discarded because your environment is not able to encode any of the
} }
} }
source.close(); source.close();
this._synchronizer.closeTrack(outputTrackId); this._closeTrack(outputTrackId);
}); });
} }
let ownGroup = null; let ownGroup = null;
@@ -34929,7 +35044,7 @@ Tracks were discarded because your environment is not able to encode any of the
} }
/** @internal */ /** @internal */
async _registerAudioSample(pump, sample, source, outputTrackId, getLastSampleTimestamp) { async _registerAudioSample(pump, sample, source, outputTrackId, getLastSampleTimestamp) {
this._reportProgress(outputTrackId, sample.timestamp + sample.duration); this._updateProgress(outputTrackId, sample.timestamp + sample.duration);
await source.add(sample); await source.add(sample);
sample.close(); sample.close();
const lastSampleTimestamp = getLastSampleTimestamp(); const lastSampleTimestamp = getLastSampleTimestamp();
@@ -34965,12 +35080,24 @@ Tracks were discarded because your environment is not able to encode any of the
} }
} }
/** @internal */ /** @internal */
_reportProgress(trackId, endTimestamp) { _closeTrack(id) {
this._synchronizer.closeTrack(id);
this._maxTimestamps.delete(id);
this._reportProgress();
}
/** @internal */
_updateProgress(trackId, endTimestamp) {
if (!this._computeProgress) return; if (!this._computeProgress) return;
assert(this._totalDuration !== null);
this._maxTimestamps.set(trackId, Math.max(endTimestamp, this._maxTimestamps.get(trackId))); this._maxTimestamps.set(trackId, Math.max(endTimestamp, this._maxTimestamps.get(trackId)));
this._reportProgress();
}
/** @internal */
_reportProgress() {
if (!this._computeProgress || this._maxTimestamps.size === 0) return;
assert(this._totalDuration !== null);
const minTimestamp = Math.min(...this._maxTimestamps.values()); const minTimestamp = Math.min(...this._maxTimestamps.values());
const newProgress = clamp(minTimestamp / this._totalDuration, 0, 1); const newProgress = clamp(minTimestamp / this._totalDuration, 0, 1);
this._lastProcessedTime = minTimestamp;
if (newProgress !== this._lastProgress) { if (newProgress !== this._lastProgress) {
this._lastProgress = newProgress; this._lastProgress = newProgress;
this.onProgress?.(newProgress, minTimestamp); this.onProgress?.(newProgress, minTimestamp);
+1 -1
View File
@@ -13,7 +13,7 @@
<script defer src="//unpkg.com/alpinejs"></script> <script defer src="//unpkg.com/alpinejs"></script>
<script type="module" crossorigin src="/assets/index-Ceaeycxj.js"></script> <script type="module" crossorigin src="/assets/index-DRwc6SUn.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-DDqI2rlK.css"> <link rel="stylesheet" crossorigin href="/assets/index-DDqI2rlK.css">
<link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head> <link rel="manifest" href="/manifest.webmanifest"><script id="vite-plugin-pwa:register-sw" src="/registerSW.js"></script></head>
<body class="bg-white text-gray-900 selection:bg-black/10" x-data @click.window="if($event.target.closest('button')) haptic(); if(!document.getElementById('threadPopover').contains($event.target)&&!$event.target.closest('[data-thread-menu]')) hideThreadPopover(); if(!document.getElementById('sunePopover').contains($event.target)&&!$event.target.closest('[data-sune-menu]')) hideSunePopover(); if(!document.getElementById('userMenu').contains($event.target)&&!document.getElementById('userMenuBtn').contains($event.target)) document.getElementById('userMenu').classList.add('hidden')"> <body class="bg-white text-gray-900 selection:bg-black/10" x-data @click.window="if($event.target.closest('button')) haptic(); if(!document.getElementById('threadPopover').contains($event.target)&&!$event.target.closest('[data-thread-menu]')) hideThreadPopover(); if(!document.getElementById('sunePopover').contains($event.target)&&!$event.target.closest('[data-sune-menu]')) hideSunePopover(); if(!document.getElementById('userMenu').contains($event.target)&&!document.getElementById('userMenuBtn').contains($event.target)) document.getElementById('userMenu').classList.add('hidden')">
Vendored
+1 -1
View File
@@ -1 +1 @@
if(!self.define){let e,s={};const n=(n,r)=>(n=new URL(n+".js",r).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(r,i)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let l={};const o=e=>n(e,t),d={module:{uri:t},exports:l,require:o};s[t]=Promise.all(r.map(e=>d[e]||o(e))).then(e=>(i(...e),l))}}define(["./workbox-9c191d2f"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"index.html",revision:"7559eb516d4db754365cae1e30b03638"},{url:"assets/src-CvA4YsQY.js",revision:null},{url:"assets/mediabunny-aac-encoder-kTu7ubye.js",revision:null},{url:"assets/index-DDqI2rlK.css",revision:null},{url:"assets/index-Ceaeycxj.js",revision:null},{url:"assets/__vite-browser-external-BTR76MVM.js",revision:null},{url:"appstore_content/✺.png",revision:"06dd8ca13016278fc47e9a226acdb7f9"},{url:"manifest.webmanifest",revision:"70d853d7dcb45ddd8488db46950b4b33"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))}); if(!self.define){let e,s={};const n=(n,r)=>(n=new URL(n+".js",r).href,s[n]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=n,e.onload=s,document.head.appendChild(e)}else e=n,importScripts(n),s()}).then(()=>{let e=s[n];if(!e)throw new Error(`Module ${n} didn’t register its module`);return e}));self.define=(r,i)=>{const t=e||("document"in self?document.currentScript.src:"")||location.href;if(s[t])return;let l={};const o=e=>n(e,t),c={module:{uri:t},exports:l,require:o};s[t]=Promise.all(r.map(e=>c[e]||o(e))).then(e=>(i(...e),l))}}define(["./workbox-9c191d2f"],function(e){"use strict";self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"registerSW.js",revision:"1872c500de691dce40960bb85481de07"},{url:"index.html",revision:"cfcc261797373f650a24c74c571b434b"},{url:"assets/src-DlKePj_l.js",revision:null},{url:"assets/mediabunny-aac-encoder-vZgc586K.js",revision:null},{url:"assets/index-DRwc6SUn.js",revision:null},{url:"assets/index-DDqI2rlK.css",revision:null},{url:"assets/__vite-browser-external-ey8rhZ1c.js",revision:null},{url:"appstore_content/✺.png",revision:"06dd8ca13016278fc47e9a226acdb7f9"},{url:"manifest.webmanifest",revision:"70d853d7dcb45ddd8488db46950b4b33"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("index.html")))});