From 726e9274ea95fa46352556d340c5793a8da51fcd Mon Sep 17 00:00:00 2001 From: Naushir Patuck Date: Wed, 3 May 2023 13:20:27 +0100 Subject: pipeline: ipa: raspberrypi: Refactor and move the Raspberry Pi code Split the Raspberry Pi pipeline handler and IPA source code into common and VC4/BCM2835 specific file structures. For the pipeline handler, the common code files now live in src/libcamera/pipeline/rpi/common/ and the VC4-specific files in src/libcamera/pipeline/rpi/vc4/. For the IPA, the common code files now live in src/ipa/rpi/{cam_helper,controller}/ and the vc4 specific files in src/ipa/rpi/vc4/. With this change, the camera tuning files are now installed under share/libcamera/ipa/rpi/vc4/. To build the pipeline and IPA, the meson configuration options have now changed from "raspberrypi" to "rpi/vc4": meson setup build -Dipas=rpi/vc4 -Dpipelines=rpi/vc4 Signed-off-by: Naushir Patuck Reviewed-by: Jacopo Mondi Reviewed-by: Laurent Pinchart Signed-off-by: Laurent Pinchart --- src/ipa/raspberrypi/md_parser.h | 155 ---------------------------------------- 1 file changed, 155 deletions(-) delete mode 100644 src/ipa/raspberrypi/md_parser.h (limited to 'src/ipa/raspberrypi/md_parser.h') diff --git a/src/ipa/raspberrypi/md_parser.h b/src/ipa/raspberrypi/md_parser.h deleted file mode 100644 index 77d557aa..00000000 --- a/src/ipa/raspberrypi/md_parser.h +++ /dev/null @@ -1,155 +0,0 @@ -/* SPDX-License-Identifier: BSD-2-Clause */ -/* - * Copyright (C) 2019, Raspberry Pi Ltd - * - * md_parser.h - image sensor metadata parser interface - */ -#pragma once - -#include -#include -#include -#include - -#include - -/* - * Camera metadata parser class. Usage as shown below. - * - * Setup: - * - * Usually the metadata parser will be made as part of the CamHelper class so - * application code doesn't have to worry which kind to instantiate. But for - * the sake of example let's suppose we're parsing imx219 metadata. - * - * MdParser *parser = new MdParserSmia({ expHiReg, expLoReg, gainReg }); - * parser->SetBitsPerPixel(bpp); - * parser->SetLineLengthBytes(pitch); - * parser->SetNumLines(2); - * - * Note 1: if you don't know how many lines there are, the size of the input - * buffer is used as a limit instead. - * - * Note 2: if you don't know the line length, you can leave the line length unset - * (or set to zero) and the parser will hunt for the line start instead. - * - * Then on every frame: - * - * RegisterMap registers; - * if (parser->Parse(buffer, registers) != MdParser::OK) - * much badness; - * Metadata metadata; - * CamHelper::PopulateMetadata(registers, metadata); - * - * (Note that the CamHelper class converts to/from exposure lines and time, - * and gain_code / actual gain.) - * - * If you suspect your embedded data may have changed its layout, change any line - * lengths, number of lines, bits per pixel etc. that are different, and - * then: - * - * parser->Reset(); - * - * before calling Parse again. - */ - -namespace RPiController { - -/* Abstract base class from which other metadata parsers are derived. */ - -class MdParser -{ -public: - using RegisterMap = std::map; - - /* - * Parser status codes: - * OK - success - * NOTFOUND - value such as exposure or gain was not found - * ERROR - all other errors - */ - enum Status { - OK = 0, - NOTFOUND = 1, - ERROR = 2 - }; - - MdParser() - : reset_(true), bitsPerPixel_(0), numLines_(0), lineLengthBytes_(0) - { - } - - virtual ~MdParser() = default; - - void reset() - { - reset_ = true; - } - - void setBitsPerPixel(int bpp) - { - bitsPerPixel_ = bpp; - } - - void setNumLines(unsigned int numLines) - { - numLines_ = numLines; - } - - void setLineLengthBytes(unsigned int numBytes) - { - lineLengthBytes_ = numBytes; - } - - virtual Status parse(libcamera::Span buffer, - RegisterMap ®isters) = 0; - -protected: - bool reset_; - int bitsPerPixel_; - unsigned int numLines_; - unsigned int lineLengthBytes_; -}; - -/* - * This isn't a full implementation of a metadata parser for SMIA sensors, - * however, it does provide the findRegs function which will prove useful and - * make it easier to implement parsers for other SMIA-like sensors (see - * md_parser_imx219.cpp for an example). - */ - -class MdParserSmia final : public MdParser -{ -public: - MdParserSmia(std::initializer_list registerList); - - MdParser::Status parse(libcamera::Span buffer, - RegisterMap ®isters) override; - -private: - /* Maps register address to offset in the buffer. */ - using OffsetMap = std::map>; - - /* - * Note that error codes > 0 are regarded as non-fatal; codes < 0 - * indicate a bad data buffer. Status codes are: - * ParseOk - found all registers, much happiness - * MissingRegs - some registers found; should this be a hard error? - * The remaining codes are all hard errors. - */ - enum ParseStatus { - ParseOk = 0, - MissingRegs = 1, - NoLineStart = -1, - IllegalTag = -2, - BadDummy = -3, - BadLineEnd = -4, - BadPadding = -5 - }; - - ParseStatus findRegs(libcamera::Span buffer); - - OffsetMap offsets_; -}; - -} /* namespace RPi */ -- cgit v1.2.1