summaryrefslogtreecommitdiffstats
path: root/media/base/buffers.h
diff options
context:
space:
mode:
Diffstat (limited to 'media/base/buffers.h')
-rw-r--r--media/base/buffers.h36
1 files changed, 25 insertions, 11 deletions
diff --git a/media/base/buffers.h b/media/base/buffers.h
index 7f0ddb8..7a3d856 100644
--- a/media/base/buffers.h
+++ b/media/base/buffers.h
@@ -124,31 +124,45 @@ class VideoFrame : public StreamSample {
};
+// An interface for receiving the results of an asynchronous read. Downstream
+// filters typically implement this interface or use AssignableBuffer and
+// provide it to upstream filters as a read request. When the upstream filter
+// has completed the read, they call SetBuffer/OnAssignment to notify the
+// downstream filter.
+//
+// TODO(scherkus): rethink the Assignable interface -- it's a bit kludgy.
template <class BufferType>
-class Assignable {
+class Assignable :
+ public base::RefCountedThreadSafe< Assignable<BufferType> > {
public:
// Assigns a buffer to the owner.
virtual void SetBuffer(BufferType* buffer) = 0;
// Notifies the owner that an assignment has been completed.
virtual void OnAssignment() = 0;
+
+ // TODO(scherkus): figure out a solution to friending a template.
+ // See http://www.comeaucomputing.com/techtalk/templates/#friendclassT for
+ // an explanation.
+ //protected:
+ // friend class base::RefCountedThreadSafe< Assignable<class T> >;
+ virtual ~Assignable() {}
};
// Template for easily creating Assignable buffers. Pass in the pointer of the
// object to receive the OnAssignment callback.
-template <class TOwner, class TBuffer>
-class AssignableBuffer : public Assignable<TBuffer>,
- public base::RefCountedThreadSafe< AssignableBuffer<TOwner, TBuffer> > {
+template <class OwnerType, class BufferType>
+class AssignableBuffer : public Assignable<BufferType> {
public:
- explicit AssignableBuffer(TOwner* owner)
+ explicit AssignableBuffer(BufferType* owner)
: owner_(owner),
buffer_(NULL) {
DCHECK(owner_);
}
- // AssignableBuffer<TBuffer> implementation.
- virtual void SetBuffer(TBuffer* buffer) {
+ // AssignableBuffer<BufferType> implementation.
+ virtual void SetBuffer(BufferType* buffer) {
buffer_ = buffer;
}
@@ -157,12 +171,12 @@ class AssignableBuffer : public Assignable<TBuffer>,
}
private:
- TOwner* owner_;
- scoped_refptr<TBuffer> buffer_;
+ OwnerType* owner_;
+ scoped_refptr<BufferType> buffer_;
DISALLOW_COPY_AND_ASSIGN(AssignableBuffer);
};
-} // namespace media
+} // namespace media
-#endif // MEDIA_BASE_BUFFERS_H_
+#endif // MEDIA_BASE_BUFFERS_H_