summaryrefslogtreecommitdiff
path: root/utils/tuning/libtuning/parsers/__init__.py
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-11-16 21:02:52 +0200
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-11-26 19:05:19 +0200
commit5ad6b3b1bbd4d1c8d0e7cf38bc6dc1d29a978381 (patch)
treebc8b488d428f747bb912bec4b7d2c0a6bf1e5c9b /utils/tuning/libtuning/parsers/__init__.py
parent2a29a2a6a1784223a9caf1fae2a768fe550b5f64 (diff)
ipa: libipa: vector: Add sum() function
Add a function to calculate the sum of a vector. It will be useful for algorithms. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Milan Zamazal <mzamazal@redhat.com>
Diffstat (limited to 'utils/tuning/libtuning/parsers/__init__.py')
0 files changed, 0 insertions, 0 deletions
span> * file_sink.cpp - File Sink */ #include <fcntl.h> #include <iomanip> #include <iostream> #include <sstream> #include <string.h> #include <sys/mman.h> #include <unistd.h> #include <libcamera/camera.h> #include "file_sink.h" using namespace libcamera; FileSink::FileSink(const std::string &pattern) : pattern_(pattern) { } FileSink::~FileSink() { for (auto &iter : mappedBuffers_) { void *memory = iter.second.first; unsigned int length = iter.second.second; munmap(memory, length); } mappedBuffers_.clear(); } int FileSink::configure(const libcamera::CameraConfiguration &config) { int ret = FrameSink::configure(config); if (ret < 0) return ret; streamNames_.clear(); for (unsigned int index = 0; index < config.size(); ++index) { const StreamConfiguration &cfg = config.at(index); streamNames_[cfg.stream()] = "stream" + std::to_string(index); } return 0; } void FileSink::mapBuffer(FrameBuffer *buffer) { for (const FrameBuffer::Plane &plane : buffer->planes()) { void *memory = mmap(NULL, plane.length, PROT_READ, MAP_SHARED, plane.fd.fd(), 0); mappedBuffers_[plane.fd.fd()] = std::make_pair(memory, plane.length); } } bool FileSink::processRequest(Request *request) { for (auto [stream, buffer] : request->buffers()) writeBuffer(stream, buffer); return true; } void FileSink::writeBuffer(const Stream *stream, FrameBuffer *buffer) { std::string filename; size_t pos; int fd, ret = 0; if (!pattern_.empty()) filename = pattern_; if (filename.empty() || filename.back() == '/') filename += "frame-#.bin"; pos = filename.find_first_of('#'); if (pos != std::string::npos) { std::stringstream ss; ss << streamNames_[stream] << "-" << std::setw(6) << std::setfill('0') << buffer->metadata().sequence; filename.replace(pos, 1, ss.str()); } fd = open(filename.c_str(), O_CREAT | O_WRONLY | (pos == std::string::npos ? O_APPEND : O_TRUNC), S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (fd == -1) { ret = -errno; std::cerr << "failed to open file " << filename << ": " << strerror(-ret) << std::endl; return; } for (unsigned int i = 0; i < buffer->planes().size(); ++i) { const FrameBuffer::Plane &plane = buffer->planes()[i]; const FrameMetadata::Plane &meta = buffer->metadata().planes[i]; void *data = mappedBuffers_[plane.fd.fd()].first; unsigned int length = std::min(meta.bytesused, plane.length); if (meta.bytesused > plane.length) std::cerr << "payload size " << meta.bytesused << " larger than plane size " << plane.length << std::endl; ret = ::write(fd, data, length);