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

Side by Side Diff: media/base/buffers.h

Issue 27120: Added IsEndOfStream and IsDiscontiguous flags to buffers. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 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 | « no previous file | media/base/data_buffer.h » ('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) 2006-2008 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 //
11 // Timestamps are derived directly from the encoded media file and are commonly 11 // Timestamps are derived directly from the encoded media file and are commonly
(...skipping 17 matching lines...) Expand all
29 29
30 #include "base/logging.h" 30 #include "base/logging.h"
31 #include "base/ref_counted.h" 31 #include "base/ref_counted.h"
32 #include "base/time.h" 32 #include "base/time.h"
33 33
34 namespace media { 34 namespace media {
35 35
36 class StreamSample : public base::RefCountedThreadSafe<StreamSample> { 36 class StreamSample : public base::RefCountedThreadSafe<StreamSample> {
37 public: 37 public:
38 // Returns the timestamp of this buffer in microseconds. 38 // Returns the timestamp of this buffer in microseconds.
39 virtual base::TimeDelta GetTimestamp() const = 0; 39 base::TimeDelta GetTimestamp() const {
40 return timestamp_;
41 }
40 42
41 // Returns the duration of this buffer in microseconds. 43 // Returns the duration of this buffer in microseconds.
42 virtual base::TimeDelta GetDuration() const = 0; 44 base::TimeDelta GetDuration() const {
45 return duration_;
46 }
47
48 // Indicates that the sample is the last one in the stream.
49 bool IsEndOfStream() const {
50 return end_of_stream_;
51 }
52
53 // Indicates that this sample is discontinuous from the previous one, for
54 // example, following a seek.
55 bool IsDiscontinuous() const {
56 return discontinuous_;
57 }
43 58
44 // Sets the timestamp of this buffer in microseconds. 59 // Sets the timestamp of this buffer in microseconds.
45 virtual void SetTimestamp(const base::TimeDelta& timestamp) = 0; 60 void SetTimestamp(const base::TimeDelta& timestamp) {
61 timestamp_ = timestamp;
62 }
46 63
47 // Sets the duration of this buffer in microseconds. 64 // Sets the duration of this buffer in microseconds.
48 virtual void SetDuration(const base::TimeDelta& duration) = 0; 65 void SetDuration(const base::TimeDelta& duration) {
66 duration_ = duration;
67 }
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().
75 void SetDiscontinuous(bool discontinuous) {
76 discontinuous_ = discontinuous;
77 }
49 78
50 protected: 79 protected:
51 friend class base::RefCountedThreadSafe<StreamSample>; 80 friend class base::RefCountedThreadSafe<StreamSample>;
81 StreamSample()
82 : end_of_stream_(false),
83 discontinuous_(false) {
84 }
52 virtual ~StreamSample() {} 85 virtual ~StreamSample() {}
86
87 base::TimeDelta timestamp_;
88 base::TimeDelta duration_;
89 bool end_of_stream_;
90 bool discontinuous_;
91
92 private:
93 DISALLOW_COPY_AND_ASSIGN(StreamSample);
53 }; 94 };
54 95
55 96
56 class Buffer : public StreamSample { 97 class Buffer : public StreamSample {
57 public: 98 public:
58 // Returns a read only pointer to the buffer data. 99 // Returns a read only pointer to the buffer data.
59 virtual const char* GetData() const = 0; 100 virtual const char* GetData() const = 0;
60 101
61 // Returns the size of valid data in bytes. 102 // Returns the size of valid data in bytes.
62 virtual size_t GetDataSize() const = 0; 103 virtual size_t GetDataSize() const = 0;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 168
128 169
129 // An interface for receiving the results of an asynchronous read. Downstream 170 // An interface for receiving the results of an asynchronous read. Downstream
130 // filters typically implement this interface or use AssignableBuffer and 171 // filters typically implement this interface or use AssignableBuffer and
131 // provide it to upstream filters as a read request. When the upstream filter 172 // provide it to upstream filters as a read request. When the upstream filter
132 // has completed the read, they call SetBuffer/OnAssignment to notify the 173 // has completed the read, they call SetBuffer/OnAssignment to notify the
133 // downstream filter. 174 // downstream filter.
134 // 175 //
135 // TODO(scherkus): rethink the Assignable interface -- it's a bit kludgy. 176 // TODO(scherkus): rethink the Assignable interface -- it's a bit kludgy.
136 template <class BufferType> 177 template <class BufferType>
137 class Assignable : 178 class Assignable
138 public base::RefCountedThreadSafe< Assignable<BufferType> > { 179 : public base::RefCountedThreadSafe< Assignable<BufferType> > {
139 public: 180 public:
140 // Assigns a buffer to the owner. 181 // Assigns a buffer to the owner.
141 virtual void SetBuffer(BufferType* buffer) = 0; 182 virtual void SetBuffer(BufferType* buffer) = 0;
142 183
143 // Notifies the owner that an assignment has been completed. 184 // Notifies the owner that an assignment has been completed.
144 virtual void OnAssignment() = 0; 185 virtual void OnAssignment() = 0;
145 186
146 // TODO(scherkus): figure out a solution to friending a template. 187 // TODO(scherkus): figure out a solution to friending a template.
147 // See http://www.comeaucomputing.com/techtalk/templates/#friendclassT for 188 // See http://www.comeaucomputing.com/techtalk/templates/#friendclassT for
148 // an explanation. 189 // an explanation.
149 //protected: 190 // protected:
150 // friend class base::RefCountedThreadSafe< Assignable<class T> >; 191 // friend class base::RefCountedThreadSafe< Assignable<class T> >;
151 virtual ~Assignable() {} 192 virtual ~Assignable() {}
152 }; 193 };
153 194
154 195
155 // Template for easily creating Assignable buffers. Pass in the pointer of the 196 // Template for easily creating Assignable buffers. Pass in the pointer of the
156 // object to receive the OnAssignment callback. 197 // object to receive the OnAssignment callback.
157 template <class OwnerType, class BufferType> 198 template <class OwnerType, class BufferType>
158 class AssignableBuffer : public Assignable<BufferType> { 199 class AssignableBuffer : public Assignable<BufferType> {
159 public: 200 public:
(...skipping 15 matching lines...) Expand all
175 private: 216 private:
176 OwnerType* owner_; 217 OwnerType* owner_;
177 scoped_refptr<BufferType> buffer_; 218 scoped_refptr<BufferType> buffer_;
178 219
179 DISALLOW_COPY_AND_ASSIGN(AssignableBuffer); 220 DISALLOW_COPY_AND_ASSIGN(AssignableBuffer);
180 }; 221 };
181 222
182 } // namespace media 223 } // namespace media
183 224
184 #endif // MEDIA_BASE_BUFFERS_H_ 225 #endif // MEDIA_BASE_BUFFERS_H_
OLDNEW
« no previous file with comments | « no previous file | media/base/data_buffer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698