#pragma once #include "IVideoFeed.hpp" #include #include #include 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> mPayloads; VideoFrame mFrame; };