OLD | NEW |
1 // Copyright (c) 2008-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2008-2009 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 // Defines various types of timestamped media buffers used for transporting | 5 // Defines various types of timestamped media buffers used for transporting |
6 // data between filters. Every buffer contains a timestamp in microseconds | 6 // data between filters. Every buffer contains a timestamp in microseconds |
7 // describing the relative position of the buffer within the media stream, and | 7 // describing the relative position of the buffer within the media stream, and |
8 // the duration in microseconds for the length of time the buffer will be | 8 // the duration in microseconds for the length of time the buffer will be |
9 // rendered. | 9 // rendered. |
10 // | 10 // |
(...skipping 27 matching lines...) Expand all Loading... |
38 // Returns the timestamp of this buffer in microseconds. | 38 // Returns the timestamp of this buffer in microseconds. |
39 base::TimeDelta GetTimestamp() const { | 39 base::TimeDelta GetTimestamp() const { |
40 return timestamp_; | 40 return timestamp_; |
41 } | 41 } |
42 | 42 |
43 // Returns the duration of this buffer in microseconds. | 43 // Returns the duration of this buffer in microseconds. |
44 base::TimeDelta GetDuration() const { | 44 base::TimeDelta GetDuration() const { |
45 return duration_; | 45 return duration_; |
46 } | 46 } |
47 | 47 |
48 // Indicates that the sample is the last one in the stream. | 48 // Indicates that the sample is the last one in the stream. This method is |
49 bool IsEndOfStream() const { | 49 // pure virtual so implementors can decide when to declare end of stream |
50 return end_of_stream_; | 50 // depending on specific data. |
51 } | 51 virtual bool IsEndOfStream() const = 0; |
52 | 52 |
53 // Indicates that this sample is discontinuous from the previous one, for | 53 // Indicates that this sample is discontinuous from the previous one, for |
54 // example, following a seek. | 54 // example, following a seek. |
55 bool IsDiscontinuous() const { | 55 bool IsDiscontinuous() const { |
56 return discontinuous_; | 56 return discontinuous_; |
57 } | 57 } |
58 | 58 |
59 // Sets the timestamp of this buffer in microseconds. | 59 // Sets the timestamp of this buffer in microseconds. |
60 void SetTimestamp(const base::TimeDelta& timestamp) { | 60 void SetTimestamp(const base::TimeDelta& timestamp) { |
61 timestamp_ = timestamp; | 61 timestamp_ = timestamp; |
62 } | 62 } |
63 | 63 |
64 // Sets the duration of this buffer in microseconds. | 64 // Sets the duration of this buffer in microseconds. |
65 void SetDuration(const base::TimeDelta& duration) { | 65 void SetDuration(const base::TimeDelta& duration) { |
66 duration_ = duration; | 66 duration_ = duration; |
67 } | 67 } |
68 | 68 |
69 // Sets the value returned by IsEndOfStream(). | |
70 void SetEndOfStream(bool end_of_stream) { | |
71 end_of_stream_ = end_of_stream; | |
72 } | |
73 | |
74 // Sets the value returned by IsDiscontinuous(). | 69 // Sets the value returned by IsDiscontinuous(). |
75 void SetDiscontinuous(bool discontinuous) { | 70 void SetDiscontinuous(bool discontinuous) { |
76 discontinuous_ = discontinuous; | 71 discontinuous_ = discontinuous; |
77 } | 72 } |
78 | 73 |
79 protected: | 74 protected: |
80 friend class base::RefCountedThreadSafe<StreamSample>; | 75 friend class base::RefCountedThreadSafe<StreamSample>; |
81 StreamSample() | 76 StreamSample() |
82 : end_of_stream_(false), | 77 : discontinuous_(false) { |
83 discontinuous_(false) { | |
84 } | 78 } |
85 virtual ~StreamSample() {} | 79 virtual ~StreamSample() {} |
86 | 80 |
87 base::TimeDelta timestamp_; | 81 base::TimeDelta timestamp_; |
88 base::TimeDelta duration_; | 82 base::TimeDelta duration_; |
89 bool end_of_stream_; | |
90 bool discontinuous_; | 83 bool discontinuous_; |
91 | 84 |
92 private: | 85 private: |
93 DISALLOW_COPY_AND_ASSIGN(StreamSample); | 86 DISALLOW_COPY_AND_ASSIGN(StreamSample); |
94 }; | 87 }; |
95 | 88 |
96 | 89 |
97 class Buffer : public StreamSample { | 90 class Buffer : public StreamSample { |
98 public: | 91 public: |
99 // Returns a read only pointer to the buffer data. | 92 // Returns a read only pointer to the buffer data. |
100 virtual const uint8* GetData() const = 0; | 93 virtual const uint8* GetData() const = 0; |
101 | 94 |
102 // Returns the size of valid data in bytes. | 95 // Returns the size of valid data in bytes. |
103 virtual size_t GetDataSize() const = 0; | 96 virtual size_t GetDataSize() const = 0; |
| 97 |
| 98 // If there's no data in this buffer, it represents end of stream. |
| 99 virtual bool IsEndOfStream() const { return GetData() == NULL; } |
104 }; | 100 }; |
105 | 101 |
106 | 102 |
107 class WritableBuffer : public Buffer { | 103 class WritableBuffer : public Buffer { |
108 public: | 104 public: |
109 // Returns a read-write pointer to the buffer data. When this method is | 105 // Returns a read-write pointer to the buffer data. When this method is |
110 // called, any pointers previously returned from this method are invalid, and | 106 // called, any pointers previously returned from this method are invalid, and |
111 // any data previously written to the buffer is invalid. The buffer size | 107 // any data previously written to the buffer is invalid. The buffer size |
112 // is guaranteed to be at least the size of |buffer_size|. The size | 108 // is guaranteed to be at least the size of |buffer_size|. The size |
113 // that the GetDataSize() method will return is set to |buffer_size|. | 109 // that the GetDataSize() method will return is set to |buffer_size|. |
(...skipping 22 matching lines...) Expand all Loading... |
136 // http://www.fourcc.org/rgb.php | 132 // http://www.fourcc.org/rgb.php |
137 // http://www.fourcc.org/yuv.php | 133 // http://www.fourcc.org/yuv.php |
138 enum Format { | 134 enum Format { |
139 RGB555, // 16bpp RGB packed 5:5:5 | 135 RGB555, // 16bpp RGB packed 5:5:5 |
140 RGB565, // 16bpp RGB packed 5:6:5 | 136 RGB565, // 16bpp RGB packed 5:6:5 |
141 RGB24, // 24bpp RGB packed 8:8:8 | 137 RGB24, // 24bpp RGB packed 8:8:8 |
142 RGB32, // 32bpp RGB packed with extra byte 8:8:8 | 138 RGB32, // 32bpp RGB packed with extra byte 8:8:8 |
143 RGBA, // 32bpp RGBA packed 8:8:8:8 | 139 RGBA, // 32bpp RGBA packed 8:8:8:8 |
144 YV12, // 12bpp YVU planar 1x1 Y, 2x2 VU samples | 140 YV12, // 12bpp YVU planar 1x1 Y, 2x2 VU samples |
145 YV16, // 16bpp YVU planar 1x1 Y, 2x1 VU samples | 141 YV16, // 16bpp YVU planar 1x1 Y, 2x1 VU samples |
| 142 EMPTY, // An empty frame. |
146 }; | 143 }; |
147 | 144 |
148 // Surface format. | 145 // Surface format. |
149 Format format; | 146 Format format; |
150 | 147 |
151 // Width and height of surface. | 148 // Width and height of surface. |
152 size_t width; | 149 size_t width; |
153 size_t height; | 150 size_t height; |
154 | 151 |
155 // Number of planes, typically 1 for packed RGB formats and 3 for planar | 152 // Number of planes, typically 1 for packed RGB formats and 3 for planar |
(...skipping 13 matching lines...) Expand all Loading... |
169 class VideoFrame : public StreamSample { | 166 class VideoFrame : public StreamSample { |
170 public: | 167 public: |
171 // Locks the underlying surface and fills out the given VideoSurface and | 168 // Locks the underlying surface and fills out the given VideoSurface and |
172 // returns true if successful, false otherwise. Any additional calls to Lock | 169 // returns true if successful, false otherwise. Any additional calls to Lock |
173 // will fail. | 170 // will fail. |
174 virtual bool Lock(VideoSurface* surface) = 0; | 171 virtual bool Lock(VideoSurface* surface) = 0; |
175 | 172 |
176 // Unlocks the underlying surface, the VideoSurface acquired from Lock is no | 173 // Unlocks the underlying surface, the VideoSurface acquired from Lock is no |
177 // longer guaranteed to be valid. | 174 // longer guaranteed to be valid. |
178 virtual void Unlock() = 0; | 175 virtual void Unlock() = 0; |
| 176 |
| 177 virtual bool IsEndOfStream() const = 0; |
179 }; | 178 }; |
180 | 179 |
181 } // namespace media | 180 } // namespace media |
182 | 181 |
183 #endif // MEDIA_BASE_BUFFERS_H_ | 182 #endif // MEDIA_BASE_BUFFERS_H_ |
OLD | NEW |