/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2019, Google Inc. * * stream.h - Video stream for a Camera */ #ifndef __LIBCAMERA_STREAM_H__ #define __LIBCAMERA_STREAM_H__ #include #include #include #include #include #include namespace libcamera { class Camera; class Stream; class StreamFormats { public: StreamFormats(); StreamFormats(const std::map> &formats); std::vector pixelformats() const; std::vector sizes(unsigned int pixelformat) const; SizeRange range(unsigned int pixelformat) const; private: std::map> formats_; }; enum MemoryType { InternalMemory, ExternalMemory, }; struct StreamConfiguration { StreamConfiguration(); StreamConfiguration(const StreamFormats &formats); unsigned int pixelFormat; Size size; MemoryType memoryType; unsigned int bufferCount; Stream *stream() const { return stream_; } void setStream(Stream *stream) { stream_ = stream; } const StreamFormats &formats() const { return formats_; } std::string toString() const; private: Stream *stream_; StreamFormats formats_; }; enum StreamRole { StillCapture, VideoRecording, Viewfinder, }; using StreamRoles = std::vector; class Stream { public: Stream(); std::unique_ptr createBuffer(unsigned int index); BufferPool &bufferPool() { return bufferPool_; } std::vector &buffers() { return bufferPool_.buffers(); } const StreamConfiguration &configuration() const { return configuration_; } MemoryType memoryType() const { return memoryType_; } protected: friend class Camera; void createBuffers(MemoryType memory, unsigned int count); void destroyBuffers(); BufferPool bufferPool_; StreamConfiguration configuration_; MemoryType memoryType_; }; } /* namespace libcamera */ #endif /* __LIBCAMERA_STREAM_H__ */