// Copyright (c) 2012-2017 VideoStitch SAS // Copyright (c) 2018 stitchEm #pragma once #include "statefulReader.hpp" namespace VideoStitch { namespace Input { /** * A delegator reader that masks the input. */ class MaskedReader : public StatefulReader<GPU::Buffer<unsigned char>> { public: static MaskedReader* create(VideoReader* delegate, const unsigned char* maskHostBuffer); ~MaskedReader(); ReadStatus readFrame(mtime_t& date, unsigned char* video) { return delegate->readFrame(date, video); } Status seekFrame(frameid_t frame) { return delegate->seekFrame(frame); } Status unpackDevBuffer(GPU::Surface& dst, const GPU::Buffer<const unsigned char>& src, GPU::Stream& stream) const; const VideoReader* getDelegate() const { return delegate; } Status perThreadInit(); void perThreadCleanup(); private: MaskedReader(VideoReader* delegate, unsigned char* maskHostBuffer); VideoReader* const delegate; unsigned char* const maskHostBuffer; // owned }; } // namespace Input } // namespace VideoStitch