| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 bool RecordingWarning() const override; | 192 bool RecordingWarning() const override; |
| 193 bool RecordingError() const override; | 193 bool RecordingError() const override; |
| 194 void ClearPlayoutWarning() override; | 194 void ClearPlayoutWarning() override; |
| 195 void ClearPlayoutError() override; | 195 void ClearPlayoutError() override; |
| 196 void ClearRecordingWarning() override; | 196 void ClearRecordingWarning() override; |
| 197 void ClearRecordingError() override; | 197 void ClearRecordingError() override; |
| 198 | 198 |
| 199 void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) override; | 199 void AttachAudioBuffer(AudioDeviceBuffer* audioBuffer) override; |
| 200 | 200 |
| 201 private: | 201 private: |
| 202 void Lock() EXCLUSIVE_LOCK_FUNCTION(_critSect) { | 202 void Lock() RTC_EXCLUSIVE_LOCK_FUNCTION(_critSect) { _critSect.Enter(); } |
| 203 _critSect.Enter(); | 203 void UnLock() RTC_UNLOCK_FUNCTION(_critSect) { _critSect.Leave(); } |
| 204 } | 204 void WaitForOperationCompletion(pa_operation* paOperation) const; |
| 205 void UnLock() UNLOCK_FUNCTION(_critSect) { | 205 void WaitForSuccess(pa_operation* paOperation) const; |
| 206 _critSect.Leave(); | |
| 207 } | |
| 208 void WaitForOperationCompletion(pa_operation* paOperation) const; | |
| 209 void WaitForSuccess(pa_operation* paOperation) const; | |
| 210 | 206 |
| 211 bool KeyPressed() const; | 207 bool KeyPressed() const; |
| 212 | 208 |
| 213 static void PaContextStateCallback(pa_context *c, void *pThis); | 209 static void PaContextStateCallback(pa_context* c, void* pThis); |
| 214 static void PaSinkInfoCallback(pa_context *c, const pa_sink_info *i, | 210 static void PaSinkInfoCallback(pa_context* c, |
| 215 int eol, void *pThis); | 211 const pa_sink_info* i, |
| 216 static void PaSourceInfoCallback(pa_context *c, const pa_source_info *i, | 212 int eol, |
| 217 int eol, void *pThis); | 213 void* pThis); |
| 218 static void PaServerInfoCallback(pa_context *c, const pa_server_info *i, | 214 static void PaSourceInfoCallback(pa_context* c, |
| 219 void *pThis); | 215 const pa_source_info* i, |
| 220 static void PaStreamStateCallback(pa_stream *p, void *pThis); | 216 int eol, |
| 221 void PaContextStateCallbackHandler(pa_context *c); | 217 void* pThis); |
| 222 void PaSinkInfoCallbackHandler(const pa_sink_info *i, int eol); | 218 static void PaServerInfoCallback(pa_context* c, |
| 223 void PaSourceInfoCallbackHandler(const pa_source_info *i, int eol); | 219 const pa_server_info* i, |
| 224 void PaServerInfoCallbackHandler(const pa_server_info *i); | 220 void* pThis); |
| 225 void PaStreamStateCallbackHandler(pa_stream *p); | 221 static void PaStreamStateCallback(pa_stream* p, void* pThis); |
| 222 void PaContextStateCallbackHandler(pa_context* c); |
| 223 void PaSinkInfoCallbackHandler(const pa_sink_info* i, int eol); |
| 224 void PaSourceInfoCallbackHandler(const pa_source_info* i, int eol); |
| 225 void PaServerInfoCallbackHandler(const pa_server_info* i); |
| 226 void PaStreamStateCallbackHandler(pa_stream* p); |
| 226 | 227 |
| 227 void EnableWriteCallback(); | 228 void EnableWriteCallback(); |
| 228 void DisableWriteCallback(); | 229 void DisableWriteCallback(); |
| 229 static void PaStreamWriteCallback(pa_stream *unused, size_t buffer_space, | 230 static void PaStreamWriteCallback(pa_stream* unused, |
| 230 void *pThis); | 231 size_t buffer_space, |
| 231 void PaStreamWriteCallbackHandler(size_t buffer_space); | 232 void* pThis); |
| 232 static void PaStreamUnderflowCallback(pa_stream *unused, void *pThis); | 233 void PaStreamWriteCallbackHandler(size_t buffer_space); |
| 233 void PaStreamUnderflowCallbackHandler(); | 234 static void PaStreamUnderflowCallback(pa_stream* unused, void* pThis); |
| 234 void EnableReadCallback(); | 235 void PaStreamUnderflowCallbackHandler(); |
| 235 void DisableReadCallback(); | 236 void EnableReadCallback(); |
| 236 static void PaStreamReadCallback(pa_stream *unused1, size_t unused2, | 237 void DisableReadCallback(); |
| 237 void *pThis); | 238 static void PaStreamReadCallback(pa_stream* unused1, |
| 238 void PaStreamReadCallbackHandler(); | 239 size_t unused2, |
| 239 static void PaStreamOverflowCallback(pa_stream *unused, void *pThis); | 240 void* pThis); |
| 240 void PaStreamOverflowCallbackHandler(); | 241 void PaStreamReadCallbackHandler(); |
| 241 int32_t LatencyUsecs(pa_stream *stream); | 242 static void PaStreamOverflowCallback(pa_stream* unused, void* pThis); |
| 242 int32_t ReadRecordedData(const void* bufferData, size_t bufferSize); | 243 void PaStreamOverflowCallbackHandler(); |
| 243 int32_t ProcessRecordedData(int8_t *bufferData, | 244 int32_t LatencyUsecs(pa_stream* stream); |
| 244 uint32_t bufferSizeInSamples, | 245 int32_t ReadRecordedData(const void* bufferData, size_t bufferSize); |
| 245 uint32_t recDelay); | 246 int32_t ProcessRecordedData(int8_t* bufferData, |
| 247 uint32_t bufferSizeInSamples, |
| 248 uint32_t recDelay); |
| 246 | 249 |
| 247 int32_t CheckPulseAudioVersion(); | 250 int32_t CheckPulseAudioVersion(); |
| 248 int32_t InitSamplingFrequency(); | 251 int32_t InitSamplingFrequency(); |
| 249 int32_t GetDefaultDeviceInfo(bool recDevice, char* name, uint16_t& index); | 252 int32_t GetDefaultDeviceInfo(bool recDevice, char* name, uint16_t& index); |
| 250 int32_t InitPulseAudio(); | 253 int32_t InitPulseAudio(); |
| 251 int32_t TerminatePulseAudio(); | 254 int32_t TerminatePulseAudio(); |
| 252 | 255 |
| 253 void PaLock(); | 256 void PaLock(); |
| 254 void PaUnLock(); | 257 void PaUnLock(); |
| 255 | 258 |
| 256 static bool RecThreadFunc(void*); | 259 static bool RecThreadFunc(void*); |
| 257 static bool PlayThreadFunc(void*); | 260 static bool PlayThreadFunc(void*); |
| 258 bool RecThreadProcess(); | 261 bool RecThreadProcess(); |
| 259 bool PlayThreadProcess(); | 262 bool PlayThreadProcess(); |
| 260 | 263 |
| 261 AudioDeviceBuffer* _ptrAudioBuffer; | 264 AudioDeviceBuffer* _ptrAudioBuffer; |
| 262 | 265 |
| 263 rtc::CriticalSection _critSect; | 266 rtc::CriticalSection _critSect; |
| 264 EventWrapper& _timeEventRec; | 267 EventWrapper& _timeEventRec; |
| 265 EventWrapper& _timeEventPlay; | 268 EventWrapper& _timeEventPlay; |
| 266 EventWrapper& _recStartEvent; | 269 EventWrapper& _recStartEvent; |
| 267 EventWrapper& _playStartEvent; | 270 EventWrapper& _playStartEvent; |
| 268 | 271 |
| 269 // TODO(pbos): Remove unique_ptr and use directly without resetting. | 272 // TODO(pbos): Remove unique_ptr and use directly without resetting. |
| 270 std::unique_ptr<rtc::PlatformThread> _ptrThreadPlay; | 273 std::unique_ptr<rtc::PlatformThread> _ptrThreadPlay; |
| 271 std::unique_ptr<rtc::PlatformThread> _ptrThreadRec; | 274 std::unique_ptr<rtc::PlatformThread> _ptrThreadRec; |
| 272 | 275 |
| 273 AudioMixerManagerLinuxPulse _mixerManager; | 276 AudioMixerManagerLinuxPulse _mixerManager; |
| 274 | 277 |
| 275 uint16_t _inputDeviceIndex; | 278 uint16_t _inputDeviceIndex; |
| 276 uint16_t _outputDeviceIndex; | 279 uint16_t _outputDeviceIndex; |
| 277 bool _inputDeviceIsSpecified; | 280 bool _inputDeviceIsSpecified; |
| 278 bool _outputDeviceIsSpecified; | 281 bool _outputDeviceIsSpecified; |
| 279 | 282 |
| 280 int sample_rate_hz_; | 283 int sample_rate_hz_; |
| 281 uint8_t _recChannels; | 284 uint8_t _recChannels; |
| 282 uint8_t _playChannels; | 285 uint8_t _playChannels; |
| 283 | 286 |
| 284 // Stores thread ID in constructor. | 287 // Stores thread ID in constructor. |
| 285 // We can then use ThreadChecker::CalledOnValidThread() to ensure that | 288 // We can then use ThreadChecker::CalledOnValidThread() to ensure that |
| 286 // other methods are called from the same thread. | 289 // other methods are called from the same thread. |
| 287 // Currently only does RTC_DCHECK(thread_checker_.CalledOnValidThread()). | 290 // Currently only does RTC_DCHECK(thread_checker_.CalledOnValidThread()). |
| 288 rtc::ThreadChecker thread_checker_; | 291 rtc::ThreadChecker thread_checker_; |
| 289 | 292 |
| 290 bool _initialized; | 293 bool _initialized; |
| 291 bool _recording; | 294 bool _recording; |
| 292 bool _playing; | 295 bool _playing; |
| 293 bool _recIsInitialized; | 296 bool _recIsInitialized; |
| 294 bool _playIsInitialized; | 297 bool _playIsInitialized; |
| 295 bool _startRec; | 298 bool _startRec; |
| 296 bool _stopRec; | 299 bool _stopRec; |
| 297 bool _startPlay; | 300 bool _startPlay; |
| 298 bool _stopPlay; | 301 bool _stopPlay; |
| 299 bool _AGC; | 302 bool _AGC; |
| 300 bool update_speaker_volume_at_startup_; | 303 bool update_speaker_volume_at_startup_; |
| 301 | 304 |
| 302 uint32_t _sndCardPlayDelay; | 305 uint32_t _sndCardPlayDelay; |
| 303 uint32_t _sndCardRecDelay; | 306 uint32_t _sndCardRecDelay; |
| 304 | 307 |
| 305 int32_t _writeErrors; | 308 int32_t _writeErrors; |
| 306 uint16_t _playWarning; | 309 uint16_t _playWarning; |
| 307 uint16_t _playError; | 310 uint16_t _playError; |
| 308 uint16_t _recWarning; | 311 uint16_t _recWarning; |
| 309 uint16_t _recError; | 312 uint16_t _recError; |
| 310 | 313 |
| 311 uint16_t _deviceIndex; | 314 uint16_t _deviceIndex; |
| 312 int16_t _numPlayDevices; | 315 int16_t _numPlayDevices; |
| 313 int16_t _numRecDevices; | 316 int16_t _numRecDevices; |
| 314 char* _playDeviceName; | 317 char* _playDeviceName; |
| 315 char* _recDeviceName; | 318 char* _recDeviceName; |
| 316 char* _playDisplayDeviceName; | 319 char* _playDisplayDeviceName; |
| 317 char* _recDisplayDeviceName; | 320 char* _recDisplayDeviceName; |
| 318 char _paServerVersion[32]; | 321 char _paServerVersion[32]; |
| 319 | 322 |
| 320 int8_t* _playBuffer; | 323 int8_t* _playBuffer; |
| 321 size_t _playbackBufferSize; | 324 size_t _playbackBufferSize; |
| 322 size_t _playbackBufferUnused; | 325 size_t _playbackBufferUnused; |
| 323 size_t _tempBufferSpace; | 326 size_t _tempBufferSpace; |
| 324 int8_t* _recBuffer; | 327 int8_t* _recBuffer; |
| 325 size_t _recordBufferSize; | 328 size_t _recordBufferSize; |
| 326 size_t _recordBufferUsed; | 329 size_t _recordBufferUsed; |
| 327 const void* _tempSampleData; | 330 const void* _tempSampleData; |
| 328 size_t _tempSampleDataSize; | 331 size_t _tempSampleDataSize; |
| 329 int32_t _configuredLatencyPlay; | 332 int32_t _configuredLatencyPlay; |
| 330 int32_t _configuredLatencyRec; | 333 int32_t _configuredLatencyRec; |
| 331 | 334 |
| 332 // PulseAudio | 335 // PulseAudio |
| 333 uint16_t _paDeviceIndex; | 336 uint16_t _paDeviceIndex; |
| 334 bool _paStateChanged; | 337 bool _paStateChanged; |
| 335 | 338 |
| 336 pa_threaded_mainloop* _paMainloop; | 339 pa_threaded_mainloop* _paMainloop; |
| 337 pa_mainloop_api* _paMainloopApi; | 340 pa_mainloop_api* _paMainloopApi; |
| 338 pa_context* _paContext; | 341 pa_context* _paContext; |
| 339 | 342 |
| 340 pa_stream* _recStream; | 343 pa_stream* _recStream; |
| 341 pa_stream* _playStream; | 344 pa_stream* _playStream; |
| 342 uint32_t _recStreamFlags; | 345 uint32_t _recStreamFlags; |
| 343 uint32_t _playStreamFlags; | 346 uint32_t _playStreamFlags; |
| 344 pa_buffer_attr _playBufferAttr; | 347 pa_buffer_attr _playBufferAttr; |
| 345 pa_buffer_attr _recBufferAttr; | 348 pa_buffer_attr _recBufferAttr; |
| 346 | 349 |
| 347 char _oldKeyState[32]; | 350 char _oldKeyState[32]; |
| 348 Display* _XDisplay; | 351 Display* _XDisplay; |
| 349 }; | 352 }; |
| 350 | 353 |
| 351 } | 354 } |
| 352 | 355 |
| 353 #endif // MODULES_AUDIO_DEVICE_MAIN_SOURCE_LINUX_AUDIO_DEVICE_PULSE_LINUX_H_ | 356 #endif // MODULES_AUDIO_DEVICE_MAIN_SOURCE_LINUX_AUDIO_DEVICE_PULSE_LINUX_H_ |
| OLD | NEW |