// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

module media.mojom;

import "media/mojo/interfaces/media_types.mojom";

// Interface for decrypting (and decoding) encrypted streams.
// See media/base/decryptor.h for details.
interface Decryptor {
  // Status of a decrypt or decrypt-and-decode operation. See decryptor.h for
  // descriptions.
  [Native]
  enum Status;

  // Stream type (audio/video). See decryptor.h for descriptions.
  [Native]
  enum StreamType;

  // Pass the two data pipes used to transfer DecoderBuffer contents to and
  // from the Decryptor. |receive_pipe| will be used to receive DecoderBuffer
  // data on Decrypt(), DecryptAndDecodeAudio(), and DecryptAndDecodeVideo()
  // calls. |transmit_pipe| will be used to pass the DecoderBuffer data
  // back with OnDecryptDone() calls. This method must be called before any
  // methods listed are called.
  Initialize(handle<data_pipe_consumer> receive_pipe,
             handle<data_pipe_producer> transmit_pipe);

  // Decrypts the |encrypted| buffer and returns the decrypt |status| and
  // decrypted |buffer|.
  // At most one decrypt call is allowed at any time for a |stream_type|.
  Decrypt(StreamType stream_type, DecoderBuffer encrypted)
      => (Status status, DecoderBuffer? buffer);

  // Cancels any pending decrypt for |stream_type| with SUCCESS.
  CancelDecrypt(StreamType stream_type);

  // Initializes a decoder with the given |config|. Returns whether the
  // initialization succeeded.
  InitializeAudioDecoder(AudioDecoderConfig config) => (bool success);
  InitializeVideoDecoder(VideoDecoderConfig config) => (bool success);

  // Decrypts and decodes the |encrypted| buffer and returns the |status| and
  // the decrypted |audio_buffers| or |video_frame|.
  // At end-of-stream, this method should be called repeatedly with
  // end-of-stream |encrypted| until no buffer/frame can be produced.
  // These methods can only be called after the corresponding decoder has
  // been successfully initialized.
  // At most one decrypt-and-decode call is allowed at any time for a
  // |stream_type|.
  // For video, |releaser| must be closed (if it is bound) when the VideoFrame
  // is no longer needed so that any shared resources can be reused.
  DecryptAndDecodeAudio(DecoderBuffer encrypted)
      => (Status status, array<AudioBuffer> audio_buffers);
  DecryptAndDecodeVideo(DecoderBuffer encrypted)
      => (Status status, VideoFrame? video_frame, FrameResourceReleaser? releaser);

  // Resets the decoder for |stream_type| to a clean initialized state and
  // cancels any pending decrypt-and-decode operations immediately with ERROR.
  // This method can only be called after the corresponding decoder has been
  // successfully initialized.
  ResetDecoder(StreamType stream_type);

  // Releases decoder resources, deinitializes the decoder, aborts any pending
  // initialization (with false) or decrypt-and-decode (with ERROR) for
  // |stream_type| immediately.
  // This method can be called any time after Initialize{Audio|Video}Decoder()
  // has been called (with the correct stream type).
  // After this operation, the decoder is set to an uninitialized state.
  // The decoder can be reinitialized after it is deinitialized.
  DeinitializeDecoder(StreamType stream_type);
};

// Interface for controlling the the resources associated with a VideoFrame.
// This is returned when calling DecryptAndDecodeVideo(), and the connection
// (if it exists) should be closed when the VideoFrame is no longer needed in
// order to reuse the shared resources associated with the VideoFrame.
interface FrameResourceReleaser {};
