Files
mxl-multiviewer/SyntheticV210Feed.hpp
T
2026-05-19 14:56:13 +03:00

56 lines
1.6 KiB
C++

#pragma once
#include "IVideoFeed.hpp"
#include <cstddef>
#include <cstdint>
#include <vector>
class SyntheticV210Feed : public IVideoFeed
{
public:
SyntheticV210Feed(
uint32_t feedIndex,
uint32_t frameWidth,
uint32_t frameHeight);
const VideoFrame& getFrame(uint32_t frameCounter) override;
FeedRuntimeStatus status() const override;
std::string displayName() const override;
std::string sourceInfo() const override;
uint64_t frameVersion() const override;
bool hasGrainIndex() const override;
uint64_t grainIndex() const override;
bool hasFrameRate() const override;
double frameRate() const override;
float srcAspectRatio() const override;
bool hasV210() const override;
const uint8_t* v210Data() const override;
bool supportsDirectV210Read() const override;
bool readV210FrameInto(
uint32_t frameCounter,
void* destination,
size_t destinationSize) override;
uint32_t v210Width() const override;
uint32_t v210Height() const override;
uint32_t v210Stride() const override;
private:
uint64_t syntheticIndex(uint32_t frameCounter) const;
void generatePayloads();
void encodeLine(
uint32_t y,
uint32_t patternIndex,
uint8_t* line) const;
uint32_t mFeedIndex = 0;
uint32_t mSourceWidth = 1920;
uint32_t mSourceHeight = 1080;
uint32_t mSourceStride = 0;
double mFrameRate = 60.0;
uint64_t mFrameVersion = 0;
uint64_t mGrainIndex = 0;
std::vector<std::vector<uint8_t>> mPayloads;
VideoFrame mFrame;
};