// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #pragma once #include "core/videoPipeline.hpp" namespace VideoStitch { namespace Core { class SourceSurface; class Transform; class OverrideOutputDefinition; /** * Pipeline to process the inputs without doing any stitching */ class InputPipeline : public VideoPipeline { public: virtual ~InputPipeline(); Status process(mtime_t date, FrameRate frameRate, std::map<readerid_t, Input::PotentialFrame>& inputBuffers, std::vector<ExtractOutput*> extracts); protected: InputPipeline(const std::vector<Input::VideoReader*>&, const PanoDefinition& pano); Status init() override; // Init processing for this group of surfaces, called once per frame virtual Status preprocessGroup(const std::map<videoreaderid_t, SourceSurface*>& src, GPU::Stream& stream) = 0; // Called after preprocessGroup for each input individually virtual Status processInput(videoreaderid_t sourceID, int frame, GPU::Surface& dst, const std::map<videoreaderid_t, SourceSurface*>& src, const InputDefinition& inputDef, GPU::Stream& stream) const = 0; std::unique_ptr<PanoDefinition> panoDef; private: std::map<videoreaderid_t, SourceSurface*> processedSurfaces; }; } // namespace Core } // namespace VideoStitch