Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(430)

Side by Side Diff: media/filters/source_buffer_stream.cc

Issue 506683002: Remove implicit conversions from scoped_refptr to T* in media/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_stream.h" 5 #include "media/filters/source_buffer_stream.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 1131 matching lines...) Expand 10 before | Expand all | Expand 10 after
1142 // If we're about to delete the selected range, also reset the seek state. 1142 // If we're about to delete the selected range, also reset the seek state.
1143 DCHECK((*itr)->GetStartTimestamp() >= duration_dts); 1143 DCHECK((*itr)->GetStartTimestamp() >= duration_dts);
1144 if (*itr == selected_range_) 1144 if (*itr == selected_range_)
1145 ResetSeekState(); 1145 ResetSeekState();
1146 DeleteAndRemoveRange(&itr); 1146 DeleteAndRemoveRange(&itr);
1147 } 1147 }
1148 } 1148 }
1149 1149
1150 SourceBufferStream::Status SourceBufferStream::GetNextBuffer( 1150 SourceBufferStream::Status SourceBufferStream::GetNextBuffer(
1151 scoped_refptr<StreamParserBuffer>* out_buffer) { 1151 scoped_refptr<StreamParserBuffer>* out_buffer) {
1152 if (!pending_buffer_) { 1152 if (!pending_buffer_.get()) {
1153 const SourceBufferStream::Status status = GetNextBufferInternal(out_buffer); 1153 const SourceBufferStream::Status status = GetNextBufferInternal(out_buffer);
1154 if (status != SourceBufferStream::kSuccess || !SetPendingBuffer(out_buffer)) 1154 if (status != SourceBufferStream::kSuccess || !SetPendingBuffer(out_buffer))
1155 return status; 1155 return status;
1156 } 1156 }
1157 1157
1158 if (!pending_buffer_->splice_buffers().empty()) 1158 if (!pending_buffer_->splice_buffers().empty())
1159 return HandleNextBufferWithSplice(out_buffer); 1159 return HandleNextBufferWithSplice(out_buffer);
1160 1160
1161 DCHECK(pending_buffer_->preroll_buffer()); 1161 DCHECK(pending_buffer_->preroll_buffer().get());
1162 return HandleNextBufferWithPreroll(out_buffer); 1162 return HandleNextBufferWithPreroll(out_buffer);
1163 } 1163 }
1164 1164
1165 SourceBufferStream::Status SourceBufferStream::HandleNextBufferWithSplice( 1165 SourceBufferStream::Status SourceBufferStream::HandleNextBufferWithSplice(
1166 scoped_refptr<StreamParserBuffer>* out_buffer) { 1166 scoped_refptr<StreamParserBuffer>* out_buffer) {
1167 const BufferQueue& splice_buffers = pending_buffer_->splice_buffers(); 1167 const BufferQueue& splice_buffers = pending_buffer_->splice_buffers();
1168 const size_t last_splice_buffer_index = splice_buffers.size() - 1; 1168 const size_t last_splice_buffer_index = splice_buffers.size() - 1;
1169 1169
1170 // Are there any splice buffers left to hand out? The last buffer should be 1170 // Are there any splice buffers left to hand out? The last buffer should be
1171 // handed out separately since it represents the first post-splice buffer. 1171 // handed out separately since it represents the first post-splice buffer.
1172 if (splice_buffers_index_ < last_splice_buffer_index) { 1172 if (splice_buffers_index_ < last_splice_buffer_index) {
1173 // Account for config changes which occur between fade out buffers. 1173 // Account for config changes which occur between fade out buffers.
1174 if (current_config_index_ != 1174 if (current_config_index_ !=
1175 splice_buffers[splice_buffers_index_]->GetConfigId()) { 1175 splice_buffers[splice_buffers_index_]->GetConfigId()) {
1176 config_change_pending_ = true; 1176 config_change_pending_ = true;
1177 DVLOG(1) << "Config change (splice buffer config ID does not match)."; 1177 DVLOG(1) << "Config change (splice buffer config ID does not match).";
1178 return SourceBufferStream::kConfigChange; 1178 return SourceBufferStream::kConfigChange;
1179 } 1179 }
1180 1180
1181 // Every pre splice buffer must have the same splice_timestamp(). 1181 // Every pre splice buffer must have the same splice_timestamp().
1182 DCHECK(pending_buffer_->splice_timestamp() == 1182 DCHECK(pending_buffer_->splice_timestamp() ==
1183 splice_buffers[splice_buffers_index_]->splice_timestamp()); 1183 splice_buffers[splice_buffers_index_]->splice_timestamp());
1184 1184
1185 // No pre splice buffers should have preroll. 1185 // No pre splice buffers should have preroll.
1186 DCHECK(!splice_buffers[splice_buffers_index_]->preroll_buffer()); 1186 DCHECK(!splice_buffers[splice_buffers_index_]->preroll_buffer().get());
1187 1187
1188 *out_buffer = splice_buffers[splice_buffers_index_++]; 1188 *out_buffer = splice_buffers[splice_buffers_index_++];
1189 return SourceBufferStream::kSuccess; 1189 return SourceBufferStream::kSuccess;
1190 } 1190 }
1191 1191
1192 // Did we hand out the last pre-splice buffer on the previous call? 1192 // Did we hand out the last pre-splice buffer on the previous call?
1193 if (!pending_buffers_complete_) { 1193 if (!pending_buffers_complete_) {
1194 DCHECK_EQ(splice_buffers_index_, last_splice_buffer_index); 1194 DCHECK_EQ(splice_buffers_index_, last_splice_buffer_index);
1195 pending_buffers_complete_ = true; 1195 pending_buffers_complete_ = true;
1196 config_change_pending_ = true; 1196 config_change_pending_ = true;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 SourceBufferStream::Status SourceBufferStream::GetNextBufferInternal( 1234 SourceBufferStream::Status SourceBufferStream::GetNextBufferInternal(
1235 scoped_refptr<StreamParserBuffer>* out_buffer) { 1235 scoped_refptr<StreamParserBuffer>* out_buffer) {
1236 CHECK(!config_change_pending_); 1236 CHECK(!config_change_pending_);
1237 1237
1238 if (!track_buffer_.empty()) { 1238 if (!track_buffer_.empty()) {
1239 DCHECK(!selected_range_); 1239 DCHECK(!selected_range_);
1240 scoped_refptr<StreamParserBuffer>& next_buffer = track_buffer_.front(); 1240 scoped_refptr<StreamParserBuffer>& next_buffer = track_buffer_.front();
1241 1241
1242 // If the next buffer is an audio splice frame, the next effective config id 1242 // If the next buffer is an audio splice frame, the next effective config id
1243 // comes from the first splice buffer. 1243 // comes from the first splice buffer.
1244 if (GetConfigId(next_buffer, 0) != current_config_index_) { 1244 if (GetConfigId(next_buffer.get(), 0) != current_config_index_) {
1245 config_change_pending_ = true; 1245 config_change_pending_ = true;
1246 DVLOG(1) << "Config change (track buffer config ID does not match)."; 1246 DVLOG(1) << "Config change (track buffer config ID does not match).";
1247 return kConfigChange; 1247 return kConfigChange;
1248 } 1248 }
1249 1249
1250 *out_buffer = next_buffer; 1250 *out_buffer = next_buffer;
1251 track_buffer_.pop_front(); 1251 track_buffer_.pop_front();
1252 last_output_buffer_timestamp_ = (*out_buffer)->GetDecodeTimestamp(); 1252 last_output_buffer_timestamp_ = (*out_buffer)->GetDecodeTimestamp();
1253 1253
1254 // If the track buffer becomes empty, then try to set the selected range 1254 // If the track buffer becomes empty, then try to set the selected range
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 append_config_index_ = video_configs_.size(); 1454 append_config_index_ = video_configs_.size();
1455 DVLOG(2) << "New video config - index: " << append_config_index_; 1455 DVLOG(2) << "New video config - index: " << append_config_index_;
1456 video_configs_.resize(video_configs_.size() + 1); 1456 video_configs_.resize(video_configs_.size() + 1);
1457 video_configs_[append_config_index_] = config; 1457 video_configs_[append_config_index_] = config;
1458 return true; 1458 return true;
1459 } 1459 }
1460 1460
1461 void SourceBufferStream::CompleteConfigChange() { 1461 void SourceBufferStream::CompleteConfigChange() {
1462 config_change_pending_ = false; 1462 config_change_pending_ = false;
1463 1463
1464 if (pending_buffer_) { 1464 if (pending_buffer_.get()) {
1465 current_config_index_ = 1465 current_config_index_ =
1466 GetConfigId(pending_buffer_, splice_buffers_index_); 1466 GetConfigId(pending_buffer_.get(), splice_buffers_index_);
1467 return; 1467 return;
1468 } 1468 }
1469 1469
1470 if (!track_buffer_.empty()) { 1470 if (!track_buffer_.empty()) {
1471 current_config_index_ = GetConfigId(track_buffer_.front(), 0); 1471 current_config_index_ = GetConfigId(track_buffer_.front().get(), 0);
1472 return; 1472 return;
1473 } 1473 }
1474 1474
1475 if (selected_range_ && selected_range_->HasNextBuffer()) 1475 if (selected_range_ && selected_range_->HasNextBuffer())
1476 current_config_index_ = selected_range_->GetNextConfigId(); 1476 current_config_index_ = selected_range_->GetNextConfigId();
1477 } 1477 }
1478 1478
1479 void SourceBufferStream::SetSelectedRangeIfNeeded( 1479 void SourceBufferStream::SetSelectedRangeIfNeeded(
1480 const DecodeTimestamp timestamp) { 1480 const DecodeTimestamp timestamp) {
1481 DVLOG(1) << __FUNCTION__ << "(" << timestamp.InSecondsF() << ")"; 1481 DVLOG(1) << __FUNCTION__ << "(" << timestamp.InSecondsF() << ")";
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
1678 // a splice. 1678 // a splice.
1679 for (size_t i = 0; i < pre_splice_buffers.size(); ++i) { 1679 for (size_t i = 0; i < pre_splice_buffers.size(); ++i) {
1680 const BufferQueue& original_splice_buffers = 1680 const BufferQueue& original_splice_buffers =
1681 pre_splice_buffers[i]->splice_buffers(); 1681 pre_splice_buffers[i]->splice_buffers();
1682 if (!original_splice_buffers.empty()) { 1682 if (!original_splice_buffers.empty()) {
1683 DVLOG(1) << "Can't generate splice: overlapped buffers contain a " 1683 DVLOG(1) << "Can't generate splice: overlapped buffers contain a "
1684 "pre-existing splice."; 1684 "pre-existing splice.";
1685 return; 1685 return;
1686 } 1686 }
1687 1687
1688 if (pre_splice_buffers[i]->preroll_buffer()) { 1688 if (pre_splice_buffers[i]->preroll_buffer().get()) {
1689 DVLOG(1) << "Can't generate splice: overlapped buffers contain preroll."; 1689 DVLOG(1) << "Can't generate splice: overlapped buffers contain preroll.";
1690 return; 1690 return;
1691 } 1691 }
1692 } 1692 }
1693 1693
1694 // Don't generate splice frames which represent less than two frames, since we 1694 // Don't generate splice frames which represent less than two frames, since we
1695 // need at least that much to generate a crossfade. Per the spec, make this 1695 // need at least that much to generate a crossfade. Per the spec, make this
1696 // check using the sample rate of the overlapping buffers. 1696 // check using the sample rate of the overlapping buffers.
1697 const base::TimeDelta splice_duration = 1697 const base::TimeDelta splice_duration =
1698 pre_splice_buffers.back()->timestamp() + 1698 pre_splice_buffers.back()->timestamp() +
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
2082 2082
2083 bool SourceBufferRange::HasNextBuffer() const { 2083 bool SourceBufferRange::HasNextBuffer() const {
2084 return next_buffer_index_ >= 0 && 2084 return next_buffer_index_ >= 0 &&
2085 next_buffer_index_ < static_cast<int>(buffers_.size()); 2085 next_buffer_index_ < static_cast<int>(buffers_.size());
2086 } 2086 }
2087 2087
2088 int SourceBufferRange::GetNextConfigId() const { 2088 int SourceBufferRange::GetNextConfigId() const {
2089 DCHECK(HasNextBuffer()); 2089 DCHECK(HasNextBuffer());
2090 // If the next buffer is an audio splice frame, the next effective config id 2090 // If the next buffer is an audio splice frame, the next effective config id
2091 // comes from the first fade out preroll buffer. 2091 // comes from the first fade out preroll buffer.
2092 return GetConfigId(buffers_[next_buffer_index_], 0); 2092 return GetConfigId(buffers_[next_buffer_index_].get(), 0);
2093 } 2093 }
2094 2094
2095 DecodeTimestamp SourceBufferRange::GetNextTimestamp() const { 2095 DecodeTimestamp SourceBufferRange::GetNextTimestamp() const {
2096 DCHECK(!buffers_.empty()); 2096 DCHECK(!buffers_.empty());
2097 DCHECK(HasNextBufferPosition()); 2097 DCHECK(HasNextBufferPosition());
2098 2098
2099 if (next_buffer_index_ >= static_cast<int>(buffers_.size())) { 2099 if (next_buffer_index_ >= static_cast<int>(buffers_.size())) {
2100 return kNoDecodeTimestamp(); 2100 return kNoDecodeTimestamp();
2101 } 2101 }
2102 2102
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
2262 2262
2263 if (buffer->timestamp() + buffer->duration() <= start.ToPresentationTime()) 2263 if (buffer->timestamp() + buffer->duration() <= start.ToPresentationTime())
2264 continue; 2264 continue;
2265 buffers->push_back(buffer); 2265 buffers->push_back(buffer);
2266 } 2266 }
2267 return previous_size < buffers->size(); 2267 return previous_size < buffers->size();
2268 } 2268 }
2269 2269
2270 bool SourceBufferStream::SetPendingBuffer( 2270 bool SourceBufferStream::SetPendingBuffer(
2271 scoped_refptr<StreamParserBuffer>* out_buffer) { 2271 scoped_refptr<StreamParserBuffer>* out_buffer) {
2272 DCHECK(*out_buffer); 2272 DCHECK(out_buffer->get());
2273 DCHECK(!pending_buffer_); 2273 DCHECK(!pending_buffer_.get());
2274 2274
2275 const bool have_splice_buffers = !(*out_buffer)->splice_buffers().empty(); 2275 const bool have_splice_buffers = !(*out_buffer)->splice_buffers().empty();
2276 const bool have_preroll_buffer = !!(*out_buffer)->preroll_buffer(); 2276 const bool have_preroll_buffer = !!(*out_buffer)->preroll_buffer().get();
2277 2277
2278 if (!have_splice_buffers && !have_preroll_buffer) 2278 if (!have_splice_buffers && !have_preroll_buffer)
2279 return false; 2279 return false;
2280 2280
2281 DCHECK_NE(have_splice_buffers, have_preroll_buffer); 2281 DCHECK_NE(have_splice_buffers, have_preroll_buffer);
2282 splice_buffers_index_ = 0; 2282 splice_buffers_index_ = 0;
2283 pending_buffer_.swap(*out_buffer); 2283 pending_buffer_.swap(*out_buffer);
2284 pending_buffers_complete_ = false; 2284 pending_buffers_complete_ = false;
2285 return true; 2285 return true;
2286 } 2286 }
2287 2287
2288 } // namespace media 2288 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698