// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_MEDIA_BASE_CAST_DECODER_BUFFER_IMPL_H_
#define CHROMECAST_MEDIA_BASE_CAST_DECODER_BUFFER_IMPL_H_
#include "base/time/time.h"
#include "chromecast/media/api/decoder_buffer_base.h"
namespace chromecast {
namespace media {
class CastDecoderBufferImpl : public DecoderBufferBase {
public:
// Using explicit constructor without providing stream id will set it to
// kPrimary by default.
explicit CastDecoderBufferImpl(size_t size);
CastDecoderBufferImpl(size_t size, StreamId stream_id);
static scoped_refptr<CastDecoderBufferImpl> CreateEOSBuffer();
static scoped_refptr<CastDecoderBufferImpl> CreateEOSBuffer(
StreamId stream_id);
// DecoderBufferBase implementation:
StreamId stream_id() const override;
int64_t timestamp() const override;
void set_timestamp(base::TimeDelta timestamp) override;
const uint8_t* data() const override;
uint8_t* writable_data() const override;
size_t data_size() const override;
const CastDecryptConfig* decrypt_config() const override;
bool end_of_stream() const override;
bool is_key_frame() const override;
private:
// This constructor is used by CreateEOSBuffer.
explicit CastDecoderBufferImpl(StreamId stream_id);
~CastDecoderBufferImpl() override;
const StreamId stream_id_;
const size_t size_;
const std::unique_ptr<uint8_t[]> data_;
base::TimeDelta timestamp_;
};
} // namespace media
} // namespace chromecast
#endif // CHROMECAST_MEDIA_BASE_CAST_DECODER_BUFFER_IMPL_H_