// Copyright (C) 2023 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #ifndef DLIB_FFMPEG_SINK #define DLIB_FFMPEG_SINK #include <cstdint> #include <vector> #include <ostream> #include "../type_traits.h" namespace dlib { namespace ffmpeg { // --------------------------------------------------------------------------------------------------- template < class Byte, class Allocator, std::enable_if_t<is_byte<Byte>::value, bool> = true > auto sink(std::vector<Byte, Allocator>& buf) /*! requires - Byte must be a byte type, e.g. char, int8_t or uint8_t ensures - returns a function object with signature bool(std::size_t N, const char* data). When called that function appends the first N bytes pointed to by data onto the end of buf. - The returned function is valid only as long as buf exists. - The function always returns true. !*/ { return [&](std::size_t ndata, const char* data) { buf.insert(buf.end(), data, data + ndata); return true; }; } // --------------------------------------------------------------------------------------------------- inline auto sink(std::ostream& out) /*! ensures - returns a function object with signature bool(std::size_t N, const char* data). When called that function writes the first N bytes pointed to by data to out. - The returned view is valid only as long as out exists. - Returns out.good(). I.e. returns true if the write to the stream succeeded and false otherwise. !*/ { return [&](std::size_t ndata, const char* data) { out.write(data, ndata); return out.good(); }; } // --------------------------------------------------------------------------------------------------- } } #endif //DLIB_FFMPEG_SINK