[Mac/iOS] Increase the audio buffer size when audio capture is on but web audio is...
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Aug 2017 16:11:07 +0000 (16:11 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 17 Aug 2017 16:11:07 +0000 (16:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=175631

Patch by Youenn Fablet <youenn@apple.com> on 2017-08-17
Reviewed by Eric Carlson.

* platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
(PlatformMediaSessionManager::updateSessionState): Change value from 128 to the equivalent of 20ms when audio capture happens but not web audio.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@220859 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/audio/cocoa/MediaSessionManagerCocoa.cpp

index c927c996030176137eff58f571370943ba4461bf..4afcd425056dc80cdf9d200611970a3fa32289de 100644 (file)
@@ -1,3 +1,13 @@
+2017-08-17  Youenn Fablet  <youenn@apple.com>
+
+        [Mac/iOS] Increase the audio buffer size when audio capture is on but web audio is not used
+        https://bugs.webkit.org/show_bug.cgi?id=175631
+
+        Reviewed by Eric Carlson.
+
+        * platform/audio/cocoa/MediaSessionManagerCocoa.cpp:
+        (PlatformMediaSessionManager::updateSessionState): Change value from 128 to the equivalent of 20ms when audio capture happens but not web audio.
+
 2017-08-17  Antti Koivisto  <antti@apple.com>
 
         RenderListItem - Avoid render tree mutation during layout
index b527c55fbb47ad1cf63347ab9575c7a02fb77570..f2a3ead86ca1733ad61b5b3d42ec9f28c8bd7ca7 100644 (file)
@@ -42,8 +42,12 @@ void PlatformMediaSessionManager::updateSessionState()
 {
     LOG(Media, "PlatformMediaSessionManager::updateSessionState() - types: Video(%d), Audio(%d), WebAudio(%d)", count(PlatformMediaSession::Video), count(PlatformMediaSession::Audio), count(PlatformMediaSession::WebAudio));
 
-    if (has(PlatformMediaSession::WebAudio) || has(PlatformMediaSession::MediaStreamCapturingAudio))
+    if (has(PlatformMediaSession::WebAudio))
         AudioSession::sharedSession().setPreferredBufferSize(kWebAudioBufferSize);
+    // In case of audio capture, we want to grab 20 ms chunks to limit the latency so that it is not noticeable by users
+    // while having a large enough buffer so that the audio rendering remains stable, hence a computation based on sample rate.
+    else if (has(PlatformMediaSession::MediaStreamCapturingAudio))
+        AudioSession::sharedSession().setPreferredBufferSize(AudioSession::sharedSession().sampleRate() / 50);
     else if ((has(PlatformMediaSession::Video) || has(PlatformMediaSession::Audio)) && Settings::lowPowerVideoAudioBufferSizeEnabled()) {
         // FIXME: <http://webkit.org/b/116725> Figure out why enabling the code below
         // causes media LayoutTests to fail on 10.8.