// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #include "colorReader.hpp" #include "backend/common/imageOps.hpp" #include "gpu/stream.hpp" #include "gpu/render/render.hpp" #include "libvideostitch/logging.hpp" #include "libvideostitch/parse.hpp" #include <cassert> #include <iostream> #include <limits> #define DEFAULT_COLOR Image::RGBA::pack(0xff, 0x00, 0x00, 0xff) namespace VideoStitch { namespace Input { ColorReader::ColorReader(readerid_t id, const Ptv::Value& config, int64_t targetWidth, int64_t targetHeight) : Reader(id), VideoReader(targetWidth, targetHeight, targetWidth * targetHeight * sizeof(uint32_t), RGBA, Device, {60, 1} /*fps*/, 0, NO_LAST_FRAME, true /* procedural */, NULL), fillColor(DEFAULT_COLOR), curDate(-1) { Parse::populateColor("ReaderConfig", config, "color", fillColor, false); getSpec().setDisplayName("Procedural: Color"); } ColorReader::~ColorReader() {} Status ColorReader::seekFrame(frameid_t) { return Status::OK(); } ReadStatus ColorReader::readFrame(mtime_t& date, unsigned char* videoFrame) { // Everything is done on the GPU // XXX TODO FIXME procedurals with a frame rate please curDate += (mtime_t)round(getSpec().frameRate.den / (double)getSpec().frameRate.num * 1000000.0); date = curDate; Render::fillBuffer(GPU::Buffer<uint32_t>::wrap((uint32_t*)videoFrame, getWidth() * getHeight()), fillColor, getWidth(), getHeight(), GPU::Stream::getDefault()); return ReadStatus::OK(); } } // namespace Input } // namespace VideoStitch