Commit 811ac5ac authored by tommi@chromium.org's avatar tommi@chromium.org

Add support for audio capture devices. Previously only output was supported.

Review URL: http://codereview.chromium.org/8478030

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@109617 0039d316-1c4b-4281-b951-d872f2087c98
parent eccf3473
......@@ -11,7 +11,9 @@
#include "base/test/signaling_task.h"
#include "base/test/test_timeouts.h"
#include "base/win/scoped_com_initializer.h"
#include "content/browser/renderer_host/media/audio_input_renderer_host.h"
#include "content/browser/renderer_host/media/audio_renderer_host.h"
#include "content/browser/renderer_host/media/media_stream_manager.h"
#include "content/browser/renderer_host/media/mock_media_observer.h"
#include "content/browser/resource_context.h"
#include "content/common/view_messages.h"
......@@ -80,6 +82,9 @@ class WebRTCMockResourceContext : public content::ResourceContext {
WebRTCMockResourceContext() {}
virtual ~WebRTCMockResourceContext() {}
virtual void EnsureInitialized() const OVERRIDE {}
private:
DISALLOW_COPY_AND_ASSIGN(WebRTCMockResourceContext);
};
ACTION_P(QuitMessageLoop, loop_or_proxy) {
......@@ -143,6 +148,8 @@ void WebRTCAudioDeviceTest::InitializeIOThread(const char* thread_name) {
resource_context_->set_request_context(test_request_context_.get());
media_observer_.reset(new MockMediaObserver());
resource_context_->set_media_observer(media_observer_.get());
media_stream_manager_.reset(new media_stream::MediaStreamManager());
resource_context_->set_media_stream_manager(media_stream_manager_.get());
CreateChannel(thread_name, resource_context_.get());
}
......@@ -150,6 +157,7 @@ void WebRTCAudioDeviceTest::InitializeIOThread(const char* thread_name) {
void WebRTCAudioDeviceTest::UninitializeIOThread() {
DestroyChannel();
resource_context_.reset();
media_stream_manager_.reset();
test_request_context_ = NULL;
initialize_com_.reset();
}
......@@ -161,16 +169,23 @@ void WebRTCAudioDeviceTest::CreateChannel(
audio_render_host_ = new AudioRendererHost(resource_context);
audio_render_host_->OnChannelConnected(base::GetCurrentProcId());
audio_input_renderer_host_ = new AudioInputRendererHost(resource_context);
audio_input_renderer_host_->OnChannelConnected(base::GetCurrentProcId());
channel_.reset(new IPC::Channel(name, IPC::Channel::MODE_SERVER, this));
ASSERT_TRUE(channel_->Connect());
audio_render_host_->OnFilterAdded(channel_.get());
audio_input_renderer_host_->OnFilterAdded(channel_.get());
}
void WebRTCAudioDeviceTest::DestroyChannel() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
audio_render_host_->OnChannelClosing();
audio_input_renderer_host_->OnChannelClosing();
channel_.reset();
audio_render_host_ = NULL;
audio_input_renderer_host_ = NULL;
}
void WebRTCAudioDeviceTest::OnGetHardwareSampleRate(double* sample_rate) {
......@@ -204,6 +219,12 @@ bool WebRTCAudioDeviceTest::OnMessageReceived(const IPC::Message& message) {
return true;
}
if (audio_input_renderer_host_.get()) {
bool message_was_ok = false;
if (audio_input_renderer_host_->OnMessageReceived(message, &message_was_ok))
return true;
}
bool handled = true;
bool message_is_ok = true;
IPC_BEGIN_MESSAGE_MAP_EX(WebRTCAudioDeviceTest, message, message_is_ok)
......@@ -251,7 +272,6 @@ WebRTCTransportImpl::WebRTCTransportImpl(webrtc::VoENetwork* network)
WebRTCTransportImpl::~WebRTCTransportImpl() {}
int WebRTCTransportImpl::SendPacket(int channel, const void* data, int len) {
ADD_FAILURE(); // We don't expect a call to this method in our tests.
return network_->ReceivedRTPPacket(channel, data, len);
}
......
......@@ -13,13 +13,15 @@
#include "base/file_path.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop.h"
#include "base/synchronization/waitable_event.h"
#include "content/browser/renderer_host/media/mock_media_observer.h"
#include "content/renderer/media/audio_renderer_impl.h"
#include "content/renderer/mock_content_renderer_client.h"
#include "ipc/ipc_channel.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "third_party/webrtc/common_types.h"
class AudioInputRendererHost;
class AudioRendererHost;
class RenderThreadImpl;
class WebRTCMockRenderProcess;
......@@ -36,6 +38,10 @@ class ResourceContext;
class TestBrowserThread;
}
namespace media_stream {
class MediaStreamManager;
}
namespace net {
class URLRequestContext;
}
......@@ -170,10 +176,13 @@ class WebRTCAudioDeviceTest
scoped_ptr<WebRTCMockRenderProcess> mock_process_;
base::WaitableEvent event_;
scoped_ptr<MockMediaObserver> media_observer_;
scoped_ptr<media_stream::MediaStreamManager> media_stream_manager_;
scoped_ptr<content::ResourceContext> resource_context_;
scoped_refptr<net::URLRequestContext> test_request_context_;
scoped_ptr<IPC::Channel> channel_;
scoped_refptr<AudioRendererHost> audio_render_host_;
scoped_refptr<AudioInputRendererHost> audio_input_renderer_host_;
AudioUtilInterface* audio_util_callback_; // Weak reference.
// Initialized on the main test thread that we mark as the UI thread.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment