| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "webkit/media/webmediaplayer_ms.h" | 5 #include "webkit/media/webmediaplayer_ms.h" | 
| 6 | 6 | 
| 7 #include <limits> | 7 #include <limits> | 
| 8 | 8 | 
| 9 #include "base/bind.h" | 9 #include "base/bind.h" | 
| 10 #include "base/callback.h" | 10 #include "base/callback.h" | 
| 11 #include "base/message_loop.h" | 11 #include "base/message_loop.h" | 
| 12 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" | 
| 13 #include "media/base/media_log.h" | 13 #include "media/base/media_log.h" | 
|  | 14 #include "media/base/rtc_audio_renderer.h" | 
| 14 #include "media/base/video_frame.h" | 15 #include "media/base/video_frame.h" | 
| 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebFrame.h" | 
| 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient.
     h" | 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebMediaPlayerClient.
     h" | 
| 17 #include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h" | 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebVideoFrame.h" | 
| 18 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 19 #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" | 
| 19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" | 20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebRect.h" | 
| 20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h" | 21 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSize.h" | 
| 21 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h" | 22 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h" | 
| 22 #include "webkit/media/media_stream_client.h" | 23 #include "webkit/media/media_stream_client.h" | 
| 23 #include "webkit/media/video_frame_provider.h" | 24 #include "webkit/media/video_frame_provider.h" | 
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 58       media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); | 59       media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); | 
| 59 } | 60 } | 
| 60 | 61 | 
| 61 WebMediaPlayerMS::~WebMediaPlayerMS() { | 62 WebMediaPlayerMS::~WebMediaPlayerMS() { | 
| 62   DVLOG(1) << "WebMediaPlayerMS::dtor"; | 63   DVLOG(1) << "WebMediaPlayerMS::dtor"; | 
| 63   DCHECK(thread_checker_.CalledOnValidThread()); | 64   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 64   if (video_frame_provider_) { | 65   if (video_frame_provider_) { | 
| 65     video_frame_provider_->Stop(); | 66     video_frame_provider_->Stop(); | 
| 66   } | 67   } | 
| 67 | 68 | 
|  | 69   if (audio_renderer_) { | 
|  | 70     audio_renderer_->Stop(); | 
|  | 71   } | 
|  | 72 | 
| 68   media_log_->AddEvent( | 73   media_log_->AddEvent( | 
| 69       media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); | 74       media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_DESTROYED)); | 
| 70 | 75 | 
| 71   if (delegate_) | 76   if (delegate_) | 
| 72     delegate_->PlayerGone(this); | 77     delegate_->PlayerGone(this); | 
| 73 } | 78 } | 
| 74 | 79 | 
| 75 void WebMediaPlayerMS::load(const WebKit::WebURL& url, CORSMode cors_mode) { | 80 void WebMediaPlayerMS::load(const WebKit::WebURL& url, CORSMode cors_mode) { | 
| 76   DVLOG(1) << "WebMediaPlayerMS::load"; | 81   DVLOG(1) << "WebMediaPlayerMS::load"; | 
| 77   DCHECK(thread_checker_.CalledOnValidThread()); | 82   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 78 | 83 | 
| 79   GURL gurl(url); | 84   GURL gurl(url); | 
| 80 | 85 | 
| 81   setVolume(GetClient()->volume()); | 86   setVolume(GetClient()->volume()); | 
| 82   SetNetworkState(WebMediaPlayer::NetworkStateLoading); | 87   SetNetworkState(WebMediaPlayer::NetworkStateLoading); | 
| 83   SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); | 88   SetReadyState(WebMediaPlayer::ReadyStateHaveNothing); | 
| 84   media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec())); | 89   media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec())); | 
| 85 | 90 | 
| 86   // Check if this url is media stream. | 91   // Check if this url is media stream. | 
| 87   video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( | 92   video_frame_provider_ = media_stream_client_->GetVideoFrameProvider( | 
| 88       url, | 93       url, | 
| 89       base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), | 94       base::Bind(&WebMediaPlayerMS::OnSourceError, AsWeakPtr()), | 
| 90       base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); | 95       base::Bind(&WebMediaPlayerMS::OnFrameAvailable, AsWeakPtr())); | 
| 91   if (video_frame_provider_) { | 96 | 
|  | 97   audio_renderer_ = media_stream_client_->GetAudioRenderer(url); | 
|  | 98 | 
|  | 99   if (video_frame_provider_ || audio_renderer_) { | 
| 92     SetNetworkState(WebMediaPlayer::NetworkStateLoaded); | 100     SetNetworkState(WebMediaPlayer::NetworkStateLoaded); | 
| 93     GetClient()->sourceOpened(); | 101     GetClient()->sourceOpened(); | 
| 94     GetClient()->setOpaque(true); | 102     GetClient()->setOpaque(true); | 
| 95     SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | 103     SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); | 
| 96     SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); | 104     SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData); | 
| 97     RepaintInternal(); | 105     RepaintInternal(); | 
| 98   } else { | 106   } else { | 
| 99     SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); | 107     SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); | 
| 100   } | 108   } | 
| 101 } | 109 } | 
| 102 | 110 | 
| 103 void WebMediaPlayerMS::cancelLoad() { | 111 void WebMediaPlayerMS::cancelLoad() { | 
| 104   DCHECK(thread_checker_.CalledOnValidThread()); | 112   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 105 } | 113 } | 
| 106 | 114 | 
| 107 void WebMediaPlayerMS::play() { | 115 void WebMediaPlayerMS::play() { | 
| 108   DVLOG(1) << "WebMediaPlayerMS::play"; | 116   DVLOG(1) << "WebMediaPlayerMS::play"; | 
| 109   DCHECK(thread_checker_.CalledOnValidThread()); | 117   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 110 | 118 | 
| 111   paused_ = false; | 119   paused_ = false; | 
| 112   if (video_frame_provider_) { | 120   if (video_frame_provider_) { | 
| 113     if (video_frame_provider_started_) { | 121     if (video_frame_provider_started_) { | 
| 114       video_frame_provider_->Play(); | 122       video_frame_provider_->Play(); | 
| 115     } else { | 123     } else { | 
| 116       video_frame_provider_started_ = true; | 124       video_frame_provider_started_ = true; | 
| 117       video_frame_provider_->Start(); | 125       video_frame_provider_->Start(); | 
| 118     } | 126     } | 
| 119   } | 127   } | 
| 120   // TODO(wjia): add audio. See crbug.com/142988. | 128 | 
|  | 129   if (audio_renderer_) | 
|  | 130     audio_renderer_->Play(); | 
| 121 | 131 | 
| 122   media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); | 132   media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); | 
| 123 | 133 | 
| 124   if (delegate_) | 134   if (delegate_) | 
| 125     delegate_->DidPlay(this); | 135     delegate_->DidPlay(this); | 
| 126 } | 136 } | 
| 127 | 137 | 
| 128 void WebMediaPlayerMS::pause() { | 138 void WebMediaPlayerMS::pause() { | 
| 129   DVLOG(1) << "WebMediaPlayerMS::pause"; | 139   DVLOG(1) << "WebMediaPlayerMS::pause"; | 
| 130   DCHECK(thread_checker_.CalledOnValidThread()); | 140   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 131 | 141 | 
| 132   if (video_frame_provider_) | 142   if (video_frame_provider_) | 
| 133     video_frame_provider_->Pause(); | 143     video_frame_provider_->Pause(); | 
| 134   // TODO(wjia): add audio. See crbug.com/142988. | 144 | 
|  | 145   if (audio_renderer_) | 
|  | 146     audio_renderer_->Pause(); | 
| 135   paused_ = true; | 147   paused_ = true; | 
| 136 | 148 | 
| 137   media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); | 149   media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); | 
| 138 | 150 | 
| 139   if (delegate_) | 151   if (delegate_) | 
| 140     delegate_->DidPause(this); | 152     delegate_->DidPause(this); | 
| 141 } | 153 } | 
| 142 | 154 | 
| 143 bool WebMediaPlayerMS::supportsFullscreen() const { | 155 bool WebMediaPlayerMS::supportsFullscreen() const { | 
| 144   DCHECK(thread_checker_.CalledOnValidThread()); | 156   DCHECK(thread_checker_.CalledOnValidThread()); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 157 void WebMediaPlayerMS::setEndTime(float seconds) { | 169 void WebMediaPlayerMS::setEndTime(float seconds) { | 
| 158   DCHECK(thread_checker_.CalledOnValidThread()); | 170   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 159 } | 171 } | 
| 160 | 172 | 
| 161 void WebMediaPlayerMS::setRate(float rate) { | 173 void WebMediaPlayerMS::setRate(float rate) { | 
| 162   DCHECK(thread_checker_.CalledOnValidThread()); | 174   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 163 } | 175 } | 
| 164 | 176 | 
| 165 void WebMediaPlayerMS::setVolume(float volume) { | 177 void WebMediaPlayerMS::setVolume(float volume) { | 
| 166   DCHECK(thread_checker_.CalledOnValidThread()); | 178   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 167   // TODO(wjia): set audio volume. See crbug.com/142988. | 179   if (audio_renderer_) | 
| 168   NOTIMPLEMENTED(); | 180     audio_renderer_->SetVolume(volume); | 
| 169 } | 181 } | 
| 170 | 182 | 
| 171 void WebMediaPlayerMS::setVisible(bool visible) { | 183 void WebMediaPlayerMS::setVisible(bool visible) { | 
| 172   DCHECK(thread_checker_.CalledOnValidThread()); | 184   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 173 } | 185 } | 
| 174 | 186 | 
| 175 void WebMediaPlayerMS::setPreload(WebMediaPlayer::Preload preload) { | 187 void WebMediaPlayerMS::setPreload(WebMediaPlayer::Preload preload) { | 
| 176   DCHECK(thread_checker_.CalledOnValidThread()); | 188   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 177 } | 189 } | 
| 178 | 190 | 
| 179 bool WebMediaPlayerMS::totalBytesKnown() { | 191 bool WebMediaPlayerMS::totalBytesKnown() { | 
| 180   DCHECK(thread_checker_.CalledOnValidThread()); | 192   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 181   return false; | 193   return false; | 
| 182 } | 194 } | 
| 183 | 195 | 
| 184 bool WebMediaPlayerMS::hasVideo() const { | 196 bool WebMediaPlayerMS::hasVideo() const { | 
| 185   DCHECK(thread_checker_.CalledOnValidThread()); | 197   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 186   return (video_frame_provider_ != NULL); | 198   return (video_frame_provider_ != NULL); | 
| 187 } | 199 } | 
| 188 | 200 | 
| 189 bool WebMediaPlayerMS::hasAudio() const { | 201 bool WebMediaPlayerMS::hasAudio() const { | 
| 190   DCHECK(thread_checker_.CalledOnValidThread()); | 202   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 191   // TODO(wjia): add audio support. See crbug.com/142988. | 203   return (audio_renderer_ != NULL); | 
| 192   return false; |  | 
| 193 } | 204 } | 
| 194 | 205 | 
| 195 WebKit::WebSize WebMediaPlayerMS::naturalSize() const { | 206 WebKit::WebSize WebMediaPlayerMS::naturalSize() const { | 
| 196   DCHECK(thread_checker_.CalledOnValidThread()); | 207   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 197 | 208 | 
| 198   gfx::Size size; | 209   gfx::Size size; | 
| 199   if (current_frame_) | 210   if (current_frame_) | 
| 200     size = current_frame_->natural_size(); | 211     size = current_frame_->natural_size(); | 
| 201   DVLOG(1) << "WebMediaPlayerMS::naturalSize, " << size.ToString(); | 212   DVLOG(1) << "WebMediaPlayerMS::naturalSize, " << size.ToString(); | 
| 202   return WebKit::WebSize(size); | 213   return WebKit::WebSize(size); | 
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 397   GetClient()->readyStateChanged(); | 408   GetClient()->readyStateChanged(); | 
| 398 } | 409 } | 
| 399 | 410 | 
| 400 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { | 411 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { | 
| 401   DCHECK(thread_checker_.CalledOnValidThread()); | 412   DCHECK(thread_checker_.CalledOnValidThread()); | 
| 402   DCHECK(client_); | 413   DCHECK(client_); | 
| 403   return client_; | 414   return client_; | 
| 404 } | 415 } | 
| 405 | 416 | 
| 406 }  // namespace webkit_media | 417 }  // namespace webkit_media | 
| OLD | NEW | 
|---|