diff options
Diffstat (limited to 'media')
| -rw-r--r-- | media/base/buffers.h | 36 |
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_ |
