55 lines
1.3 KiB
C++
55 lines
1.3 KiB
C++
#pragma once
|
|
|
|
#include "cvmmap_streamer/config/runtime_config.hpp"
|
|
#include "cvmmap_streamer/encode/encoded_access_unit.hpp"
|
|
#include "cvmmap_streamer/ipc/contracts.hpp"
|
|
|
|
#include <cstdint>
|
|
#include <expected>
|
|
#include <memory>
|
|
#include <span>
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <vector>
|
|
|
|
namespace cvmmap_streamer::encode {
|
|
|
|
struct RawVideoFrame {
|
|
ipc::FrameInfo info{};
|
|
std::uint64_t source_timestamp_ns{0};
|
|
std::span<const std::uint8_t> bytes{};
|
|
};
|
|
|
|
class EncoderBackend {
|
|
public:
|
|
virtual ~EncoderBackend() = default;
|
|
|
|
[[nodiscard]]
|
|
virtual std::string_view backend_name() const = 0;
|
|
|
|
[[nodiscard]]
|
|
virtual bool using_hardware() const = 0;
|
|
|
|
[[nodiscard]]
|
|
virtual std::expected<void, std::string> init(const RuntimeConfig &config, const ipc::FrameInfo &frame_info) = 0;
|
|
|
|
[[nodiscard]]
|
|
virtual std::expected<void, std::string> poll() = 0;
|
|
|
|
[[nodiscard]]
|
|
virtual std::expected<void, std::string> push_frame(const RawVideoFrame &frame) = 0;
|
|
|
|
[[nodiscard]]
|
|
virtual std::expected<std::vector<EncodedAccessUnit>, std::string> drain() = 0;
|
|
|
|
[[nodiscard]]
|
|
virtual std::expected<std::vector<EncodedAccessUnit>, std::string> flush() = 0;
|
|
|
|
virtual void shutdown() = 0;
|
|
};
|
|
|
|
[[nodiscard]]
|
|
std::expected<std::unique_ptr<EncoderBackend>, std::string> make_encoder_backend(const RuntimeConfig &config);
|
|
|
|
}
|