blob: 2f8930f0fc28686f17b94408778c5ed87dc9f18a [file] [log] [blame]
// 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_CRAS_CLIENT_WRAPPER_H_
#define MEDIA_PERCEPTION_CRAS_CLIENT_WRAPPER_H_
#include <alsa/asoundlib.h>
#include <functional>
#include <memory>
#include <string>
#include <utility>
namespace mri {
// This class provides a generic base class for encapsulating methods used for
// interacting with Chrome audio service on ChromeOS devices.
class CrasClientWrapper {
public:
// Handler for incoming audio samples.
using AudioInputHandler =
std::function<void(const uint8_t* samples, int size)>;
// Pure virtuals for the interfaces that need to be available in the
// implementation.
virtual ~CrasClientWrapper() {}
// Connects to CrAS server.
virtual bool Connect() = 0;
// Disconnects from CrAS server.
virtual void Disconnect() = 0;
// Checks if it has been connected to CrAS server.
virtual bool IsConnected() const = 0;
// Starts audio capture. Return value indicates success or failure.
virtual bool StartAudioCapture() = 0;
// Stops audio capture.
virtual void StopAudioCapture() = 0;
// Checks if audio capture has been started.
virtual bool HasAudioCaptureStarted() const = 0;
// Sets parameters for audio capture. Return value indicates success or
// failure.
virtual bool SetParams(const std::string& device_name,
unsigned int num_channels,
unsigned int block_size,
unsigned int frame_rate,
snd_pcm_format_t format) = 0;
// Sets handler for processing audio samples.
void SetAudioInputHandler(AudioInputHandler handler) {
audio_input_handler_ = std::move(handler);
}
protected:
// Handler for processing audio samples.
AudioInputHandler audio_input_handler_;
};
} // namespace mri
#endif // MEDIA_PERCEPTION_CRAS_CLIENT_WRAPPER_H_