Chromium Code Reviews| 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/filters/source_buffer_range.h" | 5 #include "media/filters/source_buffer_range.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "media/base/timestamp_constants.h" | 9 #include "media/base/timestamp_constants.h" |
| 10 | 10 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 99 void SourceBufferRange::Seek(DecodeTimestamp timestamp) { | 99 void SourceBufferRange::Seek(DecodeTimestamp timestamp) { |
| 100 DCHECK(CanSeekTo(timestamp)); | 100 DCHECK(CanSeekTo(timestamp)); |
| 101 DCHECK(!keyframe_map_.empty()); | 101 DCHECK(!keyframe_map_.empty()); |
| 102 | 102 |
| 103 KeyframeMap::iterator result = GetFirstKeyframeAtOrBefore(timestamp); | 103 KeyframeMap::iterator result = GetFirstKeyframeAtOrBefore(timestamp); |
| 104 next_buffer_index_ = result->second - keyframe_map_index_base_; | 104 next_buffer_index_ = result->second - keyframe_map_index_base_; |
| 105 CHECK_LT(next_buffer_index_, static_cast<int>(buffers_.size())) | 105 CHECK_LT(next_buffer_index_, static_cast<int>(buffers_.size())) |
| 106 << next_buffer_index_ << ", size = " << buffers_.size(); | 106 << next_buffer_index_ << ", size = " << buffers_.size(); |
| 107 } | 107 } |
| 108 | 108 |
| 109 int SourceBufferRange::GetConfigIdAtTime(DecodeTimestamp timestamp) { | |
| 110 DCHECK(CanSeekTo(timestamp)); | |
| 111 DCHECK(!keyframe_map_.empty()); | |
| 112 | |
| 113 KeyframeMap::iterator result = GetFirstKeyframeAtOrBefore(timestamp); | |
| 114 size_t buffer_index = result->second - keyframe_map_index_base_; | |
| 115 CHECK_LT(buffer_index, buffers_.size()) << buffer_index | |
| 116 << ", size = " << buffers_.size(); | |
| 117 | |
| 118 return buffers_[buffer_index]->GetSpliceBufferConfigId(0); | |
| 119 } | |
| 120 | |
| 121 bool SourceBufferRange::SameConfigThruRange(DecodeTimestamp start, | |
| 122 DecodeTimestamp end) { | |
| 123 DCHECK(CanSeekTo(start)); | |
| 124 DCHECK(CanSeekTo(end)); | |
| 125 DCHECK(start <= end); | |
| 126 DCHECK(!keyframe_map_.empty()); | |
| 127 | |
| 128 if (start == end) | |
| 129 return true; | |
|
wolenetz
2016/07/25 21:49:02
What if the buffer at this time contains splice bu
chcunningham
2016/12/01 17:07:16
Splicing is gone. Now just checking the config ID
wolenetz
2016/12/02 00:18:49
Acknowledged.
| |
| 130 | |
| 131 KeyframeMap::const_iterator result = GetFirstKeyframeAtOrBefore(start); | |
| 132 size_t buffer_index = result->second - keyframe_map_index_base_; | |
| 133 CHECK_LT(buffer_index, buffers_.size()) << buffer_index | |
| 134 << ", size = " << buffers_.size(); | |
| 135 | |
| 136 int start_config = buffers_[buffer_index]->GetSpliceBufferConfigId(0); | |
| 137 buffer_index++; | |
| 138 while (buffer_index < buffers_.size() && | |
| 139 buffers_[buffer_index]->GetDecodeTimestamp() <= end) { | |
| 140 if (buffers_[buffer_index]->GetSpliceBufferConfigId(0) != start_config) | |
|
wolenetz
2016/07/25 21:49:02
Ditto: if there is a splice buffer, it/they could
chcunningham
2016/12/01 17:07:16
Ditto.
wolenetz
2016/12/02 00:18:49
Acknowledged.
| |
| 141 return false; | |
| 142 buffer_index++; | |
| 143 } | |
| 144 | |
| 145 return true; | |
| 146 } | |
| 147 | |
| 109 void SourceBufferRange::SeekAheadTo(DecodeTimestamp timestamp) { | 148 void SourceBufferRange::SeekAheadTo(DecodeTimestamp timestamp) { |
| 110 SeekAhead(timestamp, false); | 149 SeekAhead(timestamp, false); |
| 111 } | 150 } |
| 112 | 151 |
| 113 void SourceBufferRange::SeekAheadPast(DecodeTimestamp timestamp) { | 152 void SourceBufferRange::SeekAheadPast(DecodeTimestamp timestamp) { |
| 114 SeekAhead(timestamp, true); | 153 SeekAhead(timestamp, true); |
| 115 } | 154 } |
| 116 | 155 |
| 117 void SourceBufferRange::SeekAhead(DecodeTimestamp timestamp, | 156 void SourceBufferRange::SeekAhead(DecodeTimestamp timestamp, |
| 118 bool skip_given_timestamp) { | 157 bool skip_given_timestamp) { |
| (...skipping 516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 635 } | 674 } |
| 636 | 675 |
| 637 if (buffer->timestamp() + buffer->duration() <= start.ToPresentationTime()) | 676 if (buffer->timestamp() + buffer->duration() <= start.ToPresentationTime()) |
| 638 continue; | 677 continue; |
| 639 buffers->push_back(buffer); | 678 buffers->push_back(buffer); |
| 640 } | 679 } |
| 641 return previous_size < buffers->size(); | 680 return previous_size < buffers->size(); |
| 642 } | 681 } |
| 643 | 682 |
| 644 } // namespace media | 683 } // namespace media |
| OLD | NEW |