| 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 "content/renderer/media/websourcebuffer_impl.h" | 5 #include "media/blink/websourcebuffer_impl.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 | 8 |
| 9 #include "base/float_util.h" | 9 #include "base/float_util.h" |
| 10 #include "media/filters/chunk_demuxer.h" | 10 #include "media/filters/chunk_demuxer.h" |
| 11 | 11 |
| 12 namespace content { | 12 namespace media { |
| 13 | 13 |
| 14 static base::TimeDelta DoubleToTimeDelta(double time) { | 14 static base::TimeDelta DoubleToTimeDelta(double time) { |
| 15 DCHECK(!base::IsNaN(time)); | 15 DCHECK(!base::IsNaN(time)); |
| 16 DCHECK_NE(time, -std::numeric_limits<double>::infinity()); | 16 DCHECK_NE(time, -std::numeric_limits<double>::infinity()); |
| 17 | 17 |
| 18 if (time == std::numeric_limits<double>::infinity()) | 18 if (time == std::numeric_limits<double>::infinity()) |
| 19 return media::kInfiniteDuration(); | 19 return kInfiniteDuration(); |
| 20 | 20 |
| 21 // Don't use base::TimeDelta::Max() here, as we want the largest finite time | 21 // Don't use base::TimeDelta::Max() here, as we want the largest finite time |
| 22 // delta. | 22 // delta. |
| 23 base::TimeDelta max_time = base::TimeDelta::FromInternalValue(kint64max - 1); | 23 base::TimeDelta max_time = base::TimeDelta::FromInternalValue(kint64max - 1); |
| 24 double max_time_in_seconds = max_time.InSecondsF(); | 24 double max_time_in_seconds = max_time.InSecondsF(); |
| 25 | 25 |
| 26 if (time >= max_time_in_seconds) | 26 if (time >= max_time_in_seconds) |
| 27 return max_time; | 27 return max_time; |
| 28 | 28 |
| 29 return base::TimeDelta::FromMicroseconds( | 29 return base::TimeDelta::FromMicroseconds( |
| 30 time * base::Time::kMicrosecondsPerSecond); | 30 time * base::Time::kMicrosecondsPerSecond); |
| 31 } | 31 } |
| 32 | 32 |
| 33 WebSourceBufferImpl::WebSourceBufferImpl( | 33 WebSourceBufferImpl::WebSourceBufferImpl( |
| 34 const std::string& id, media::ChunkDemuxer* demuxer) | 34 const std::string& id, ChunkDemuxer* demuxer) |
| 35 : id_(id), | 35 : id_(id), |
| 36 demuxer_(demuxer), | 36 demuxer_(demuxer), |
| 37 append_window_end_(media::kInfiniteDuration()) { | 37 append_window_end_(kInfiniteDuration()) { |
| 38 DCHECK(demuxer_); | 38 DCHECK(demuxer_); |
| 39 } | 39 } |
| 40 | 40 |
| 41 WebSourceBufferImpl::~WebSourceBufferImpl() { | 41 WebSourceBufferImpl::~WebSourceBufferImpl() { |
| 42 DCHECK(!demuxer_) << "Object destroyed w/o removedFromMediaSource() call"; | 42 DCHECK(!demuxer_) << "Object destroyed w/o removedFromMediaSource() call"; |
| 43 } | 43 } |
| 44 | 44 |
| 45 bool WebSourceBufferImpl::setMode(WebSourceBuffer::AppendMode mode) { | 45 bool WebSourceBufferImpl::setMode(WebSourceBuffer::AppendMode mode) { |
| 46 if (demuxer_->IsParsingMediaSegment(id_)) | 46 if (demuxer_->IsParsingMediaSegment(id_)) |
| 47 return false; | 47 return false; |
| 48 | 48 |
| 49 switch (mode) { | 49 switch (mode) { |
| 50 case WebSourceBuffer::AppendModeSegments: | 50 case WebSourceBuffer::AppendModeSegments: |
| 51 demuxer_->SetSequenceMode(id_, false); | 51 demuxer_->SetSequenceMode(id_, false); |
| 52 return true; | 52 return true; |
| 53 case WebSourceBuffer::AppendModeSequence: | 53 case WebSourceBuffer::AppendModeSequence: |
| 54 demuxer_->SetSequenceMode(id_, true); | 54 demuxer_->SetSequenceMode(id_, true); |
| 55 return true; | 55 return true; |
| 56 } | 56 } |
| 57 | 57 |
| 58 NOTREACHED(); | 58 NOTREACHED(); |
| 59 return false; | 59 return false; |
| 60 } | 60 } |
| 61 | 61 |
| 62 blink::WebTimeRanges WebSourceBufferImpl::buffered() { | 62 blink::WebTimeRanges WebSourceBufferImpl::buffered() { |
| 63 media::Ranges<base::TimeDelta> ranges = demuxer_->GetBufferedRanges(id_); | 63 Ranges<base::TimeDelta> ranges = demuxer_->GetBufferedRanges(id_); |
| 64 blink::WebTimeRanges result(ranges.size()); | 64 blink::WebTimeRanges result(ranges.size()); |
| 65 for (size_t i = 0; i < ranges.size(); i++) { | 65 for (size_t i = 0; i < ranges.size(); i++) { |
| 66 result[i].start = ranges.start(i).InSecondsF(); | 66 result[i].start = ranges.start(i).InSecondsF(); |
| 67 result[i].end = ranges.end(i).InSecondsF(); | 67 result[i].end = ranges.end(i).InSecondsF(); |
| 68 } | 68 } |
| 69 return result; | 69 return result; |
| 70 } | 70 } |
| 71 | 71 |
| 72 void WebSourceBufferImpl::append( | 72 void WebSourceBufferImpl::append( |
| 73 const unsigned char* data, | 73 const unsigned char* data, |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 124 void WebSourceBufferImpl::setAppendWindowEnd(double end) { | 124 void WebSourceBufferImpl::setAppendWindowEnd(double end) { |
| 125 DCHECK_GE(end, 0); | 125 DCHECK_GE(end, 0); |
| 126 append_window_end_ = DoubleToTimeDelta(end); | 126 append_window_end_ = DoubleToTimeDelta(end); |
| 127 } | 127 } |
| 128 | 128 |
| 129 void WebSourceBufferImpl::removedFromMediaSource() { | 129 void WebSourceBufferImpl::removedFromMediaSource() { |
| 130 demuxer_->RemoveId(id_); | 130 demuxer_->RemoveId(id_); |
| 131 demuxer_ = NULL; | 131 demuxer_ = NULL; |
| 132 } | 132 } |
| 133 | 133 |
| 134 } // namespace content | 134 } // namespace media |
| OLD | NEW |