Add ability to capture audio output to buffer (issue #2381)

This commit is contained in:
Mike Wiedenbauer
2019-02-26 13:23:17 -05:00
committed by Marshall Greenblatt
parent 7b5d30e9a9
commit 58e1149c71
24 changed files with 2067 additions and 6 deletions

View File

@ -8,6 +8,7 @@
#include <string>
#include <utility>
#include "libcef/browser/audio_mirror_destination.h"
#include "libcef/browser/browser_context_impl.h"
#include "libcef/browser/browser_info.h"
#include "libcef/browser/browser_info_manager.h"
@ -49,6 +50,7 @@
#include "chrome/browser/ui/prefs/prefs_tab_helper.h"
#include "components/zoom/zoom_controller.h"
#include "content/browser/gpu/compositor_util.h"
#include "content/browser/media/capture/audio_mirroring_manager.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/common/widget_messages.h"
#include "content/public/browser/desktop_media_id.h"
@ -1582,6 +1584,8 @@ void CefBrowserHostImpl::DestroyBrowser() {
menu_manager_->Destroy();
DestroyExtensionHost();
StopAudioMirroring();
// Notify any observers that may have state associated with this browser.
for (auto& observer : observers_)
observer.OnBrowserDestroyed(this);
@ -3038,6 +3042,28 @@ bool CefBrowserHostImpl::HasObserver(Observer* observer) const {
return observers_.HasObserver(observer);
}
bool CefBrowserHostImpl::StartAudioMirroring() {
if (client_.get()) {
CefRefPtr<CefAudioHandler> audio_handler = client_->GetAudioHandler();
if (audio_handler.get()) {
audio_mirror_destination_.reset(new CefAudioMirrorDestination(
this, audio_handler, content::AudioMirroringManager::GetInstance()));
audio_mirror_destination_->Start();
return true;
}
}
return false;
}
bool CefBrowserHostImpl::StopAudioMirroring() {
if (audio_mirror_destination_.get()) {
audio_mirror_destination_->Stop();
audio_mirror_destination_.reset();
return true;
}
return false;
}
CefBrowserHostImpl::NavigationLock::NavigationLock(
CefRefPtr<CefBrowserHostImpl> browser)
: browser_(browser) {
@ -3290,6 +3316,8 @@ CefBrowserHostImpl::CefBrowserHostImpl(
// Make sure RenderViewCreated is called at least one time.
RenderViewCreated(web_contents->GetRenderViewHost());
StartAudioMirroring();
// Associate the platform delegate with this browser.
platform_delegate_->BrowserCreated(this);
}