0

[Chromecast] Remove //media dependency from DecoderBufferBase.

The requirement was to get rid of the ToMediaBuffer() function from
DecoderBufferBase.
Created a subclass of ::media::DecoderBuffer that wraps the data of
DecoderBufferBase.

Merge-With: eureka-internal/371205
Bug: b/149771309
Change-Id: Idde0f6519e5122964f5eb33f6a44407e595898e7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2085600
Commit-Queue: Qingwen Pi <qwp@google.com>
Reviewed-by: Kenneth MacKay <kmackay@chromium.org>
Reviewed-by: Dale Curtis <dalecurtis@chromium.org>
Reviewed-by: Yuchen Liu <yucliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#749947}
This commit is contained in:
Qingwen Pi
2020-03-12 23:17:39 +00:00
committed by Commit Bot
parent fd5d4675d9
commit 2af93c9cb3
10 changed files with 32 additions and 33 deletions

@ -16,11 +16,6 @@
#include "chromecast/public/media/cast_decoder_buffer.h"
#include "chromecast/public/media/decrypt_context.h"
namespace media {
// TODO(qwp): remove this dependency
class DecoderBuffer;
} // namespace media
namespace chromecast {
namespace media {
@ -43,8 +38,6 @@ class DecoderBufferBase : public CastDecoderBuffer,
// Gets a pointer to the frame data buffer.
virtual uint8_t* writable_data() const = 0;
virtual scoped_refptr<::media::DecoderBuffer> ToMediaBuffer() const = 0;
protected:
friend class base::RefCountedThreadSafe<DecoderBufferBase>;
@ -54,7 +47,8 @@ class DecoderBufferBase : public CastDecoderBuffer,
private:
std::unique_ptr<DecryptContext> decrypt_context_;
DISALLOW_COPY_AND_ASSIGN(DecoderBufferBase);
DecoderBufferBase(const DecoderBufferBase&) = delete;
DecoderBufferBase& operator=(const DecoderBufferBase&) = delete;
};
inline DecoderBufferBase::DecoderBufferBase() {}

@ -84,10 +84,5 @@ bool DecoderBufferAdapter::end_of_stream() const {
return buffer_->end_of_stream();
}
scoped_refptr<::media::DecoderBuffer>
DecoderBufferAdapter::ToMediaBuffer() const {
return buffer_;
}
} // namespace media
} // namespace chromecast

@ -42,8 +42,6 @@ class DecoderBufferAdapter : public DecoderBufferBase {
const CastDecryptConfig* decrypt_config() const override;
bool end_of_stream() const override;
scoped_refptr<::media::DecoderBuffer> ToMediaBuffer() const override;
private:
~DecoderBufferAdapter() override;

@ -37,7 +37,6 @@ TEST(DecoderBufferAdapterTest, Default) {
EXPECT_EQ(kBufferDataSize, buffer_adapter->data_size());
EXPECT_EQ(nullptr, buffer_adapter->decrypt_config());
EXPECT_FALSE(buffer_adapter->end_of_stream());
EXPECT_EQ(buffer, buffer_adapter->ToMediaBuffer());
}
TEST(DecoderBufferAdapterTest, Secondary) {

@ -37,6 +37,30 @@ namespace media {
namespace {
// This class wraps the underlying data of a DecoderBufferBase.
// This class does not take the ownership of the data. The DecoderBufferBase
// is still responsible for deleting the data. This class holds a reference
// to the DecoderBufferBase so that it lives longer than this DecoderBuffer.
class DecoderBuffer : public ::media::DecoderBuffer {
public:
DecoderBuffer(scoped_refptr<DecoderBufferBase> buffer)
: ::media::DecoderBuffer(
std::unique_ptr<uint8_t[]>(const_cast<uint8_t*>(buffer->data())),
buffer->data_size()),
buffer_(std::move(buffer)) {
set_timestamp(::base::TimeDelta::FromMicroseconds(buffer_->timestamp()));
}
private:
~DecoderBuffer() override {
// Releases the data to prevent it from being deleted.
DCHECK_EQ(data_.get(), buffer_->data());
data_.release();
}
scoped_refptr<DecoderBufferBase> buffer_;
};
class CastAudioDecoderImpl : public CastAudioDecoder {
public:
CastAudioDecoderImpl(scoped_refptr<base::SingleThreadTaskRunner> task_runner,
@ -126,7 +150,7 @@ class CastAudioDecoderImpl : public CastAudioDecoder {
decode_pending_ = true;
pending_decode_callback_ = std::move(decode_callback);
decoder_->Decode(data->ToMediaBuffer(),
decoder_->Decode(base::WrapRefCounted(new DecoderBuffer(std::move(data))),
base::BindRepeating(&CastAudioDecoderImpl::OnDecodeStatus,
weak_this_, timestamp));
}

@ -141,12 +141,6 @@ class ExternalAudioDecoderWrapper::DecodedBuffer : public DecoderBufferBase {
const CastDecryptConfig* decrypt_config() const override { return nullptr; }
bool end_of_stream() const override { return false; }
scoped_refptr<::media::DecoderBuffer> ToMediaBuffer() const override {
auto buffer = ::media::DecoderBuffer::CopyFrom(data(), data_size());
buffer->set_timestamp(timestamp_);
return buffer;
}
private:
~DecodedBuffer() override = default;

@ -67,11 +67,6 @@ bool DecoderBufferClear::end_of_stream() const {
return buffer_->end_of_stream();
}
scoped_refptr<::media::DecoderBuffer>
DecoderBufferClear::ToMediaBuffer() const {
return buffer_->ToMediaBuffer();
}
void DecryptDecoderBuffer(scoped_refptr<DecoderBufferBase> buffer,
DecryptContextImpl* decrypt_ctxt,
BufferDecryptedCB buffer_decrypted_cb) {

@ -28,7 +28,6 @@ class DecoderBufferClear : public DecoderBufferBase {
size_t data_size() const override;
const CastDecryptConfig* decrypt_config() const override;
bool end_of_stream() const override;
scoped_refptr<::media::DecoderBuffer> ToMediaBuffer() const override;
private:
~DecoderBufferClear() override;

@ -38,8 +38,8 @@ DecoderBuffer::DecoderBuffer(const uint8_t* data,
}
DecoderBuffer::DecoderBuffer(std::unique_ptr<uint8_t[]> data, size_t size)
: size_(size),
data_(std::move(data)),
: data_(std::move(data)),
size_(size),
side_data_size_(0),
is_key_frame_(false) {}

@ -215,6 +215,9 @@ class MEDIA_EXPORT DecoderBuffer
virtual ~DecoderBuffer();
// Encoded data, if it is stored on the heap.
std::unique_ptr<uint8_t[]> data_;
private:
// Presentation time of the frame.
base::TimeDelta timestamp_;
@ -223,8 +226,6 @@ class MEDIA_EXPORT DecoderBuffer
// Size of the encoded data.
size_t size_;
// Encoded data, if it is stored on the heap.
std::unique_ptr<uint8_t[]> data_;
// Side data. Used for alpha channel in VPx, and for text cues.
size_t side_data_size_;