diff options
Diffstat (limited to 'media/base/decoder_buffer.cc')
-rw-r--r-- | media/base/decoder_buffer.cc | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/media/base/decoder_buffer.cc b/media/base/decoder_buffer.cc index 03f9bbb..aec4521 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(); @@ -105,6 +148,7 @@ std::string DecoderBuffer::AsHumanReadableString() { s << "timestamp: " << timestamp_.InMicroseconds() << " duration: " << duration_.InMicroseconds() << " size: " << size_ + << " side_data_size: " << side_data_size_ << " encrypted: " << (decrypt_config_ != NULL); return s.str(); } |