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

Unified Diff: media/filters/frame_processor.cc

Issue 2460763002: Fixed track id remapping in MSE FrameProcessor (Closed)
Patch Set: Created 4 years, 2 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/filters/frame_processor.cc
diff --git a/media/filters/frame_processor.cc b/media/filters/frame_processor.cc
index c4cd1835a6e90152e22b49eadb1e43e77e090c06..3deb3f8490e69ca45495b16f52a8d0b9b327a8bd 100644
--- a/media/filters/frame_processor.cc
+++ b/media/filters/frame_processor.cc
@@ -263,18 +263,31 @@ bool FrameProcessor::AddTrack(StreamParser::TrackId id,
return true;
}
-bool FrameProcessor::UpdateTrack(StreamParser::TrackId old_id,
- StreamParser::TrackId new_id) {
- DVLOG(2) << __func__ << "() : old_id=" << old_id << ", new_id=" << new_id;
+bool FrameProcessor::UpdateTrackIds(const TrackIdChanges& track_id_changes) {
+ TrackBuffersMap& old_track_buffers = track_buffers_;
+ TrackBuffersMap new_track_buffers;
+
+ for (const auto& ids : track_id_changes) {
+ if (old_track_buffers.find(ids.first) == old_track_buffers.end() ||
+ new_track_buffers.find(ids.second) != new_track_buffers.end()) {
+ MEDIA_LOG(ERROR, media_log_) << "Failure updating track id from "
+ << ids.first << " to " << ids.second;
+ return false;
+ }
+ new_track_buffers[ids.second] = std::move(old_track_buffers[ids.first]);
+ CHECK_EQ(1u, old_track_buffers.erase(ids.first));
+ }
- if (old_id == new_id || !FindTrack(old_id) || FindTrack(new_id)) {
- MEDIA_LOG(ERROR, media_log_) << "Failure updating track id from " << old_id
- << " to " << new_id;
- return false;
+ // Process remaining track buffers with unchanged ids.
+ for (const auto& t : old_track_buffers) {
+ if (new_track_buffers.find(t.first) != new_track_buffers.end()) {
+ MEDIA_LOG(ERROR, media_log_) << "Track id " << t.first << " conflict";
+ return false;
+ }
+ new_track_buffers[t.first] = std::move(old_track_buffers[t.first]);
}
- track_buffers_[new_id] = std::move(track_buffers_[old_id]);
- CHECK_EQ(1u, track_buffers_.erase(old_id));
+ std::swap(track_buffers_, new_track_buffers);
return true;
}
« 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