Files
mxl-multiviewer/IVideoFeed.hpp
T
2026-05-19 15:02:22 +03:00

79 lines
1.7 KiB
C++

#pragma once
#include "VideoFrame.hpp"
#include <cstddef>
#include <cstdint>
#include <string>
enum class FeedRuntimeStatus
{
NoSignal,
Placeholder,
Bars,
Connecting,
Live,
Reconnecting,
Error
};
struct V210ReadTiming
{
uint64_t sourceReadNs = 0;
uint64_t payloadCopyNs = 0;
};
class IVideoFeed
{
public:
virtual ~IVideoFeed() = default;
virtual const VideoFrame& getFrame(uint32_t frameCounter) = 0;
virtual FeedRuntimeStatus status() const
{
return FeedRuntimeStatus::NoSignal;
}
virtual std::string displayName() const
{
return "NO SIGNAL";
}
virtual std::string sourceInfo() const
{
return "";
}
virtual uint64_t frameVersion() const { return 0; }
virtual bool hasGrainIndex() const { return false; }
virtual uint64_t grainIndex() const { return 0; }
virtual bool hasFrameRate() const { return false; }
virtual double frameRate() const { return 0.0; }
virtual float srcAspectRatio() const
{
return 16.0f / 9.0f;
}
virtual bool hasV210() const { return false; }
virtual const uint8_t* v210Data() const { return nullptr; }
virtual bool supportsDirectV210Read() const { return false; }
virtual bool readV210FrameInto(
uint32_t frameCounter,
void* destination,
size_t destinationSize,
V210ReadTiming* timing = nullptr)
{
(void)frameCounter;
(void)destination;
(void)destinationSize;
(void)timing;
return false;
}
virtual uint32_t v210Width() const { return 0; }
virtual uint32_t v210Height() const { return 0; }
virtual uint32_t v210Stride() const { return 0; }
};