Index: webkit/renderer/media/webmediaplayer_ms.cc |
diff --git a/webkit/renderer/media/webmediaplayer_ms.cc b/webkit/renderer/media/webmediaplayer_ms.cc |
deleted file mode 100644 |
index 12b8fcc163b31a1f863b13d2ffed47c3653a8ee0..0000000000000000000000000000000000000000 |
--- a/webkit/renderer/media/webmediaplayer_ms.cc |
+++ /dev/null |
@@ -1,443 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "webkit/renderer/media/webmediaplayer_ms.h" |
- |
-#include <limits> |
- |
-#include "base/bind.h" |
-#include "base/callback.h" |
-#include "base/message_loop.h" |
-#include "base/metrics/histogram.h" |
-#include "cc/layers/video_layer.h" |
-#include "media/base/media_log.h" |
-#include "media/base/video_frame.h" |
-#include "third_party/WebKit/public/platform/WebRect.h" |
-#include "third_party/WebKit/public/platform/WebSize.h" |
-#include "third_party/WebKit/public/platform/WebURL.h" |
-#include "third_party/WebKit/public/web/WebFrame.h" |
-#include "third_party/WebKit/public/web/WebMediaPlayerClient.h" |
-#include "third_party/WebKit/public/web/WebView.h" |
-#include "webkit/renderer/compositor_bindings/web_layer_impl.h" |
-#include "webkit/renderer/media/media_stream_audio_renderer.h" |
-#include "webkit/renderer/media/media_stream_client.h" |
-#include "webkit/renderer/media/video_frame_provider.h" |
-#include "webkit/renderer/media/webmediaplayer_delegate.h" |
-#include "webkit/renderer/media/webmediaplayer_util.h" |
- |
-using WebKit::WebCanvas; |
-using WebKit::WebMediaPlayer; |
-using WebKit::WebRect; |
-using WebKit::WebSize; |
- |
-namespace webkit_media { |
- |
-WebMediaPlayerMS::WebMediaPlayerMS( |
- WebKit::WebFrame* frame, |
- WebKit::WebMediaPlayerClient* client, |
- base::WeakPtr<WebMediaPlayerDelegate> delegate, |
- MediaStreamClient* media_stream_client, |
- media::MediaLog* media_log) |
- : frame_(frame), |
- network_state_(WebMediaPlayer::NetworkStateEmpty), |
- ready_state_(WebMediaPlayer::ReadyStateHaveNothing), |
- buffered_(static_cast<size_t>(1)), |
- client_(client), |
- delegate_(delegate), |
- media_stream_client_(media_stream_client), |
- paused_(true), |
- current_frame_used_(false), |
- pending_repaint_(false), |
- video_frame_provider_client_(NULL), |
- received_first_frame_(false), |
- sequence_started_(false), |
- total_frame_count_(0), |
- dropped_frame_count_(0), |
- media_log_(media_log) { |
- DVLOG(1) << "WebMediaPlayerMS::ctor"; |
- DCHECK(media_stream_client); |
- media_log_->AddEvent( |
- media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); |
-} |
- |
-WebMediaPlayerMS::~WebMediaPlayerMS() { |
- DVLOG(1) << "WebMediaPlayerMS::dtor"; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- SetVideoFrameProviderClient(NULL); |
- GetClient()->setWebLayer(NULL); |
- |
- if (video_frame_provider_.get()) { |
- video_frame_provider_->Stop(); |
- } |
- |
- if (audio_renderer_.get()) { |
- if (audio_renderer_->IsLocalRenderer()) { |
- audio_renderer_->Stop(); |
- } else if (!paused_) { |
- // The |audio_renderer_| can be shared by multiple remote streams, and |
- // it will be stopped when WebRtcAudioDeviceImpl goes away. So we simply |
- // pause the |audio_renderer_| here to avoid re-creating the |
- // |audio_renderer_|. |
- audio_renderer_->Pause(); |
- } |
- } |
- |
- media_log_->AddEvent( |
- media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); |
- |
- if (delegate_.get()) |
- delegate_->PlayerGone(this); |
-} |
- |
-void WebMediaPlayerMS::load(const WebKit::WebURL& url, CORSMode cors_mode) { |
- DVLOG(1) << "WebMediaPlayerMS::load"; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- GURL gurl(url); |
- |
- setVolume(GetClient()->volume()); |
- SetNetworkState(WebMediaPlayer::NetworkStateLoading); |
- SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); |
- media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec())); |
- |
- // Check if this url is media stream. |
- video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( |
- url, |
- base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), |
- base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); |
- |
- audio_renderer_ = media_stream_client_->GetAudioRenderer(url); |
- |
- if (video_frame_provider_.get() || audio_renderer_.get()) { |
- GetClient()->setOpaque(true); |
- if (audio_renderer_.get()) |
- audio_renderer_->Start(); |
- |
- if (video_frame_provider_.get()) { |
- video_frame_provider_->Start(); |
- } else { |
- // This is audio-only mode. |
- DCHECK(audio_renderer_.get()); |
- SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); |
- SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); |
- } |
- } else { |
- SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); |
- } |
-} |
- |
-void WebMediaPlayerMS::load(const WebKit::WebURL& url, |
- WebKit::WebMediaSource* media_source, |
- CORSMode cors_mode) { |
- NOTIMPLEMENTED(); |
-} |
- |
-void WebMediaPlayerMS::play() { |
- DVLOG(1) << "WebMediaPlayerMS::play"; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- if (paused_) { |
- if (video_frame_provider_.get()) |
- video_frame_provider_->Play(); |
- |
- if (audio_renderer_.get()) |
- audio_renderer_->Play(); |
- |
- if (delegate_.get()) |
- delegate_->DidPlay(this); |
- } |
- |
- paused_ = false; |
- |
- media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); |
-} |
- |
-void WebMediaPlayerMS::pause() { |
- DVLOG(1) << "WebMediaPlayerMS::pause"; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- if (video_frame_provider_.get()) |
- video_frame_provider_->Pause(); |
- |
- if (!paused_) { |
- if (audio_renderer_.get()) |
- audio_renderer_->Pause(); |
- |
- if (delegate_.get()) |
- delegate_->DidPause(this); |
- } |
- |
- paused_ = true; |
- |
- media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); |
-} |
- |
-bool WebMediaPlayerMS::supportsFullscreen() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return true; |
-} |
- |
-bool WebMediaPlayerMS::supportsSave() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return false; |
-} |
- |
-void WebMediaPlayerMS::seek(double seconds) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
-} |
- |
-void WebMediaPlayerMS::setRate(double rate) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
-} |
- |
-void WebMediaPlayerMS::setVolume(double volume) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- if (!audio_renderer_.get()) |
- return; |
- DVLOG(1) << "WebMediaPlayerMS::setVolume(volume=" << volume << ")"; |
- audio_renderer_->SetVolume(volume); |
-} |
- |
-void WebMediaPlayerMS::setPreload(WebMediaPlayer::Preload preload) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
-} |
- |
-bool WebMediaPlayerMS::hasVideo() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return (video_frame_provider_.get() != NULL); |
-} |
- |
-bool WebMediaPlayerMS::hasAudio() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return (audio_renderer_.get() != NULL); |
-} |
- |
-WebKit::WebSize WebMediaPlayerMS::naturalSize() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- gfx::Size size; |
- if (current_frame_.get()) |
- size = current_frame_->natural_size(); |
- DVLOG(3) << "WebMediaPlayerMS::naturalSize, " << size.ToString(); |
- return WebKit::WebSize(size); |
-} |
- |
-bool WebMediaPlayerMS::paused() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return paused_; |
-} |
- |
-bool WebMediaPlayerMS::seeking() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return false; |
-} |
- |
-double WebMediaPlayerMS::duration() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return std::numeric_limits<double>::infinity(); |
-} |
- |
-double WebMediaPlayerMS::currentTime() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- if (current_frame_.get()) { |
- return current_frame_->GetTimestamp().InSecondsF(); |
- } else if (audio_renderer_.get()) { |
- return audio_renderer_->GetCurrentRenderTime().InSecondsF(); |
- } |
- return 0.0; |
-} |
- |
-WebMediaPlayer::NetworkState WebMediaPlayerMS::networkState() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DVLOG(1) << "WebMediaPlayerMS::networkState, state:" << network_state_; |
- return network_state_; |
-} |
- |
-WebMediaPlayer::ReadyState WebMediaPlayerMS::readyState() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DVLOG(1) << "WebMediaPlayerMS::readyState, state:" << ready_state_; |
- return ready_state_; |
-} |
- |
-const WebKit::WebTimeRanges& WebMediaPlayerMS::buffered() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return buffered_; |
-} |
- |
-double WebMediaPlayerMS::maxTimeSeekable() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return 0.0; |
-} |
- |
-bool WebMediaPlayerMS::didLoadingProgress() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return true; |
-} |
- |
-void WebMediaPlayerMS::paint(WebCanvas* canvas, |
- const WebRect& rect, |
- unsigned char alpha) { |
- DVLOG(3) << "WebMediaPlayerMS::paint"; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- |
- gfx::RectF dest_rect(rect.x, rect.y, rect.width, rect.height); |
- video_renderer_.Paint(current_frame_.get(), canvas, dest_rect, alpha); |
- |
- { |
- base::AutoLock auto_lock(current_frame_lock_); |
- if (current_frame_.get()) |
- current_frame_used_ = true; |
- } |
-} |
- |
-bool WebMediaPlayerMS::hasSingleSecurityOrigin() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return true; |
-} |
- |
-bool WebMediaPlayerMS::didPassCORSAccessCheck() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- return true; |
-} |
- |
-double WebMediaPlayerMS::mediaTimeForTimeValue(double timeValue) const { |
- return ConvertSecondsToTimestamp(timeValue).InSecondsF(); |
-} |
- |
-unsigned WebMediaPlayerMS::decodedFrameCount() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DVLOG(1) << "WebMediaPlayerMS::decodedFrameCount, " << total_frame_count_; |
- return total_frame_count_; |
-} |
- |
-unsigned WebMediaPlayerMS::droppedFrameCount() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DVLOG(1) << "WebMediaPlayerMS::droppedFrameCount, " << dropped_frame_count_; |
- return dropped_frame_count_; |
-} |
- |
-unsigned WebMediaPlayerMS::audioDecodedByteCount() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- NOTIMPLEMENTED(); |
- return 0; |
-} |
- |
-unsigned WebMediaPlayerMS::videoDecodedByteCount() const { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- NOTIMPLEMENTED(); |
- return 0; |
-} |
- |
-void WebMediaPlayerMS::SetVideoFrameProviderClient( |
- cc::VideoFrameProvider::Client* client) { |
- // This is called from both the main renderer thread and the compositor |
- // thread (when the main thread is blocked). |
- if (video_frame_provider_client_) |
- video_frame_provider_client_->StopUsingProvider(); |
- video_frame_provider_client_ = client; |
-} |
- |
-scoped_refptr<media::VideoFrame> WebMediaPlayerMS::GetCurrentFrame() { |
- DVLOG(3) << "WebMediaPlayerMS::GetCurrentFrame"; |
- base::AutoLock auto_lock(current_frame_lock_); |
- DCHECK(!pending_repaint_); |
- if (!current_frame_.get()) |
- return NULL; |
- pending_repaint_ = true; |
- current_frame_used_ = true; |
- return current_frame_; |
-} |
- |
-void WebMediaPlayerMS::PutCurrentFrame( |
- const scoped_refptr<media::VideoFrame>& frame) { |
- DVLOG(3) << "WebMediaPlayerMS::PutCurrentFrame"; |
- DCHECK(pending_repaint_); |
- pending_repaint_ = false; |
-} |
- |
-void WebMediaPlayerMS::OnFrameAvailable( |
- const scoped_refptr<media::VideoFrame>& frame) { |
- DVLOG(3) << "WebMediaPlayerMS::OnFrameAvailable"; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ++total_frame_count_; |
- if (!received_first_frame_) { |
- received_first_frame_ = true; |
- { |
- base::AutoLock auto_lock(current_frame_lock_); |
- DCHECK(!current_frame_used_); |
- current_frame_ = |
- media::VideoFrame::CreateBlackFrame(frame->natural_size()); |
- } |
- SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); |
- SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); |
- GetClient()->sizeChanged(); |
- |
- if (video_frame_provider_.get() && GetClient()->needsWebLayerForVideo()) { |
- video_weblayer_.reset( |
- new webkit::WebLayerImpl(cc::VideoLayer::Create(this))); |
- GetClient()->setWebLayer(video_weblayer_.get()); |
- } |
- } |
- |
- // Do not update |current_frame_| when paused. |
- if (paused_) |
- return; |
- |
- if (!sequence_started_) { |
- sequence_started_ = true; |
- start_time_ = frame->GetTimestamp(); |
- } |
- bool size_changed = !current_frame_.get() || |
- current_frame_->natural_size() != frame->natural_size(); |
- |
- { |
- base::AutoLock auto_lock(current_frame_lock_); |
- if (!current_frame_used_ && current_frame_.get()) |
- ++dropped_frame_count_; |
- current_frame_ = frame; |
- current_frame_->SetTimestamp(frame->GetTimestamp() - start_time_); |
- current_frame_used_ = false; |
- } |
- |
- if (size_changed) |
- GetClient()->sizeChanged(); |
- |
- GetClient()->repaint(); |
-} |
- |
-void WebMediaPlayerMS::RepaintInternal() { |
- DVLOG(1) << "WebMediaPlayerMS::RepaintInternal"; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- GetClient()->repaint(); |
-} |
- |
-void WebMediaPlayerMS::OnSourceError() { |
- DVLOG(1) << "WebMediaPlayerMS::OnSourceError"; |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- SetNetworkState(WebMediaPlayer::NetworkStateFormatError); |
- RepaintInternal(); |
-} |
- |
-void WebMediaPlayerMS::SetNetworkState(WebMediaPlayer::NetworkState state) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- network_state_ = state; |
- // Always notify to ensure client has the latest value. |
- GetClient()->networkStateChanged(); |
-} |
- |
-void WebMediaPlayerMS::SetReadyState(WebMediaPlayer::ReadyState state) { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- ready_state_ = state; |
- // Always notify to ensure client has the latest value. |
- GetClient()->readyStateChanged(); |
-} |
- |
-WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { |
- DCHECK(thread_checker_.CalledOnValidThread()); |
- DCHECK(client_); |
- return client_; |
-} |
- |
-} // namespace webkit_media |