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

Unified Diff: media/audio/audio_manager_base.cc

Issue 11416350: Tab Audio Mirroring: WebContentsAudioInputStream is a new implementation which represents the lifet… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 7 years, 11 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 | « media/audio/audio_manager_base.h ('k') | media/audio/virtual_audio_input_stream.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/audio_manager_base.cc
diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc
index 3a27de162be17887ee0ca68cc338a41e702dda27..86a3db0f611c58bb2339c52ef92c0cd362fae8ed 100644
--- a/media/audio/audio_manager_base.cc
+++ b/media/audio/audio_manager_base.cc
@@ -5,6 +5,7 @@
#include "media/audio/audio_manager_base.h"
#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/command_line.h"
#include "base/message_loop_proxy.h"
#include "base/threading/thread.h"
@@ -122,8 +123,10 @@ AudioOutputStream* AudioManagerBase::MakeAudioOutputStream(
NOTIMPLEMENTED();
return NULL;
#else
- stream = VirtualAudioOutputStream::MakeStream(this, params, message_loop_,
- virtual_audio_input_stream_);
+ stream = new VirtualAudioOutputStream(
+ params, message_loop_, virtual_audio_input_stream_,
+ base::Bind(&AudioManagerBase::ReleaseVirtualOutputStream,
+ base::Unretained(this)));
#endif
} else if (audio_output_disabled) {
stream = FakeAudioOutputStream::MakeFakeStream(this, params);
@@ -168,8 +171,10 @@ AudioInputStream* AudioManagerBase::MakeAudioInputStream(
// TODO(justinlin): Currently, audio mirroring will only work for the first
// request. Subsequent requests will not get audio.
if (!virtual_audio_input_stream_) {
- virtual_audio_input_stream_ =
- VirtualAudioInputStream::MakeStream(this, params, message_loop_);
+ virtual_audio_input_stream_ = new VirtualAudioInputStream(
+ params, message_loop_,
+ base::Bind(&AudioManagerBase::ReleaseVirtualInputStream,
+ base::Unretained(this)));
stream = virtual_audio_input_stream_;
DVLOG(1) << "Virtual audio input stream created.";
@@ -294,27 +299,36 @@ void AudioManagerBase::ReleaseOutputStream(AudioOutputStream* stream) {
// TODO(xians) : Have a clearer destruction path for the AudioOutputStream.
// For example, pass the ownership to AudioManager so it can delete the
// streams.
- num_output_streams_--;
+ --num_output_streams_;
delete stream;
}
void AudioManagerBase::ReleaseInputStream(AudioInputStream* stream) {
DCHECK(stream);
// TODO(xians) : Have a clearer destruction path for the AudioInputStream.
+ --num_input_streams_;
+ delete stream;
+}
- if (virtual_audio_input_stream_ == stream) {
- DVLOG(1) << "Virtual audio input stream stopping.";
- virtual_audio_input_stream_->Stop();
- virtual_audio_input_stream_ = NULL;
+void AudioManagerBase::ReleaseVirtualInputStream(
+ VirtualAudioInputStream* stream) {
+ DCHECK_EQ(virtual_audio_input_stream_, stream);
- // Make all VirtualAudioOutputStreams unregister from the
- // VirtualAudioInputStream and recreate themselves as regular audio streams
- // to return sound to hardware.
- NotifyAllOutputDeviceChangeListeners();
- }
+ virtual_audio_input_stream_ = NULL;
- num_input_streams_--;
- delete stream;
+ // Notify listeners to re-create output streams. This will cause all
+ // outstanding VirtualAudioOutputStreams pointing at the
+ // VirtualAudioInputStream to be closed and destroyed. Once this has
+ // happened, there will be no other references to the input stream, and it
+ // will then be safe to delete it.
+ NotifyAllOutputDeviceChangeListeners();
+
+ ReleaseInputStream(stream);
+}
+
+void AudioManagerBase::ReleaseVirtualOutputStream(
+ VirtualAudioOutputStream* stream) {
+ ReleaseOutputStream(stream);
}
void AudioManagerBase::IncreaseActiveInputStreamCount() {
« no previous file with comments | « media/audio/audio_manager_base.h ('k') | media/audio/virtual_audio_input_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698