| OLD | NEW |
| 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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 // next to it, and merges them if so. | 204 // next to it, and merges them if so. |
| 205 void MergeWithAdjacentRangeIfNecessary( | 205 void MergeWithAdjacentRangeIfNecessary( |
| 206 const RangeList::iterator& range_with_new_buffers_itr); | 206 const RangeList::iterator& range_with_new_buffers_itr); |
| 207 | 207 |
| 208 // Returns true if |second_timestamp| is the timestamp of the next buffer in | 208 // Returns true if |second_timestamp| is the timestamp of the next buffer in |
| 209 // sequence after |first_timestamp|, false otherwise. | 209 // sequence after |first_timestamp|, false otherwise. |
| 210 bool AreAdjacentInSequence( | 210 bool AreAdjacentInSequence( |
| 211 DecodeTimestamp first_timestamp, DecodeTimestamp second_timestamp) const; | 211 DecodeTimestamp first_timestamp, DecodeTimestamp second_timestamp) const; |
| 212 | 212 |
| 213 // Helper method that returns the timestamp for the next buffer that | 213 // Helper method that returns the timestamp for the next buffer that |
| 214 // |selected_range_| will return from GetNextBuffer() call, or kNoTimestamp() | 214 // |selected_range_| will return from GetNextBuffer() call, or kNoTimestamp |
| 215 // if in between seeking (i.e. |selected_range_| is null). | 215 // if in between seeking (i.e. |selected_range_| is null). |
| 216 DecodeTimestamp GetNextBufferTimestamp(); | 216 DecodeTimestamp GetNextBufferTimestamp(); |
| 217 | 217 |
| 218 // Finds the range that should contain a coded frame group that begins with | 218 // Finds the range that should contain a coded frame group that begins with |
| 219 // |start_timestamp| and returns the iterator pointing to it. Returns | 219 // |start_timestamp| and returns the iterator pointing to it. Returns |
| 220 // |ranges_.end()| if there's no such existing range. | 220 // |ranges_.end()| if there's no such existing range. |
| 221 RangeList::iterator FindExistingRangeFor(DecodeTimestamp start_timestamp); | 221 RangeList::iterator FindExistingRangeFor(DecodeTimestamp start_timestamp); |
| 222 | 222 |
| 223 // Inserts |new_range| into |ranges_| preserving sorted order. Returns an | 223 // Inserts |new_range| into |ranges_| preserving sorted order. Returns an |
| 224 // iterator in |ranges_| that points to |new_range|. | 224 // iterator in |ranges_| that points to |new_range|. |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 void CompleteConfigChange(); | 265 void CompleteConfigChange(); |
| 266 | 266 |
| 267 // Sets |selected_range_| and seeks to the nearest keyframe after | 267 // Sets |selected_range_| and seeks to the nearest keyframe after |
| 268 // |timestamp| if necessary and possible. This method only attempts to | 268 // |timestamp| if necessary and possible. This method only attempts to |
| 269 // set |selected_range_| if |seleted_range_| is null and |track_buffer_| | 269 // set |selected_range_| if |seleted_range_| is null and |track_buffer_| |
| 270 // is empty. | 270 // is empty. |
| 271 void SetSelectedRangeIfNeeded(const DecodeTimestamp timestamp); | 271 void SetSelectedRangeIfNeeded(const DecodeTimestamp timestamp); |
| 272 | 272 |
| 273 // Find a keyframe timestamp that is >= |start_timestamp| and can be used to | 273 // Find a keyframe timestamp that is >= |start_timestamp| and can be used to |
| 274 // find a new selected range. | 274 // find a new selected range. |
| 275 // Returns kNoTimestamp() if an appropriate keyframe timestamp could not be | 275 // Returns kNoTimestamp if an appropriate keyframe timestamp could not be |
| 276 // found. | 276 // found. |
| 277 DecodeTimestamp FindNewSelectedRangeSeekTimestamp( | 277 DecodeTimestamp FindNewSelectedRangeSeekTimestamp( |
| 278 const DecodeTimestamp start_timestamp); | 278 const DecodeTimestamp start_timestamp); |
| 279 | 279 |
| 280 // Searches |ranges_| for the first keyframe timestamp that is >= |timestamp|. | 280 // Searches |ranges_| for the first keyframe timestamp that is >= |timestamp|. |
| 281 // If |ranges_| doesn't contain a GOP that covers |timestamp| or doesn't | 281 // If |ranges_| doesn't contain a GOP that covers |timestamp| or doesn't |
| 282 // have a keyframe after |timestamp| then kNoTimestamp() is returned. | 282 // have a keyframe after |timestamp| then kNoTimestamp is returned. |
| 283 DecodeTimestamp FindKeyframeAfterTimestamp(const DecodeTimestamp timestamp); | 283 DecodeTimestamp FindKeyframeAfterTimestamp(const DecodeTimestamp timestamp); |
| 284 | 284 |
| 285 // Returns "VIDEO" for a video SourceBufferStream, "AUDIO" for an audio | 285 // Returns "VIDEO" for a video SourceBufferStream, "AUDIO" for an audio |
| 286 // stream, and "TEXT" for a text stream. | 286 // stream, and "TEXT" for a text stream. |
| 287 std::string GetStreamTypeName() const; | 287 std::string GetStreamTypeName() const; |
| 288 | 288 |
| 289 // Returns true if end of stream has been reached, i.e. the | 289 // Returns true if end of stream has been reached, i.e. the |
| 290 // following conditions are met: | 290 // following conditions are met: |
| 291 // 1. end of stream is marked and there is nothing in the track_buffer. | 291 // 1. end of stream is marked and there is nothing in the track_buffer. |
| 292 // 2. We don't have any ranges, or the last or no range is selected, | 292 // 2. We don't have any ranges, or the last or no range is selected, |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 412 // appended. | 412 // appended. |
| 413 RangeList::iterator range_for_next_append_; | 413 RangeList::iterator range_for_next_append_; |
| 414 | 414 |
| 415 // True when the next call to Append() begins a new coded frame group. | 415 // True when the next call to Append() begins a new coded frame group. |
| 416 // TODO(wolenetz): Simplify by passing this flag into Append(). | 416 // TODO(wolenetz): Simplify by passing this flag into Append(). |
| 417 bool new_coded_frame_group_ = false; | 417 bool new_coded_frame_group_ = false; |
| 418 | 418 |
| 419 // The timestamp of the last buffer appended to the coded frame group, set to | 419 // The timestamp of the last buffer appended to the coded frame group, set to |
| 420 // kNoDecodeTimestamp() if the beginning of the group. | 420 // kNoDecodeTimestamp() if the beginning of the group. |
| 421 DecodeTimestamp last_appended_buffer_timestamp_ = kNoDecodeTimestamp(); | 421 DecodeTimestamp last_appended_buffer_timestamp_ = kNoDecodeTimestamp(); |
| 422 base::TimeDelta last_appended_buffer_duration_ = kNoTimestamp(); | 422 base::TimeDelta last_appended_buffer_duration_ = kNoTimestamp; |
| 423 bool last_appended_buffer_is_keyframe_ = false; | 423 bool last_appended_buffer_is_keyframe_ = false; |
| 424 | 424 |
| 425 // The decode timestamp on the last buffer returned by the most recent | 425 // The decode timestamp on the last buffer returned by the most recent |
| 426 // GetNextBuffer() call. Set to kNoDecodeTimestamp() if GetNextBuffer() hasn't | 426 // GetNextBuffer() call. Set to kNoDecodeTimestamp() if GetNextBuffer() hasn't |
| 427 // been called yet or a seek has happened since the last GetNextBuffer() call. | 427 // been called yet or a seek has happened since the last GetNextBuffer() call. |
| 428 DecodeTimestamp last_output_buffer_timestamp_; | 428 DecodeTimestamp last_output_buffer_timestamp_; |
| 429 | 429 |
| 430 // Stores the largest distance between two adjacent buffers in this stream. | 430 // Stores the largest distance between two adjacent buffers in this stream. |
| 431 base::TimeDelta max_interbuffer_distance_; | 431 base::TimeDelta max_interbuffer_distance_; |
| 432 | 432 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 460 int num_track_buffer_gap_warning_logs_ = 0; | 460 int num_track_buffer_gap_warning_logs_ = 0; |
| 461 int num_garbage_collect_algorithm_logs_ = 0; | 461 int num_garbage_collect_algorithm_logs_ = 0; |
| 462 int num_strange_same_timestamps_logs_ = 0; | 462 int num_strange_same_timestamps_logs_ = 0; |
| 463 | 463 |
| 464 DISALLOW_COPY_AND_ASSIGN(SourceBufferStream); | 464 DISALLOW_COPY_AND_ASSIGN(SourceBufferStream); |
| 465 }; | 465 }; |
| 466 | 466 |
| 467 } // namespace media | 467 } // namespace media |
| 468 | 468 |
| 469 #endif // MEDIA_FILTERS_SOURCE_BUFFER_STREAM_H_ | 469 #endif // MEDIA_FILTERS_SOURCE_BUFFER_STREAM_H_ |
| OLD | NEW |