Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(217)

Side by Side Diff: webkit/media/webmediaplayer_ms.cc

Issue 11270012: Adding audio support to the new webmediaplyer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased and fixed some comments in rtc_audio_renderer.h Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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 video_frame_provider_->Start(); 103 video_frame_provider_->Start();
96 } else { 104 } else {
97 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError); 105 SetNetworkState(WebMediaPlayer::NetworkStateNetworkError);
98 } 106 }
99 } 107 }
100 108
101 void WebMediaPlayerMS::cancelLoad() { 109 void WebMediaPlayerMS::cancelLoad() {
102 DCHECK(thread_checker_.CalledOnValidThread()); 110 DCHECK(thread_checker_.CalledOnValidThread());
103 } 111 }
104 112
105 void WebMediaPlayerMS::play() { 113 void WebMediaPlayerMS::play() {
106 DVLOG(1) << "WebMediaPlayerMS::play"; 114 DVLOG(1) << "WebMediaPlayerMS::play";
107 DCHECK(thread_checker_.CalledOnValidThread()); 115 DCHECK(thread_checker_.CalledOnValidThread());
108 116
109 if (video_frame_provider_ && paused_) { 117 if (video_frame_provider_ && paused_)
110 video_frame_provider_->Play(); 118 video_frame_provider_->Play();
111 } 119
120 if (audio_renderer_ && paused_)
121 audio_renderer_->Play();
122
112 paused_ = false; 123 paused_ = false;
113 124
114 // TODO(wjia): add audio. See crbug.com/142988.
115
116 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY)); 125 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PLAY));
117 126
118 if (delegate_) 127 if (delegate_)
119 delegate_->DidPlay(this); 128 delegate_->DidPlay(this);
120 } 129 }
121 130
122 void WebMediaPlayerMS::pause() { 131 void WebMediaPlayerMS::pause() {
123 DVLOG(1) << "WebMediaPlayerMS::pause"; 132 DVLOG(1) << "WebMediaPlayerMS::pause";
124 DCHECK(thread_checker_.CalledOnValidThread()); 133 DCHECK(thread_checker_.CalledOnValidThread());
125 134
126 if (video_frame_provider_) 135 if (video_frame_provider_)
127 video_frame_provider_->Pause(); 136 video_frame_provider_->Pause();
128 // TODO(wjia): add audio. See crbug.com/142988. 137
138 if (audio_renderer_)
139 audio_renderer_->Pause();
scherkus (not reviewing) 2012/10/25 17:47:39 nit: add blank line after this (consistent w/ play
no longer working on chromium 2012/10/26 09:35:29 Done.
129 paused_ = true; 140 paused_ = true;
130 141
131 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE)); 142 media_log_->AddEvent(media_log_->CreateEvent(media::MediaLogEvent::PAUSE));
132 143
133 if (delegate_) 144 if (delegate_)
134 delegate_->DidPause(this); 145 delegate_->DidPause(this);
135 } 146 }
136 147
137 bool WebMediaPlayerMS::supportsFullscreen() const { 148 bool WebMediaPlayerMS::supportsFullscreen() const {
138 DCHECK(thread_checker_.CalledOnValidThread()); 149 DCHECK(thread_checker_.CalledOnValidThread());
(...skipping 12 matching lines...) Expand all
151 void WebMediaPlayerMS::setEndTime(float seconds) { 162 void WebMediaPlayerMS::setEndTime(float seconds) {
152 DCHECK(thread_checker_.CalledOnValidThread()); 163 DCHECK(thread_checker_.CalledOnValidThread());
153 } 164 }
154 165
155 void WebMediaPlayerMS::setRate(float rate) { 166 void WebMediaPlayerMS::setRate(float rate) {
156 DCHECK(thread_checker_.CalledOnValidThread()); 167 DCHECK(thread_checker_.CalledOnValidThread());
157 } 168 }
158 169
159 void WebMediaPlayerMS::setVolume(float volume) { 170 void WebMediaPlayerMS::setVolume(float volume) {
160 DCHECK(thread_checker_.CalledOnValidThread()); 171 DCHECK(thread_checker_.CalledOnValidThread());
161 // TODO(wjia): set audio volume. See crbug.com/142988. 172 if (audio_renderer_)
162 NOTIMPLEMENTED(); 173 audio_renderer_->SetVolume(volume);
163 } 174 }
164 175
165 void WebMediaPlayerMS::setVisible(bool visible) { 176 void WebMediaPlayerMS::setVisible(bool visible) {
166 DCHECK(thread_checker_.CalledOnValidThread()); 177 DCHECK(thread_checker_.CalledOnValidThread());
167 } 178 }
168 179
169 void WebMediaPlayerMS::setPreload(WebMediaPlayer::Preload preload) { 180 void WebMediaPlayerMS::setPreload(WebMediaPlayer::Preload preload) {
170 DCHECK(thread_checker_.CalledOnValidThread()); 181 DCHECK(thread_checker_.CalledOnValidThread());
171 } 182 }
172 183
173 bool WebMediaPlayerMS::totalBytesKnown() { 184 bool WebMediaPlayerMS::totalBytesKnown() {
174 DCHECK(thread_checker_.CalledOnValidThread()); 185 DCHECK(thread_checker_.CalledOnValidThread());
175 return false; 186 return false;
176 } 187 }
177 188
178 bool WebMediaPlayerMS::hasVideo() const { 189 bool WebMediaPlayerMS::hasVideo() const {
179 DCHECK(thread_checker_.CalledOnValidThread()); 190 DCHECK(thread_checker_.CalledOnValidThread());
180 return (video_frame_provider_ != NULL); 191 return (video_frame_provider_ != NULL);
181 } 192 }
182 193
183 bool WebMediaPlayerMS::hasAudio() const { 194 bool WebMediaPlayerMS::hasAudio() const {
184 DCHECK(thread_checker_.CalledOnValidThread()); 195 DCHECK(thread_checker_.CalledOnValidThread());
185 // TODO(wjia): add audio support. See crbug.com/142988. 196 return (audio_renderer_ != NULL);
186 return false;
187 } 197 }
188 198
189 WebKit::WebSize WebMediaPlayerMS::naturalSize() const { 199 WebKit::WebSize WebMediaPlayerMS::naturalSize() const {
190 DCHECK(thread_checker_.CalledOnValidThread()); 200 DCHECK(thread_checker_.CalledOnValidThread());
191 201
192 gfx::Size size; 202 gfx::Size size;
193 if (current_frame_) 203 if (current_frame_)
194 size = current_frame_->natural_size(); 204 size = current_frame_->natural_size();
195 DVLOG(3) << "WebMediaPlayerMS::naturalSize, " << size.ToString(); 205 DVLOG(3) << "WebMediaPlayerMS::naturalSize, " << size.ToString();
196 return WebKit::WebSize(size); 206 return WebKit::WebSize(size);
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 GetClient()->readyStateChanged(); 414 GetClient()->readyStateChanged();
405 } 415 }
406 416
407 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() { 417 WebKit::WebMediaPlayerClient* WebMediaPlayerMS::GetClient() {
408 DCHECK(thread_checker_.CalledOnValidThread()); 418 DCHECK(thread_checker_.CalledOnValidThread());
409 DCHECK(client_); 419 DCHECK(client_);
410 return client_; 420 return client_;
411 } 421 }
412 422
413 } // namespace webkit_media 423 } // namespace webkit_media
OLDNEW
« media/base/rtc_audio_renderer.h ('K') | « webkit/media/webmediaplayer_ms.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698