OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 <stddef.h> | 5 #include <stddef.h> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "media/blink/multibuffer_reader.h" | 10 #include "media/blink/multibuffer_reader.h" |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 int64_t p = pos_; | 99 int64_t p = pos_; |
100 int64_t bytes_read = 0; | 100 int64_t bytes_read = 0; |
101 while (bytes_read < len) { | 101 while (bytes_read < len) { |
102 if (i == data_map.end()) | 102 if (i == data_map.end()) |
103 break; | 103 break; |
104 if (i->first != block(p)) | 104 if (i->first != block(p)) |
105 break; | 105 break; |
106 if (i->second->end_of_stream()) | 106 if (i->second->end_of_stream()) |
107 break; | 107 break; |
108 size_t offset = p & ((1LL << multibuffer_->block_size_shift()) - 1); | 108 size_t offset = p & ((1LL << multibuffer_->block_size_shift()) - 1); |
| 109 if (offset > static_cast<size_t>(i->second->data_size())) |
| 110 break; |
109 size_t tocopy = | 111 size_t tocopy = |
110 std::min<size_t>(len - bytes_read, i->second->data_size() - offset); | 112 std::min<size_t>(len - bytes_read, i->second->data_size() - offset); |
111 memcpy(data, i->second->data() + offset, tocopy); | 113 memcpy(data, i->second->data() + offset, tocopy); |
112 data += tocopy; | 114 data += tocopy; |
113 bytes_read += tocopy; | 115 bytes_read += tocopy; |
114 p += tocopy; | 116 p += tocopy; |
115 ++i; | 117 ++i; |
116 } | 118 } |
117 Seek(p); | 119 Seek(p); |
118 return bytes_read; | 120 return bytes_read; |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 multibuffer_->AddReader(preload_pos_, this); | 237 multibuffer_->AddReader(preload_pos_, this); |
236 } else if (multibuffer_->Contains(preload_pos_ - 1)) { | 238 } else if (multibuffer_->Contains(preload_pos_ - 1)) { |
237 --preload_pos_; | 239 --preload_pos_; |
238 multibuffer_->AddReader(preload_pos_, this); | 240 multibuffer_->AddReader(preload_pos_, this); |
239 } | 241 } |
240 } | 242 } |
241 CheckWait(); | 243 CheckWait(); |
242 } | 244 } |
243 | 245 |
244 } // namespace media | 246 } // namespace media |
OLD | NEW |