57 lines
1.6 KiB
C++
57 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,
|
|
V210ReadTiming* timing = nullptr) 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;
|
|
};
|