Files
il/resources/public/js/cljs-runtime/module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$VideoSource.js
2026-07-01 22:38:29 -06:00

140 lines
8.0 KiB
JavaScript

shadow$provide.module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$VideoSource = function(global, require, module, exports) {
global = require("module$node_modules$pixi_DOT_js$lib$extensions$Extensions");
var Ticker = require("module$node_modules$pixi_DOT_js$lib$ticker$Ticker"), detectVideoAlphaMode = require("module$node_modules$pixi_DOT_js$lib$utils$browser$detectVideoAlphaMode");
require = require("module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$TextureSource");
"use strict";
const node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$VideoSource$classdecl$var7 = class extends require.TextureSource {
constructor(options) {
super(options);
this.isReady = !1;
this.uploadMethodId = "video";
options = {...node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$VideoSource$classdecl$var7.defaultOptions, ...options};
this._autoUpdate = !0;
this._isConnectedToTicker = !1;
this._updateFPS = options.updateFPS || 0;
this._msToNextUpdate = 0;
this.autoPlay = !1 !== options.autoPlay;
this.alphaMode = options.alphaMode ?? "premultiply-alpha-on-upload";
this._videoFrameRequestCallback = this._videoFrameRequestCallback.bind(this);
this._reject = this._resolve = this._load = this._videoFrameRequestCallbackHandle = null;
this._onCanPlay = this._onCanPlay.bind(this);
this._onCanPlayThrough = this._onCanPlayThrough.bind(this);
this._onError = this._onError.bind(this);
this._onPlayStart = this._onPlayStart.bind(this);
this._onPlayStop = this._onPlayStop.bind(this);
this._onSeeked = this._onSeeked.bind(this);
this._onLoadedMetadata = this._onLoadedMetadata.bind(this);
!1 !== options.autoLoad && this.load();
}
updateFrame() {
if (!this.destroyed) {
this._updateFPS && (this._msToNextUpdate = Math.floor(this._msToNextUpdate - Ticker.Ticker.shared.elapsedMS * this.resource.playbackRate));
if (!this._updateFPS || 0 >= this._msToNextUpdate) {
this._msToNextUpdate = this._updateFPS ? Math.floor(1e3 / this._updateFPS) : 0;
}
this.isValid && this.update();
}
}
_videoFrameRequestCallback() {
this.updateFrame();
this._videoFrameRequestCallbackHandle = this.destroyed ? null : this.resource.requestVideoFrameCallback(this._videoFrameRequestCallback);
}
get isValid() {
return !!this.resource.videoWidth && !!this.resource.videoHeight;
}
async load() {
if (this._load) {
return this._load;
}
const source = this.resource, options = this.options;
(source.readyState === source.HAVE_ENOUGH_DATA || source.readyState === source.HAVE_FUTURE_DATA) && source.width && source.height && (source.complete = !0);
source.addEventListener("play", this._onPlayStart);
source.addEventListener("pause", this._onPlayStop);
source.addEventListener("seeked", this._onSeeked);
this._isSourceReady() ? this._mediaReady() : (options.preload || source.addEventListener("canplay", this._onCanPlay), source.addEventListener("canplaythrough", this._onCanPlayThrough), source.addEventListener("error", this._onError, !0));
this.isValid || source.addEventListener("loadedmetadata", this._onLoadedMetadata);
this.alphaMode = await detectVideoAlphaMode.detectVideoAlphaMode();
return this._load = new Promise((resolve, reject) => {
this.isValid ? resolve(this) : (this._resolve = resolve, this._reject = reject, void 0 !== options.preloadTimeoutMs && (this._preloadTimeout = setTimeout(() => {
this._onError(new ErrorEvent(`Preload exceeded timeout of ${options.preloadTimeoutMs}ms`));
})), source.load());
});
}
_onError(event) {
this.resource.removeEventListener("error", this._onError, !0);
this.emit("error", event);
this._reject && (this._reject(event), this._resolve = this._reject = null);
}
_isSourcePlaying() {
const source = this.resource;
return !source.paused && !source.ended;
}
_isSourceReady() {
return 2 < this.resource.readyState;
}
_onPlayStart() {
this._configureAutoUpdate();
}
_onPlayStop() {
this._configureAutoUpdate();
}
_onSeeked() {
this._autoUpdate && !this._isSourcePlaying() && (this._msToNextUpdate = 0, this.updateFrame(), this._msToNextUpdate = 0);
}
_onLoadedMetadata() {
this.isValid && this._mediaReady();
}
_onCanPlay() {
this.resource.removeEventListener("canplay", this._onCanPlay);
this._mediaReady();
}
_onCanPlayThrough() {
this.resource.removeEventListener("canplaythrough", this._onCanPlayThrough);
this._preloadTimeout && (clearTimeout(this._preloadTimeout), this._preloadTimeout = void 0);
this._mediaReady();
}
_mediaReady() {
const source = this.resource;
this.isValid && (this.isReady = !0, this.resize(source.videoWidth, source.videoHeight));
this._msToNextUpdate = 0;
this.updateFrame();
this._msToNextUpdate = 0;
this._resolve && this.isValid && (this._resolve(this), this._reject = this._resolve = null);
this._isSourcePlaying() ? this._onPlayStart() : this.autoPlay && this.resource.play();
}
destroy() {
this._configureAutoUpdate();
const source = this.resource;
source && (source.removeEventListener("play", this._onPlayStart), source.removeEventListener("pause", this._onPlayStop), source.removeEventListener("seeked", this._onSeeked), source.removeEventListener("canplay", this._onCanPlay), source.removeEventListener("canplaythrough", this._onCanPlayThrough), source.removeEventListener("loadedmetadata", this._onLoadedMetadata), source.removeEventListener("error", this._onError, !0), source.pause(), source.src = "", source.load());
super.destroy();
}
get autoUpdate() {
return this._autoUpdate;
}
set autoUpdate(value) {
value !== this._autoUpdate && (this._autoUpdate = value, this._configureAutoUpdate());
}
get updateFPS() {
return this._updateFPS;
}
set updateFPS(value) {
value !== this._updateFPS && (this._updateFPS = value, this._configureAutoUpdate());
}
_configureAutoUpdate() {
this._autoUpdate && this._isSourcePlaying() ? !this._updateFPS && this.resource.requestVideoFrameCallback ? (this._isConnectedToTicker && (Ticker.Ticker.shared.remove(this.updateFrame, this), this._isConnectedToTicker = !1, this._msToNextUpdate = 0), null === this._videoFrameRequestCallbackHandle && (this._videoFrameRequestCallbackHandle = this.resource.requestVideoFrameCallback(this._videoFrameRequestCallback))) : (null !== this._videoFrameRequestCallbackHandle && (this.resource.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle),
this._videoFrameRequestCallbackHandle = null), this._isConnectedToTicker || (Ticker.Ticker.shared.add(this.updateFrame, this), this._isConnectedToTicker = !0, this._msToNextUpdate = 0)) : (null !== this._videoFrameRequestCallbackHandle && (this.resource.cancelVideoFrameCallback(this._videoFrameRequestCallbackHandle), this._videoFrameRequestCallbackHandle = null), this._isConnectedToTicker && (Ticker.Ticker.shared.remove(this.updateFrame, this), this._isConnectedToTicker = !1, this._msToNextUpdate =
0));
}
static test(resource) {
return globalThis.HTMLVideoElement && resource instanceof HTMLVideoElement;
}
};
module = node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$VideoSource$classdecl$var7;
module.extension = global.ExtensionType.TextureSource;
module.defaultOptions = {...require.TextureSource.defaultOptions, autoLoad:!0, autoPlay:!0, updateFPS:0, crossorigin:!0, loop:!1, muted:!0, playsinline:!0, preload:!1};
module.MIME_TYPES = {ogv:"video/ogg", mov:"video/quicktime", m4v:"video/mp4"};
exports.VideoSource = module;
};
//# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$rendering$renderers$shared$texture$sources$VideoSource.js.map