summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
authorpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-23 04:33:52 +0000
committerpkasting@chromium.org <pkasting@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-23 04:33:52 +0000
commit458e9521995681381912ece90eb2a8ea210ae07d (patch)
treed5eeabdee1104f65f42990bbd7edc238a57480d5 /media
parent1822c9949f19195ca0000f0be929a5398a7c24e6 (diff)
downloadchromium_src-458e9521995681381912ece90eb2a8ea210ae07d.zip
chromium_src-458e9521995681381912ece90eb2a8ea210ae07d.tar.gz
chromium_src-458e9521995681381912ece90eb2a8ea210ae07d.tar.bz2
Add methods to base::Thread to allow Windows consumers to ask for COM to be intialized on the Thread.
This makes one functional change: when COM is initialized in STA mode, the Thread is forced to use a TYPE_UI message loop. Most of the modified consumers here didn't previously do that, but after discussion with cpu and siggi, it seems safest, even though it's more heavyweight. BUG=none TEST=none Review URL: https://codereview.chromium.org/11048029 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163503 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media')
-rw-r--r--media/audio/audio_input_device_unittest.cc1
-rw-r--r--media/audio/audio_input_volume_unittest.cc1
-rw-r--r--media/audio/audio_manager_base.cc26
-rw-r--r--media/audio/audio_manager_base.h27
-rw-r--r--media/audio/fake_audio_output_stream.cc1
5 files changed, 14 insertions, 42 deletions
diff --git a/media/audio/audio_input_device_unittest.cc b/media/audio/audio_input_device_unittest.cc
index 6eb6dfb..dc211a4 100644
--- a/media/audio/audio_input_device_unittest.cc
+++ b/media/audio/audio_input_device_unittest.cc
@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "base/environment.h"
+#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "media/audio/audio_manager.h"
#include "media/audio/audio_manager_base.h"
diff --git a/media/audio/audio_input_volume_unittest.cc b/media/audio/audio_input_volume_unittest.cc
index 9d241b8..8fc68b4 100644
--- a/media/audio/audio_input_volume_unittest.cc
+++ b/media/audio/audio_input_volume_unittest.cc
@@ -4,6 +4,7 @@
#include <cmath>
+#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
#include "media/audio/audio_io.h"
#include "media/audio/audio_manager_base.h"
diff --git a/media/audio/audio_manager_base.cc b/media/audio/audio_manager_base.cc
index 0a095ff..1963a61 100644
--- a/media/audio/audio_manager_base.cc
+++ b/media/audio/audio_manager_base.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/command_line.h"
#include "base/message_loop_proxy.h"
+#include "base/threading/thread.h"
#include "media/audio/audio_output_dispatcher_impl.h"
#include "media/audio/audio_output_proxy.h"
#include "media/audio/audio_output_resampler.h"
@@ -38,24 +39,6 @@ static const int kMaxInputChannels = 2;
const char AudioManagerBase::kDefaultDeviceName[] = "Default";
const char AudioManagerBase::kDefaultDeviceId[] = "default";
-#if defined(OS_WIN)
-AudioThread::AudioThread(const char* name) : base::Thread(name) {
-}
-
-AudioThread::~AudioThread() {
- Stop();
-}
-
-void AudioThread::Init() {
- com_initializer_.reset(new base::win::ScopedCOMInitializer(
- base::win::ScopedCOMInitializer::kMTA));
-}
-
-void AudioThread::CleanUp() {
- com_initializer_.reset();
-}
-#endif
-
AudioManagerBase::AudioManagerBase()
: num_active_input_streams_(0),
max_num_output_streams_(kDefaultMaxOutputStreams),
@@ -80,7 +63,10 @@ AudioManagerBase::~AudioManagerBase() {
void AudioManagerBase::Init() {
base::AutoLock lock(audio_thread_lock_);
DCHECK(!audio_thread_.get());
- audio_thread_.reset(new AudioThread("AudioThread"));
+ audio_thread_.reset(new base::Thread("AudioThread"));
+#if defined(OS_WIN)
+ audio_thread_->init_com_with_mta(true);
+#endif
CHECK(audio_thread_->Start());
message_loop_ = audio_thread_->message_loop_proxy();
}
@@ -274,7 +260,7 @@ bool AudioManagerBase::IsRecordingInProcess() {
void AudioManagerBase::Shutdown() {
// To avoid running into deadlocks while we stop the thread, shut it down
// via a local variable while not holding the audio thread lock.
- scoped_ptr<AudioThread> audio_thread;
+ scoped_ptr<base::Thread> audio_thread;
{
base::AutoLock lock(audio_thread_lock_);
audio_thread_.swap(audio_thread);
diff --git a/media/audio/audio_manager_base.h b/media/audio/audio_manager_base.h
index 8d06ab8..3c06522 100644
--- a/media/audio/audio_manager_base.h
+++ b/media/audio/audio_manager_base.h
@@ -13,37 +13,20 @@
#include "base/memory/scoped_ptr.h"
#include "base/observer_list.h"
#include "base/synchronization/lock.h"
-#include "base/threading/thread.h"
#include "media/audio/audio_manager.h"
#if defined(OS_WIN)
#include "base/win/scoped_com_initializer.h"
#endif
+namespace base {
+class Thread;
+}
+
namespace media {
class AudioOutputDispatcher;
-// Thread that enters MTA on Windows.
-#if defined(OS_WIN)
-class AudioThread : public base::Thread {
- public:
- explicit AudioThread(const char* name);
- virtual ~AudioThread();
-
- protected:
- virtual void Init() OVERRIDE;
- virtual void CleanUp() OVERRIDE;
-
- private:
- scoped_ptr<base::win::ScopedCOMInitializer> com_initializer_;
-
- DISALLOW_COPY_AND_ASSIGN(AudioThread);
-};
-#else
-typedef base::Thread AudioThread;
-#endif
-
// AudioManagerBase provides AudioManager functions common for all platforms.
class MEDIA_EXPORT AudioManagerBase : public AudioManager {
public:
@@ -168,7 +151,7 @@ class MEDIA_EXPORT AudioManagerBase : public AudioManager {
ObserverList<AudioDeviceListener> output_listeners_;
// Thread used to interact with audio streams created by this audio manager.
- scoped_ptr<AudioThread> audio_thread_;
+ scoped_ptr<base::Thread> audio_thread_;
mutable base::Lock audio_thread_lock_;
// The message loop of the audio thread this object runs on. Set on Init().
diff --git a/media/audio/fake_audio_output_stream.cc b/media/audio/fake_audio_output_stream.cc
index fe03859..38b5437 100644
--- a/media/audio/fake_audio_output_stream.cc
+++ b/media/audio/fake_audio_output_stream.cc
@@ -7,6 +7,7 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/logging.h"
+#include "base/message_loop.h"
#include "media/audio/audio_manager_base.h"
namespace media {