| Index: media/base/decoder_buffer.cc
|
| diff --git a/media/base/decoder_buffer.cc b/media/base/decoder_buffer.cc
|
| index 03f9bbbc566abc70abb878bc0dc00b34c82b7093..d0a9cfe7ecbddff1ac3c5ee455e9537f100a793d 100644
|
| --- a/media/base/decoder_buffer.cc
|
| +++ b/media/base/decoder_buffer.cc
|
| @@ -10,12 +10,14 @@
|
| namespace media {
|
|
|
| DecoderBuffer::DecoderBuffer(int size)
|
| - : size_(size) {
|
| + : size_(size),
|
| + side_data_size_(0) {
|
| Initialize();
|
| }
|
|
|
| DecoderBuffer::DecoderBuffer(const uint8* data, int size)
|
| - : size_(size) {
|
| + : size_(size),
|
| + side_data_size_(0) {
|
| if (!data) {
|
| CHECK_EQ(size_, 0);
|
| return;
|
| @@ -25,6 +27,20 @@ DecoderBuffer::DecoderBuffer(const uint8* data, int size)
|
| memcpy(data_.get(), data, size_);
|
| }
|
|
|
| +DecoderBuffer::DecoderBuffer(const uint8* data, int size,
|
| + const uint8* side_data, int side_data_size)
|
| + : size_(size),
|
| + side_data_size_(side_data_size) {
|
| + if (!data) {
|
| + CHECK_EQ(size_, 0);
|
| + return;
|
| + }
|
| +
|
| + Initialize();
|
| + memcpy(data_.get(), data, size_);
|
| + memcpy(side_data_.get(), side_data, side_data_size_);
|
| +}
|
| +
|
| DecoderBuffer::~DecoderBuffer() {}
|
|
|
| void DecoderBuffer::Initialize() {
|
| @@ -32,6 +48,11 @@ void DecoderBuffer::Initialize() {
|
| data_.reset(reinterpret_cast<uint8*>(
|
| base::AlignedAlloc(size_ + kPaddingSize, kAlignmentSize)));
|
| memset(data_.get() + size_, 0, kPaddingSize);
|
| + if (side_data_size_ > 0) {
|
| + side_data_.reset(reinterpret_cast<uint8*>(
|
| + base::AlignedAlloc(side_data_size_ + kPaddingSize, kAlignmentSize)));
|
| + memset(side_data_.get() + side_data_size_, 0, kPaddingSize);
|
| + }
|
| }
|
|
|
| // static
|
| @@ -43,6 +64,18 @@ scoped_refptr<DecoderBuffer> DecoderBuffer::CopyFrom(const uint8* data,
|
| }
|
|
|
| // static
|
| +scoped_refptr<DecoderBuffer> DecoderBuffer::CopyFrom(const uint8* data,
|
| + int data_size,
|
| + const uint8* side_data,
|
| + int side_data_size) {
|
| + // If you hit this CHECK you likely have a bug in a demuxer. Go fix it.
|
| + CHECK(data);
|
| + CHECK(side_data);
|
| + return make_scoped_refptr(new DecoderBuffer(data, data_size,
|
| + side_data, side_data_size));
|
| +}
|
| +
|
| +// static
|
| scoped_refptr<DecoderBuffer> DecoderBuffer::CreateEOSBuffer() {
|
| return make_scoped_refptr(new DecoderBuffer(NULL, 0));
|
| }
|
| @@ -82,6 +115,16 @@ int DecoderBuffer::GetDataSize() const {
|
| return size_;
|
| }
|
|
|
| +const uint8* DecoderBuffer::GetSideData() const {
|
| + DCHECK(!IsEndOfStream());
|
| + return side_data_.get();
|
| +}
|
| +
|
| +int DecoderBuffer::GetSideDataSize() const {
|
| + DCHECK(!IsEndOfStream());
|
| + return side_data_size_;
|
| +}
|
| +
|
| const DecryptConfig* DecoderBuffer::GetDecryptConfig() const {
|
| DCHECK(!IsEndOfStream());
|
| return decrypt_config_.get();
|
|
|