| 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 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 | 115 |
| 116 // ---------------------------------------------------------------------------- | 116 // ---------------------------------------------------------------------------- |
| 117 // AudioDeviceModuleImpl - ctor | 117 // AudioDeviceModuleImpl - ctor |
| 118 // ---------------------------------------------------------------------------- | 118 // ---------------------------------------------------------------------------- |
| 119 | 119 |
| 120 AudioDeviceModuleImpl::AudioDeviceModuleImpl(const int32_t id, | 120 AudioDeviceModuleImpl::AudioDeviceModuleImpl(const int32_t id, |
| 121 const AudioLayer audioLayer) | 121 const AudioLayer audioLayer) |
| 122 : _critSect(*CriticalSectionWrapper::CreateCriticalSection()), | 122 : _critSect(*CriticalSectionWrapper::CreateCriticalSection()), |
| 123 _critSectEventCb(*CriticalSectionWrapper::CreateCriticalSection()), | 123 _critSectEventCb(*CriticalSectionWrapper::CreateCriticalSection()), |
| 124 _critSectAudioCb(*CriticalSectionWrapper::CreateCriticalSection()), | 124 _critSectAudioCb(*CriticalSectionWrapper::CreateCriticalSection()), |
| 125 _ptrCbAudioDeviceObserver(NULL), | 125 _ptrCbAudioDeviceObserver(nullptr), |
| 126 _ptrAudioDevice(NULL), | 126 _ptrAudioDevice(nullptr), |
| 127 _id(id), | 127 _id(id), |
| 128 _platformAudioLayer(audioLayer), | 128 _platformAudioLayer(audioLayer), |
| 129 _lastProcessTime(rtc::TimeMillis()), | 129 _lastProcessTime(rtc::TimeMillis()), |
| 130 _platformType(kPlatformNotSupported), | 130 _platformType(kPlatformNotSupported), |
| 131 _initialized(false), | 131 _initialized(false), |
| 132 _lastError(kAdmErrNone) { | 132 _lastError(kAdmErrNone) { |
| 133 LOG(INFO) << __FUNCTION__; | 133 LOG(INFO) << __FUNCTION__; |
| 134 } | 134 } |
| 135 | 135 |
| 136 // ---------------------------------------------------------------------------- | 136 // ---------------------------------------------------------------------------- |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 return 0; | 174 return 0; |
| 175 } | 175 } |
| 176 | 176 |
| 177 // ---------------------------------------------------------------------------- | 177 // ---------------------------------------------------------------------------- |
| 178 // CreatePlatformSpecificObjects | 178 // CreatePlatformSpecificObjects |
| 179 // ---------------------------------------------------------------------------- | 179 // ---------------------------------------------------------------------------- |
| 180 | 180 |
| 181 int32_t AudioDeviceModuleImpl::CreatePlatformSpecificObjects() { | 181 int32_t AudioDeviceModuleImpl::CreatePlatformSpecificObjects() { |
| 182 LOG(INFO) << __FUNCTION__; | 182 LOG(INFO) << __FUNCTION__; |
| 183 | 183 |
| 184 AudioDeviceGeneric* ptrAudioDevice(NULL); | 184 AudioDeviceGeneric* ptrAudioDevice(nullptr); |
| 185 | 185 |
| 186 #if defined(WEBRTC_DUMMY_AUDIO_BUILD) | 186 #if defined(WEBRTC_DUMMY_AUDIO_BUILD) |
| 187 ptrAudioDevice = new AudioDeviceDummy(Id()); | 187 ptrAudioDevice = new AudioDeviceDummy(Id()); |
| 188 LOG(INFO) << "Dummy Audio APIs will be utilized"; | 188 LOG(INFO) << "Dummy Audio APIs will be utilized"; |
| 189 #elif defined(WEBRTC_DUMMY_FILE_DEVICES) | 189 #elif defined(WEBRTC_DUMMY_FILE_DEVICES) |
| 190 ptrAudioDevice = FileAudioDeviceFactory::CreateFileAudioDevice(Id()); | 190 ptrAudioDevice = FileAudioDeviceFactory::CreateFileAudioDevice(Id()); |
| 191 if (ptrAudioDevice) { | 191 if (ptrAudioDevice) { |
| 192 LOG(INFO) << "Will use file-playing dummy device."; | 192 LOG(INFO) << "Will use file-playing dummy device."; |
| 193 } else { | 193 } else { |
| 194 // Create a dummy device instead. | 194 // Create a dummy device instead. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 216 (audioLayer == kPlatformDefaultAudio)) { | 216 (audioLayer == kPlatformDefaultAudio)) { |
| 217 LOG(INFO) << "attempting to use the Windows Core Audio APIs..."; | 217 LOG(INFO) << "attempting to use the Windows Core Audio APIs..."; |
| 218 | 218 |
| 219 if (AudioDeviceWindowsCore::CoreAudioIsSupported()) { | 219 if (AudioDeviceWindowsCore::CoreAudioIsSupported()) { |
| 220 // create *Windows Core Audio* implementation | 220 // create *Windows Core Audio* implementation |
| 221 ptrAudioDevice = new AudioDeviceWindowsCore(Id()); | 221 ptrAudioDevice = new AudioDeviceWindowsCore(Id()); |
| 222 LOG(INFO) << "Windows Core Audio APIs will be utilized"; | 222 LOG(INFO) << "Windows Core Audio APIs will be utilized"; |
| 223 } else { | 223 } else { |
| 224 // create *Windows Wave Audio* implementation | 224 // create *Windows Wave Audio* implementation |
| 225 ptrAudioDevice = new AudioDeviceWindowsWave(Id()); | 225 ptrAudioDevice = new AudioDeviceWindowsWave(Id()); |
| 226 if (ptrAudioDevice != NULL) { | 226 if (ptrAudioDevice != nullptr) { |
| 227 // Core Audio was not supported => revert to Windows Wave instead | 227 // Core Audio was not supported => revert to Windows Wave instead |
| 228 _platformAudioLayer = | 228 _platformAudioLayer = |
| 229 kWindowsWaveAudio; // modify the state set at construction | 229 kWindowsWaveAudio; // modify the state set at construction |
| 230 LOG(WARNING) << "Windows Core Audio is *not* supported => Wave APIs " | 230 LOG(WARNING) << "Windows Core Audio is *not* supported => Wave APIs " |
| 231 "will be utilized instead"; | 231 "will be utilized instead"; |
| 232 } | 232 } |
| 233 } | 233 } |
| 234 } | 234 } |
| 235 #endif // defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) | 235 #endif // defined(WEBRTC_WINDOWS_CORE_AUDIO_BUILD) |
| 236 #endif // #if defined(_WIN32) | 236 #endif // #if defined(_WIN32) |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 AudioDeviceLinuxPulse* pulseDevice = new AudioDeviceLinuxPulse(Id()); | 288 AudioDeviceLinuxPulse* pulseDevice = new AudioDeviceLinuxPulse(Id()); |
| 289 if (pulseDevice->Init() == AudioDeviceGeneric::InitStatus::OK) { | 289 if (pulseDevice->Init() == AudioDeviceGeneric::InitStatus::OK) { |
| 290 ptrAudioDevice = pulseDevice; | 290 ptrAudioDevice = pulseDevice; |
| 291 LOG(INFO) << "Linux PulseAudio APIs will be utilized"; | 291 LOG(INFO) << "Linux PulseAudio APIs will be utilized"; |
| 292 } else { | 292 } else { |
| 293 delete pulseDevice; | 293 delete pulseDevice; |
| 294 #endif | 294 #endif |
| 295 #if defined(LINUX_ALSA) | 295 #if defined(LINUX_ALSA) |
| 296 // create *Linux ALSA Audio* implementation | 296 // create *Linux ALSA Audio* implementation |
| 297 ptrAudioDevice = new AudioDeviceLinuxALSA(Id()); | 297 ptrAudioDevice = new AudioDeviceLinuxALSA(Id()); |
| 298 if (ptrAudioDevice != NULL) { | 298 if (ptrAudioDevice != nullptr) { |
| 299 // Pulse Audio was not supported => revert to ALSA instead | 299 // Pulse Audio was not supported => revert to ALSA instead |
| 300 _platformAudioLayer = | 300 _platformAudioLayer = |
| 301 kLinuxAlsaAudio; // modify the state set at construction | 301 kLinuxAlsaAudio; // modify the state set at construction |
| 302 LOG(WARNING) << "Linux PulseAudio is *not* supported => ALSA APIs will " | 302 LOG(WARNING) << "Linux PulseAudio is *not* supported => ALSA APIs will " |
| 303 "be utilized instead"; | 303 "be utilized instead"; |
| 304 } | 304 } |
| 305 #endif | 305 #endif |
| 306 #if defined(LINUX_PULSE) | 306 #if defined(LINUX_PULSE) |
| 307 } | 307 } |
| 308 #endif | 308 #endif |
| (...skipping 30 matching lines...) Expand all Loading... |
| 339 // Available for all platforms | 339 // Available for all platforms |
| 340 // | 340 // |
| 341 if (audioLayer == kDummyAudio) { | 341 if (audioLayer == kDummyAudio) { |
| 342 // Create *Dummy Audio* implementation | 342 // Create *Dummy Audio* implementation |
| 343 assert(!ptrAudioDevice); | 343 assert(!ptrAudioDevice); |
| 344 ptrAudioDevice = new AudioDeviceDummy(Id()); | 344 ptrAudioDevice = new AudioDeviceDummy(Id()); |
| 345 LOG(INFO) << "Dummy Audio APIs will be utilized"; | 345 LOG(INFO) << "Dummy Audio APIs will be utilized"; |
| 346 } | 346 } |
| 347 #endif // if defined(WEBRTC_DUMMY_AUDIO_BUILD) | 347 #endif // if defined(WEBRTC_DUMMY_AUDIO_BUILD) |
| 348 | 348 |
| 349 if (ptrAudioDevice == NULL) { | 349 if (ptrAudioDevice == nullptr) { |
| 350 LOG(LERROR) | 350 LOG(LERROR) |
| 351 << "unable to create the platform specific audio device implementation"; | 351 << "unable to create the platform specific audio device implementation"; |
| 352 return -1; | 352 return -1; |
| 353 } | 353 } |
| 354 | 354 |
| 355 // Store valid output pointers | 355 // Store valid output pointers |
| 356 // | 356 // |
| 357 _ptrAudioDevice = ptrAudioDevice; | 357 _ptrAudioDevice = ptrAudioDevice; |
| 358 | 358 |
| 359 return 0; | 359 return 0; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 377 | 377 |
| 378 // ---------------------------------------------------------------------------- | 378 // ---------------------------------------------------------------------------- |
| 379 // ~AudioDeviceModuleImpl - dtor | 379 // ~AudioDeviceModuleImpl - dtor |
| 380 // ---------------------------------------------------------------------------- | 380 // ---------------------------------------------------------------------------- |
| 381 | 381 |
| 382 AudioDeviceModuleImpl::~AudioDeviceModuleImpl() { | 382 AudioDeviceModuleImpl::~AudioDeviceModuleImpl() { |
| 383 LOG(INFO) << __FUNCTION__; | 383 LOG(INFO) << __FUNCTION__; |
| 384 | 384 |
| 385 if (_ptrAudioDevice) { | 385 if (_ptrAudioDevice) { |
| 386 delete _ptrAudioDevice; | 386 delete _ptrAudioDevice; |
| 387 _ptrAudioDevice = NULL; | 387 _ptrAudioDevice = nullptr; |
| 388 } | 388 } |
| 389 | 389 |
| 390 delete &_critSect; | 390 delete &_critSect; |
| 391 delete &_critSectEventCb; | 391 delete &_critSectEventCb; |
| 392 delete &_critSectAudioCb; | 392 delete &_critSectAudioCb; |
| 393 } | 393 } |
| 394 | 394 |
| 395 // ============================================================================ | 395 // ============================================================================ |
| 396 // Module | 396 // Module |
| 397 // ============================================================================ | 397 // ============================================================================ |
| (...skipping 847 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1245 // PlayoutDeviceName | 1245 // PlayoutDeviceName |
| 1246 // ---------------------------------------------------------------------------- | 1246 // ---------------------------------------------------------------------------- |
| 1247 | 1247 |
| 1248 int32_t AudioDeviceModuleImpl::PlayoutDeviceName( | 1248 int32_t AudioDeviceModuleImpl::PlayoutDeviceName( |
| 1249 uint16_t index, | 1249 uint16_t index, |
| 1250 char name[kAdmMaxDeviceNameSize], | 1250 char name[kAdmMaxDeviceNameSize], |
| 1251 char guid[kAdmMaxGuidSize]) { | 1251 char guid[kAdmMaxGuidSize]) { |
| 1252 LOG(INFO) << __FUNCTION__ << "(" << index << ", ...)"; | 1252 LOG(INFO) << __FUNCTION__ << "(" << index << ", ...)"; |
| 1253 CHECK_INITIALIZED(); | 1253 CHECK_INITIALIZED(); |
| 1254 | 1254 |
| 1255 if (name == NULL) { | 1255 if (name == nullptr) { |
| 1256 _lastError = kAdmErrArgument; | 1256 _lastError = kAdmErrArgument; |
| 1257 return -1; | 1257 return -1; |
| 1258 } | 1258 } |
| 1259 | 1259 |
| 1260 if (_ptrAudioDevice->PlayoutDeviceName(index, name, guid) == -1) { | 1260 if (_ptrAudioDevice->PlayoutDeviceName(index, name, guid) == -1) { |
| 1261 return -1; | 1261 return -1; |
| 1262 } | 1262 } |
| 1263 | 1263 |
| 1264 if (name != NULL) { | 1264 if (name != nullptr) { |
| 1265 LOG(INFO) << "output: name = " << name; | 1265 LOG(INFO) << "output: name = " << name; |
| 1266 } | 1266 } |
| 1267 if (guid != NULL) { | 1267 if (guid != nullptr) { |
| 1268 LOG(INFO) << "output: guid = " << guid; | 1268 LOG(INFO) << "output: guid = " << guid; |
| 1269 } | 1269 } |
| 1270 | 1270 |
| 1271 return (0); | 1271 return (0); |
| 1272 } | 1272 } |
| 1273 | 1273 |
| 1274 // ---------------------------------------------------------------------------- | 1274 // ---------------------------------------------------------------------------- |
| 1275 // RecordingDeviceName | 1275 // RecordingDeviceName |
| 1276 // ---------------------------------------------------------------------------- | 1276 // ---------------------------------------------------------------------------- |
| 1277 | 1277 |
| 1278 int32_t AudioDeviceModuleImpl::RecordingDeviceName( | 1278 int32_t AudioDeviceModuleImpl::RecordingDeviceName( |
| 1279 uint16_t index, | 1279 uint16_t index, |
| 1280 char name[kAdmMaxDeviceNameSize], | 1280 char name[kAdmMaxDeviceNameSize], |
| 1281 char guid[kAdmMaxGuidSize]) { | 1281 char guid[kAdmMaxGuidSize]) { |
| 1282 LOG(INFO) << __FUNCTION__ << "(" << index << ", ...)"; | 1282 LOG(INFO) << __FUNCTION__ << "(" << index << ", ...)"; |
| 1283 CHECK_INITIALIZED(); | 1283 CHECK_INITIALIZED(); |
| 1284 | 1284 |
| 1285 if (name == NULL) { | 1285 if (name == nullptr) { |
| 1286 _lastError = kAdmErrArgument; | 1286 _lastError = kAdmErrArgument; |
| 1287 return -1; | 1287 return -1; |
| 1288 } | 1288 } |
| 1289 | 1289 |
| 1290 if (_ptrAudioDevice->RecordingDeviceName(index, name, guid) == -1) { | 1290 if (_ptrAudioDevice->RecordingDeviceName(index, name, guid) == -1) { |
| 1291 return -1; | 1291 return -1; |
| 1292 } | 1292 } |
| 1293 | 1293 |
| 1294 if (name != NULL) { | 1294 if (name != nullptr) { |
| 1295 LOG(INFO) << "output: name = " << name; | 1295 LOG(INFO) << "output: name = " << name; |
| 1296 } | 1296 } |
| 1297 if (guid != NULL) { | 1297 if (guid != nullptr) { |
| 1298 LOG(INFO) << "output: guid = " << guid; | 1298 LOG(INFO) << "output: guid = " << guid; |
| 1299 } | 1299 } |
| 1300 | 1300 |
| 1301 return (0); | 1301 return (0); |
| 1302 } | 1302 } |
| 1303 | 1303 |
| 1304 // ---------------------------------------------------------------------------- | 1304 // ---------------------------------------------------------------------------- |
| 1305 // RecordingDevices | 1305 // RecordingDevices |
| 1306 // ---------------------------------------------------------------------------- | 1306 // ---------------------------------------------------------------------------- |
| 1307 | 1307 |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1501 | 1501 |
| 1502 // ---------------------------------------------------------------------------- | 1502 // ---------------------------------------------------------------------------- |
| 1503 // StartRawInputFileRecording | 1503 // StartRawInputFileRecording |
| 1504 // ---------------------------------------------------------------------------- | 1504 // ---------------------------------------------------------------------------- |
| 1505 | 1505 |
| 1506 int32_t AudioDeviceModuleImpl::StartRawInputFileRecording( | 1506 int32_t AudioDeviceModuleImpl::StartRawInputFileRecording( |
| 1507 const char pcmFileNameUTF8[kAdmMaxFileNameSize]) { | 1507 const char pcmFileNameUTF8[kAdmMaxFileNameSize]) { |
| 1508 LOG(INFO) << __FUNCTION__; | 1508 LOG(INFO) << __FUNCTION__; |
| 1509 CHECK_INITIALIZED(); | 1509 CHECK_INITIALIZED(); |
| 1510 | 1510 |
| 1511 if (NULL == pcmFileNameUTF8) { | 1511 if (nullptr == pcmFileNameUTF8) { |
| 1512 return -1; | 1512 return -1; |
| 1513 } | 1513 } |
| 1514 | 1514 |
| 1515 return (_audioDeviceBuffer.StartInputFileRecording(pcmFileNameUTF8)); | 1515 return (_audioDeviceBuffer.StartInputFileRecording(pcmFileNameUTF8)); |
| 1516 } | 1516 } |
| 1517 | 1517 |
| 1518 // ---------------------------------------------------------------------------- | 1518 // ---------------------------------------------------------------------------- |
| 1519 // StopRawInputFileRecording | 1519 // StopRawInputFileRecording |
| 1520 // ---------------------------------------------------------------------------- | 1520 // ---------------------------------------------------------------------------- |
| 1521 | 1521 |
| 1522 int32_t AudioDeviceModuleImpl::StopRawInputFileRecording() { | 1522 int32_t AudioDeviceModuleImpl::StopRawInputFileRecording() { |
| 1523 LOG(INFO) << __FUNCTION__; | 1523 LOG(INFO) << __FUNCTION__; |
| 1524 CHECK_INITIALIZED(); | 1524 CHECK_INITIALIZED(); |
| 1525 | 1525 |
| 1526 return (_audioDeviceBuffer.StopInputFileRecording()); | 1526 return (_audioDeviceBuffer.StopInputFileRecording()); |
| 1527 } | 1527 } |
| 1528 | 1528 |
| 1529 // ---------------------------------------------------------------------------- | 1529 // ---------------------------------------------------------------------------- |
| 1530 // StartRawOutputFileRecording | 1530 // StartRawOutputFileRecording |
| 1531 // ---------------------------------------------------------------------------- | 1531 // ---------------------------------------------------------------------------- |
| 1532 | 1532 |
| 1533 int32_t AudioDeviceModuleImpl::StartRawOutputFileRecording( | 1533 int32_t AudioDeviceModuleImpl::StartRawOutputFileRecording( |
| 1534 const char pcmFileNameUTF8[kAdmMaxFileNameSize]) { | 1534 const char pcmFileNameUTF8[kAdmMaxFileNameSize]) { |
| 1535 LOG(INFO) << __FUNCTION__; | 1535 LOG(INFO) << __FUNCTION__; |
| 1536 CHECK_INITIALIZED(); | 1536 CHECK_INITIALIZED(); |
| 1537 | 1537 |
| 1538 if (NULL == pcmFileNameUTF8) { | 1538 if (nullptr == pcmFileNameUTF8) { |
| 1539 return -1; | 1539 return -1; |
| 1540 } | 1540 } |
| 1541 | 1541 |
| 1542 return (_audioDeviceBuffer.StartOutputFileRecording(pcmFileNameUTF8)); | 1542 return (_audioDeviceBuffer.StartOutputFileRecording(pcmFileNameUTF8)); |
| 1543 } | 1543 } |
| 1544 | 1544 |
| 1545 // ---------------------------------------------------------------------------- | 1545 // ---------------------------------------------------------------------------- |
| 1546 // StopRawOutputFileRecording | 1546 // StopRawOutputFileRecording |
| 1547 // ---------------------------------------------------------------------------- | 1547 // ---------------------------------------------------------------------------- |
| 1548 | 1548 |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1871 // PlatformAudioLayer | 1871 // PlatformAudioLayer |
| 1872 // ---------------------------------------------------------------------------- | 1872 // ---------------------------------------------------------------------------- |
| 1873 | 1873 |
| 1874 AudioDeviceModule::AudioLayer AudioDeviceModuleImpl::PlatformAudioLayer() | 1874 AudioDeviceModule::AudioLayer AudioDeviceModuleImpl::PlatformAudioLayer() |
| 1875 const { | 1875 const { |
| 1876 LOG(INFO) << __FUNCTION__; | 1876 LOG(INFO) << __FUNCTION__; |
| 1877 return _platformAudioLayer; | 1877 return _platformAudioLayer; |
| 1878 } | 1878 } |
| 1879 | 1879 |
| 1880 } // namespace webrtc | 1880 } // namespace webrtc |
| OLD | NEW |