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 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
61 bool splice_frames_enabled); | 61 bool splice_frames_enabled); |
62 SourceBufferStream(const VideoDecoderConfig& video_config, | 62 SourceBufferStream(const VideoDecoderConfig& video_config, |
63 const scoped_refptr<MediaLog>& media_log, | 63 const scoped_refptr<MediaLog>& media_log, |
64 bool splice_frames_enabled); | 64 bool splice_frames_enabled); |
65 SourceBufferStream(const TextTrackConfig& text_config, | 65 SourceBufferStream(const TextTrackConfig& text_config, |
66 const scoped_refptr<MediaLog>& media_log, | 66 const scoped_refptr<MediaLog>& media_log, |
67 bool splice_frames_enabled); | 67 bool splice_frames_enabled); |
68 | 68 |
69 ~SourceBufferStream(); | 69 ~SourceBufferStream(); |
70 | 70 |
71 // Signals that the next buffers appended are part of a new coded frame group | 71 // Signals that the next buffers appended are part of a new media segment |
72 // starting at |coded_frame_group_start_time|. | 72 // starting at |media_segment_start_time|. |
73 // TODO(acolwell/wolenetz): This should be changed to a presentation | 73 // TODO(acolwell/wolenetz): This should be changed to a presentation |
74 // timestamp. See http://crbug.com/402502 | 74 // timestamp. See http://crbug.com/402502 |
75 void OnStartOfCodedFrameGroup(DecodeTimestamp coded_frame_group_start_time); | 75 void OnNewMediaSegment(DecodeTimestamp media_segment_start_time); |
76 | 76 |
77 // Add the |buffers| to the SourceBufferStream. Buffers within the queue are | 77 // Add the |buffers| to the SourceBufferStream. Buffers within the queue are |
78 // expected to be in order, but multiple calls to Append() may add buffers out | 78 // expected to be in order, but multiple calls to Append() may add buffers out |
79 // of order or overlapping. Assumes all buffers within |buffers| are in | 79 // of order or overlapping. Assumes all buffers within |buffers| are in |
80 // presentation order and are non-overlapping. | 80 // presentation order and are non-overlapping. |
81 // Returns true if Append() was successful, false if |buffers| are not added. | 81 // Returns true if Append() was successful, false if |buffers| are not added. |
82 // TODO(vrk): Implement garbage collection. (crbug.com/125070) | 82 // TODO(vrk): Implement garbage collection. (crbug.com/125070) |
83 bool Append(const BufferQueue& buffers); | 83 bool Append(const BufferQueue& buffers); |
84 | 84 |
85 // Removes buffers between |start| and |end| according to the steps | 85 // Removes buffers between |start| and |end| according to the steps |
(...skipping 304 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
390 SourceBufferRange* selected_range_ = nullptr; | 390 SourceBufferRange* selected_range_ = nullptr; |
391 | 391 |
392 // Queue of the next buffers to be returned from calls to GetNextBuffer(). If | 392 // Queue of the next buffers to be returned from calls to GetNextBuffer(). If |
393 // |track_buffer_| is empty, return buffers from |selected_range_|. | 393 // |track_buffer_| is empty, return buffers from |selected_range_|. |
394 BufferQueue track_buffer_; | 394 BufferQueue track_buffer_; |
395 | 395 |
396 // If there has been no intervening Seek, this will be true if the last | 396 // If there has been no intervening Seek, this will be true if the last |
397 // emitted buffer emptied |track_buffer_|. | 397 // emitted buffer emptied |track_buffer_|. |
398 bool just_exhausted_track_buffer_ = false; | 398 bool just_exhausted_track_buffer_ = false; |
399 | 399 |
400 // The start time of the current coded frame group being appended. | 400 // The start time of the current media segment being appended. |
401 DecodeTimestamp coded_frame_group_start_time_; | 401 DecodeTimestamp media_segment_start_time_; |
402 | 402 |
403 // Points to the range containing the current media segment being appended. | 403 // Points to the range containing the current media segment being appended. |
404 RangeList::iterator range_for_next_append_; | 404 RangeList::iterator range_for_next_append_; |
405 | 405 |
406 // True when the next call to Append() begins a new coded frame group. | 406 // True when the next call to Append() begins a new media segment. |
407 // TODO(wolenetz): Simplify by passing this flag into Append(). | 407 bool new_media_segment_ = false; |
408 bool new_coded_frame_group_ = false; | |
409 | 408 |
410 // The timestamp of the last buffer appended to the media segment, set to | 409 // The timestamp of the last buffer appended to the media segment, set to |
411 // kNoDecodeTimestamp() if the beginning of the segment. | 410 // kNoDecodeTimestamp() if the beginning of the segment. |
412 DecodeTimestamp last_appended_buffer_timestamp_ = kNoDecodeTimestamp(); | 411 DecodeTimestamp last_appended_buffer_timestamp_ = kNoDecodeTimestamp(); |
413 base::TimeDelta last_appended_buffer_duration_ = kNoTimestamp(); | 412 base::TimeDelta last_appended_buffer_duration_ = kNoTimestamp(); |
414 bool last_appended_buffer_is_keyframe_ = false; | 413 bool last_appended_buffer_is_keyframe_ = false; |
415 | 414 |
416 // The decode timestamp on the last buffer returned by the most recent | 415 // The decode timestamp on the last buffer returned by the most recent |
417 // GetNextBuffer() call. Set to kNoDecodeTimestamp() if GetNextBuffer() hasn't | 416 // GetNextBuffer() call. Set to kNoDecodeTimestamp() if GetNextBuffer() hasn't |
418 // been called yet or a seek has happened since the last GetNextBuffer() call. | 417 // been called yet or a seek has happened since the last GetNextBuffer() call. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
450 int num_splice_generation_success_logs_ = 0; | 449 int num_splice_generation_success_logs_ = 0; |
451 int num_track_buffer_gap_warning_logs_ = 0; | 450 int num_track_buffer_gap_warning_logs_ = 0; |
452 int num_garbage_collect_algorithm_logs_ = 0; | 451 int num_garbage_collect_algorithm_logs_ = 0; |
453 | 452 |
454 DISALLOW_COPY_AND_ASSIGN(SourceBufferStream); | 453 DISALLOW_COPY_AND_ASSIGN(SourceBufferStream); |
455 }; | 454 }; |
456 | 455 |
457 } // namespace media | 456 } // namespace media |
458 | 457 |
459 #endif // MEDIA_FILTERS_SOURCE_BUFFER_STREAM_H_ | 458 #endif // MEDIA_FILTERS_SOURCE_BUFFER_STREAM_H_ |
OLD | NEW |