/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* * Copyright (C) 2024 Red Hat, Inc. * * ppm_writer.cpp - PPM writer */ #include "ppm_writer.h" #include #include #include #include using namespace libcamera; int PPMWriter::write(const char *filename, const StreamConfiguration &config, const Span &data) { if (config.pixelFormat != formats::BGR888) { std::cerr << "Only BGR888 output pixel format is supported (" << config.pixelFormat << " requested)" << std::endl; return -EINVAL; } std::ofstream output(filename, std::ios::binary); if (!output) { std::cerr << "Failed to open ppm file: " << filename << std::endl; return -EINVAL; } output << "P6" << std::endl << config.size.width << " " << config.size.height << std::endl << "255" << std::endl; if (!output) { std::cerr << "Failed to write the file header" << std::endl; return -EINVAL; } const unsigned int rowLength = config.size.width * 3; const char *row = reinterpret_cast(data.data()); for (unsigned int y = 0; y < config.size.height; y++, row += config.stride) { output.write(row, rowLength); if (!output) { std::cerr << "Failed to write image data at row " << y << std::endl; return -EINVAL; } } return 0; }