19 #ifndef _AUDIO_CAPTURE_MANAGER_H_
20 #define _AUDIO_CAPTURE_MANAGER_H_
23 #include <semaphore.h>
26 #include <condition_variable>
28 #include "audio_buffer.h"
29 #include "basic_types.h"
30 #include "rmf_error.h"
31 #include "media-utils/audioCapture/rmfAudioCapture.h"
54 namespace audiocapturemgr
59 racFreq sampling_frequency;
62 unsigned int delay_compensation_ms;
64 void get_individual_audio_parameters(
const audio_properties_t &audio_props,
unsigned int &sampling_rate,
unsigned int &bits_per_sample,
unsigned int &num_channels);
66 std::string get_suffix(
unsigned int ticker);
73 std::vector <audio_buffer *> *m_current_incoming_q;
74 std::vector <audio_buffer *> *m_current_outgoing_q;
75 std::vector <audio_capture_client *> m_clients;
77 unsigned int m_bytes_per_second;
78 unsigned int m_inflow_byte_counter;
79 unsigned int m_num_clients;
80 pthread_mutex_t m_q_mutex;
81 pthread_mutex_t m_client_mutex;
84 bool m_processing_thread_alive;
85 bool m_notify_new_data;
87 RMF_AudioCaptureHandle m_device_handle;
88 unsigned int m_max_queue_size;
90 std::thread m_data_monitor_thread;
91 std::mutex m_data_monitor_mutex;
92 std::condition_variable m_data_monitor_cv;
93 bool m_stop_data_monitor;
96 inline void lock(pthread_mutex_t &mutex);
97 inline void unlock(pthread_mutex_t &mutex);
98 inline void notify_data_ready();
100 void flush_queue(std::vector <audio_buffer *> *q);
103 void update_buffer_references();
160 void add_data(
unsigned char *buf,
unsigned int size);
216 static rmf_Error
data_callback(
void *context,
void *buf,
unsigned int size);
223 unsigned int m_priority;
224 pthread_mutex_t m_mutex;
236 unsigned int get_priority() {
return m_priority;}
237 void set_manager(
q_mgr *manager);
241 virtual void notify_event(audio_capture_events_t event){}
250 #endif // _AUDIO_CAPTURE_MANAGER_h_