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

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

Issue 224093011: Move DataSourceHost to BufferedDataSourceHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Split time computation into BufferedDataSourceHostImpl. Created 6 years, 8 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
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 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 client_(client), 160 client_(client),
161 delegate_(delegate), 161 delegate_(delegate),
162 defer_load_cb_(params.defer_load_cb()), 162 defer_load_cb_(params.defer_load_cb()),
163 accelerated_compositing_reported_(false), 163 accelerated_compositing_reported_(false),
164 incremented_externally_allocated_memory_(false), 164 incremented_externally_allocated_memory_(false),
165 gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()), 165 gpu_factories_(RenderThreadImpl::current()->GetGpuFactories()),
166 is_local_source_(false), 166 is_local_source_(false),
167 supports_save_(true), 167 supports_save_(true),
168 starting_(false), 168 starting_(false),
169 chunk_demuxer_(NULL), 169 chunk_demuxer_(NULL),
170 buffered_(pipeline_),
170 compositor_( // Threaded compositing isn't enabled universally yet. 171 compositor_( // Threaded compositing isn't enabled universally yet.
171 (RenderThreadImpl::current()->compositor_message_loop_proxy() 172 (RenderThreadImpl::current()->compositor_message_loop_proxy()
172 ? RenderThreadImpl::current()->compositor_message_loop_proxy() 173 ? RenderThreadImpl::current()->compositor_message_loop_proxy()
173 : base::MessageLoopProxy::current()), 174 : base::MessageLoopProxy::current()),
174 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChange)), 175 BIND_TO_RENDER_LOOP(&WebMediaPlayerImpl::OnNaturalSizeChange)),
175 text_track_index_(0), 176 text_track_index_(0),
176 web_cdm_(NULL) { 177 web_cdm_(NULL) {
177 media_log_->AddEvent( 178 media_log_->AddEvent(
178 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED)); 179 media_log_->CreateEvent(media::MediaLogEvent::WEBMEDIAPLAYER_CREATED));
179 180
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec())); 302 media_log_->AddEvent(media_log_->CreateLoadEvent(url.spec()));
302 303
303 // Media source pipelines can start immediately. 304 // Media source pipelines can start immediately.
304 if (load_type == LoadTypeMediaSource) { 305 if (load_type == LoadTypeMediaSource) {
305 supports_save_ = false; 306 supports_save_ = false;
306 StartPipeline(); 307 StartPipeline();
307 return; 308 return;
308 } 309 }
309 310
310 // Otherwise it's a regular request which requires resolving the URL first. 311 // Otherwise it's a regular request which requires resolving the URL first.
311 // TODO(sandersd): Make WMPI a DataSourceHost and pass |this| instead of
312 // |&pipeline_|.
313 data_source_.reset(new BufferedDataSource( 312 data_source_.reset(new BufferedDataSource(
314 main_loop_, 313 main_loop_,
315 frame_, 314 frame_,
316 media_log_.get(), 315 media_log_.get(),
317 &pipeline_, 316 &buffered_,
318 base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr()))); 317 base::Bind(&WebMediaPlayerImpl::NotifyDownloading, AsWeakPtr())));
319 data_source_->Initialize( 318 data_source_->Initialize(
320 url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode), 319 url, static_cast<BufferedResourceLoader::CORSMode>(cors_mode),
321 base::Bind( 320 base::Bind(
322 &WebMediaPlayerImpl::DataSourceInitialized, 321 &WebMediaPlayerImpl::DataSourceInitialized,
323 AsWeakPtr(), gurl)); 322 AsWeakPtr(), gurl));
324 323
325 is_local_source_ = !gurl.SchemeIsHTTPOrHTTPS(); 324 is_local_source_ = !gurl.SchemeIsHTTPOrHTTPS();
326 } 325 }
327 326
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
488 WebMediaPlayer::NetworkState WebMediaPlayerImpl::networkState() const { 487 WebMediaPlayer::NetworkState WebMediaPlayerImpl::networkState() const {
489 DCHECK(main_loop_->BelongsToCurrentThread()); 488 DCHECK(main_loop_->BelongsToCurrentThread());
490 return network_state_; 489 return network_state_;
491 } 490 }
492 491
493 WebMediaPlayer::ReadyState WebMediaPlayerImpl::readyState() const { 492 WebMediaPlayer::ReadyState WebMediaPlayerImpl::readyState() const {
494 DCHECK(main_loop_->BelongsToCurrentThread()); 493 DCHECK(main_loop_->BelongsToCurrentThread());
495 return ready_state_; 494 return ready_state_;
496 } 495 }
497 496
497 static base::TimeDelta TimeForByteOffset(
498 int64 byte_offset, int64 total_bytes, base::TimeDelta duration) {
499 double position = static_cast<double>(byte_offset) / total_bytes;
500 // Snap to the beginning/end where the approximation can look especially bad.
501 if (position < 0.01)
502 return base::TimeDelta();
503 if (position > 0.99)
504 return duration;
505 return base::TimeDelta::FromMilliseconds(
506 static_cast<int64>(position * duration.InMilliseconds()));
507 }
508
498 const blink::WebTimeRanges& WebMediaPlayerImpl::buffered() { 509 const blink::WebTimeRanges& WebMediaPlayerImpl::buffered() {
499 DCHECK(main_loop_->BelongsToCurrentThread()); 510 DCHECK(main_loop_->BelongsToCurrentThread());
500 blink::WebTimeRanges web_ranges( 511 return buffered_.BufferedTimeRanges();
501 ConvertToWebTimeRanges(pipeline_.GetBufferedTimeRanges()));
502 buffered_.swap(web_ranges);
503 return buffered_;
504 } 512 }
505 513
506 double WebMediaPlayerImpl::maxTimeSeekable() const { 514 double WebMediaPlayerImpl::maxTimeSeekable() const {
507 DCHECK(main_loop_->BelongsToCurrentThread()); 515 DCHECK(main_loop_->BelongsToCurrentThread());
508 516
509 // If we haven't even gotten to ReadyStateHaveMetadata yet then just 517 // If we haven't even gotten to ReadyStateHaveMetadata yet then just
510 // return 0 so that the seekable range is empty. 518 // return 0 so that the seekable range is empty.
511 if (ready_state_ < WebMediaPlayer::ReadyStateHaveMetadata) 519 if (ready_state_ < WebMediaPlayer::ReadyStateHaveMetadata)
512 return 0.0; 520 return 0.0;
513 521
514 // We don't support seeking in streaming media. 522 // We don't support seeking in streaming media.
515 if (data_source_ && data_source_->IsStreaming()) 523 if (data_source_ && data_source_->IsStreaming())
516 return 0.0; 524 return 0.0;
517 return duration(); 525 return duration();
518 } 526 }
519 527
520 bool WebMediaPlayerImpl::didLoadingProgress() const { 528 bool WebMediaPlayerImpl::didLoadingProgress() const {
521 DCHECK(main_loop_->BelongsToCurrentThread()); 529 DCHECK(main_loop_->BelongsToCurrentThread());
522 530 return buffered_.DidLoadingProgress();
523 return pipeline_.DidLoadingProgress();
524 } 531 }
525 532
526 void WebMediaPlayerImpl::paint(WebCanvas* canvas, 533 void WebMediaPlayerImpl::paint(WebCanvas* canvas,
527 const WebRect& rect, 534 const WebRect& rect,
528 unsigned char alpha) { 535 unsigned char alpha) {
529 DCHECK(main_loop_->BelongsToCurrentThread()); 536 DCHECK(main_loop_->BelongsToCurrentThread());
530 537
531 if (!accelerated_compositing_reported_) { 538 if (!accelerated_compositing_reported_) {
532 accelerated_compositing_reported_ = true; 539 accelerated_compositing_reported_ = true;
533 // Normally paint() is only called in non-accelerated rendering, but there 540 // Normally paint() is only called in non-accelerated rendering, but there
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after
1320 1327
1321 if (web_cdm_) { 1328 if (web_cdm_) {
1322 decryptor_ready_cb.Run(web_cdm_->GetDecryptor()); 1329 decryptor_ready_cb.Run(web_cdm_->GetDecryptor());
1323 return; 1330 return;
1324 } 1331 }
1325 1332
1326 decryptor_ready_cb_ = decryptor_ready_cb; 1333 decryptor_ready_cb_ = decryptor_ready_cb;
1327 } 1334 }
1328 1335
1329 } // namespace content 1336 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698