Source: externs/shaka/cea.js

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


/**
 * @externs
 */

/**
 * Interface for parsing inband closed caption data from MP4 streams.
 * @interface
 * @exportDoc
 */
shaka.extern.ICeaParser = class {
  /**
   * Initializes the parser with init segment data.
   * @param {!BufferSource} initSegment init segment to parse.
   * @exportDoc
   */
  init(initSegment) {}

  /**
   * Parses the stream and extracts closed captions packets.
   * @param {!BufferSource} mediaSegment media segment to parse.
   * @return {!Array<!shaka.extern.ICeaParser.CaptionPacket>}
   * @exportDoc
   */
  parse(mediaSegment) {}
};

/**
 * @typedef {{
 *   packet: !Uint8Array,
 *   pts: number,
 *   format: string,
 * }}
 *
 * @description Parsed Caption Packet.
 * @property {!Uint8Array} packet
 * The raw caption bytes. Depending on the source, it can be:
 *   - A "User data registered by Recommendation ITU-T T.35 SEI message"
 *     (sections D.1.6 and D.2.6 of Rec. ITU-T H.264, 06/2019), when
 *     `format` is `sei.
 *   - Raw CEA-608 byte pairs from a dedicated 'c608' MP4 track sample,
 *     when `format` is `raw608`. In this case, the data does **not**
 *     include NAL units, length prefixes, or SEI headers.
 *
 * @property {number} pts
 * The presentation timestamp (PTS) of this caption packet in seconds.
 * For SEI-based captions, this corresponds to the PTS of the containing
 * video sample. For raw CEA-608 track samples, it corresponds to the PTS
 * of the 'c608' sample.
 *
 * @property {string} format
 * The origin format of the caption packet:
 *   - `sei` for ITU-T T.35 SEI messages embedded in video samples.
 *   - `raw608` for raw CEA-608 samples from a dedicated MP4 track.
 * @exportDoc
 */
shaka.extern.ICeaParser.CaptionPacket;


/**
 * Interface for decoding inband closed captions from packets.
 * @interface
 * @exportDoc
 */
shaka.extern.ICaptionDecoder = class {
  /**
   * Extracts packets and prepares them for decoding. In a given media fragment,
   * all the caption packets found in its SEI messages should be extracted by
   * successive calls to extract(), followed by a single call to decode().
   *
   * @param {!Uint8Array} userDataSeiMessage
   * This is a User Data registered by Rec.ITU-T T.35 SEI message.
   * It is described in sections D.1.6 and D.2.6 of Rec. ITU-T H.264 (06/2019).
   * @param {number} pts PTS when this packet was received, in seconds.
   * @exportDoc
   */
  extract(userDataSeiMessage, pts) {}

  /**
   * Extracts raw CEA-608 caption bytes from a dedicated MP4 'c608' track
   * and prepares them for decoding. In a given media fragment, all the
   * CEA-608 samples found in the track should be extracted by successive
   * calls to extractRaw608(), followed by a single call to decode().
   *
   * Unlike extract(), this method does not process SEI messages or
   * ITU-T T.35 user data. The input is raw CEA-608 byte pairs as stored
   * directly in the MP4 sample payload of a 'c608' track (Apple-style
   * fragmented MP4).
   *
   * Each call provides the full sample payload for a single caption
   * sample. The payload typically consists of one or more CEA-608
   * cc_data byte pairs.
   *
   * @param {!Uint8Array} raw608Data
   * Raw CEA-608 data bytes from a 'c608' MP4 track sample.
   * @param {number} pts PTS when this sample was received, in seconds.
   * @exportDoc
   */
  extractRaw608(raw608Data, pts) {}

  /**
   * Decodes all currently extracted packets and then clears them.
   * This should be called once for a set of extracts (see comment on extract).
   * @return {!Array<!shaka.extern.ICaptionDecoder.ClosedCaption>}
   * @exportDoc
   */
  decode() {}

  /**
   * Clears the decoder state completely.
   * Should be used when an action renders the decoder state invalid,
   * e.g. unbuffered seeks.
   * @exportDoc
   */
  clear() {}

  /**
   * Returns the streams that the CEA decoder found.
   * @return {!Array<string>}
   * @exportDoc
   */
  getStreams() {}
};

/**
 * Parsed Cue.
 * @typedef {{
 *   cue: !shaka.text.Cue,
 *   stream: string
 * }}
 *
 * @exportDoc
 */
shaka.extern.ICaptionDecoder.ClosedCaption;

/**
 * @typedef {function():!shaka.extern.ICeaParser}
 * @exportDoc
 */
shaka.extern.CeaParserPlugin;

/**
 * @typedef {function():!shaka.extern.ICaptionDecoder}
 * @exportDoc
 */
shaka.extern.CaptionDecoderPlugin;