| OLD | NEW |
| 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 "media/blink/buffered_resource_loader.h" | 5 #include "media/blink/buffered_resource_loader.h" |
| 6 | 6 |
| 7 #include "base/bits.h" | 7 #include "base/bits.h" |
| 8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
| 9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 offset_(0), | 117 offset_(0), |
| 118 content_length_(kPositionNotSpecified), | 118 content_length_(kPositionNotSpecified), |
| 119 instance_size_(kPositionNotSpecified), | 119 instance_size_(kPositionNotSpecified), |
| 120 read_position_(0), | 120 read_position_(0), |
| 121 read_size_(0), | 121 read_size_(0), |
| 122 read_buffer_(NULL), | 122 read_buffer_(NULL), |
| 123 first_offset_(0), | 123 first_offset_(0), |
| 124 last_offset_(0), | 124 last_offset_(0), |
| 125 bitrate_(bitrate), | 125 bitrate_(bitrate), |
| 126 playback_rate_(playback_rate), | 126 playback_rate_(playback_rate), |
| 127 media_log_(media_log) { | 127 media_log_(media_log), |
| 128 cancel_upon_deferral_(false) { |
| 128 | 129 |
| 129 // Set the initial capacity of |buffer_| based on |bitrate_| and | 130 // Set the initial capacity of |buffer_| based on |bitrate_| and |
| 130 // |playback_rate_|. | 131 // |playback_rate_|. |
| 131 UpdateBufferWindow(); | 132 UpdateBufferWindow(); |
| 132 } | 133 } |
| 133 | 134 |
| 134 BufferedResourceLoader::~BufferedResourceLoader() {} | 135 BufferedResourceLoader::~BufferedResourceLoader() {} |
| 135 | 136 |
| 136 void BufferedResourceLoader::Start( | 137 void BufferedResourceLoader::Start( |
| 137 const StartCB& start_cb, | 138 const StartCB& start_cb, |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 } | 572 } |
| 572 | 573 |
| 573 void BufferedResourceLoader::SetPlaybackRate(float playback_rate) { | 574 void BufferedResourceLoader::SetPlaybackRate(float playback_rate) { |
| 574 playback_rate_ = playback_rate; | 575 playback_rate_ = playback_rate; |
| 575 | 576 |
| 576 // This is a pause so don't bother updating the buffer window as we'll likely | 577 // This is a pause so don't bother updating the buffer window as we'll likely |
| 577 // get unpaused in the future. | 578 // get unpaused in the future. |
| 578 if (playback_rate_ == 0.0) | 579 if (playback_rate_ == 0.0) |
| 579 return; | 580 return; |
| 580 | 581 |
| 582 // Abort any cancellations in progress if playback starts. |
| 583 if (playback_rate_ > 0 && cancel_upon_deferral_) |
| 584 cancel_upon_deferral_ = false; |
| 585 |
| 581 UpdateBufferWindow(); | 586 UpdateBufferWindow(); |
| 582 } | 587 } |
| 583 | 588 |
| 584 void BufferedResourceLoader::SetBitrate(int bitrate) { | 589 void BufferedResourceLoader::SetBitrate(int bitrate) { |
| 585 DCHECK(bitrate >= 0); | 590 DCHECK(bitrate >= 0); |
| 586 bitrate_ = bitrate; | 591 bitrate_ = bitrate; |
| 587 UpdateBufferWindow(); | 592 UpdateBufferWindow(); |
| 588 } | 593 } |
| 589 | 594 |
| 590 ///////////////////////////////////////////////////////////////////////////// | 595 ///////////////////////////////////////////////////////////////////////////// |
| (...skipping 18 matching lines...) Expand all Loading... |
| 609 | 614 |
| 610 SetDeferred(ShouldDefer()); | 615 SetDeferred(ShouldDefer()); |
| 611 } | 616 } |
| 612 | 617 |
| 613 void BufferedResourceLoader::SetDeferred(bool deferred) { | 618 void BufferedResourceLoader::SetDeferred(bool deferred) { |
| 614 if (active_loader_->deferred() == deferred) | 619 if (active_loader_->deferred() == deferred) |
| 615 return; | 620 return; |
| 616 | 621 |
| 617 active_loader_->SetDeferred(deferred); | 622 active_loader_->SetDeferred(deferred); |
| 618 loading_cb_.Run(deferred ? kLoadingDeferred : kLoading); | 623 loading_cb_.Run(deferred ? kLoadingDeferred : kLoading); |
| 624 |
| 625 if (deferred && cancel_upon_deferral_) |
| 626 CancelUponDeferral(); |
| 619 } | 627 } |
| 620 | 628 |
| 621 bool BufferedResourceLoader::ShouldDefer() const { | 629 bool BufferedResourceLoader::ShouldDefer() const { |
| 622 switch(defer_strategy_) { | 630 switch(defer_strategy_) { |
| 623 case kNeverDefer: | 631 case kNeverDefer: |
| 624 return false; | 632 return false; |
| 625 | 633 |
| 626 case kReadThenDefer: | 634 case kReadThenDefer: |
| 627 DCHECK(read_cb_.is_null() || last_offset_ > buffer_.forward_bytes()) | 635 DCHECK(read_cb_.is_null() || last_offset_ > buffer_.forward_bytes()) |
| 628 << "We shouldn't stop deferring if we can fulfill the read"; | 636 << "We shouldn't stop deferring if we can fulfill the read"; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 725 } | 733 } |
| 726 if (*last_byte_position < *first_byte_position || | 734 if (*last_byte_position < *first_byte_position || |
| 727 (*instance_size != kPositionNotSpecified && | 735 (*instance_size != kPositionNotSpecified && |
| 728 *last_byte_position >= *instance_size)) { | 736 *last_byte_position >= *instance_size)) { |
| 729 return false; | 737 return false; |
| 730 } | 738 } |
| 731 | 739 |
| 732 return true; | 740 return true; |
| 733 } | 741 } |
| 734 | 742 |
| 743 void BufferedResourceLoader::CancelUponDeferral() { |
| 744 cancel_upon_deferral_ = true; |
| 745 if (active_loader_ && active_loader_->deferred()) |
| 746 active_loader_.reset(); |
| 747 } |
| 748 |
| 735 bool BufferedResourceLoader::VerifyPartialResponse( | 749 bool BufferedResourceLoader::VerifyPartialResponse( |
| 736 const WebURLResponse& response) { | 750 const WebURLResponse& response) { |
| 737 int64 first_byte_position, last_byte_position, instance_size; | 751 int64 first_byte_position, last_byte_position, instance_size; |
| 738 if (!ParseContentRange(response.httpHeaderField("Content-Range").utf8(), | 752 if (!ParseContentRange(response.httpHeaderField("Content-Range").utf8(), |
| 739 &first_byte_position, &last_byte_position, | 753 &first_byte_position, &last_byte_position, |
| 740 &instance_size)) { | 754 &instance_size)) { |
| 741 return false; | 755 return false; |
| 742 } | 756 } |
| 743 | 757 |
| 744 if (instance_size != kPositionNotSpecified) { | 758 if (instance_size != kPositionNotSpecified) { |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 781 | 795 |
| 782 void BufferedResourceLoader::Log() { | 796 void BufferedResourceLoader::Log() { |
| 783 media_log_->AddEvent( | 797 media_log_->AddEvent( |
| 784 media_log_->CreateBufferedExtentsChangedEvent( | 798 media_log_->CreateBufferedExtentsChangedEvent( |
| 785 offset_ - buffer_.backward_bytes(), | 799 offset_ - buffer_.backward_bytes(), |
| 786 offset_, | 800 offset_, |
| 787 offset_ + buffer_.forward_bytes())); | 801 offset_ + buffer_.forward_bytes())); |
| 788 } | 802 } |
| 789 | 803 |
| 790 } // namespace media | 804 } // namespace media |
| OLD | NEW |