Remove unnecessary checks from AudioDeviceWindowsCore::CoreAudioIsSupported


This removes some code in the AudioDeviceWindowsCore::CoreAudioIsSupported function that was checking that every audio input and output device was functional. There are legitimate cases where some, or all, audio devices may not be accessible, and that was causing CoreAudioIsSupported to return false.

If CoreAudioIsSupported returns false, a subsequent RTC_CHECK call fails, which causes the entire app to exit.

After this change, the CoreAudioIsSupported() function simply checks if the Core Audio APIs are supported and no longer tries to do extra stuff unrelated to checking if the APIs are supported.

Note that Core Audio is actually supported in all versions of Windows after Windows XP. There were log messages in the code saying that if CoreAudioIsSupported() returns false, WebRTC will use the Wave Audio APIs instead. But this is no longer the case. The Wave Audio APIs would only be needed for Windows XP, and this code appears to have already been removed from WebRTC.
It is tempting to simply make CoreAudioIsSupported() do a "return true;" but for now I only removed the part of the logging messages that mentioned the Wave Audio APIs.

I understand that there is a new Audio Device Module (ADM) called WindowsCoreAudio2, which is now recommended for use by apps. Apps are supposed to instantiate WindowsCoreAudio2 and pass it in to WebRTC. When the app supplies its own ADM, CoreAudioIsSupported() does not get invoked, which avoids the bug. To help make it clearer that using WindowsCoreAudio2 is an acceptable solution, I am removing a comment that says that kWindowsCoreAudio2 is "experimental".

Bug: webrtc:11081
Change-Id: I7ed1684a276799f4c83006b45629e48814f0b18b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/161463
Commit-Queue: Henrik Andreassson <henrika@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30025}
diff --git a/modules/audio_device/include/audio_device.h b/modules/audio_device/include/audio_device.h
index 42ba203..f82029e 100644
--- a/modules/audio_device/include/audio_device.h
+++ b/modules/audio_device/include/audio_device.h
@@ -25,7 +25,7 @@
   enum AudioLayer {
     kPlatformDefaultAudio = 0,
     kWindowsCoreAudio,
-    kWindowsCoreAudio2,  // experimental
+    kWindowsCoreAudio2,
     kLinuxAlsaAudio,
     kLinuxPulseAudio,
     kAndroidJavaAudio,
diff --git a/modules/audio_device/win/audio_device_core_win.cc b/modules/audio_device/win/audio_device_core_win.cc
index f95e1f0..fbcd7fc 100644
--- a/modules/audio_device/win/audio_device_core_win.cc
+++ b/modules/audio_device/win/audio_device_core_win.cc
@@ -214,8 +214,7 @@
   BOOL isVistaRTMorXP = VerifyVersionInfo(&osvi, dwTypeMask, dwlConditionMask);
   if (isVistaRTMorXP != 0) {
     RTC_LOG(LS_VERBOSE)
-        << "*** Windows Core Audio is only supported on Vista SP1 or later"
-        << " => will revert to the Wave API ***";
+        << "*** Windows Core Audio is only supported on Vista SP1 or later";
     return false;
   }
 
@@ -302,57 +301,20 @@
 
   // 4) Verify that we can create and initialize our Core Audio class.
   //
-  // Also, perform a limited "API test" to ensure that Core Audio is supported
-  // for all devices.
-  //
   if (MMDeviceIsAvailable) {
     coreAudioIsSupported = false;
 
-    AudioDeviceWindowsCore* p = new AudioDeviceWindowsCore();
+    AudioDeviceWindowsCore* p = new (std::nothrow) AudioDeviceWindowsCore();
     if (p == NULL) {
       return false;
     }
 
     int ok(0);
-    int temp_ok(0);
-    bool available(false);
 
     if (p->Init() != InitStatus::OK) {
       ok |= -1;
     }
 
-    int16_t numDevsRec = p->RecordingDevices();
-    for (uint16_t i = 0; i < numDevsRec; i++) {
-      ok |= p->SetRecordingDevice(i);
-      temp_ok = p->RecordingIsAvailable(available);
-      ok |= temp_ok;
-      ok |= (available == false);
-      if (available) {
-        ok |= p->InitMicrophone();
-      }
-      if (ok) {
-        RTC_LOG(LS_WARNING)
-            << "AudioDeviceWindowsCore::CoreAudioIsSupported()"
-            << " Failed to use Core Audio Recording for device id=" << i;
-      }
-    }
-
-    int16_t numDevsPlay = p->PlayoutDevices();
-    for (uint16_t i = 0; i < numDevsPlay; i++) {
-      ok |= p->SetPlayoutDevice(i);
-      temp_ok = p->PlayoutIsAvailable(available);
-      ok |= temp_ok;
-      ok |= (available == false);
-      if (available) {
-        ok |= p->InitSpeaker();
-      }
-      if (ok) {
-        RTC_LOG(LS_WARNING)
-            << "AudioDeviceWindowsCore::CoreAudioIsSupported()"
-            << " Failed to use Core Audio Playout for device id=" << i;
-      }
-    }
-
     ok |= p->Terminate();
 
     if (ok == 0) {
@@ -365,8 +327,7 @@
   if (coreAudioIsSupported) {
     RTC_LOG(LS_VERBOSE) << "*** Windows Core Audio is supported ***";
   } else {
-    RTC_LOG(LS_VERBOSE) << "*** Windows Core Audio is NOT supported"
-                        << " => will revert to the Wave API ***";
+    RTC_LOG(LS_VERBOSE) << "*** Windows Core Audio is NOT supported";
   }
 
   return (coreAudioIsSupported);