#ifndef ENCODERS_H #define ENCODERS_H class EncoderProto; class Fluxmap; class Image; class Layout; class Sector; class TrackInfo; class Config; class Encoder { public: Encoder(const EncoderProto& config) {} virtual ~Encoder() {} static std::unique_ptr create(Config& config); public: virtual std::shared_ptr getSector( std::shared_ptr&, const Image& image, unsigned sectorId); virtual std::vector> collectSectors( std::shared_ptr&, const Image& image); virtual std::unique_ptr encode( std::shared_ptr& trackInfo, const std::vector>& sectors, const Image& image) = 0; nanoseconds_t calculatePhysicalClockPeriod( nanoseconds_t targetClockPeriod, nanoseconds_t targetRotationalPeriod); }; #endif