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

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

Issue 10879056: Support setting an explicit duration on MediaSource objects (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: response to CR Created 8 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 | Annotate | Revision Log
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | media/filters/source_buffer_stream.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 (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 // SourceBufferStream is a data structure that stores media Buffers in ranges. 5 // SourceBufferStream is a data structure that stores media Buffers in ranges.
6 // Buffers can be appended out of presentation order. Buffers are retrieved by 6 // Buffers can be appended out of presentation order. Buffers are retrieved by
7 // seeking to the desired start point and calling GetNextBuffer(). Buffers are 7 // seeking to the desired start point and calling GetNextBuffer(). Buffers are
8 // returned in sequential presentation order. 8 // returned in sequential presentation order.
9 9
10 #ifndef MEDIA_FILTERS_SOURCE_BUFFER_STREAM_H_ 10 #ifndef MEDIA_FILTERS_SOURCE_BUFFER_STREAM_H_
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 bool Append(const BufferQueue& buffers); 60 bool Append(const BufferQueue& buffers);
61 61
62 // Changes the SourceBufferStream's state so that it will start returning 62 // Changes the SourceBufferStream's state so that it will start returning
63 // buffers starting from the closest keyframe before |timestamp|. 63 // buffers starting from the closest keyframe before |timestamp|.
64 void Seek(base::TimeDelta timestamp); 64 void Seek(base::TimeDelta timestamp);
65 65
66 // Returns true if the SourceBufferStream has seeked to a time without 66 // Returns true if the SourceBufferStream has seeked to a time without
67 // buffered data and is waiting for more data to be appended. 67 // buffered data and is waiting for more data to be appended.
68 bool IsSeekPending() const; 68 bool IsSeekPending() const;
69 69
70 // Notifies the SourceBufferStream that the media duration has been changed to
71 // |duration| so it should drop any data past that point.
72 void OnSetDuration(base::TimeDelta duration);
73
70 // Fills |out_buffer| with a new buffer. Buffers are presented in order from 74 // Fills |out_buffer| with a new buffer. Buffers are presented in order from
71 // the last call to Seek(), or starting with the first buffer appended if 75 // the last call to Seek(), or starting with the first buffer appended if
72 // Seek() has not been called yet. 76 // Seek() has not been called yet.
73 // |out_buffer|'s timestamp may be earlier than the |timestamp| passed to 77 // |out_buffer|'s timestamp may be earlier than the |timestamp| passed to
74 // the last Seek() call. 78 // the last Seek() call.
75 // Returns kSuccess if |out_buffer| is filled with a valid buffer, kNeedBuffer 79 // Returns kSuccess if |out_buffer| is filled with a valid buffer, kNeedBuffer
76 // if there is not enough data buffered to fulfill the request, and 80 // if there is not enough data buffered to fulfill the request, and
77 // kConfigChange if the next buffer requires a config change. 81 // kConfigChange if the next buffer requires a config change.
78 Status GetNextBuffer(scoped_refptr<StreamParserBuffer>* out_buffer); 82 Status GetNextBuffer(scoped_refptr<StreamParserBuffer>* out_buffer);
79 83
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 RangeList::iterator AddToRanges(SourceBufferRange* new_range); 174 RangeList::iterator AddToRanges(SourceBufferRange* new_range);
171 175
172 // Returns an iterator that points to the place in |ranges_| where 176 // Returns an iterator that points to the place in |ranges_| where
173 // |selected_range_| lives. 177 // |selected_range_| lives.
174 RangeList::iterator GetSelectedRangeItr(); 178 RangeList::iterator GetSelectedRangeItr();
175 179
176 // Sets the |selected_range_| to |range| and resets the next buffer position 180 // Sets the |selected_range_| to |range| and resets the next buffer position
177 // for the previous |selected_range_|. 181 // for the previous |selected_range_|.
178 void SetSelectedRange(SourceBufferRange* range); 182 void SetSelectedRange(SourceBufferRange* range);
179 183
184 // Resets this stream back to an unseeked state.
185 void ResetSeekState();
186
180 // Returns true if |seek_timestamp| refers to the beginning of the first range 187 // Returns true if |seek_timestamp| refers to the beginning of the first range
181 // in |ranges_|, false otherwise or if |ranges_| is empty. 188 // in |ranges_|, false otherwise or if |ranges_| is empty.
182 bool ShouldSeekToStartOfBuffered(base::TimeDelta seek_timestamp) const; 189 bool ShouldSeekToStartOfBuffered(base::TimeDelta seek_timestamp) const;
183 190
184 // Returns true if the timestamps of |buffers| are monotonically increasing 191 // Returns true if the timestamps of |buffers| are monotonically increasing
185 // since the previous append to the media segment, false otherwise. 192 // since the previous append to the media segment, false otherwise.
186 bool IsMonotonicallyIncreasing(const BufferQueue& buffers) const; 193 bool IsMonotonicallyIncreasing(const BufferQueue& buffers) const;
187 194
188 // Returns true if |selected_range_| is the only range in |ranges_| that 195 // Returns true if |selected_range_| is the only range in |ranges_| that
189 // HasNextBufferPosition(). 196 // HasNextBufferPosition().
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
260 // config. GetNextBuffer() must not be called again until 267 // config. GetNextBuffer() must not be called again until
261 // GetCurrentXXXDecoderConfig() has been called. 268 // GetCurrentXXXDecoderConfig() has been called.
262 bool config_change_pending_; 269 bool config_change_pending_;
263 270
264 DISALLOW_COPY_AND_ASSIGN(SourceBufferStream); 271 DISALLOW_COPY_AND_ASSIGN(SourceBufferStream);
265 }; 272 };
266 273
267 } // namespace media 274 } // namespace media
268 275
269 #endif // MEDIA_FILTERS_SOURCE_BUFFER_STREAM_H_ 276 #endif // MEDIA_FILTERS_SOURCE_BUFFER_STREAM_H_
OLDNEW
« no previous file with comments | « media/filters/chunk_demuxer.cc ('k') | media/filters/source_buffer_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698