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

#ifndef MEDIA_PERCEPTION_CHROME_AUDIO_SERVICE_CLIENT_H_
#define MEDIA_PERCEPTION_CHROME_AUDIO_SERVICE_CLIENT_H_

#include <functional>
#include <memory>
#include <string>
#include <utility>
#include <vector>

namespace mri {

using SerializedAudioStreamParams = std::vector<uint8_t>;
using SerializedAudioDevice = std::vector<uint8_t>;

// The implementation of the ChromeAudioServiceClient is thread-safe and can be
// shared between multiple clients.
class ChromeAudioServiceClient {
 public:
  // Handler for incoming audio frames.
  using AudioFrameHandler =
      std::function<void(const uint8_t* samples, int size)>;

  virtual ~ChromeAudioServiceClient() {}

  // Connects to CrAS. Does nothing if we are already connected.
  virtual bool Connect() = 0;

  // Check if the service is connected.
  virtual bool IsConnected() = 0;

  virtual std::vector<SerializedAudioDevice> GetInputDevices() = 0;

  // Determines if a particular device has already started capture and if it
  // has, fills in the |capture_format| with the current parameters used to
  // read frames from the device.
  virtual bool IsAudioCaptureStartedForDevice(
      const std::string& device_id,
      SerializedAudioStreamParams* capture_format) = 0;

  // Add a frame handler for a particular device id. Return value is the handler
  // id, which is globally unique for a single device. Note that multiple
  // clients can add a frame handler for a single device. AddFrameHandler will
  // start audio capture on a device if it is not already started. If the
  // |capture_format| matches the current format, in the case that audio capture
  // is already started, then the frame handler will be successfully added. An
  // return value of 0 indicates a failure to add the handler or start audio
  // capture.
  virtual int AddFrameHandler(const std::string& device_id,
                              const SerializedAudioStreamParams& capture_format,
                              AudioFrameHandler handler) = 0;

  // Remove a frame handler for a particular device by specifying the frame
  // handler id. Audio capture on a particular device will only stop when all
  // frame handlers are removed for a particular device.
  virtual bool RemoveFrameHandler(const std::string& device_id,
                                  int frame_handler_id) = 0;
};

}  // namespace mri

#endif  // MEDIA_PERCEPTION_CHROME_AUDIO_SERVICE_CLIENT_H_
