blob: d701192f3e60c4d7b3965085e673f2e4507193d1 [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_IMPL_H_
#define MEDIA_PERCEPTION_CRAS_CLIENT_IMPL_H_
#include <cras_client.h>
#include <cras_helpers.h>
#include <cras_types.h>
#include <cras_util.h>
#include <stdint.h>
#include <stdio.h>
#include <string>
#include "media_perception/cras_client_wrapper.h"
namespace mri {
// A wrapper class that encapsulates methods used for interacting with Chrome
// audio service on ChromeOS devices. This class is not thread safe and so it
// should not be accessed from multiple threads.
class CrasClientImpl : public CrasClientWrapper {
public:
CrasClientImpl()
: client_(nullptr),
audio_format_(nullptr),
audio_capture_params_(nullptr),
has_audio_capture_started_(false) {}
~CrasClientImpl() override;
// Connects to CrAS server.
bool Connect() override;
// Disconnects from CrAS server.
void Disconnect() override;
// Checks if it has been connected to CrAS server.
bool IsConnected() const override;
// Starts audio capture. Return value indicates success or failure.
bool StartAudioCapture() override;
// Stops audio capture.
void StopAudioCapture() override;
// Checks if audio capture has been started.
bool HasAudioCaptureStarted() const override;
// Sets parameters for audio capture. Return value indicates success or
// failure.
bool SetParams(const std::string &device_name, unsigned int num_channels,
unsigned int block_size, unsigned int frame_rate,
snd_pcm_format_t format) override;
// Callback when getting a new audio frame.
void ProcessAudioSamples(const uint8_t *samples, unsigned int num_samples);
private:
// Destructs audio_format_ and audio_capture_params_;
void DestroyParams();
// Destructs client_;
void DestroyClient();
struct cras_client *client_;
struct cras_audio_format *audio_format_;
struct cras_stream_params *audio_capture_params_;
bool has_audio_capture_started_;
std::string device_name_;
cras_stream_id_t stream_id_;
};
} // namespace mri
#endif // MEDIA_PERCEPTION_CRAS_CLIENT_IMPL_H_