Source: lib/util/manifest_filter.js

/*! @license
 * Shaka Player
 * Copyright 2016 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

goog.provide('shaka.util.ManifestFilter');

goog.require('shaka.media.MediaSourceEngine');
goog.require('shaka.util.StreamUtils');
goog.requireType('shaka.media.DrmEngine');


/**
 * This utility class contains all the functions used to filter manifests
 * before playback and before storage.
 */
shaka.util.ManifestFilter = class {
  /**
   * Filter the variants in |manifest| to only include the variants that meet
   * the given restrictions.
   *
   * @param {shaka.extern.Manifest} manifest
   * @param {shaka.extern.Restrictions} restrictions
   * @param {{width: number, height:number}} maxHwResolution
   */
  static filterByRestrictions(manifest, restrictions, maxHwResolution) {
    manifest.variants = manifest.variants.filter((variant) => {
      return shaka.util.StreamUtils.meetsRestrictions(
          variant, restrictions, maxHwResolution);
    });
  }


  /**
   * Filter the variants in the |manifest| to only include those that are
   * supported by media source.
   *
   * @param {shaka.extern.Manifest} manifest
   */
  static filterByMediaSourceSupport(manifest) {
    const MediaSourceEngine = shaka.media.MediaSourceEngine;

    manifest.variants = manifest.variants.filter((variant) => {
      let supported = true;
      if (variant.audio) {
        supported =
            supported && MediaSourceEngine.isStreamSupported(variant.audio);
      }
      if (variant.video) {
        supported =
            supported && MediaSourceEngine.isStreamSupported(variant.video);
      }
      return supported;
    });
  }

  /**
   * Filter the variants in |manifest| to only include those that are supported
   * by |drm|.
   *
   * @param {shaka.extern.Manifest} manifest
   * @param {!shaka.media.DrmEngine} drmEngine
   */
  static filterByDrmSupport(manifest, drmEngine) {
    manifest.variants = manifest.variants.filter((variant) => {
      return drmEngine.supportsVariant(variant);
    });
  }
};