Age | Commit message (Collapse) | Author |
|
Provide a Camera class which represents our main interface to handling
camera devices. This is a rework of Kieran's initial proposal and
Laurent's documentation of the file changed to fit the device
enumerators needs.
Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
|
|
Enable --keep-one-line-blocks to prevent astyle from wanting to move
single inlined blocks to cover 4 lines such as:
- virtual int init() { return 0; }
+ virtual int init()
+ {
+ return 0;
+ }
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Calling the cleanup() function in the base class Test destructor only
calls the base class empty cleanup() function, not the overloaded one.
This results in tests not cleaning up after themself. Solve this by
explicitly calling the cleanup() function from execute().
This was discovered while running valgrind on tests where objects where
allocated in init() and freed in cleanup().
Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The base Test class is meant to provide infrastructure common to all
tests. It is very limited for now, and should be extended with at least
logging and assertion handling.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
|
|
Many of the message logged by the library will be debug messages, we
thus need a debug log level.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
As astyle doesn't strip trailing white spaces, strip them manually.
Organize the code to allow for new additional formatting steps if
needed.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
In order to facilitate interpretation of diffs, highlight trailing white
space at end of lines with a red background.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The git diff command is invoked with relative paths, which causes git to
fail to locate files when the checkstyle.py script is run from
subdirectories of the git tree. Fix this by prepending the absolute path
to the git tree root directory to the file names.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Separate declaration of library internal inclusion path.
This will be used by tests, developed outside of library code, that need to
include parts of the library internal APIs and can re-use the here defined
variable.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
|
|
In order to avoid depending on system headers that may be outdated compared
to the kernel version available at runtime, import the Linux kernel headers
related to the APIs that libcamera requires a recent version of. This allows
libcamera to use the latest kernel APIs even when compiled on older systems.
The library must of course test at runtime whether those APIs are available
and fallback to older APIs in order to support older kernels.
Import media.h for the recent media controller APIs. The file is extracted
verbatim from kernel v4.19.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
|
|
There's no need to add a character on the left side of the ascii art
diagrams, provided that we indent them properly. Fix it.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Add a section to the coding style documentation to explain usage of the
checkstyle.py script.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
checkstyle.py is a reimplementation of checkstyle.sh in Python, that
should be easier to extend with additional features.
Three additional features and enhancements are already implemented:
- While retaining the default behaviour of operating on the HEAD commit,
a list of commits can also be specified on the command line.
- Correct line numbers are printed in the diff output.
- The index and working tree are not touched, they can be dirty.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Provide an initial starting point for our ignore file.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The git clone command line is a (single line) block of shell code, mark
it appropriately.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Jacopo Mondi <jacopo@jmondi.org>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The various lists in the document are not quoted blocks. Don't indent
them.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Jacopo Mondi <jacopo@jmondi.org>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The documentation is copied mostly verbatim from the website, with small
modifications to the ascii art diagrams to make them compile.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Jacopo Mondi <jacopo@jmondi.org>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Jacopo Mondi <jacopo@jmondi.org>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
sphinx only requires those directories to be present because they're
referenced in the configuration file. Remove the references and the
directories.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Jacopo Mondi <jacopo@jmondi.org>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add document to summarize the coding style adopted by libcamera.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
|
|
Building the current master branch with g++ 5.4.0-6 fails with:
./src/libcamera/include/log.h:25:34:
error: defaulted and deleted functions only available with -std=c++11 \
or -std=gnu++11 [-Werror]
LogMessage(const LogMessage&) = delete;
Fix this by adding the 'std=c++11' compiler argument for to the list of
cpp build flags.
Signed-off-by: Jacopo Mondi <jacopo@jmondi.org>
|
|
Fix Doxygen build warnings by adding the missing documentation for the
LogMessage class.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Now that the documentation can be compiled, Doxygen throws a few
warnings due to incorrect enum field naming. Fix it.
The \file block needs to be named after the header file in order for
Doxygen to document any global function, variable, typedef or enum
defined in the header (as documented in the Doxygen manual under the
\file command). We thus need to use log.h as the file name. No \file
block is needed for the .cpp file, as we don't want to generate
documentation for internal private globals.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Extend the documentation build system to automatically generate
documentation from source code using Doxygen. This is currently separate
from the sphinx documentation, and should be integrated using the
breathe (and possibly exhale) extensions.
As the Documentation/meson.build file needs to reference the variables
holding the source files, move the Documentation directory to the end of
the subdirs() in the top-level meson.build.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Use the datadir option to select the directory in which to install
documentation. This defaults to $prefix/share so this doesn't introduce
any change in the default case.
While at it use join_paths() to join patch components instead of
hardcoding the / separator.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The custom_target() function accepts an install_dir parameter. Along
with setting install to true, this can be used to replace the
install_subdir() function.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
The build system defines two variables, public_api and sources, that
store the names of the public headers and the source files respectively.
These files will need to be referenced when generating documentation
from source code, so let's make the variable names more descriptive:
- Rename public_api to libcamera_api and use the files() function
- Rename sources to libcamera_sources
- Add a libcamera_headers variable to hold the internal headers
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Set format and selection rectangles on the ImgU subdev as required by
the driver.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
A typo in the output files path causes the script to attempt to write
all captured frames to /. Fix it.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Calling exit from a function only exits from the function, it doesn't
abort the whole script. Propagate the errors to stop operation when the
sensor or media device can't be found.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Those issues were pointed out during review.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The logger is based on the ostream API, allowing code to log messages in
a native way. It automatically logs the time stamp, severity level, file
name and line number.
Many important features are missing, such as logging to file, logging
classes, and log filtering based on the severity level, file name and
class.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
In order to match the directory structure of traditional projects,
rename the top-level lib/ directory to src/libcamera/. Other libraries
developed as part of the project will later find a home in src/.
Split the libcamera header files in three categories: public headers
describing the public API in include/libcamera/, internal headers
describing the internal API in src/libcamera/include/, and private
headers local to one or a small number of compilation units along the
corresponding .cpp files. As no internal header exists yet the
src/libcamera/include/ directory is created empty as the build system
would fail otherwise.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The initial main.cpp and libcamera.h files are missing boilerplate
header comments. libcamera.h is further missing include guards. Add
them.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The (dummy) init_lib function was linking correctly only due to a
namespace 'collision' adding the init_lib to libcamera namespace, which
is 'shared' by class libcamera.
The init function was designed to be a class member function of the
libcamera object - and is used as such in the existing test function.
Instead of relying on the namespace collision - update the lib/main.cpp
example file to correctly utilise the class header - and specify the
function declaration, so that further implementations do not fall into
the same bad habits.
Reported-by: Jacopo Mondi <jacopo@mondi.org>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The script processes raw frames through the Intel IPU3 IMGU.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
|
We utilise 'add_project_arguments' which is only available in version
0.36 and 'build_by_default' which is only available in version 0.40 of
meson.
Add this dependancy to the project requirements.
Reported-by: Jacopo Mondi <jacopo@mondi.org>
Acked-by: Jacopo Mondi <jacopo@jmondi.org>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The script captures raw frames from cameras based on the Intel IPU3. It
takes the sensor name as an argument and isn't meant to depend on a
particular platform.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Utilise sphinx-build to generate documentation in HTML form, and
populate with some initial content.
An initial conf.py is generated from sphinx-quickstart and answering
initial questions.
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Code licensing will be specified with SPDX license headers.
Documentation will be licensed under CC-by-SA.
Include the common license text files to reference with the headers.
Licenses are extracted from the following locations:
https://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt
https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
https://creativecommons.org/licenses/by-sa/4.0/legalcode.txt
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Tabs are disliked within the meson build system.
Replace indentation by spaces, in all existing locations.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Add language specific project arguments and ensure that -Werror is
enabled, enforcing code to be as clean as possible.
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The include directory was defined but not installed.
Add it to the meson build structure to incorporate it as part of the
library install.
To facilitate the same include paths in our internal includes, update
the structure for headers to match the install structure.
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The shared library build target does not install the library when 'ninja
install' is executed.
Flag it as an installable item.
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
README is currently a bit too sparse, and there is no guidance on how to
use our build system.
Add some initial instructions.
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Register the test so that it can integrate with the meson test
framework.
To execute the test suite, use 'ninja test'.
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
The IPU3 captures Bayer data in a 25-pixels-in-32-bytes packed format,
which no standard tool can process. Add a quick implementation of data
unpacking to turn raw binary files into 16 bits per pixel unpacked Bayer
data.
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
|
|
Define the starting points for the libcamera build using
meson and ninja build components.
An initial 'dummy' library class is created, and a test binary links
against the shared library calling it's init_lib() function.
Signed-off-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
|
|
Cameras are complex devices that need heavy hardware image processing
operations. Control of the processing is based on advanced algorithms
that must run on a programmable processor. This has traditionally been
implemented in a dedicated MCU in the camera, but in embedded devices
algorithms have been moved to the main CPU to save cost. Blurring the
boundary between camera devices and Linux often left the user with no
other option than a vendor-specific closed-source solution.
To address this problem the Linux media community has very recently
started collaboration with the industry to develop a camera stack that
will be open-source-friendly while still protecting vendor core IP.
libcamera was born out of that collaboration and will offer modern
camera support to Linux-based systems, including traditional Linux
distributions, ChromeOS and Android.
|