summaryrefslogtreecommitdiff
path: root/include/linux/intel-ipu3.h
AgeCommit message (Collapse)Author
2022-01-08include: linux: Update kernel headers to version v5.16-rc7David Plowman
Updated kernel headers to v5.16-rc7 using utils/update-kernel-headers.sh and re-instating libcamera local modifications. Signed-off-by: David Plowman <david.plowman@raspberrypi.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-10-06ipa: ipu3: Replace ipa::ipu3::algorithms::Ipu3AwbCellJean-Michel Hautbois
The intel-ipu3.h public interface from the kernel does not define how to parse the statistics for a cell. This had to be identified by a process of reverse engineering, and later identifying the structures from [0] leading to our custom definition of struct Ipu3AwbCell. [0] https://chromium.googlesource.com/chromiumos/platform/arc-camera/+/refs/heads/master/hal/intel/include/ia_imaging/awb_public.h To improve the kernel interface, a proposal has been made to the linux-kernel [1] to incorporate the memory layout for each cell into the intel-ipu3 header directly. [1] https://lore.kernel.org/linux-media/20211005202019.253353-1-jeanmichel.hautbois@ideasonboard.com/ Update our local copy of the intel-ipu3.h to match the proposal and change the AGC and AWB algorithms to reference that structure directly, allowing us to remove the deprecated custom Ipu3AwbCell definition. Signed-off-by: Jean-Michel Hautbois <jeanmichel.hautbois@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2021-03-03include: linux: Update Linux headers to v5.12-rc1Laurent Pinchart
Update Linux headers to v5.12-rc1, to provide the MEDIA_ENT_F_PROC_VIDEO_ISP entity function. The DRM FourCC and modifiers that were manually added in commits 9db0ed5e2065, 38f2efb05cef and 90c793c6989f are kept. New Intel DRM format modifiers are conflicting with IPU3_FORMAT_MOD_PACKED, which is updated as a result. The V4L2 controls and formats that were manually added in commit 43d81d43fe91 are kept. This causes a conflict in the V4L2 control base for V4L2_CID_USER_BCM2835_ISP_BASE that needs to be resolved in the downstream Raspberry Pi kernel first. The intel-ipu3.h header is manually exported with the scripts/headers_install.sh script. The script complained about a missing "WITH Linux-syscall-note" license extension, which has been worked around manually. The issue has been reported upstream in [1]. [1] https://lore.kernel.org/linux-media/20210207235610.15687-1-laurent.pinchart@ideasonboard.com/T/#u Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
2021-02-05include: linux: Add ipu3 kernel header and format definitionsNiklas Söderlund
Add kernel header and format definitions for the Intel IPU3. The header has been exported from a v5.9 kernel using scripts/headers_install.sh. Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
span> * The IPA namespace groups all types specific to IPA modules. It serves as the * top-level namespace for the IPA library libipa, and also contains * module-specific namespaces for IPA modules. */ namespace ipa { /** * \class Module * \brief The base class for all IPA modules * \tparam Context The type of the shared IPA context * \tparam FrameContext The type of the frame context * \tparam Config The type of the IPA configuration data * \tparam Params The type of the ISP specific parameters * \tparam Stats The type of the IPA statistics and ISP results * * The Module class template defines a standard internal interface between IPA * modules and libipa. * * While IPA modules are platform-specific, many of their internal functions are * conceptually similar, even if they take different types of platform-specifc * parameters. For instance, IPA modules could share code that instantiates, * initializes and run algorithms if it wasn't for the fact that the the format * of ISP parameters or statistics passed to the related functions is * device-dependent. * * To enable a shared implementation of those common tasks in libipa, the Module * class template defines a standard internal interface between IPA modules and * libipa. The template parameters specify the types of module-dependent data. * IPA modules shall create a specialization of the Module class template in * their namespace, and use it to specialize other classes of libipa, such as * the Algorithm class. */ /** * \typedef Module::Context * \brief The type of the shared IPA context */ /** * \typedef Module::FrameContext * \brief The type of the frame context */ /** * \typedef Module::Config * \brief The type of the IPA configuration data */ /** * \typedef Module::Params * \brief The type of the ISP specific parameters */ /** * \typedef Module::Stats * \brief The type of the IPA statistics and ISP results */ /** * \fn Module::algorithms() * \brief Retrieve the list of instantiated algorithms * \return The list of instantiated algorithms */ /** * \fn Module::createAlgorithms() * \brief Create algorithms from YAML configuration data * \param[in] context The IPA context * \param[in] algorithms Algorithms configuration data as a parsed YamlObject * * This function iterates over the list of \a algorithms parsed from the YAML * configuration file, and instantiates and initializes the corresponding * algorithms. The configuration data is expected to be correct, any error * causes the function to fail and return immediately. * * \return 0 on success, or a negative error code on failure */ /** * \fn Module::registerAlgorithm() * \brief Add an algorithm factory class to the list of available algorithms * \param[in] factory Factory to use to construct the algorithm * * This function registers an algorithm factory. It is meant to be called by the * AlgorithmFactory constructor only. */ /** * \fn Module::createAlgorithm(const std::string &name) * \brief Create an instance of an Algorithm by name * \param[in] name The algorithm name * * This function is the entry point to algorithm instantiation for the IPA * module. It creates and returns an instance of an algorithm identified by its * \a name. If no such algorithm exists, the function returns nullptr. * * To make an algorithm available to the IPA module, it shall be registered with * the REGISTER_IPA_ALGORITHM() macro. * * \return A new instance of the Algorithm subclass corresponding to the \a name */ } /* namespace ipa */ } /* namespace libcamera */