blob: b7cbb23adc0c328f346ceadd450ce7869f6e4025 [file]
// 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:
virtual ~DecoderBufferFactory() = default;
// Creates a new DecoderBuffer using the `encoded_frame` and `frame_data`
// received from Openscreen. On success, this function is expected to
// return the associated DecoderBuffer. On failure, nullptr is returned.
//
// Note: the returned DecoderBuffer does not copy or own the frame data,
// and its lifetime is tied to the `frame_data` span. Since the frame is
// synchronously sent over mojo, which performs a copy, this is safe and
// avoids an extra copy.
virtual scoped_refptr<media::DecoderBuffer> ToDecoderBuffer(
const openscreen::cast::EncodedFrame& encoded_frame,
base::span<const uint8_t> frame_data) = 0;
};
} // namespace cast_streaming
#endif // COMPONENTS_CAST_STREAMING_BROWSER_COMMON_DECODER_BUFFER_FACTORY_H_