// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #pragma once #include "fakeReader.hpp" #include #include #include "libvideostitch/ptv.hpp" #include "libvideostitch/parse.hpp" #include "libvideostitch/panoDef.hpp" #include #include #include namespace VideoStitch { namespace Testing { /** * Creates a Ptv value given a config. Dies on error. */ inline Ptv::Value* makePtvValue(const std::string& ptvString) { Potential parser = Ptv::Parser::create(); ENSURE(parser->parseData(ptvString), "Cannot parse ptv data"); return parser->getRoot().clone(); } inline Status prepareTransforms(const Core::PanoDefinition& panoDef, std::map>& transforms) { std::atomic readFrameCalls(0), readFrameExits(0); std::unique_ptr fakeReaderFactory = std::unique_ptr(new FakeReaderFactory(0, &readFrameCalls, &readFrameExits)); std::map> readers; for (readerid_t in = 0; in < panoDef.numInputs(); ++in) { Potential reader = fakeReaderFactory->create(in, panoDef.getInput(in)); FAIL_RETURN(reader.status()); Input::VideoReader* videoReader = reader.release()->getVideoReader(); if (videoReader) { readers[in] = std::unique_ptr(videoReader); } } // Create transforms transforms.clear(); for (auto& reader : readers) { const Core::InputDefinition& inputDef = panoDef.getInput(reader.second->id); Core::Transform* transform = Core::Transform::create(inputDef); if (!transform) { return {Origin::Stitcher, ErrType::SetupFailure, "Cannot create v1 transformation for input " + std::to_string(reader.second->id)}; } transforms[reader.second->id] = std::unique_ptr(transform); } return Status::OK(); } inline Status prepareFakeReader(const Core::PanoDefinition& panoDef, std::map& readers) { deleteAllValues(readers); std::atomic readFrameCalls(0), readFrameExits(0); std::unique_ptr fakeReaderFactory = std::unique_ptr(new FakeReaderFactory(0, &readFrameCalls, &readFrameExits)); for (readerid_t in = 0; in < panoDef.numInputs(); ++in) { Potential reader = fakeReaderFactory->create(in, panoDef.getInput(in)); FAIL_RETURN(reader.status()); Input::VideoReader* videoReader = reader.release()->getVideoReader(); if (videoReader) { readers[in] = videoReader; } } return Status::OK(); } } // namespace Testing } // namespace VideoStitch