| // 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_ |