// Copyright 2016 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/mojom/media_types.mojom";
import "mojo/public/mojom/base/unguessable_token.mojom";

interface AudioDecoder {
  // Initialize the decoder. This must be called before any other method.
  //
  // TODO(sandersd): Rename to Initialize() if/when
  // media::AudioDecoder::Initialize() is renamed to Configure().
  Construct(pending_associated_remote<AudioDecoderClient> client);

  // Initializes the AudioDecoder with the audio codec configuration and CDM id.
  // For the unencrypted streams the |cdm_id| is ignored. Executed the callback
  // with whether the initialization succeeded, and whether the pipeline needs
  // bitstream conversion.
  Initialize(AudioDecoderConfig config,
             mojo_base.mojom.UnguessableToken? cdm_id)
      => (Status success,
          bool needs_bitstream_conversion,
          AudioDecoderType decoder_type);

  // Establishes data connection. Should be called before Decode().
  SetDataSource(handle<data_pipe_consumer> receive_pipe);

  // Sends the |buffer| to the underlying codec. Should be called only after
  // Initialize() succeeds. The callback with the status is called after the
  // decoder has accepted corresponding DecoderBuffer, indicating that the
  // pipeline can send next buffer to decode.
  // If |buffer| is an EOS buffer then the decoder must be flushed, i.e. all
  // pending buffers should be processed, the corresponding decoded buffers
  // should be returned to the proxy, and only then the service should return
  // DecoderStatus.
  Decode(DecoderBuffer buffer) => (Status status);

  // Resets decoder state. Should be called only if Initialize() succeeds.
  // All pending Decode() requests will be finished or aborted, then the method
  // executes the callback.
  Reset() => ();
};

interface AudioDecoderClient {
  // Sends the decoded audio buffer back to the proxy.
  OnBufferDecoded(AudioBuffer buffer);

  // Called when the remote decoder is waiting because of |reason|, e.g. waiting
  // for decryption key.
  OnWaiting(WaitingReason reason);
};
