summaryrefslogtreecommitdiffstats
path: root/webkit/renderer/media
diff options
context:
space:
mode:
Diffstat (limited to 'webkit/renderer/media')
-rw-r--r--webkit/renderer/media/webmediaplayer_impl.cc30
-rw-r--r--webkit/renderer/media/webmediaplayer_impl.h2
-rw-r--r--webkit/renderer/media/webmediaplayer_params.cc6
-rw-r--r--webkit/renderer/media/webmediaplayer_params.h13
4 files changed, 22 insertions, 29 deletions
diff --git a/webkit/renderer/media/webmediaplayer_impl.cc b/webkit/renderer/media/webmediaplayer_impl.cc
index 2f06d8a..d277105 100644
--- a/webkit/renderer/media/webmediaplayer_impl.cc
+++ b/webkit/renderer/media/webmediaplayer_impl.cc
@@ -130,7 +130,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
network_state_(WebMediaPlayer::NetworkStateEmpty),
ready_state_(WebMediaPlayer::ReadyStateHaveNothing),
main_loop_(base::MessageLoopProxy::current()),
- media_loop_(params.message_loop_proxy()),
+ media_thread_("MediaPipeline"),
paused_(true),
seeking_(false),
playback_rate_(0.0f),
@@ -153,7 +153,9 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
media_log_->AddEvent(
media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
- pipeline_.reset(new media::Pipeline(media_loop_, media_log_));
+ CHECK(media_thread_.Start());
+ pipeline_.reset(new media::Pipeline(
+ media_thread_.message_loop_proxy(), media_log_));
// Let V8 know we started new thread if we did not do it yet.
// Made separate task to avoid deletion of player currently being created.
@@ -182,7 +184,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl(
// Use the null sink if no sink was provided.
audio_source_provider_ = new WebAudioSourceProviderImpl(
params.audio_renderer_sink() ? params.audio_renderer_sink() :
- new media::NullAudioSink(media_loop_));
+ new media::NullAudioSink(media_thread_.message_loop_proxy()));
}
WebMediaPlayerImpl::~WebMediaPlayerImpl() {
@@ -1053,7 +1055,7 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) {
DCHECK(data_source_);
demuxer_.reset(new media::FFmpegDemuxer(
- media_loop_, data_source_.get(),
+ media_thread_.message_loop_proxy(), data_source_.get(),
BIND_TO_RENDER_LOOP_2(&WebMediaPlayerImpl::OnNeedKey, "", "")));
} else {
DCHECK(!chunk_demuxer_);
@@ -1086,13 +1088,15 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) {
// Create our audio decoders and renderer.
ScopedVector<media::AudioDecoder> audio_decoders;
- audio_decoders.push_back(new media::FFmpegAudioDecoder(media_loop_));
+ audio_decoders.push_back(new media::FFmpegAudioDecoder(
+ media_thread_.message_loop_proxy()));
if (cmd_line->HasSwitch(switches::kEnableOpusPlayback)) {
- audio_decoders.push_back(new media::OpusAudioDecoder(media_loop_));
+ audio_decoders.push_back(new media::OpusAudioDecoder(
+ media_thread_.message_loop_proxy()));
}
scoped_ptr<media::AudioRenderer> audio_renderer(
- new media::AudioRendererImpl(media_loop_,
+ new media::AudioRendererImpl(media_thread_.message_loop_proxy(),
audio_source_provider_,
audio_decoders.Pass(),
set_decryptor_ready_cb));
@@ -1103,7 +1107,7 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) {
if (gpu_factories_) {
video_decoders.push_back(new media::GpuVideoDecoder(
- media_loop_, gpu_factories_));
+ media_thread_.message_loop_proxy(), gpu_factories_));
}
// TODO(phajdan.jr): Remove ifdefs when libvpx with vp9 support is released
@@ -1111,15 +1115,17 @@ void WebMediaPlayerImpl::StartPipeline(WebKit::WebMediaSource* media_source) {
#if !defined(MEDIA_DISABLE_LIBVPX)
if (cmd_line->HasSwitch(switches::kEnableVp9Playback) ||
cmd_line->HasSwitch(switches::kEnableVp8AlphaPlayback)) {
- video_decoders.push_back(new media::VpxVideoDecoder(media_loop_));
+ video_decoders.push_back(new media::VpxVideoDecoder(
+ media_thread_.message_loop_proxy()));
}
#endif // !defined(MEDIA_DISABLE_LIBVPX)
- video_decoders.push_back(new media::FFmpegVideoDecoder(media_loop_));
+ video_decoders.push_back(new media::FFmpegVideoDecoder(
+ media_thread_.message_loop_proxy()));
scoped_ptr<media::VideoRenderer> video_renderer(
new media::VideoRendererBase(
- media_loop_,
+ media_thread_.message_loop_proxy(),
video_decoders.Pass(),
set_decryptor_ready_cb,
base::Bind(&WebMediaPlayerImpl::FrameReady, base::Unretained(this)),
@@ -1189,6 +1195,8 @@ void WebMediaPlayerImpl::Destroy() {
incremented_externally_allocated_memory_ = false;
}
+ media_thread_.Stop();
+
// Release any final references now that everything has stopped.
pipeline_.reset();
demuxer_.reset();
diff --git a/webkit/renderer/media/webmediaplayer_impl.h b/webkit/renderer/media/webmediaplayer_impl.h
index 0049369..04c0fb4 100644
--- a/webkit/renderer/media/webmediaplayer_impl.h
+++ b/webkit/renderer/media/webmediaplayer_impl.h
@@ -287,7 +287,7 @@ class WebMediaPlayerImpl
const scoped_refptr<base::MessageLoopProxy> main_loop_;
scoped_ptr<media::Pipeline> pipeline_;
- scoped_refptr<base::MessageLoopProxy> media_loop_;
+ base::Thread media_thread_;
// The currently selected key system. Empty string means that no key system
// has been selected.
diff --git a/webkit/renderer/media/webmediaplayer_params.cc b/webkit/renderer/media/webmediaplayer_params.cc
index 3592494..d33c12b 100644
--- a/webkit/renderer/media/webmediaplayer_params.cc
+++ b/webkit/renderer/media/webmediaplayer_params.cc
@@ -4,22 +4,18 @@
#include "webkit/renderer/media/webmediaplayer_params.h"
-#include "base/message_loop_proxy.h"
#include "media/base/audio_renderer_sink.h"
#include "media/base/media_log.h"
namespace webkit_media {
WebMediaPlayerParams::WebMediaPlayerParams(
- const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy,
const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink,
const scoped_refptr<media::GpuVideoDecoder::Factories>& gpu_factories,
const scoped_refptr<media::MediaLog>& media_log)
- : message_loop_proxy_(message_loop_proxy),
- audio_renderer_sink_(audio_renderer_sink),
+ : audio_renderer_sink_(audio_renderer_sink),
gpu_factories_(gpu_factories),
media_log_(media_log) {
- DCHECK(message_loop_proxy);
DCHECK(media_log_);
}
diff --git a/webkit/renderer/media/webmediaplayer_params.h b/webkit/renderer/media/webmediaplayer_params.h
index 62a5ce1..893cae7 100644
--- a/webkit/renderer/media/webmediaplayer_params.h
+++ b/webkit/renderer/media/webmediaplayer_params.h
@@ -8,10 +8,6 @@
#include "base/memory/ref_counted.h"
#include "media/filters/gpu_video_decoder.h"
-namespace base {
-class MessageLoopProxy;
-}
-
namespace media {
class AudioRendererSink;
class MediaLog;
@@ -23,19 +19,13 @@ namespace webkit_media {
// to plumb arguments through various abstraction layers.
class WebMediaPlayerParams {
public:
- // |message_loop_proxy| and |media_log| are the only required parameters;
- // all others may be null.
+ // |media_log| is the only required parameter; all others may be null.
WebMediaPlayerParams(
- const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy,
const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink,
const scoped_refptr<media::GpuVideoDecoder::Factories>& gpu_factories,
const scoped_refptr<media::MediaLog>& media_log);
~WebMediaPlayerParams();
- const scoped_refptr<base::MessageLoopProxy>& message_loop_proxy() const {
- return message_loop_proxy_;
- }
-
const scoped_refptr<media::AudioRendererSink>& audio_renderer_sink() const {
return audio_renderer_sink_;
}
@@ -50,7 +40,6 @@ class WebMediaPlayerParams {
}
private:
- scoped_refptr<base::MessageLoopProxy> message_loop_proxy_;
scoped_refptr<media::AudioRendererSink> audio_renderer_sink_;
scoped_refptr<media::GpuVideoDecoder::Factories> gpu_factories_;
scoped_refptr<media::MediaLog> media_log_;