blob: 8d148bb48ab998e5bff4037a83d1a00941b6efdc [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_CAST_STREAMING_BROWSER_COMMON_DECODER_BUFFER_FACTORY_H_
#define COMPONENTS_CAST_STREAMING_BROWSER_COMMON_DECODER_BUFFER_FACTORY_H_
#include "base/containers/span.h"
#include "base/memory/scoped_refptr.h"
namespace media {
class DecoderBuffer;
}
namespace openscreen::cast {
struct EncodedFrame;
}
namespace cast_streaming {
// Class used to create media::DecoderBuffer instances from the data provided
// by Openscreen.
class DecoderBufferFactory {
public:
// Wrapper around a data buffer used for storing the data of a DecoderBuffer
// received from Openscreen.
class FrameContents {
public:
virtual ~FrameContents() = default;
// Returns the span associated with all remaining data for this instance.
virtual base::span<uint8_t> Get() = 0;
// Resets the underlying array to size |new_size|.
virtual bool Reset(uint32_t new_size) = 0;
// Empties the underlying array.
virtual void Clear() = 0;
// Returns the current size of the buffer.
virtual uint32_t Size() const = 0;
// Returns whether this instance is empty.
bool empty() const { return !Size(); }
};
virtual ~DecoderBufferFactory() = default;
// Creates a new DecoderBuffer using the |encoded_frame| and |frame_contents|
// received from Openscreen. On success, this function is expected to
// return the associated DecoderBuffer with its contents written to
// |frame_contents|. On failure, nullptr is returned.
virtual scoped_refptr<media::DecoderBuffer> ToDecoderBuffer(
const openscreen::cast::EncodedFrame& encoded_frame,
FrameContents& frame_contents) = 0;
};
} // namespace cast_streaming
#endif // COMPONENTS_CAST_STREAMING_BROWSER_COMMON_DECODER_BUFFER_FACTORY_H_