| // 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_AUDIO_RECEIVER_H_ |
| #define MEDIA_PERCEPTION_AUDIO_RECEIVER_H_ |
| |
| #include <cras_client.h> |
| #include <cras_helpers.h> |
| #include <cras_types.h> |
| #include <cras_util.h> |
| #include <map> |
| #include <stdint.h> |
| #include <stdio.h> |
| #include <string> |
| |
| #include "media_perception/chrome_audio_service_client.h" |
| #include "media_perception/device_management.pb.h" |
| |
| namespace mri { |
| |
| // Handles interaction with a single audio device and piping outputs to the |
| // registered handlers. By itself, this class is not thread safe. |
| class AudioReceiver { |
| public: |
| explicit AudioReceiver(const std::string& device_id); |
| |
| ~AudioReceiver() { DestroyParams(); } |
| |
| // Returns true if the |requested| params match the current |params_|. |
| bool CaptureFormatMatches(const AudioStreamParams& requested); |
| |
| // Returns the size of the frame handler map. |
| int GetFrameHandlerCount(); |
| |
| // Sets the audio stream |params_| on the AudioReceiver. |
| bool SetAudioStreamParams(const AudioStreamParams& params); |
| |
| AudioStreamParams GetAudioStreamParams(); |
| |
| // Attempts to start audio capture. |
| bool StartAudioCaptureForDeviceIdx(struct cras_client* client, int dev_idx); |
| |
| // Adds an audio frame handler into the frame handler map. Return value is the |
| // frame handler id. |
| int AddAudioFrameHandler(ChromeAudioServiceClient::AudioFrameHandler handler); |
| |
| // Callback when getting a new audio frame. |
| void ProcessAudioSamples(const uint8_t* samples, unsigned int num_samples); |
| |
| // Attempts to remove a frame handler based on id value. Return value |
| // indicates success or failure. |
| bool RemoveFrameHandler(int frame_handler_id); |
| |
| void StopAudioCapture(struct cras_client* client); |
| |
| private: |
| void DestroyParams(); |
| |
| // Keeps track of the current capture parameters for an audio device. |
| AudioStreamParams params_; |
| |
| // Cras structures managed by the AudioReceiver class. |
| struct cras_audio_format* audio_format_; |
| struct cras_stream_params* audio_capture_params_; |
| cras_stream_id_t stream_id_; |
| |
| // The device id associated with this device. |
| std::string device_id_; |
| |
| // Keeps a counter to ensure that each frame handler has a unique id. |
| int frame_handler_counter_; |
| |
| // Stores a map of frame handler ids to AudioFrameHandlers. |
| std::map<int /* frame_handler_id */, |
| ChromeAudioServiceClient::AudioFrameHandler> |
| frame_handler_id_to_audio_frame_handler_map_; |
| }; |
| |
| } // namespace mri |
| |
| #endif // MEDIA_PERCEPTION_AUDIO_RECEIVER_H_ |