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

Side by Side Diff: trunk/src/content/renderer/media/webmediaplayer_impl.cc

Issue 210743002: Revert 259154 "Remove HasAudio(), HasVideo(), GetInitialNaturalS..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 9 months 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
« no previous file with comments | « trunk/src/content/renderer/media/webmediaplayer_impl.h ('k') | trunk/src/media/base/pipeline.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/renderer/media/webmediaplayer_impl.h" 5 #include "content/renderer/media/webmediaplayer_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 void WebMediaPlayerImpl::setPreload(WebMediaPlayer::Preload preload) { 429 void WebMediaPlayerImpl::setPreload(WebMediaPlayer::Preload preload) {
430 DCHECK(main_loop_->BelongsToCurrentThread()); 430 DCHECK(main_loop_->BelongsToCurrentThread());
431 431
432 if (data_source_) 432 if (data_source_)
433 data_source_->SetPreload(static_cast<content::Preload>(preload)); 433 data_source_->SetPreload(static_cast<content::Preload>(preload));
434 } 434 }
435 435
436 bool WebMediaPlayerImpl::hasVideo() const { 436 bool WebMediaPlayerImpl::hasVideo() const {
437 DCHECK(main_loop_->BelongsToCurrentThread()); 437 DCHECK(main_loop_->BelongsToCurrentThread());
438 438
439 return pipeline_metadata_.has_video; 439 return pipeline_.HasVideo();
440 } 440 }
441 441
442 bool WebMediaPlayerImpl::hasAudio() const { 442 bool WebMediaPlayerImpl::hasAudio() const {
443 DCHECK(main_loop_->BelongsToCurrentThread()); 443 DCHECK(main_loop_->BelongsToCurrentThread());
444 444
445 return pipeline_metadata_.has_audio; 445 return pipeline_.HasAudio();
446 } 446 }
447 447
448 blink::WebSize WebMediaPlayerImpl::naturalSize() const { 448 blink::WebSize WebMediaPlayerImpl::naturalSize() const {
449 DCHECK(main_loop_->BelongsToCurrentThread()); 449 DCHECK(main_loop_->BelongsToCurrentThread());
450 450
451 return blink::WebSize(pipeline_metadata_.natural_size); 451 return blink::WebSize(natural_size_);
452 } 452 }
453 453
454 bool WebMediaPlayerImpl::paused() const { 454 bool WebMediaPlayerImpl::paused() const {
455 DCHECK(main_loop_->BelongsToCurrentThread()); 455 DCHECK(main_loop_->BelongsToCurrentThread());
456 456
457 return pipeline_.GetPlaybackRate() == 0.0f; 457 return pipeline_.GetPlaybackRate() == 0.0f;
458 } 458 }
459 459
460 bool WebMediaPlayerImpl::seeking() const { 460 bool WebMediaPlayerImpl::seeking() const {
461 DCHECK(main_loop_->BelongsToCurrentThread()); 461 DCHECK(main_loop_->BelongsToCurrentThread());
(...skipping 474 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 SetNetworkState(PipelineErrorToNetworkState(error)); 936 SetNetworkState(PipelineErrorToNetworkState(error));
937 937
938 if (error == media::PIPELINE_ERROR_DECRYPT) 938 if (error == media::PIPELINE_ERROR_DECRYPT)
939 EmeUMAHistogramCounts(current_key_system_, "DecryptError", 1); 939 EmeUMAHistogramCounts(current_key_system_, "DecryptError", 1);
940 940
941 // TODO(scherkus): This should be handled by HTMLMediaElement and controls 941 // TODO(scherkus): This should be handled by HTMLMediaElement and controls
942 // should know when to invalidate themselves http://crbug.com/337015 942 // should know when to invalidate themselves http://crbug.com/337015
943 InvalidateOnMainThread(); 943 InvalidateOnMainThread();
944 } 944 }
945 945
946 void WebMediaPlayerImpl::OnPipelineMetadata( 946 void WebMediaPlayerImpl::OnPipelineBufferingState(
947 media::PipelineMetadata metadata) { 947 media::Pipeline::BufferingState buffering_state) {
948 DVLOG(1) << "OnPipelineMetadata"; 948 DVLOG(1) << "OnPipelineBufferingState(" << buffering_state << ")";
949 949
950 pipeline_metadata_ = metadata; 950 switch (buffering_state) {
951 case media::Pipeline::kHaveMetadata:
952 // TODO(scherkus): Would be better to have a metadata changed callback
953 // that contained the size information as well whether audio/video is
954 // present. Doing so would let us remove more methods off Pipeline.
955 natural_size_ = pipeline_.GetInitialNaturalSize();
951 956
952 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata); 957 SetReadyState(WebMediaPlayer::ReadyStateHaveMetadata);
953 958
954 if (hasVideo()) { 959 if (hasVideo()) {
955 DCHECK(!video_weblayer_); 960 DCHECK(!video_weblayer_);
956 video_weblayer_.reset(new webkit::WebLayerImpl( 961 video_weblayer_.reset(new webkit::WebLayerImpl(
957 cc::VideoLayer::Create(compositor_.GetVideoFrameProvider()))); 962 cc::VideoLayer::Create(compositor_.GetVideoFrameProvider())));
958 client_->setWebLayer(video_weblayer_.get()); 963 client_->setWebLayer(video_weblayer_.get());
964 }
965 break;
966 case media::Pipeline::kPrerollCompleted:
967 // Only transition to ReadyStateHaveEnoughData if we don't have
968 // any pending seeks because the transition can cause Blink to
969 // report that the most recent seek has completed.
970 if (!pending_seek_)
971 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
972 break;
959 } 973 }
960 974
961 // TODO(scherkus): This should be handled by HTMLMediaElement and controls 975 // TODO(scherkus): This should be handled by HTMLMediaElement and controls
962 // should know when to invalidate themselves http://crbug.com/337015 976 // should know when to invalidate themselves http://crbug.com/337015
963 InvalidateOnMainThread(); 977 InvalidateOnMainThread();
964 } 978 }
965 979
966 void WebMediaPlayerImpl::OnPipelinePrerollCompleted() {
967 DVLOG(1) << "OnPipelinePrerollCompleted";
968
969 // Only transition to ReadyStateHaveEnoughData if we don't have
970 // any pending seeks because the transition can cause Blink to
971 // report that the most recent seek has completed.
972 if (!pending_seek_) {
973 SetReadyState(WebMediaPlayer::ReadyStateHaveEnoughData);
974
975 // TODO(scherkus): This should be handled by HTMLMediaElement and controls
976 // should know when to invalidate themselves http://crbug.com/337015
977 InvalidateOnMainThread();
978 }
979 }
980
981 void WebMediaPlayerImpl::OnDemuxerOpened() { 980 void WebMediaPlayerImpl::OnDemuxerOpened() {
982 DCHECK(main_loop_->BelongsToCurrentThread()); 981 DCHECK(main_loop_->BelongsToCurrentThread());
983 client_->mediaSourceOpened(new WebMediaSourceImpl( 982 client_->mediaSourceOpened(new WebMediaSourceImpl(
984 chunk_demuxer_, base::Bind(&LogMediaSourceError, media_log_))); 983 chunk_demuxer_, base::Bind(&LogMediaSourceError, media_log_)));
985 } 984 }
986 985
987 void WebMediaPlayerImpl::OnKeyAdded(const std::string& session_id) { 986 void WebMediaPlayerImpl::OnKeyAdded(const std::string& session_id) {
988 DCHECK(main_loop_->BelongsToCurrentThread()); 987 DCHECK(main_loop_->BelongsToCurrentThread());
989 EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1); 988 EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1);
990 client_->keyAdded( 989 client_->keyAdded(
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
1189 filter_collection->SetTextRenderer(text_renderer.Pass()); 1188 filter_collection->SetTextRenderer(text_renderer.Pass());
1190 } 1189 }
1191 1190
1192 // ... and we're ready to go! 1191 // ... and we're ready to go!
1193 starting_ = true; 1192 starting_ = true;
1194 pipeline_.Start( 1193 pipeline_.Start(
1195 filter_collection.Pass(), 1194 filter_collection.Pass(),
1196 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded), 1195 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineEnded),
1197 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineError), 1196 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineError),
1198 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineSeek), 1197 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineSeek),
1199 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineMetadata), 1198 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelineBufferingState),
1200 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnPipelinePrerollCompleted),
1201 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDurationChange)); 1199 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnDurationChange));
1202 } 1200 }
1203 1201
1204 void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) { 1202 void WebMediaPlayerImpl::SetNetworkState(WebMediaPlayer::NetworkState state) {
1205 DCHECK(main_loop_->BelongsToCurrentThread()); 1203 DCHECK(main_loop_->BelongsToCurrentThread());
1206 DVLOG(1) << "SetNetworkState: " << state; 1204 DVLOG(1) << "SetNetworkState: " << state;
1207 network_state_ = state; 1205 network_state_ = state;
1208 // Always notify to ensure client has the latest value. 1206 // Always notify to ensure client has the latest value.
1209 client_->networkStateChanged(); 1207 client_->networkStateChanged();
1210 } 1208 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1252 client_->durationChanged(); 1250 client_->durationChanged();
1253 } 1251 }
1254 1252
1255 void WebMediaPlayerImpl::OnNaturalSizeChange(gfx::Size size) { 1253 void WebMediaPlayerImpl::OnNaturalSizeChange(gfx::Size size) {
1256 DCHECK(main_loop_->BelongsToCurrentThread()); 1254 DCHECK(main_loop_->BelongsToCurrentThread());
1257 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing); 1255 DCHECK_NE(ready_state_, WebMediaPlayer::ReadyStateHaveNothing);
1258 TRACE_EVENT0("media", "WebMediaPlayerImpl::OnNaturalSizeChanged"); 1256 TRACE_EVENT0("media", "WebMediaPlayerImpl::OnNaturalSizeChanged");
1259 1257
1260 media_log_->AddEvent( 1258 media_log_->AddEvent(
1261 media_log_->CreateVideoSizeSetEvent(size.width(), size.height())); 1259 media_log_->CreateVideoSizeSetEvent(size.width(), size.height()));
1262 pipeline_metadata_.natural_size = size; 1260 natural_size_ = size;
1263 1261
1264 client_->sizeChanged(); 1262 client_->sizeChanged();
1265 } 1263 }
1266 1264
1267 void WebMediaPlayerImpl::FrameReady( 1265 void WebMediaPlayerImpl::FrameReady(
1268 const scoped_refptr<media::VideoFrame>& frame) { 1266 const scoped_refptr<media::VideoFrame>& frame) {
1269 compositor_.UpdateCurrentFrame(frame); 1267 compositor_.UpdateCurrentFrame(frame);
1270 } 1268 }
1271 1269
1272 void WebMediaPlayerImpl::SetDecryptorReadyCB( 1270 void WebMediaPlayerImpl::SetDecryptorReadyCB(
(...skipping 24 matching lines...) Expand all
1297 1295
1298 if (web_cdm_) { 1296 if (web_cdm_) {
1299 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); 1297 decryptor_ready_cb.Run(web_cdm_->GetDecryptor());
1300 return; 1298 return;
1301 } 1299 }
1302 1300
1303 decryptor_ready_cb_ = decryptor_ready_cb; 1301 decryptor_ready_cb_ = decryptor_ready_cb;
1304 } 1302 }
1305 1303
1306 } // namespace content 1304 } // namespace content
OLDNEW
« no previous file with comments | « trunk/src/content/renderer/media/webmediaplayer_impl.h ('k') | trunk/src/media/base/pipeline.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698