Chromium Code Reviews| Index: media/base/decoder_buffer.cc |
| diff --git a/media/base/decoder_buffer.cc b/media/base/decoder_buffer.cc |
| index 03f9bbbc566abc70abb878bc0dc00b34c82b7093..3aa4f759ec8546402dedec64c714411fee9f9488 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)); |
|
Tom Finegan
2013/02/25 22:56:06
Align side_data_size with data; will side_data and
vignesh
2013/02/25 23:33:14
Done.
|
| +} |
| + |
| +// 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(); |