// Copyright 2015 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.

[DartPackage="mojo_services"]
module mojo.media;

import "mojo/services/media/common/interfaces/media_common.mojom";
import "mojo/services/media/common/interfaces/media_pipe.mojom";
import "mojo/services/media/common/interfaces/media_types.mojom";
import "mojo/services/media/common/interfaces/rate_control.mojom";

struct AudioTrackDescriptor {
  // The track supports the union of all these media type sets.
  array<MediaTypeSet> supported_media_types;
};

struct AudioTrackConfiguration {
  // The media type to use.
  MediaType media_type;

  // Desired maximum buffer size, in frames of audio.
  uint64 max_frames;

  // Ratio of audio frames to media time ticks.
  //
  // Presentation time stamps on audio packets are expressed in units of media
  // time ticks.  Many users will choose to use units of audio frames to express
  // their media time, and can simply leave this ratio at the default of 1:1.
  // For some, however, it may be more convenient to use different units for
  // media time.  For example, if the audio frame rate was 48KHz, and the time
  // stamps are expressed in 90KHz units (the units used by MPEG-2 Program
  // Stream timestamps), the ratio should be set to 48000:90000 (aka, 8:15).
  // IOW - audio_frame_ratio would be set to 8 and media_time_ratio would be set
  // to 15.
  //
  // Neither of these values may be 0.  A configuration error will occur if they
  // are.
  uint32 audio_frame_ratio = 1;
  uint32 media_time_ratio  = 1;
};

interface AudioTrack {
  // A special value which will always cause a track to become explicitly muted.
  const float kMutedGain = -160.0;

  // The maximum permitted above-unity gain.
  const float kMaxGain = 20.0;

  // Get the descriptor.
  Describe() => (AudioTrackDescriptor descriptor);

  // Set the configuration, receive a pipe to send data to in return.
  Configure(AudioTrackConfiguration configuration, MediaPipe& pipe);

  // Request the rate control interface for this AudioTrack
  GetRateControl(RateControl& rate_control);

  // Sets the current gain/attenuation of the track, expressed in dB.  Legal
  // values are in the range [-inf, 20.0].  Any value less than or equal to the
  // constant kMutedGain will result in the track becoming explicitly muted
  // (regardless of its underlying resolution or intensity).
  SetGain(float db_gain);
};
