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

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

Issue 2460763002: Fixed track id remapping in MSE FrameProcessor (Closed)
Patch Set: Created 4 years, 1 month 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
« no previous file with comments | « media/filters/frame_processor.h ('k') | media/filters/source_buffer_state.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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/frame_processor.h" 5 #include "media/filters/frame_processor.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <cstdlib> 9 #include <cstdlib>
10 10
(...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 if (existing_track) { 256 if (existing_track) {
257 MEDIA_LOG(ERROR, media_log_) << "Failure adding track with duplicate ID " 257 MEDIA_LOG(ERROR, media_log_) << "Failure adding track with duplicate ID "
258 << id; 258 << id;
259 return false; 259 return false;
260 } 260 }
261 261
262 track_buffers_[id] = base::MakeUnique<MseTrackBuffer>(stream); 262 track_buffers_[id] = base::MakeUnique<MseTrackBuffer>(stream);
263 return true; 263 return true;
264 } 264 }
265 265
266 bool FrameProcessor::UpdateTrack(StreamParser::TrackId old_id, 266 bool FrameProcessor::UpdateTrackIds(const TrackIdChanges& track_id_changes) {
267 StreamParser::TrackId new_id) { 267 TrackBuffersMap& old_track_buffers = track_buffers_;
268 DVLOG(2) << __func__ << "() : old_id=" << old_id << ", new_id=" << new_id; 268 TrackBuffersMap new_track_buffers;
269 269
270 if (old_id == new_id || !FindTrack(old_id) || FindTrack(new_id)) { 270 for (const auto& ids : track_id_changes) {
271 MEDIA_LOG(ERROR, media_log_) << "Failure updating track id from " << old_id 271 if (old_track_buffers.find(ids.first) == old_track_buffers.end() ||
272 << " to " << new_id; 272 new_track_buffers.find(ids.second) != new_track_buffers.end()) {
273 return false; 273 MEDIA_LOG(ERROR, media_log_) << "Failure updating track id from "
274 << ids.first << " to " << ids.second;
275 return false;
276 }
277 new_track_buffers[ids.second] = std::move(old_track_buffers[ids.first]);
278 CHECK_EQ(1u, old_track_buffers.erase(ids.first));
274 } 279 }
275 280
276 track_buffers_[new_id] = std::move(track_buffers_[old_id]); 281 // Process remaining track buffers with unchanged ids.
277 CHECK_EQ(1u, track_buffers_.erase(old_id)); 282 for (const auto& t : old_track_buffers) {
283 if (new_track_buffers.find(t.first) != new_track_buffers.end()) {
284 MEDIA_LOG(ERROR, media_log_) << "Track id " << t.first << " conflict";
285 return false;
286 }
287 new_track_buffers[t.first] = std::move(old_track_buffers[t.first]);
288 }
289
290 std::swap(track_buffers_, new_track_buffers);
278 return true; 291 return true;
279 } 292 }
280 293
281 void FrameProcessor::SetAllTrackBuffersNeedRandomAccessPoint() { 294 void FrameProcessor::SetAllTrackBuffersNeedRandomAccessPoint() {
282 for (auto itr = track_buffers_.begin(); itr != track_buffers_.end(); ++itr) { 295 for (auto itr = track_buffers_.begin(); itr != track_buffers_.end(); ++itr) {
283 itr->second->set_needs_random_access_point(true); 296 itr->second->set_needs_random_access_point(true);
284 } 297 }
285 } 298 }
286 299
287 void FrameProcessor::Reset() { 300 void FrameProcessor::Reset() {
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 // Step 21 is currently handled differently. See SourceBufferState's 751 // Step 21 is currently handled differently. See SourceBufferState's
739 // |auto_update_timestamp_offset_|. 752 // |auto_update_timestamp_offset_|.
740 return true; 753 return true;
741 } 754 }
742 755
743 NOTREACHED(); 756 NOTREACHED();
744 return false; 757 return false;
745 } 758 }
746 759
747 } // namespace media 760 } // namespace media
OLDNEW
« no previous file with comments | « media/filters/frame_processor.h ('k') | media/filters/source_buffer_state.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698