UNPKG

shaka-player

Version:
153 lines (136 loc) 3.73 kB
/*! @license * Shaka Player * Copyright 2016 Google LLC * SPDX-License-Identifier: Apache-2.0 */ goog.provide('shaka.lcevc.Dil'); goog.require('shaka.log'); goog.require('shaka.util.IReleasable'); /** * @summary * lcevcDil - (MPEG-5 Part 2 LCEVC - Decoder Integration Layer) provides * all the operations related to the enhancement and rendering * of LCEVC enabled streams and on to a canvas. * @implements {shaka.util.IReleasable} * @export */ shaka.lcevc.Dil = class { /** * @param {HTMLVideoElement} media The video element that will be attached to * LCEVC Dil for input. * @param {HTMLCanvasElement} canvas The canvas element that will be attached * to LCEVC Dil to render the enhanced frames. * @param {shaka.extern.LcevcConfiguration} dilConfig The LCEVC DIL * config object to initialize the LCEVC DIL. */ constructor(media, canvas, dilConfig) { /** @private {?LcevcDil.LcevcDIL} */ this.dil_ = null; /** @private {number} */ this.variantId_ = -1; /** @private {HTMLVideoElement} */ this.media_ = media; /** @private {HTMLCanvasElement} */ this.canvas_ = canvas; /** @private {shaka.extern.LcevcConfiguration} */ this.dilConfig_ = dilConfig; this.create_(); } /** * Append data to the LCEVC Dil. * @param {BufferSource} data */ appendBuffer(data) { if (this.dil_) { this.dil_.appendBuffer(data, 'video', this.variantId_); } } /** * Hide the canvas specifically in the case of a DRM Content */ hideCanvas() { if (this.dil_) { this.canvas_.classList.add('shaka-hidden'); } } /** * Create LCEVC Dil. * @private */ create_() { if (this.isSupported_() && !this.dil_) { if (LcevcDil.SupportObject.webGLSupport(this.canvas_)) { // Make sure the canvas is not hidden from a previous playback session. this.canvas_.classList.remove('shaka-hidden'); this.dil_ = new LcevcDil.LcevcDil( this.media_, this.canvas_, this.dilConfig_); } } } /** * Close LCEVC Dil. * @override * @export */ release() { if (this.dil_) { this.dil_.close(); this.dil_ = null; } } /** * Check if the LCEVC Dil lib is present and is supported by the browser. * @return {boolean} * @private */ isSupported_() { if (typeof libDPIModule === 'undefined') { shaka.log.alwaysWarn( 'Could not Find LCEVC Library dependencies on this page'); } if (typeof LcevcDil === 'undefined') { shaka.log.alwaysWarn('Could not Find LCEVC Library on this page'); } else { if (!LcevcDil.SupportObject.SupportStatus) { shaka.log.alwaysWarn(LcevcDil.SupportObject.SupportError); } } return typeof LcevcDil !== 'undefined' && typeof libDPIModule !== 'undefined' && this.canvas_ instanceof HTMLCanvasElement && LcevcDil.SupportObject.SupportStatus; } /** * Update current active variant * @param {shaka.extern.Track} track */ updateVariant(track) { let containerFormat = shaka.lcevc.Dil.ContainerFormat.MPEG2_TS; switch (track.mimeType) { case 'video/webm': { containerFormat = shaka.lcevc.Dil.ContainerFormat.WEBM; break; } case 'video/mp4': { containerFormat = shaka.lcevc.Dil.ContainerFormat.MP4; break; } } if (this.dil_) { this.variantId_ = track.id; this.dil_.setLevelSwitching(track.id, true); this.dil_.setContainerFormat(containerFormat); } } }; /** * Container Formats. * @const @enum {number} */ shaka.lcevc.Dil.ContainerFormat = { MPEG2_TS: 0, WEBM: 1, MP4: 2, };