[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:
@ -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_;
|
||||
|
Reference in New Issue
Block a user