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 #ifndef MEDIA_BASE_STREAM_PARSER_BUFFER_H_ | 5 #ifndef MEDIA_BASE_STREAM_PARSER_BUFFER_H_ |
6 #define MEDIA_BASE_STREAM_PARSER_BUFFER_H_ | 6 #define MEDIA_BASE_STREAM_PARSER_BUFFER_H_ |
7 | 7 |
8 #include <deque> | 8 #include <deque> |
9 | 9 |
10 #include "media/base/decoder_buffer.h" | 10 #include "media/base/decoder_buffer.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 TrackId track_id); | 29 TrackId track_id); |
30 static scoped_refptr<StreamParserBuffer> CopyFrom( | 30 static scoped_refptr<StreamParserBuffer> CopyFrom( |
31 const uint8* data, int data_size, | 31 const uint8* data, int data_size, |
32 const uint8* side_data, int side_data_size, bool is_keyframe, Type type, | 32 const uint8* side_data, int side_data_size, bool is_keyframe, Type type, |
33 TrackId track_id); | 33 TrackId track_id); |
34 bool IsKeyframe() const { return is_keyframe_; } | 34 bool IsKeyframe() const { return is_keyframe_; } |
35 | 35 |
36 // Decode timestamp. If not explicitly set, or set to kNoTimestamp(), the | 36 // Decode timestamp. If not explicitly set, or set to kNoTimestamp(), the |
37 // value will be taken from the normal timestamp. | 37 // value will be taken from the normal timestamp. |
38 base::TimeDelta GetDecodeTimestamp() const; | 38 base::TimeDelta GetDecodeTimestamp() const; |
39 void SetDecodeTimestamp(const base::TimeDelta& timestamp); | 39 void SetDecodeTimestamp(base::TimeDelta timestamp); |
40 | 40 |
41 // Gets/sets the ID of the decoder config associated with this buffer. | 41 // Gets/sets the ID of the decoder config associated with this buffer. |
42 int GetConfigId() const; | 42 int GetConfigId() const; |
43 void SetConfigId(int config_id); | 43 void SetConfigId(int config_id); |
44 | 44 |
45 // Gets the parser's media type associated with this buffer. Value is | 45 // Gets the parser's media type associated with this buffer. Value is |
46 // meaningless for EOS buffers. | 46 // meaningless for EOS buffers. |
47 Type type() const { return type_; } | 47 Type type() const { return type_; } |
48 | 48 |
49 // Gets the parser's track ID associated with this buffer. Value is | 49 // Gets the parser's track ID associated with this buffer. Value is |
50 // meaningless for EOS buffers. | 50 // meaningless for EOS buffers. |
51 TrackId track_id() const { return track_id_; } | 51 TrackId track_id() const { return track_id_; } |
52 | 52 |
53 // Converts this buffer to a splice buffer. |pre_splice_buffers| must not | 53 // Converts this buffer to a splice buffer. |pre_splice_buffers| must not |
54 // have any EOS buffers and must not have any nested splice buffers. | 54 // have any EOS buffers, must not have any splice buffers, nor must have any |
| 55 // buffer with preroll. |
55 // | 56 // |
56 // |pre_splice_buffers| will be deep copied and each copy's splice_timestamp() | 57 // |pre_splice_buffers| will be deep copied and each copy's splice_timestamp() |
57 // will be set to this buffer's splice_timestamp(). A copy of |this|, with a | 58 // will be set to this buffer's splice_timestamp(). A copy of |this|, with a |
58 // splice_timestamp() of kNoTimestamp(), will be added to the end of | 59 // splice_timestamp() of kNoTimestamp(), will be added to the end of |
59 // |splice_buffers_|. | 60 // |splice_buffers_|. |
60 // | 61 // |
61 // See the Audio Splice Frame Algorithm in the MSE specification for details. | 62 // See the Audio Splice Frame Algorithm in the MSE specification for details. |
62 typedef StreamParser::BufferQueue BufferQueue; | 63 typedef StreamParser::BufferQueue BufferQueue; |
63 void ConvertToSpliceBuffer(const BufferQueue& pre_splice_buffers); | 64 void ConvertToSpliceBuffer(const BufferQueue& pre_splice_buffers); |
64 const BufferQueue& splice_buffers() const { return splice_buffers_; } | 65 const BufferQueue& splice_buffers() const { return splice_buffers_; } |
65 | 66 |
| 67 // Specifies a buffer which must be decoded prior to this one to ensure this |
| 68 // buffer can be accurately decoded. The given buffer must be of the same |
| 69 // type, must not be a splice buffer, must not have any discard padding, and |
| 70 // must not be an end of stream buffer. |preroll| is not copied. |
| 71 // |
| 72 // It's expected that this preroll buffer will be discarded entirely post |
| 73 // decoding. As such it's discard_padding() will be set to kInfiniteDuration. |
| 74 // |
| 75 // All future timestamp, decode timestamp, config id, or track id changes to |
| 76 // this buffer will be applied to the preroll buffer as well. |
| 77 void SetPrerollBuffer(const scoped_refptr<StreamParserBuffer>& preroll); |
| 78 const scoped_refptr<StreamParserBuffer>& preroll_buffer() { |
| 79 return preroll_buffer_; |
| 80 } |
| 81 |
| 82 virtual void set_timestamp(base::TimeDelta timestamp) OVERRIDE; |
| 83 |
66 private: | 84 private: |
67 StreamParserBuffer(const uint8* data, int data_size, | 85 StreamParserBuffer(const uint8* data, int data_size, |
68 const uint8* side_data, int side_data_size, | 86 const uint8* side_data, int side_data_size, |
69 bool is_keyframe, Type type, | 87 bool is_keyframe, Type type, |
70 TrackId track_id); | 88 TrackId track_id); |
71 virtual ~StreamParserBuffer(); | 89 virtual ~StreamParserBuffer(); |
72 | 90 |
73 bool is_keyframe_; | 91 bool is_keyframe_; |
74 base::TimeDelta decode_timestamp_; | 92 base::TimeDelta decode_timestamp_; |
75 int config_id_; | 93 int config_id_; |
76 Type type_; | 94 Type type_; |
77 TrackId track_id_; | 95 TrackId track_id_; |
78 | |
79 BufferQueue splice_buffers_; | 96 BufferQueue splice_buffers_; |
| 97 scoped_refptr<StreamParserBuffer> preroll_buffer_; |
80 | 98 |
81 DISALLOW_COPY_AND_ASSIGN(StreamParserBuffer); | 99 DISALLOW_COPY_AND_ASSIGN(StreamParserBuffer); |
82 }; | 100 }; |
83 | 101 |
84 } // namespace media | 102 } // namespace media |
85 | 103 |
86 #endif // MEDIA_BASE_STREAM_PARSER_BUFFER_H_ | 104 #endif // MEDIA_BASE_STREAM_PARSER_BUFFER_H_ |
OLD | NEW |