| Index: media/cdm/ppapi/cdm_helpers.h
|
| diff --git a/media/cdm/ppapi/cdm_helpers.h b/media/cdm/ppapi/cdm_helpers.h
|
| index e033dd79bf81b586327efc85e544250ef65fa73a..1ee579b8f0fbc567fd4ddc637488648a213f3cb6 100644
|
| --- a/media/cdm/ppapi/cdm_helpers.h
|
| +++ b/media/cdm/ppapi/cdm_helpers.h
|
| @@ -20,6 +20,8 @@
|
|
|
| namespace media {
|
|
|
| +class PpbBufferAllocator;
|
| +
|
| // cdm::Buffer implementation that provides access to memory owned by a
|
| // pp::Buffer_Dev.
|
| // This class holds a reference to the Buffer_Dev throughout its lifetime.
|
| @@ -27,48 +29,37 @@ namespace media {
|
| // pp::Buffer_Dev and PPB_Buffer_Dev.
|
| class PpbBuffer : public cdm::Buffer {
|
| public:
|
| - static PpbBuffer* Create(const pp::Buffer_Dev& buffer, uint32_t buffer_id) {
|
| - PP_DCHECK(buffer.data());
|
| - PP_DCHECK(buffer.size());
|
| - PP_DCHECK(buffer_id);
|
| - return new PpbBuffer(buffer, buffer_id);
|
| - }
|
| + static PpbBuffer* Create(const pp::Buffer_Dev& buffer, uint32_t buffer_id,
|
| + PpbBufferAllocator* allocator);
|
|
|
| // cdm::Buffer implementation.
|
| - virtual void Destroy() OVERRIDE { delete this; }
|
| -
|
| - virtual uint32_t Capacity() const OVERRIDE { return buffer_.size(); }
|
| -
|
| - virtual uint8_t* Data() OVERRIDE {
|
| - return static_cast<uint8_t*>(buffer_.data());
|
| - }
|
| -
|
| - virtual void SetSize(uint32_t size) OVERRIDE {
|
| - PP_DCHECK(size <= Capacity());
|
| - if (size > Capacity()) {
|
| - size_ = 0;
|
| - return;
|
| - }
|
| -
|
| - size_ = size;
|
| - }
|
| -
|
| + virtual void Destroy() OVERRIDE;
|
| + virtual uint32_t Capacity() const OVERRIDE;
|
| + virtual uint8_t* Data() OVERRIDE;
|
| + virtual void SetSize(uint32_t size) OVERRIDE;
|
| virtual uint32_t Size() const OVERRIDE { return size_; }
|
|
|
| - pp::Buffer_Dev buffer_dev() const { return buffer_; }
|
| + // Takes the |buffer_| from this class and returns it.
|
| + // Note: The caller must ensure |allocator->Release()| is called later so that
|
| + // the buffer can be reused by the allocator.
|
| + // Since pp::Buffer_Dev is ref-counted, the caller now holds one reference to
|
| + // the buffer and this class holds no reference. Note that other references
|
| + // may still exist. For example, PpbBufferAllocator always holds a reference
|
| + // to all allocated buffers.
|
| + pp::Buffer_Dev TakeBuffer();
|
|
|
| uint32_t buffer_id() const { return buffer_id_; }
|
|
|
| private:
|
| - PpbBuffer(pp::Buffer_Dev buffer, uint32_t buffer_id)
|
| - : buffer_(buffer),
|
| - buffer_id_(buffer_id),
|
| - size_(0) {}
|
| - virtual ~PpbBuffer() {}
|
| + PpbBuffer(pp::Buffer_Dev buffer,
|
| + uint32_t buffer_id,
|
| + PpbBufferAllocator* allocator);
|
| + virtual ~PpbBuffer();
|
|
|
| pp::Buffer_Dev buffer_;
|
| uint32_t buffer_id_;
|
| uint32_t size_;
|
| + PpbBufferAllocator* allocator_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(PpbBuffer);
|
| };
|
|
|