Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(329)

Unified Diff: webrtc/modules/audio_device/mac/audio_device_mac.cc

Issue 3009093002: Fixes issue in ADM on Mac OSX when audio is renegotiated
Patch Set: nit Created 3 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/audio_device/audio_device_unittest.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/modules/audio_device/mac/audio_device_mac.cc
diff --git a/webrtc/modules/audio_device/mac/audio_device_mac.cc b/webrtc/modules/audio_device/mac/audio_device_mac.cc
index 0de5009ba3dd879fef3223ed81faab67dfa69f65..95e83c41a0248a8ee2c697f602e2c44663c3a1c1 100644
--- a/webrtc/modules/audio_device/mac/audio_device_mac.cc
+++ b/webrtc/modules/audio_device/mac/audio_device_mac.cc
@@ -971,6 +971,7 @@ int32_t AudioDeviceMac::RecordingIsAvailable(bool& available) {
}
int32_t AudioDeviceMac::InitPlayout() {
+ LOG(LS_INFO) << "InitPlayout";
rtc::CritScope lock(&_critSect);
if (_playing) {
@@ -1106,6 +1107,7 @@ int32_t AudioDeviceMac::InitPlayout() {
}
int32_t AudioDeviceMac::InitRecording() {
+ LOG(LS_INFO) << "InitRecording";
rtc::CritScope lock(&_critSect);
if (_recording) {
@@ -1301,6 +1303,7 @@ int32_t AudioDeviceMac::InitRecording() {
}
int32_t AudioDeviceMac::StartRecording() {
+ LOG(LS_INFO) << "StartRecording";
rtc::CritScope lock(&_critSect);
if (!_recIsInitialized) {
@@ -1337,6 +1340,7 @@ int32_t AudioDeviceMac::StartRecording() {
}
int32_t AudioDeviceMac::StopRecording() {
+ LOG(LS_INFO) << "StopRecording";
rtc::CritScope lock(&_critSect);
if (!_recIsInitialized) {
@@ -1344,11 +1348,10 @@ int32_t AudioDeviceMac::StopRecording() {
}
OSStatus err = noErr;
-
- // Stop device
int32_t captureDeviceIsAlive = AtomicGet32(&_captureDeviceIsAlive);
- if (_twoDevices) {
- if (_recording && captureDeviceIsAlive == 1) {
+ if (_twoDevices && captureDeviceIsAlive == 1) {
+ // Recording side uses its own dedicated device and IOProc.
+ if (_recording) {
_recording = false;
_doStopRec = true; // Signal to io proc to stop audio device
_critSect.Leave(); // Cannot be under lock, risk of deadlock
@@ -1357,14 +1360,17 @@ int32_t AudioDeviceMac::StopRecording() {
LOG(LS_WARNING)
<< "Timed out stopping the capture IOProc."
<< "We may have failed to detect a device removal.";
-
WEBRTC_CA_LOG_WARN(AudioDeviceStop(_inputDeviceID, _inDeviceIOProcID));
WEBRTC_CA_LOG_WARN(
- AudioDeviceDestroyIOProcID(_inputDeviceID, _inDeviceIOProcID));
+ AudioDeviceDestroyIOProcID(_inputDeviceID, _inDeviceIOProcID));
}
_critSect.Enter();
_doStopRec = false;
- LOG(LS_VERBOSE) << "Recording stopped";
+ LOG(LS_INFO) << "Recording stopped (input device)";
+ } else if (_recIsInitialized) {
+ WEBRTC_CA_LOG_WARN(
+ AudioDeviceDestroyIOProcID(_inputDeviceID, _inDeviceIOProcID));
+ LOG(LS_INFO) << "Recording uninitialized (input device)";
}
} else {
// We signal a stop for a shared device even when rendering has
@@ -1383,7 +1389,6 @@ int32_t AudioDeviceMac::StopRecording() {
LOG(LS_WARNING)
<< "Timed out stopping the shared IOProc."
<< "We may have failed to detect a device removal.";
-
// We assume rendering on a shared device has stopped as well if
// the IOProc times out.
WEBRTC_CA_LOG_WARN(AudioDeviceStop(_outputDeviceID, _deviceIOProcID));
@@ -1392,7 +1397,11 @@ int32_t AudioDeviceMac::StopRecording() {
}
_critSect.Enter();
_doStop = false;
- LOG(LS_VERBOSE) << "Recording stopped (shared)";
+ LOG(LS_INFO) << "Recording stopped (shared device)";
+ } else if (_recIsInitialized && !_playing && !_playIsInitialized) {
+ WEBRTC_CA_LOG_WARN(
+ AudioDeviceDestroyIOProcID(_outputDeviceID, _deviceIOProcID));
+ LOG(LS_INFO) << "Recording uninitialized (shared device)";
}
}
@@ -1437,6 +1446,7 @@ bool AudioDeviceMac::PlayoutIsInitialized() const {
}
int32_t AudioDeviceMac::StartPlayout() {
+ LOG(LS_INFO) << "StartPlayout";
rtc::CritScope lock(&_critSect);
if (!_playIsInitialized) {
@@ -1463,6 +1473,7 @@ int32_t AudioDeviceMac::StartPlayout() {
}
int32_t AudioDeviceMac::StopPlayout() {
+ LOG(LS_INFO) << "StopPlayout";
rtc::CritScope lock(&_critSect);
if (!_playIsInitialized) {
@@ -1470,7 +1481,6 @@ int32_t AudioDeviceMac::StopPlayout() {
}
OSStatus err = noErr;
-
int32_t renderDeviceIsAlive = AtomicGet32(&_renderDeviceIsAlive);
if (_playing && renderDeviceIsAlive == 1) {
// We signal a stop for a shared device even when capturing has not
@@ -1497,7 +1507,15 @@ int32_t AudioDeviceMac::StopPlayout() {
}
_critSect.Enter();
_doStop = false;
- LOG(LS_VERBOSE) << "Playout stopped";
+ LOG(LS_INFO) << "Playout stopped";
+ } else if (_twoDevices && _playIsInitialized) {
+ WEBRTC_CA_LOG_WARN(
+ AudioDeviceDestroyIOProcID(_outputDeviceID, _deviceIOProcID));
+ LOG(LS_INFO) << "Playout uninitialized (output device)";
+ } else if (!_twoDevices && _playIsInitialized && !_recIsInitialized) {
+ WEBRTC_CA_LOG_WARN(
+ AudioDeviceDestroyIOProcID(_outputDeviceID, _deviceIOProcID));
+ LOG(LS_INFO) << "Playout uninitialized (shared device)";
}
// Setting this signal will allow the worker thread to be stopped.
@@ -1840,9 +1858,9 @@ int32_t AudioDeviceMac::InitDevice(const uint16_t userDeviceIndex,
0, NULL, &size, devManf));
if (isInput) {
- LOG(LS_VERBOSE) << "Input device: " << devManf << " " << devName;
+ LOG(LS_INFO) << "Input device: " << devManf << " " << devName;
} else {
- LOG(LS_VERBOSE) << "Output device: " << devManf << " " << devName;
+ LOG(LS_INFO) << "Output device: " << devManf << " " << devName;
}
return 0;
« no previous file with comments | « webrtc/modules/audio_device/audio_device_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698