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

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

Issue 2171133002: Implement opus seek preroll for MediaSourceExtensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 5 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 #include <sstream> 9 #include <sstream>
10 10
(...skipping 1087 matching lines...) Expand 10 before | Expand all | Expand 10 after
1098 1098
1099 RangeList::iterator itr = ranges_.end(); 1099 RangeList::iterator itr = ranges_.end();
1100 for (itr = ranges_.begin(); itr != ranges_.end(); ++itr) { 1100 for (itr = ranges_.begin(); itr != ranges_.end(); ++itr) {
1101 if ((*itr)->CanSeekTo(seek_dts)) 1101 if ((*itr)->CanSeekTo(seek_dts))
1102 break; 1102 break;
1103 } 1103 }
1104 1104
1105 if (itr == ranges_.end()) 1105 if (itr == ranges_.end())
1106 return; 1106 return;
1107 1107
1108 if (!audio_configs_.empty()) {
1109 const auto& config = audio_configs_[(*itr)->GetConfigIdAtTime(seek_dts)];
1110 if (config.codec() == kCodecOpus) {
1111 DecodeTimestamp preroll_dts = std::max(seek_dts - config.seek_preroll(),
1112 (*itr)->GetStartTimestamp());
1113 if ((*itr)->CanSeekTo(preroll_dts) &&
chcunningham 2016/07/22 01:50:28 FYI: I've taken a conservative approach here. If w
wolenetz 2016/12/02 00:18:49 Acknowledged.
1114 (*itr)->SameConfigThruRange(preroll_dts, seek_dts)) {
1115 seek_dts = preroll_dts;
1116 }
1117 }
1118 }
1119
1108 SeekAndSetSelectedRange(*itr, seek_dts); 1120 SeekAndSetSelectedRange(*itr, seek_dts);
1109 seek_pending_ = false; 1121 seek_pending_ = false;
1110 } 1122 }
1111 1123
1112 bool SourceBufferStream::IsSeekPending() const { 1124 bool SourceBufferStream::IsSeekPending() const {
1113 return seek_pending_ && !IsEndOfStreamReached(); 1125 return seek_pending_ && !IsEndOfStreamReached();
1114 } 1126 }
1115 1127
1116 void SourceBufferStream::OnSetDuration(base::TimeDelta duration) { 1128 void SourceBufferStream::OnSetDuration(base::TimeDelta duration) {
1117 DecodeTimestamp duration_dts = 1129 DecodeTimestamp duration_dts =
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after
1813 return false; 1825 return false;
1814 1826
1815 DCHECK_NE(have_splice_buffers, have_preroll_buffer); 1827 DCHECK_NE(have_splice_buffers, have_preroll_buffer);
1816 splice_buffers_index_ = 0; 1828 splice_buffers_index_ = 0;
1817 pending_buffer_.swap(*out_buffer); 1829 pending_buffer_.swap(*out_buffer);
1818 pending_buffers_complete_ = false; 1830 pending_buffers_complete_ = false;
1819 return true; 1831 return true;
1820 } 1832 }
1821 1833
1822 } // namespace media 1834 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698