140 lines
8.0 KiB
JavaScript
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
|