| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_data_source_host_impl.h" | 5 #include "media/blink/buffered_data_source_host_impl.h" |
| 6 | 6 |
| 7 #include "media/base/timestamp_constants.h" | 7 #include "media/base/timestamp_constants.h" |
| 8 | 8 |
| 9 namespace media { | 9 namespace media { |
| 10 | 10 |
| 11 BufferedDataSourceHostImpl::BufferedDataSourceHostImpl() | 11 BufferedDataSourceHostImpl::BufferedDataSourceHostImpl() |
| 12 : total_bytes_(0), | 12 : total_bytes_(0), |
| 13 did_loading_progress_(false) { } | 13 did_loading_progress_(false) { } |
| 14 | 14 |
| 15 BufferedDataSourceHostImpl::~BufferedDataSourceHostImpl() { } | 15 BufferedDataSourceHostImpl::~BufferedDataSourceHostImpl() { } |
| 16 | 16 |
| 17 void BufferedDataSourceHostImpl::SetTotalBytes(int64 total_bytes) { | 17 void BufferedDataSourceHostImpl::SetTotalBytes(int64_t total_bytes) { |
| 18 total_bytes_ = total_bytes; | 18 total_bytes_ = total_bytes; |
| 19 } | 19 } |
| 20 | 20 |
| 21 void BufferedDataSourceHostImpl::AddBufferedByteRange(int64 start, int64 end) { | 21 void BufferedDataSourceHostImpl::AddBufferedByteRange(int64_t start, |
| 22 int64_t end) { |
| 22 const auto i = buffered_byte_ranges_.find(start); | 23 const auto i = buffered_byte_ranges_.find(start); |
| 23 if (i.value() && i.interval_end() >= end) { | 24 if (i.value() && i.interval_end() >= end) { |
| 24 // No change | 25 // No change |
| 25 return; | 26 return; |
| 26 } | 27 } |
| 27 buffered_byte_ranges_.SetInterval(start, end, 1); | 28 buffered_byte_ranges_.SetInterval(start, end, 1); |
| 28 did_loading_progress_ = true; | 29 did_loading_progress_ = true; |
| 29 } | 30 } |
| 30 | 31 |
| 31 static base::TimeDelta TimeForByteOffset( | 32 static base::TimeDelta TimeForByteOffset(int64_t byte_offset, |
| 32 int64 byte_offset, int64 total_bytes, base::TimeDelta duration) { | 33 int64_t total_bytes, |
| 34 base::TimeDelta duration) { |
| 33 double position = static_cast<double>(byte_offset) / total_bytes; | 35 double position = static_cast<double>(byte_offset) / total_bytes; |
| 34 // Snap to the beginning/end where the approximation can look especially bad. | 36 // Snap to the beginning/end where the approximation can look especially bad. |
| 35 if (position < 0.01) | 37 if (position < 0.01) |
| 36 return base::TimeDelta(); | 38 return base::TimeDelta(); |
| 37 if (position > 0.99) | 39 if (position > 0.99) |
| 38 return duration; | 40 return duration; |
| 39 return base::TimeDelta::FromMilliseconds( | 41 return base::TimeDelta::FromMilliseconds( |
| 40 static_cast<int64>(position * duration.InMilliseconds())); | 42 static_cast<int64_t>(position * duration.InMilliseconds())); |
| 41 } | 43 } |
| 42 | 44 |
| 43 void BufferedDataSourceHostImpl::AddBufferedTimeRanges( | 45 void BufferedDataSourceHostImpl::AddBufferedTimeRanges( |
| 44 Ranges<base::TimeDelta>* buffered_time_ranges, | 46 Ranges<base::TimeDelta>* buffered_time_ranges, |
| 45 base::TimeDelta media_duration) const { | 47 base::TimeDelta media_duration) const { |
| 46 DCHECK(media_duration != kNoTimestamp()); | 48 DCHECK(media_duration != kNoTimestamp()); |
| 47 DCHECK(media_duration != kInfiniteDuration()); | 49 DCHECK(media_duration != kInfiniteDuration()); |
| 48 if (total_bytes_ && !buffered_byte_ranges_.empty()) { | 50 if (total_bytes_ && !buffered_byte_ranges_.empty()) { |
| 49 for (const auto i : buffered_byte_ranges_) { | 51 for (const auto i : buffered_byte_ranges_) { |
| 50 if (i.second) { | 52 if (i.second) { |
| 51 int64 start = i.first.begin; | 53 int64_t start = i.first.begin; |
| 52 int64 end = i.first.end; | 54 int64_t end = i.first.end; |
| 53 buffered_time_ranges->Add( | 55 buffered_time_ranges->Add( |
| 54 TimeForByteOffset(start, total_bytes_, media_duration), | 56 TimeForByteOffset(start, total_bytes_, media_duration), |
| 55 TimeForByteOffset(end, total_bytes_, media_duration)); | 57 TimeForByteOffset(end, total_bytes_, media_duration)); |
| 56 } | 58 } |
| 57 } | 59 } |
| 58 } | 60 } |
| 59 } | 61 } |
| 60 | 62 |
| 61 bool BufferedDataSourceHostImpl::DidLoadingProgress() { | 63 bool BufferedDataSourceHostImpl::DidLoadingProgress() { |
| 62 bool ret = did_loading_progress_; | 64 bool ret = did_loading_progress_; |
| 63 did_loading_progress_ = false; | 65 did_loading_progress_ = false; |
| 64 return ret; | 66 return ret; |
| 65 } | 67 } |
| 66 | 68 |
| 67 } // namespace media | 69 } // namespace media |
| OLD | NEW |