├── .clang-format ├── .clang-tidy ├── .editorconfig ├── .github └── workflows │ └── gen_orig.yml ├── .gitignore ├── .reuse └── dep5 ├── COPYING.rst ├── Documentation ├── Doxyfile-common.in ├── Doxyfile-internal.in ├── Doxyfile-public.in ├── api-html │ └── index.rst ├── binning.svg ├── camera-sensor-model.rst ├── code-of-conduct.rst ├── coding-style.rst ├── conf.py ├── contributing.rst ├── design │ └── ae.rst ├── documentation-contents.rst ├── environment_variables.rst ├── feature_requirements.rst ├── gen-doxyfile.py ├── getting-started.rst ├── guides │ ├── application-developer.rst │ ├── ipa.rst │ ├── pipeline-handler.rst │ └── tracing.rst ├── images │ └── rotation │ │ ├── rotate0.svg │ │ ├── rotate0Mirror.svg │ │ ├── rotate180.svg │ │ ├── rotate180Mirror.svg │ │ ├── rotate270.svg │ │ ├── rotate270Mirror.svg │ │ ├── rotate90.svg │ │ └── rotate90Mirror.svg ├── index.rst ├── internal-api-html │ └── index.rst ├── introduction.rst ├── lens_driver_requirements.rst ├── libcamera_architecture.rst ├── mainpage.dox ├── mali-c55.dot ├── meson.build ├── python-bindings.rst ├── sensor_driver_requirements.rst ├── sensor_model.svg ├── skipping.svg ├── software-isp-benchmarking.rst ├── theme │ ├── footer.html │ ├── layout.html │ ├── search.html │ ├── static │ │ ├── css │ │ │ └── theme.css │ │ └── search.png │ └── theme.conf └── thread-safety.dox ├── LICENSES ├── Apache-2.0.txt ├── BSD-2-Clause.txt ├── BSD-3-Clause.txt ├── CC-BY-4.0.txt ├── CC-BY-SA-4.0.txt ├── CC0-1.0.txt ├── GPL-2.0+.txt ├── GPL-2.0-only.txt ├── GPL-2.0-or-later.txt ├── GPL-2.0.txt ├── LGPL-2.1-or-later.txt ├── Linux-syscall-note.txt └── MIT.txt ├── README.rst ├── include ├── android │ ├── hardware │ │ └── libhardware │ │ │ └── include │ │ │ └── hardware │ │ │ ├── camera3.h │ │ │ ├── camera_common.h │ │ │ ├── fb.h │ │ │ ├── gralloc.h │ │ │ └── hardware.h │ ├── meson.build │ ├── metadata │ │ ├── camera_metadata_hidden.h │ │ └── system │ │ │ ├── camera_metadata.h │ │ │ ├── camera_metadata_tags.h │ │ │ └── camera_vendor_tags.h │ └── system │ │ └── core │ │ └── include │ │ ├── android │ │ └── log.h │ │ ├── cutils │ │ ├── compiler.h │ │ └── native_handle.h │ │ └── system │ │ ├── camera.h │ │ ├── graphics-base-v1.0.h │ │ ├── graphics-base-v1.1.h │ │ ├── graphics-base.h │ │ ├── graphics-sw.h │ │ └── graphics.h ├── libcamera │ ├── base │ │ ├── backtrace.h │ │ ├── bound_method.h │ │ ├── class.h │ │ ├── event_dispatcher.h │ │ ├── event_dispatcher_poll.h │ │ ├── event_notifier.h │ │ ├── file.h │ │ ├── flags.h │ │ ├── log.h │ │ ├── memfd.h │ │ ├── meson.build │ │ ├── message.h │ │ ├── mutex.h │ │ ├── object.h │ │ ├── private.h │ │ ├── semaphore.h │ │ ├── shared_fd.h │ │ ├── signal.h │ │ ├── span.h │ │ ├── thread.h │ │ ├── thread_annotations.h │ │ ├── timer.h │ │ ├── unique_fd.h │ │ └── utils.h │ ├── camera.h │ ├── camera_manager.h │ ├── color_space.h │ ├── control_ids.h.in │ ├── controls.h │ ├── fence.h │ ├── formats.h.in │ ├── framebuffer.h │ ├── framebuffer_allocator.h │ ├── geometry.h │ ├── internal │ │ ├── bayer_format.h │ │ ├── byte_stream_buffer.h │ │ ├── camera.h │ │ ├── camera_controls.h │ │ ├── camera_lens.h │ │ ├── camera_manager.h │ │ ├── camera_sensor.h │ │ ├── camera_sensor_properties.h │ │ ├── clock_recovery.h │ │ ├── control_serializer.h │ │ ├── control_validator.h │ │ ├── converter.h │ │ ├── converter │ │ │ ├── converter_v4l2_m2m.h │ │ │ └── meson.build │ │ ├── debug_controls.h │ │ ├── delayed_controls.h │ │ ├── device_enumerator.h │ │ ├── device_enumerator_sysfs.h │ │ ├── device_enumerator_udev.h │ │ ├── dma_buf_allocator.h │ │ ├── formats.h │ │ ├── framebuffer.h │ │ ├── ipa_data_serializer.h │ │ ├── ipa_manager.h │ │ ├── ipa_module.h │ │ ├── ipa_proxy.h │ │ ├── ipc_pipe.h │ │ ├── ipc_pipe_unixsocket.h │ │ ├── ipc_unixsocket.h │ │ ├── mapped_framebuffer.h │ │ ├── matrix.h │ │ ├── media_device.h │ │ ├── media_object.h │ │ ├── meson.build │ │ ├── pipeline_handler.h │ │ ├── process.h │ │ ├── pub_key.h │ │ ├── request.h │ │ ├── shared_mem_object.h │ │ ├── software_isp │ │ │ ├── debayer_params.h │ │ │ ├── meson.build │ │ │ ├── software_isp.h │ │ │ └── swisp_stats.h │ │ ├── source_paths.h │ │ ├── sysfs.h │ │ ├── tracepoints.h.in │ │ ├── tracepoints │ │ │ ├── buffer_enums.tp │ │ │ ├── meson.build │ │ │ ├── pipeline.tp │ │ │ ├── request.tp │ │ │ └── request_enums.tp │ │ ├── v4l2_device.h │ │ ├── v4l2_pixelformat.h │ │ ├── v4l2_subdevice.h │ │ ├── v4l2_videodevice.h │ │ ├── vector.h │ │ └── yaml_parser.h │ ├── ipa │ │ ├── core.mojom │ │ ├── ipa_controls.h │ │ ├── ipa_interface.h │ │ ├── ipa_module_info.h │ │ ├── ipu3.mojom │ │ ├── mali-c55.mojom │ │ ├── meson.build │ │ ├── raspberrypi.mojom │ │ ├── rkisp1.mojom │ │ ├── soft.mojom │ │ └── vimc.mojom │ ├── logging.h │ ├── meson.build │ ├── orientation.h │ ├── pixel_format.h │ ├── request.h │ ├── stream.h │ ├── transform.h │ └── version.h.in ├── linux │ ├── README │ ├── bcm2835-isp.h │ ├── dma-buf.h │ ├── dma-heap.h │ ├── drm_fourcc.h │ ├── intel-ipu3.h │ ├── mali-c55-config.h │ ├── media-bus-format.h │ ├── media.h │ ├── rkisp1-config.h │ ├── udmabuf.h │ ├── v4l2-common.h │ ├── v4l2-controls.h │ ├── v4l2-mediabus.h │ ├── v4l2-subdev.h │ └── videodev2.h └── meson.build ├── meson.build ├── meson_options.txt ├── package └── gentoo │ └── media-libs │ └── libcamera │ └── libcamera-9999.ebuild ├── src ├── android │ ├── camera3_hal.cpp │ ├── camera_buffer.h │ ├── camera_capabilities.cpp │ ├── camera_capabilities.h │ ├── camera_device.cpp │ ├── camera_device.h │ ├── camera_hal_config.cpp │ ├── camera_hal_config.h │ ├── camera_hal_manager.cpp │ ├── camera_hal_manager.h │ ├── camera_metadata.cpp │ ├── camera_metadata.h │ ├── camera_ops.cpp │ ├── camera_ops.h │ ├── camera_request.cpp │ ├── camera_request.h │ ├── camera_stream.cpp │ ├── camera_stream.h │ ├── cros │ │ ├── camera3_hal.cpp │ │ └── meson.build │ ├── cros_mojo_token.h │ ├── data │ │ ├── nautilus │ │ │ └── camera_hal.yaml │ │ └── soraka │ │ │ └── camera_hal.yaml │ ├── frame_buffer_allocator.h │ ├── hal_framebuffer.cpp │ ├── hal_framebuffer.h │ ├── jpeg │ │ ├── encoder.h │ │ ├── encoder_jea.cpp │ │ ├── encoder_jea.h │ │ ├── encoder_libjpeg.cpp │ │ ├── encoder_libjpeg.h │ │ ├── exif.cpp │ │ ├── exif.h │ │ ├── meson.build │ │ ├── post_processor_jpeg.cpp │ │ ├── post_processor_jpeg.h │ │ ├── thumbnailer.cpp │ │ └── thumbnailer.h │ ├── meson.build │ ├── metadata │ │ ├── camera_metadata.c │ │ └── camera_metadata_tag_info.c │ ├── mm │ │ ├── cros_camera_buffer.cpp │ │ ├── cros_frame_buffer_allocator.cpp │ │ ├── generic_camera_buffer.cpp │ │ ├── generic_frame_buffer_allocator.cpp │ │ ├── libhardware_stub.c │ │ └── meson.build │ ├── post_processor.h │ └── yuv │ │ ├── post_processor_yuv.cpp │ │ └── post_processor_yuv.h ├── apps │ ├── cam │ │ ├── camera_session.cpp │ │ ├── camera_session.h │ │ ├── capture-script.yaml │ │ ├── capture_script.cpp │ │ ├── capture_script.h │ │ ├── drm.cpp │ │ ├── drm.h │ │ ├── file_sink.cpp │ │ ├── file_sink.h │ │ ├── frame_sink.cpp │ │ ├── frame_sink.h │ │ ├── kms_sink.cpp │ │ ├── kms_sink.h │ │ ├── main.cpp │ │ ├── main.h │ │ ├── meson.build │ │ ├── sdl_sink.cpp │ │ ├── sdl_sink.h │ │ ├── sdl_texture.cpp │ │ ├── sdl_texture.h │ │ ├── sdl_texture_mjpg.cpp │ │ ├── sdl_texture_mjpg.h │ │ ├── sdl_texture_yuv.cpp │ │ └── sdl_texture_yuv.h │ ├── common │ │ ├── dng_writer.cpp │ │ ├── dng_writer.h │ │ ├── event_loop.cpp │ │ ├── event_loop.h │ │ ├── image.cpp │ │ ├── image.h │ │ ├── meson.build │ │ ├── options.cpp │ │ ├── options.h │ │ ├── ppm_writer.cpp │ │ ├── ppm_writer.h │ │ ├── stream_options.cpp │ │ └── stream_options.h │ ├── ipa-verify │ │ ├── main.cpp │ │ └── meson.build │ ├── lc-compliance │ │ ├── environment.cpp │ │ ├── environment.h │ │ ├── helpers │ │ │ ├── capture.cpp │ │ │ └── capture.h │ │ ├── main.cpp │ │ ├── meson.build │ │ └── tests │ │ │ └── capture_test.cpp │ ├── meson.build │ └── qcam │ │ ├── assets │ │ ├── feathericons │ │ │ ├── activity.svg │ │ │ ├── airplay.svg │ │ │ ├── alert-circle.svg │ │ │ ├── alert-octagon.svg │ │ │ ├── alert-triangle.svg │ │ │ ├── align-center.svg │ │ │ ├── align-justify.svg │ │ │ ├── align-left.svg │ │ │ ├── align-right.svg │ │ │ ├── anchor.svg │ │ │ ├── aperture.svg │ │ │ ├── archive.svg │ │ │ ├── arrow-down-circle.svg │ │ │ ├── arrow-down-left.svg │ │ │ ├── arrow-down-right.svg │ │ │ ├── arrow-down.svg │ │ │ ├── arrow-left-circle.svg │ │ │ ├── arrow-left.svg │ │ │ ├── arrow-right-circle.svg │ │ │ ├── arrow-right.svg │ │ │ ├── arrow-up-circle.svg │ │ │ ├── arrow-up-left.svg │ │ │ ├── arrow-up-right.svg │ │ │ ├── arrow-up.svg │ │ │ ├── at-sign.svg │ │ │ ├── award.svg │ │ │ ├── bar-chart-2.svg │ │ │ ├── bar-chart.svg │ │ │ ├── battery-charging.svg │ │ │ ├── battery.svg │ │ │ ├── bell-off.svg │ │ │ ├── bell.svg │ │ │ ├── bluetooth.svg │ │ │ ├── bold.svg │ │ │ ├── book-open.svg │ │ │ ├── book.svg │ │ │ ├── bookmark.svg │ │ │ ├── box.svg │ │ │ ├── briefcase.svg │ │ │ ├── calendar.svg │ │ │ ├── camera-off.svg │ │ │ ├── camera.svg │ │ │ ├── cast.svg │ │ │ ├── check-circle.svg │ │ │ ├── check-square.svg │ │ │ ├── check.svg │ │ │ ├── chevron-down.svg │ │ │ ├── chevron-left.svg │ │ │ ├── chevron-right.svg │ │ │ ├── chevron-up.svg │ │ │ ├── chevrons-down.svg │ │ │ ├── chevrons-left.svg │ │ │ ├── chevrons-right.svg │ │ │ ├── chevrons-up.svg │ │ │ ├── chrome.svg │ │ │ ├── circle.svg │ │ │ ├── clipboard.svg │ │ │ ├── clock.svg │ │ │ ├── cloud-drizzle.svg │ │ │ ├── cloud-lightning.svg │ │ │ ├── cloud-off.svg │ │ │ ├── cloud-rain.svg │ │ │ ├── cloud-snow.svg │ │ │ ├── cloud.svg │ │ │ ├── code.svg │ │ │ ├── codepen.svg │ │ │ ├── codesandbox.svg │ │ │ ├── coffee.svg │ │ │ ├── columns.svg │ │ │ ├── command.svg │ │ │ ├── compass.svg │ │ │ ├── copy.svg │ │ │ ├── corner-down-left.svg │ │ │ ├── corner-down-right.svg │ │ │ ├── corner-left-down.svg │ │ │ ├── corner-left-up.svg │ │ │ ├── corner-right-down.svg │ │ │ ├── corner-right-up.svg │ │ │ ├── corner-up-left.svg │ │ │ ├── corner-up-right.svg │ │ │ ├── cpu.svg │ │ │ ├── credit-card.svg │ │ │ ├── crop.svg │ │ │ ├── crosshair.svg │ │ │ ├── database.svg │ │ │ ├── delete.svg │ │ │ ├── disc.svg │ │ │ ├── dollar-sign.svg │ │ │ ├── download-cloud.svg │ │ │ ├── download.svg │ │ │ ├── droplet.svg │ │ │ ├── edit-2.svg │ │ │ ├── edit-3.svg │ │ │ ├── edit.svg │ │ │ ├── external-link.svg │ │ │ ├── eye-off.svg │ │ │ ├── eye.svg │ │ │ ├── facebook.svg │ │ │ ├── fast-forward.svg │ │ │ ├── feather.svg │ │ │ ├── feathericons.qrc │ │ │ ├── figma.svg │ │ │ ├── file-minus.svg │ │ │ ├── file-plus.svg │ │ │ ├── file-text.svg │ │ │ ├── file.svg │ │ │ ├── film.svg │ │ │ ├── filter.svg │ │ │ ├── flag.svg │ │ │ ├── folder-minus.svg │ │ │ ├── folder-plus.svg │ │ │ ├── folder.svg │ │ │ ├── framer.svg │ │ │ ├── frown.svg │ │ │ ├── gift.svg │ │ │ ├── git-branch.svg │ │ │ ├── git-commit.svg │ │ │ ├── git-merge.svg │ │ │ ├── git-pull-request.svg │ │ │ ├── github.svg │ │ │ ├── gitlab.svg │ │ │ ├── globe.svg │ │ │ ├── grid.svg │ │ │ ├── hard-drive.svg │ │ │ ├── hash.svg │ │ │ ├── headphones.svg │ │ │ ├── heart.svg │ │ │ ├── help-circle.svg │ │ │ ├── hexagon.svg │ │ │ ├── home.svg │ │ │ ├── image.svg │ │ │ ├── inbox.svg │ │ │ ├── info.svg │ │ │ ├── instagram.svg │ │ │ ├── italic.svg │ │ │ ├── key.svg │ │ │ ├── layers.svg │ │ │ ├── layout.svg │ │ │ ├── life-buoy.svg │ │ │ ├── link-2.svg │ │ │ ├── link.svg │ │ │ ├── linkedin.svg │ │ │ ├── list.svg │ │ │ ├── loader.svg │ │ │ ├── lock.svg │ │ │ ├── log-in.svg │ │ │ ├── log-out.svg │ │ │ ├── mail.svg │ │ │ ├── map-pin.svg │ │ │ ├── map.svg │ │ │ ├── maximize-2.svg │ │ │ ├── maximize.svg │ │ │ ├── meh.svg │ │ │ ├── menu.svg │ │ │ ├── message-circle.svg │ │ │ ├── message-square.svg │ │ │ ├── mic-off.svg │ │ │ ├── mic.svg │ │ │ ├── minimize-2.svg │ │ │ ├── minimize.svg │ │ │ ├── minus-circle.svg │ │ │ ├── minus-square.svg │ │ │ ├── minus.svg │ │ │ ├── monitor.svg │ │ │ ├── moon.svg │ │ │ ├── more-horizontal.svg │ │ │ ├── more-vertical.svg │ │ │ ├── mouse-pointer.svg │ │ │ ├── move.svg │ │ │ ├── music.svg │ │ │ ├── navigation-2.svg │ │ │ ├── navigation.svg │ │ │ ├── octagon.svg │ │ │ ├── package.svg │ │ │ ├── paperclip.svg │ │ │ ├── pause-circle.svg │ │ │ ├── pause.svg │ │ │ ├── pen-tool.svg │ │ │ ├── percent.svg │ │ │ ├── phone-call.svg │ │ │ ├── phone-forwarded.svg │ │ │ ├── phone-incoming.svg │ │ │ ├── phone-missed.svg │ │ │ ├── phone-off.svg │ │ │ ├── phone-outgoing.svg │ │ │ ├── phone.svg │ │ │ ├── pie-chart.svg │ │ │ ├── play-circle.svg │ │ │ ├── play.svg │ │ │ ├── plus-circle.svg │ │ │ ├── plus-square.svg │ │ │ ├── plus.svg │ │ │ ├── pocket.svg │ │ │ ├── power.svg │ │ │ ├── printer.svg │ │ │ ├── radio.svg │ │ │ ├── refresh-ccw.svg │ │ │ ├── refresh-cw.svg │ │ │ ├── repeat.svg │ │ │ ├── rewind.svg │ │ │ ├── rotate-ccw.svg │ │ │ ├── rotate-cw.svg │ │ │ ├── rss.svg │ │ │ ├── save.svg │ │ │ ├── scissors.svg │ │ │ ├── search.svg │ │ │ ├── send.svg │ │ │ ├── server.svg │ │ │ ├── settings.svg │ │ │ ├── share-2.svg │ │ │ ├── share.svg │ │ │ ├── shield-off.svg │ │ │ ├── shield.svg │ │ │ ├── shopping-bag.svg │ │ │ ├── shopping-cart.svg │ │ │ ├── shuffle.svg │ │ │ ├── sidebar.svg │ │ │ ├── skip-back.svg │ │ │ ├── skip-forward.svg │ │ │ ├── slack.svg │ │ │ ├── slash.svg │ │ │ ├── sliders.svg │ │ │ ├── smartphone.svg │ │ │ ├── smile.svg │ │ │ ├── speaker.svg │ │ │ ├── square.svg │ │ │ ├── star.svg │ │ │ ├── stop-circle.svg │ │ │ ├── sun.svg │ │ │ ├── sunrise.svg │ │ │ ├── sunset.svg │ │ │ ├── tablet.svg │ │ │ ├── tag.svg │ │ │ ├── target.svg │ │ │ ├── terminal.svg │ │ │ ├── thermometer.svg │ │ │ ├── thumbs-down.svg │ │ │ ├── thumbs-up.svg │ │ │ ├── toggle-left.svg │ │ │ ├── toggle-right.svg │ │ │ ├── tool.svg │ │ │ ├── trash-2.svg │ │ │ ├── trash.svg │ │ │ ├── trello.svg │ │ │ ├── trending-down.svg │ │ │ ├── trending-up.svg │ │ │ ├── triangle.svg │ │ │ ├── truck.svg │ │ │ ├── tv.svg │ │ │ ├── twitch.svg │ │ │ ├── twitter.svg │ │ │ ├── type.svg │ │ │ ├── umbrella.svg │ │ │ ├── underline.svg │ │ │ ├── unlock.svg │ │ │ ├── upload-cloud.svg │ │ │ ├── upload.svg │ │ │ ├── user-check.svg │ │ │ ├── user-minus.svg │ │ │ ├── user-plus.svg │ │ │ ├── user-x.svg │ │ │ ├── user.svg │ │ │ ├── users.svg │ │ │ ├── video-off.svg │ │ │ ├── video.svg │ │ │ ├── voicemail.svg │ │ │ ├── volume-1.svg │ │ │ ├── volume-2.svg │ │ │ ├── volume-x.svg │ │ │ ├── volume.svg │ │ │ ├── watch.svg │ │ │ ├── wifi-off.svg │ │ │ ├── wifi.svg │ │ │ ├── wind.svg │ │ │ ├── x-circle.svg │ │ │ ├── x-octagon.svg │ │ │ ├── x-square.svg │ │ │ ├── x.svg │ │ │ ├── youtube.svg │ │ │ ├── zap-off.svg │ │ │ ├── zap.svg │ │ │ ├── zoom-in.svg │ │ │ └── zoom-out.svg │ │ └── shader │ │ │ ├── RGB.frag │ │ │ ├── YUV_2_planes.frag │ │ │ ├── YUV_3_planes.frag │ │ │ ├── YUV_packed.frag │ │ │ ├── bayer_1x_packed.frag │ │ │ ├── bayer_8.frag │ │ │ ├── bayer_8.vert │ │ │ ├── identity.vert │ │ │ └── shaders.qrc │ │ ├── cam_select_dialog.cpp │ │ ├── cam_select_dialog.h │ │ ├── format_converter.cpp │ │ ├── format_converter.h │ │ ├── main.cpp │ │ ├── main_window.cpp │ │ ├── main_window.h │ │ ├── meson.build │ │ ├── message_handler.cpp │ │ ├── message_handler.h │ │ ├── viewfinder.h │ │ ├── viewfinder_gl.cpp │ │ ├── viewfinder_gl.h │ │ ├── viewfinder_qt.cpp │ │ └── viewfinder_qt.h ├── gstreamer │ ├── gstlibcamera-controls.cpp.in │ ├── gstlibcamera-controls.h │ ├── gstlibcamera-utils.cpp │ ├── gstlibcamera-utils.h │ ├── gstlibcamera.cpp │ ├── gstlibcameraallocator.cpp │ ├── gstlibcameraallocator.h │ ├── gstlibcamerapad.cpp │ ├── gstlibcamerapad.h │ ├── gstlibcamerapool.cpp │ ├── gstlibcamerapool.h │ ├── gstlibcameraprovider.cpp │ ├── gstlibcameraprovider.h │ ├── gstlibcamerasrc.cpp │ ├── gstlibcamerasrc.h │ └── meson.build ├── ipa │ ├── ipa-sign-install.sh │ ├── ipa-sign.sh │ ├── ipu3 │ │ ├── algorithms │ │ │ ├── af.cpp │ │ │ ├── af.h │ │ │ ├── agc.cpp │ │ │ ├── agc.h │ │ │ ├── algorithm.h │ │ │ ├── awb.cpp │ │ │ ├── awb.h │ │ │ ├── blc.cpp │ │ │ ├── blc.h │ │ │ ├── meson.build │ │ │ ├── tone_mapping.cpp │ │ │ └── tone_mapping.h │ │ ├── data │ │ │ ├── meson.build │ │ │ └── uncalibrated.yaml │ │ ├── ipa_context.cpp │ │ ├── ipa_context.h │ │ ├── ipu3-ipa-design-guide.rst │ │ ├── ipu3.cpp │ │ ├── meson.build │ │ └── module.h │ ├── libipa │ │ ├── agc_mean_luminance.cpp │ │ ├── agc_mean_luminance.h │ │ ├── algorithm.cpp │ │ ├── algorithm.h │ │ ├── awb.cpp │ │ ├── awb.h │ │ ├── awb_bayes.cpp │ │ ├── awb_bayes.h │ │ ├── awb_grey.cpp │ │ ├── awb_grey.h │ │ ├── camera_sensor_helper.cpp │ │ ├── camera_sensor_helper.h │ │ ├── colours.cpp │ │ ├── colours.h │ │ ├── exposure_mode_helper.cpp │ │ ├── exposure_mode_helper.h │ │ ├── fc_queue.cpp │ │ ├── fc_queue.h │ │ ├── fixedpoint.cpp │ │ ├── fixedpoint.h │ │ ├── histogram.cpp │ │ ├── histogram.h │ │ ├── interpolator.cpp │ │ ├── interpolator.h │ │ ├── lsc_polynomial.cpp │ │ ├── lsc_polynomial.h │ │ ├── lux.cpp │ │ ├── lux.h │ │ ├── meson.build │ │ ├── module.cpp │ │ ├── module.h │ │ ├── pwl.cpp │ │ └── pwl.h │ ├── mali-c55 │ │ ├── algorithms │ │ │ ├── agc.cpp │ │ │ ├── agc.h │ │ │ ├── algorithm.h │ │ │ ├── awb.cpp │ │ │ ├── awb.h │ │ │ ├── blc.cpp │ │ │ ├── blc.h │ │ │ ├── lsc.cpp │ │ │ ├── lsc.h │ │ │ └── meson.build │ │ ├── data │ │ │ ├── imx415.yaml │ │ │ ├── meson.build │ │ │ └── uncalibrated.yaml │ │ ├── ipa_context.cpp │ │ ├── ipa_context.h │ │ ├── mali-c55.cpp │ │ ├── meson.build │ │ └── module.h │ ├── meson.build │ ├── rkisp1 │ │ ├── algorithms │ │ │ ├── agc.cpp │ │ │ ├── agc.h │ │ │ ├── algorithm.h │ │ │ ├── awb.cpp │ │ │ ├── awb.h │ │ │ ├── blc.cpp │ │ │ ├── blc.h │ │ │ ├── ccm.cpp │ │ │ ├── ccm.h │ │ │ ├── cproc.cpp │ │ │ ├── cproc.h │ │ │ ├── dpcc.cpp │ │ │ ├── dpcc.h │ │ │ ├── dpf.cpp │ │ │ ├── dpf.h │ │ │ ├── filter.cpp │ │ │ ├── filter.h │ │ │ ├── goc.cpp │ │ │ ├── goc.h │ │ │ ├── gsl.cpp │ │ │ ├── gsl.h │ │ │ ├── lsc.cpp │ │ │ ├── lsc.h │ │ │ ├── lux.cpp │ │ │ ├── lux.h │ │ │ └── meson.build │ │ ├── data │ │ │ ├── imx219.yaml │ │ │ ├── imx258.yaml │ │ │ ├── meson.build │ │ │ ├── ov2685.yaml │ │ │ ├── ov4689.yaml │ │ │ ├── ov5640.yaml │ │ │ ├── ov5695.yaml │ │ │ ├── ov8858.yaml │ │ │ └── uncalibrated.yaml │ │ ├── ipa_context.cpp │ │ ├── ipa_context.h │ │ ├── meson.build │ │ ├── module.h │ │ ├── params.cpp │ │ ├── params.h │ │ └── rkisp1.cpp │ ├── rpi │ │ ├── README.md │ │ ├── cam_helper │ │ │ ├── cam_helper.cpp │ │ │ ├── cam_helper.h │ │ │ ├── cam_helper_imx219.cpp │ │ │ ├── cam_helper_imx283.cpp │ │ │ ├── cam_helper_imx290.cpp │ │ │ ├── cam_helper_imx296.cpp │ │ │ ├── cam_helper_imx415.cpp │ │ │ ├── cam_helper_imx477.cpp │ │ │ ├── cam_helper_imx500.cpp │ │ │ ├── cam_helper_imx519.cpp │ │ │ ├── cam_helper_imx708.cpp │ │ │ ├── cam_helper_ov5647.cpp │ │ │ ├── cam_helper_ov64a40.cpp │ │ │ ├── cam_helper_ov7251.cpp │ │ │ ├── cam_helper_ov9281.cpp │ │ │ ├── imx500_tensor_parser │ │ │ │ ├── apParams.flatbuffers_generated.h │ │ │ │ ├── flatbuffers │ │ │ │ │ ├── base.h │ │ │ │ │ ├── code_generators.h │ │ │ │ │ ├── flatbuffers.h │ │ │ │ │ ├── flatc.h │ │ │ │ │ ├── flexbuffers.h │ │ │ │ │ ├── grpc.h │ │ │ │ │ ├── hash.h │ │ │ │ │ ├── idl.h │ │ │ │ │ ├── minireflect.h │ │ │ │ │ ├── reflection.h │ │ │ │ │ ├── reflection_generated.h │ │ │ │ │ ├── registry.h │ │ │ │ │ ├── stl_emulation.h │ │ │ │ │ └── util.h │ │ │ │ ├── imx500_tensor_parser.cpp │ │ │ │ ├── imx500_tensor_parser.h │ │ │ │ └── meson.build │ │ │ ├── md_parser.h │ │ │ ├── md_parser_smia.cpp │ │ │ └── meson.build │ │ ├── common │ │ │ ├── ipa_base.cpp │ │ │ ├── ipa_base.h │ │ │ └── meson.build │ │ ├── controller │ │ │ ├── af_algorithm.h │ │ │ ├── af_status.h │ │ │ ├── agc_algorithm.h │ │ │ ├── agc_status.h │ │ │ ├── algorithm.cpp │ │ │ ├── algorithm.h │ │ │ ├── alsc_status.h │ │ │ ├── awb_algorithm.h │ │ │ ├── awb_status.h │ │ │ ├── black_level_algorithm.h │ │ │ ├── black_level_status.h │ │ │ ├── cac_status.h │ │ │ ├── camera_mode.h │ │ │ ├── ccm_algorithm.h │ │ │ ├── ccm_status.h │ │ │ ├── contrast_algorithm.h │ │ │ ├── contrast_status.h │ │ │ ├── controller.cpp │ │ │ ├── controller.h │ │ │ ├── denoise_algorithm.h │ │ │ ├── denoise_status.h │ │ │ ├── device_status.cpp │ │ │ ├── device_status.h │ │ │ ├── dpc_status.h │ │ │ ├── geq_status.h │ │ │ ├── hdr_algorithm.h │ │ │ ├── hdr_status.h │ │ │ ├── histogram.cpp │ │ │ ├── histogram.h │ │ │ ├── lux_status.h │ │ │ ├── meson.build │ │ │ ├── metadata.h │ │ │ ├── noise_status.h │ │ │ ├── pdaf_data.h │ │ │ ├── region_stats.h │ │ │ ├── rpi │ │ │ │ ├── af.cpp │ │ │ │ ├── af.h │ │ │ │ ├── agc.cpp │ │ │ │ ├── agc.h │ │ │ │ ├── agc_channel.cpp │ │ │ │ ├── agc_channel.h │ │ │ │ ├── alsc.cpp │ │ │ │ ├── alsc.h │ │ │ │ ├── awb.cpp │ │ │ │ ├── awb.h │ │ │ │ ├── black_level.cpp │ │ │ │ ├── black_level.h │ │ │ │ ├── cac.cpp │ │ │ │ ├── cac.h │ │ │ │ ├── ccm.cpp │ │ │ │ ├── ccm.h │ │ │ │ ├── contrast.cpp │ │ │ │ ├── contrast.h │ │ │ │ ├── denoise.cpp │ │ │ │ ├── denoise.h │ │ │ │ ├── dpc.cpp │ │ │ │ ├── dpc.h │ │ │ │ ├── focus.h │ │ │ │ ├── geq.cpp │ │ │ │ ├── geq.h │ │ │ │ ├── hdr.cpp │ │ │ │ ├── hdr.h │ │ │ │ ├── lux.cpp │ │ │ │ ├── lux.h │ │ │ │ ├── noise.cpp │ │ │ │ ├── noise.h │ │ │ │ ├── saturation.cpp │ │ │ │ ├── saturation.h │ │ │ │ ├── sdn.cpp │ │ │ │ ├── sdn.h │ │ │ │ ├── sharpen.cpp │ │ │ │ ├── sharpen.h │ │ │ │ ├── sync.cpp │ │ │ │ ├── sync.h │ │ │ │ ├── tonemap.cpp │ │ │ │ └── tonemap.h │ │ │ ├── saturation_status.h │ │ │ ├── sharpen_algorithm.h │ │ │ ├── sharpen_status.h │ │ │ ├── statistics.h │ │ │ ├── stitch_status.h │ │ │ ├── sync_algorithm.h │ │ │ ├── sync_status.h │ │ │ └── tonemap_status.h │ │ ├── meson.build │ │ ├── pisp │ │ │ ├── data │ │ │ │ ├── imx219.json │ │ │ │ ├── imx219_noir.json │ │ │ │ ├── imx290.json │ │ │ │ ├── imx296.json │ │ │ │ ├── imx296_16mm.json │ │ │ │ ├── imx296_6mm.json │ │ │ │ ├── imx296_mono.json │ │ │ │ ├── imx378.json │ │ │ │ ├── imx415.json │ │ │ │ ├── imx462.json │ │ │ │ ├── imx477.json │ │ │ │ ├── imx477_16mm.json │ │ │ │ ├── imx477_6mm.json │ │ │ │ ├── imx477_noir.json │ │ │ │ ├── imx477_scientific.json │ │ │ │ ├── imx500.json │ │ │ │ ├── imx519.json │ │ │ │ ├── imx708.json │ │ │ │ ├── imx708_noir.json │ │ │ │ ├── imx708_wide.json │ │ │ │ ├── imx708_wide_noir.json │ │ │ │ ├── meson.build │ │ │ │ ├── ov5647.json │ │ │ │ ├── ov5647_noir.json │ │ │ │ ├── ov64a40.json │ │ │ │ ├── ov9281_mono.json │ │ │ │ ├── se327m12.json │ │ │ │ └── uncalibrated.json │ │ │ ├── meson.build │ │ │ └── pisp.cpp │ │ └── vc4 │ │ │ ├── data │ │ │ ├── imx219.json │ │ │ ├── imx219_noir.json │ │ │ ├── imx283.json │ │ │ ├── imx290.json │ │ │ ├── imx296.json │ │ │ ├── imx296_mono.json │ │ │ ├── imx327.json │ │ │ ├── imx378.json │ │ │ ├── imx415.json │ │ │ ├── imx462.json │ │ │ ├── imx477.json │ │ │ ├── imx477_noir.json │ │ │ ├── imx477_scientific.json │ │ │ ├── imx477_v1.json │ │ │ ├── imx500.json │ │ │ ├── imx519.json │ │ │ ├── imx708.json │ │ │ ├── imx708_noir.json │ │ │ ├── imx708_wide.json │ │ │ ├── imx708_wide_noir.json │ │ │ ├── meson.build │ │ │ ├── ov5647.json │ │ │ ├── ov5647_noir.json │ │ │ ├── ov64a40.json │ │ │ ├── ov7251_mono.json │ │ │ ├── ov9281_mono.json │ │ │ ├── se327m12.json │ │ │ └── uncalibrated.json │ │ │ ├── meson.build │ │ │ └── vc4.cpp │ ├── simple │ │ ├── algorithms │ │ │ ├── agc.cpp │ │ │ ├── agc.h │ │ │ ├── algorithm.h │ │ │ ├── awb.cpp │ │ │ ├── awb.h │ │ │ ├── blc.cpp │ │ │ ├── blc.h │ │ │ ├── ccm.cpp │ │ │ ├── ccm.h │ │ │ ├── lut.cpp │ │ │ ├── lut.h │ │ │ └── meson.build │ │ ├── data │ │ │ ├── meson.build │ │ │ └── uncalibrated.yaml │ │ ├── ipa_context.cpp │ │ ├── ipa_context.h │ │ ├── meson.build │ │ ├── module.h │ │ └── soft_simple.cpp │ └── vimc │ │ ├── data │ │ ├── meson.build │ │ └── vimc.conf │ │ ├── meson.build │ │ └── vimc.cpp ├── libcamera │ ├── base │ │ ├── backtrace.cpp │ │ ├── bound_method.cpp │ │ ├── class.cpp │ │ ├── event_dispatcher.cpp │ │ ├── event_dispatcher_poll.cpp │ │ ├── event_notifier.cpp │ │ ├── file.cpp │ │ ├── flags.cpp │ │ ├── log.cpp │ │ ├── memfd.cpp │ │ ├── meson.build │ │ ├── message.cpp │ │ ├── mutex.cpp │ │ ├── object.cpp │ │ ├── semaphore.cpp │ │ ├── shared_fd.cpp │ │ ├── signal.cpp │ │ ├── thread.cpp │ │ ├── timer.cpp │ │ ├── unique_fd.cpp │ │ └── utils.cpp │ ├── bayer_format.cpp │ ├── byte_stream_buffer.cpp │ ├── camera.cpp │ ├── camera_controls.cpp │ ├── camera_lens.cpp │ ├── camera_manager.cpp │ ├── clock_recovery.cpp │ ├── color_space.cpp │ ├── control_ids.cpp.in │ ├── control_ids_core.yaml │ ├── control_ids_debug.yaml │ ├── control_ids_draft.yaml │ ├── control_ids_rpi.yaml │ ├── control_ranges.yaml │ ├── control_serializer.cpp │ ├── control_validator.cpp │ ├── controls.cpp │ ├── converter.cpp │ ├── converter │ │ ├── converter_v4l2_m2m.cpp │ │ └── meson.build │ ├── debug_controls.cpp │ ├── delayed_controls.cpp │ ├── device_enumerator.cpp │ ├── device_enumerator_sysfs.cpp │ ├── device_enumerator_udev.cpp │ ├── dma_buf_allocator.cpp │ ├── fence.cpp │ ├── formats.cpp │ ├── formats.yaml │ ├── framebuffer.cpp │ ├── framebuffer_allocator.cpp │ ├── geometry.cpp │ ├── ipa │ │ └── meson.build │ ├── ipa_controls.cpp │ ├── ipa_data_serializer.cpp │ ├── ipa_interface.cpp │ ├── ipa_manager.cpp │ ├── ipa_module.cpp │ ├── ipa_proxy.cpp │ ├── ipa_pub_key.cpp.in │ ├── ipc_pipe.cpp │ ├── ipc_pipe_unixsocket.cpp │ ├── ipc_unixsocket.cpp │ ├── mapped_framebuffer.cpp │ ├── matrix.cpp │ ├── media_device.cpp │ ├── media_object.cpp │ ├── meson.build │ ├── orientation.cpp │ ├── pipeline │ │ ├── imx8-isi │ │ │ ├── imx8-isi.cpp │ │ │ └── meson.build │ │ ├── ipu3 │ │ │ ├── cio2.cpp │ │ │ ├── cio2.h │ │ │ ├── frames.cpp │ │ │ ├── frames.h │ │ │ ├── imgu.cpp │ │ │ ├── imgu.h │ │ │ ├── ipu3.cpp │ │ │ └── meson.build │ │ ├── mali-c55 │ │ │ ├── mali-c55.cpp │ │ │ └── meson.build │ │ ├── meson.build │ │ ├── rkisp1 │ │ │ ├── meson.build │ │ │ ├── rkisp1.cpp │ │ │ ├── rkisp1_path.cpp │ │ │ └── rkisp1_path.h │ │ ├── rpi │ │ │ ├── common │ │ │ │ ├── delayed_controls.cpp │ │ │ │ ├── delayed_controls.h │ │ │ │ ├── meson.build │ │ │ │ ├── pipeline_base.cpp │ │ │ │ ├── pipeline_base.h │ │ │ │ ├── rpi_stream.cpp │ │ │ │ └── rpi_stream.h │ │ │ ├── meson.build │ │ │ ├── pisp │ │ │ │ ├── data │ │ │ │ │ ├── example.yaml │ │ │ │ │ └── meson.build │ │ │ │ ├── meson.build │ │ │ │ └── pisp.cpp │ │ │ └── vc4 │ │ │ │ ├── data │ │ │ │ ├── example.yaml │ │ │ │ ├── meson.build │ │ │ │ └── rpi_apps.yaml │ │ │ │ ├── meson.build │ │ │ │ └── vc4.cpp │ │ ├── simple │ │ │ ├── meson.build │ │ │ └── simple.cpp │ │ ├── uvcvideo │ │ │ ├── meson.build │ │ │ └── uvcvideo.cpp │ │ ├── vimc │ │ │ ├── meson.build │ │ │ └── vimc.cpp │ │ └── virtual │ │ │ ├── README.md │ │ │ ├── config_parser.cpp │ │ │ ├── config_parser.h │ │ │ ├── data │ │ │ ├── meson.build │ │ │ └── virtual.yaml │ │ │ ├── frame_generator.h │ │ │ ├── image_frame_generator.cpp │ │ │ ├── image_frame_generator.h │ │ │ ├── meson.build │ │ │ ├── test_pattern_generator.cpp │ │ │ ├── test_pattern_generator.h │ │ │ ├── virtual.cpp │ │ │ └── virtual.h │ ├── pipeline_handler.cpp │ ├── pixel_format.cpp │ ├── process.cpp │ ├── property_ids_core.yaml │ ├── property_ids_draft.yaml │ ├── proxy │ │ ├── meson.build │ │ └── worker │ │ │ └── meson.build │ ├── pub_key.cpp │ ├── request.cpp │ ├── sensor │ │ ├── camera_sensor.cpp │ │ ├── camera_sensor_legacy.cpp │ │ ├── camera_sensor_properties.cpp │ │ ├── camera_sensor_raw.cpp │ │ └── meson.build │ ├── shared_mem_object.cpp │ ├── software_isp │ │ ├── TODO │ │ ├── debayer.cpp │ │ ├── debayer.h │ │ ├── debayer_cpu.cpp │ │ ├── debayer_cpu.h │ │ ├── meson.build │ │ ├── software_isp.cpp │ │ ├── swstats_cpu.cpp │ │ └── swstats_cpu.h │ ├── source_paths.cpp │ ├── stream.cpp │ ├── sysfs.cpp │ ├── tracepoints.cpp │ ├── transform.cpp │ ├── v4l2_device.cpp │ ├── v4l2_pixelformat.cpp │ ├── v4l2_subdevice.cpp │ ├── v4l2_videodevice.cpp │ ├── vector.cpp │ ├── version.cpp.in │ └── yaml_parser.cpp ├── meson.build ├── py │ ├── cam │ │ ├── cam.py │ │ ├── cam_kms.py │ │ ├── cam_null.py │ │ ├── cam_qt.py │ │ ├── cam_qtgl.py │ │ ├── gl_helpers.py │ │ └── helpers.py │ ├── examples │ │ ├── simple-cam.py │ │ ├── simple-capture.py │ │ └── simple-continuous-capture.py │ ├── libcamera │ │ ├── __init__.py │ │ ├── gen-py-controls.py │ │ ├── gen-py-formats.py │ │ ├── meson.build │ │ ├── py_camera_manager.cpp │ │ ├── py_camera_manager.h │ │ ├── py_color_space.cpp │ │ ├── py_controls_generated.cpp.in │ │ ├── py_enums.cpp │ │ ├── py_formats_generated.cpp.in │ │ ├── py_geometry.cpp │ │ ├── py_helpers.cpp │ │ ├── py_helpers.h │ │ ├── py_main.cpp │ │ ├── py_main.h │ │ ├── py_transform.cpp │ │ └── utils │ │ │ ├── MappedFrameBuffer.py │ │ │ └── __init__.py │ └── meson.build └── v4l2 │ ├── libcamerify.in │ ├── meson.build │ ├── v4l2_camera.cpp │ ├── v4l2_camera.h │ ├── v4l2_camera_file.cpp │ ├── v4l2_camera_file.h │ ├── v4l2_camera_proxy.cpp │ ├── v4l2_camera_proxy.h │ ├── v4l2_compat.cpp │ ├── v4l2_compat_manager.cpp │ └── v4l2_compat_manager.h ├── subprojects ├── .gitignore ├── gtest.wrap ├── libpisp.wrap ├── libyaml.wrap └── libyuv.wrap ├── test ├── bayer-format.cpp ├── byte-stream-buffer.cpp ├── camera-sensor.cpp ├── camera │ ├── buffer_import.cpp │ ├── camera_reconfigure.cpp │ ├── capture.cpp │ ├── configuration_default.cpp │ ├── configuration_set.cpp │ ├── meson.build │ └── statemachine.cpp ├── color-space.cpp ├── controls │ ├── control_info.cpp │ ├── control_info_map.cpp │ ├── control_list.cpp │ ├── control_value.cpp │ └── meson.build ├── delayed_controls.cpp ├── event-dispatcher.cpp ├── event-thread.cpp ├── event.cpp ├── fence.cpp ├── file.cpp ├── flags.cpp ├── geometry.cpp ├── gstreamer │ ├── gstreamer_device_provider_test.cpp │ ├── gstreamer_memory_lifetime_test.cpp │ ├── gstreamer_multi_stream_test.cpp │ ├── gstreamer_single_stream_test.cpp │ ├── gstreamer_test.cpp │ ├── gstreamer_test.h │ └── meson.build ├── hotplug-cameras.cpp ├── ipa │ ├── ipa_interface_test.cpp │ ├── ipa_module_test.cpp │ ├── libipa │ │ ├── fixedpoint.cpp │ │ ├── histogram.cpp │ │ ├── interpolator.cpp │ │ └── meson.build │ └── meson.build ├── ipc │ ├── meson.build │ ├── unixsocket.cpp │ └── unixsocket_ipc.cpp ├── libtest │ ├── buffer_source.cpp │ ├── buffer_source.h │ ├── camera_test.cpp │ ├── camera_test.h │ ├── meson.build │ ├── test.cpp │ └── test.h ├── log │ ├── log_api.cpp │ ├── log_process.cpp │ └── meson.build ├── mapped-buffer.cpp ├── media_device │ ├── media_device_acquire.cpp │ ├── media_device_link_test.cpp │ ├── media_device_print_test.cpp │ ├── media_device_test.cpp │ ├── media_device_test.h │ └── meson.build ├── meson.build ├── message.cpp ├── object-delete.cpp ├── object-invoke.cpp ├── object.cpp ├── pixel-format.cpp ├── process │ ├── meson.build │ └── process_test.cpp ├── public-api.cpp ├── py │ ├── meson.build │ └── unittests.py ├── serialization │ ├── control_serialization.cpp │ ├── generated_serializer │ │ ├── generated_serializer_test.cpp │ │ ├── include │ │ │ └── libcamera │ │ │ │ └── ipa │ │ │ │ ├── meson.build │ │ │ │ └── test.mojom │ │ └── meson.build │ ├── ipa_data_serializer_test.cpp │ ├── meson.build │ ├── serialization_test.cpp │ └── serialization_test.h ├── shared-fd.cpp ├── signal-threads.cpp ├── signal.cpp ├── span.cpp ├── stream │ ├── meson.build │ ├── stream_colorspace.cpp │ └── stream_formats.cpp ├── threads.cpp ├── timer-fail.cpp ├── timer-thread.cpp ├── timer.cpp ├── transform.cpp ├── unique-fd.cpp ├── utils.cpp ├── v4l2_compat │ ├── meson.build │ └── v4l2_compat_test.py ├── v4l2_subdevice │ ├── list_formats.cpp │ ├── meson.build │ ├── test_formats.cpp │ ├── v4l2_subdevice_test.cpp │ └── v4l2_subdevice_test.h ├── v4l2_videodevice │ ├── buffer_cache.cpp │ ├── buffer_sharing.cpp │ ├── capture_async.cpp │ ├── controls.cpp │ ├── dequeue_watchdog.cpp │ ├── double_open.cpp │ ├── formats.cpp │ ├── meson.build │ ├── request_buffers.cpp │ ├── stream_on_off.cpp │ ├── v4l2_m2mdevice.cpp │ ├── v4l2_videodevice_test.cpp │ └── v4l2_videodevice_test.h ├── vector.cpp └── yaml-parser.cpp └── utils ├── abi-compat.sh ├── checkstyle.py ├── codegen ├── controls.py ├── gen-controls.py ├── gen-formats.py ├── gen-gst-controls.py ├── gen-header.sh ├── gen-ipa-pub-key.py ├── gen-tp-header.py ├── ipc │ ├── extract-docs.py │ ├── generate.py │ ├── generators │ │ ├── __init__.py │ │ ├── libcamera_templates │ │ │ ├── core_ipa_interface.h.tmpl │ │ │ ├── core_ipa_serializer.h.tmpl │ │ │ ├── definition_functions.tmpl │ │ │ ├── meson.build │ │ │ ├── module_ipa_interface.h.tmpl │ │ │ ├── module_ipa_proxy.cpp.tmpl │ │ │ ├── module_ipa_proxy.h.tmpl │ │ │ ├── module_ipa_proxy_worker.cpp.tmpl │ │ │ ├── module_ipa_serializer.h.tmpl │ │ │ ├── proxy_functions.tmpl │ │ │ └── serializer.tmpl │ │ ├── meson.build │ │ └── mojom_libcamera_generator.py │ ├── meson.build │ ├── mojo │ │ ├── README │ │ └── public │ │ │ ├── LICENSE │ │ │ └── tools │ │ │ ├── .style.yapf │ │ │ ├── BUILD.gn │ │ │ ├── bindings │ │ │ ├── BUILD.gn │ │ │ ├── README.md │ │ │ ├── checks │ │ │ │ ├── __init__.py │ │ │ │ ├── mojom_attributes_check.py │ │ │ │ ├── mojom_attributes_check_unittest.py │ │ │ │ ├── mojom_definitions_check.py │ │ │ │ ├── mojom_interface_feature_check.py │ │ │ │ ├── mojom_interface_feature_check_unittest.py │ │ │ │ ├── mojom_restrictions_check.py │ │ │ │ └── mojom_restrictions_checks_unittest.py │ │ │ ├── concatenate-files.py │ │ │ ├── concatenate_and_replace_closure_exports.py │ │ │ ├── gen_data_files_list.py │ │ │ ├── generate_type_mappings.py │ │ │ ├── minify_with_terser.py │ │ │ ├── mojom.gni │ │ │ ├── mojom_bindings_generator.py │ │ │ ├── mojom_bindings_generator_unittest.py │ │ │ └── validate_typemap_config.py │ │ │ ├── mojom │ │ │ ├── BUILD.gn │ │ │ ├── README.md │ │ │ ├── check_stable_mojom_compatibility.py │ │ │ ├── check_stable_mojom_compatibility_unittest.py │ │ │ ├── const_unittest.py │ │ │ ├── enum_unittest.py │ │ │ ├── feature_unittest.py │ │ │ ├── mojom │ │ │ │ ├── BUILD.gn │ │ │ │ ├── __init__.py │ │ │ │ ├── error.py │ │ │ │ ├── fileutil.py │ │ │ │ ├── fileutil_unittest.py │ │ │ │ ├── generate │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── check.py │ │ │ │ │ ├── generator.py │ │ │ │ │ ├── generator_unittest.py │ │ │ │ │ ├── module.py │ │ │ │ │ ├── module_unittest.py │ │ │ │ │ ├── pack.py │ │ │ │ │ ├── pack_unittest.py │ │ │ │ │ ├── template_expander.py │ │ │ │ │ ├── translate.py │ │ │ │ │ └── translate_unittest.py │ │ │ │ └── parse │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── ast.py │ │ │ │ │ ├── ast_unittest.py │ │ │ │ │ ├── conditional_features.py │ │ │ │ │ ├── conditional_features_unittest.py │ │ │ │ │ ├── lexer.py │ │ │ │ │ ├── lexer_unittest.py │ │ │ │ │ ├── parser.py │ │ │ │ │ └── parser_unittest.py │ │ │ ├── mojom_parser.py │ │ │ ├── mojom_parser_test_case.py │ │ │ ├── mojom_parser_unittest.py │ │ │ ├── stable_attribute_unittest.py │ │ │ ├── union_unittest.py │ │ │ └── version_compatibility_unittest.py │ │ │ └── run_all_python_unittests.py │ ├── parser.py │ └── tools │ │ ├── README │ │ └── diagnosis │ │ └── crbug_1001171.py └── meson.build ├── gen-debug-controls.py ├── gen-ipa-priv-key.sh ├── gen-version.sh ├── hooks ├── post-commit ├── pre-commit └── pre-push ├── ipu3 ├── ipu3-capture.sh ├── ipu3-pack.c ├── ipu3-process.sh ├── ipu3-unpack.c └── meson.build ├── meson.build ├── raspberrypi ├── ctt │ ├── alsc_only.py │ ├── cac_only.py │ ├── colors.py │ ├── convert_tuning.py │ ├── ctt.py │ ├── ctt_alsc.py │ ├── ctt_awb.py │ ├── ctt_cac.py │ ├── ctt_ccm.py │ ├── ctt_config_example.json │ ├── ctt_dots_locator.py │ ├── ctt_geq.py │ ├── ctt_image_load.py │ ├── ctt_lux.py │ ├── ctt_macbeth_locator.py │ ├── ctt_noise.py │ ├── ctt_pisp.py │ ├── ctt_pretty_print_json.py │ ├── ctt_ransac.py │ ├── ctt_ref.pgm │ ├── ctt_tools.py │ ├── ctt_vc4.py │ └── ctt_visualise.py └── delayedctrls_parse.py ├── release.sh ├── rkisp1 ├── gen-csc-table.py └── rkisp1-capture.sh ├── run-dist.sh ├── semver ├── tracepoints └── analyze-ipa-trace.py ├── tuning ├── README.rst ├── config-example.yaml ├── libtuning │ ├── __init__.py │ ├── average.py │ ├── ctt_awb.py │ ├── ctt_ccm.py │ ├── ctt_colors.py │ ├── ctt_ransac.py │ ├── generators │ │ ├── __init__.py │ │ ├── generator.py │ │ ├── raspberrypi_output.py │ │ └── yaml_output.py │ ├── gradient.py │ ├── image.py │ ├── libtuning.py │ ├── macbeth.py │ ├── macbeth_ref.pgm │ ├── modules │ │ ├── __init__.py │ │ ├── agc │ │ │ ├── __init__.py │ │ │ ├── agc.py │ │ │ └── rkisp1.py │ │ ├── awb │ │ │ ├── __init__.py │ │ │ ├── awb.py │ │ │ └── rkisp1.py │ │ ├── ccm │ │ │ ├── __init__.py │ │ │ ├── ccm.py │ │ │ └── rkisp1.py │ │ ├── lsc │ │ │ ├── __init__.py │ │ │ ├── lsc.py │ │ │ ├── raspberrypi.py │ │ │ └── rkisp1.py │ │ ├── lux │ │ │ ├── __init__.py │ │ │ ├── lux.py │ │ │ └── rkisp1.py │ │ ├── module.py │ │ └── static.py │ ├── parsers │ │ ├── __init__.py │ │ ├── parser.py │ │ ├── raspberrypi_parser.py │ │ └── yaml_parser.py │ ├── smoothing.py │ └── utils.py ├── raspberrypi │ ├── __init__.py │ └── alsc.py ├── raspberrypi_alsc_only.py ├── requirements.txt └── rkisp1.py ├── update-kernel-headers.sh └── update-mojo.sh /.clang-tidy: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | Checks: -clang-diagnostic-c99-designator 4 | FormatStyle: file 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.{cpp,h}] 12 | indent_size = 8 13 | indent_style = tab 14 | 15 | [*.json] 16 | indent_size = 4 17 | indent_style = space 18 | 19 | [*.py] 20 | indent_size = 4 21 | indent_style = space 22 | 23 | [*.yaml] 24 | indent_size = 2 25 | indent_style = space 26 | 27 | [{meson.build,meson_options.txt}] 28 | indent_size = 4 29 | indent_style = space 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | /build/ 4 | /patches/ 5 | 6 | *.patch 7 | *.pyc 8 | __pycache__/ 9 | venv/ 10 | -------------------------------------------------------------------------------- /Documentation/api-html/index.rst: -------------------------------------------------------------------------------- 1 | .. SPDX-License-Identifier: CC-BY-SA-4.0 2 | 3 | .. _api: 4 | 5 | API Reference 6 | ============= 7 | 8 | :: Placeholder for Doxygen documentation 9 | -------------------------------------------------------------------------------- /Documentation/getting-started.rst: -------------------------------------------------------------------------------- 1 | .. SPDX-License-Identifier: CC-BY-SA-4.0 2 | 3 | .. Getting started information is defined in the project README file. 4 | .. include:: ../README.rst 5 | :start-after: .. section-begin-getting-started 6 | :end-before: .. section-end-getting-started 7 | -------------------------------------------------------------------------------- /Documentation/internal-api-html/index.rst: -------------------------------------------------------------------------------- 1 | .. SPDX-License-Identifier: CC-BY-SA-4.0 2 | 3 | .. _internal-api: 4 | 5 | Internal API Reference 6 | ====================== 7 | 8 | :: Placeholder for Doxygen documentation 9 | -------------------------------------------------------------------------------- /Documentation/theme/footer.html: -------------------------------------------------------------------------------- 1 | {# 2 | SPDX-License-Identifier: CC-BY-SA-4.0 3 | #} 4 | 15 | -------------------------------------------------------------------------------- /Documentation/theme/static/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/libcamera/d83ff0a4ae4503bc56b7ed48cd142c3dd423ad3b/Documentation/theme/static/search.png -------------------------------------------------------------------------------- /Documentation/theme/theme.conf: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC-BY-SA-4.0 2 | 3 | [theme] 4 | inherit = basic 5 | stylesheet = css/theme.css 6 | 7 | [options] 8 | -------------------------------------------------------------------------------- /LICENSES/GPL-2.0+.txt: -------------------------------------------------------------------------------- 1 | GPL-2.0-or-later.txt -------------------------------------------------------------------------------- /LICENSES/GPL-2.0.txt: -------------------------------------------------------------------------------- 1 | GPL-2.0-only.txt -------------------------------------------------------------------------------- /include/android/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | android_includes = ([ 4 | include_directories('hardware/libhardware/include/'), 5 | include_directories('metadata/'), 6 | include_directories('system/core/include'), 7 | ]) 8 | -------------------------------------------------------------------------------- /include/android/system/core/include/system/graphics-base.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: Apache-2.0 */ 2 | #ifndef SYSTEM_CORE_GRAPHICS_BASE_H_ 3 | #define SYSTEM_CORE_GRAPHICS_BASE_H_ 4 | 5 | #include "graphics-base-v1.0.h" 6 | #include "graphics-base-v1.1.h" 7 | 8 | #endif // SYSTEM_CORE_GRAPHICS_BASE_H_ 9 | -------------------------------------------------------------------------------- /include/libcamera/internal/control_validator.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2019, Google Inc. 4 | * 5 | * Control validator 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | namespace libcamera { 13 | 14 | class ControlId; 15 | 16 | class ControlValidator 17 | { 18 | public: 19 | virtual ~ControlValidator() = default; 20 | 21 | virtual const std::string &name() const = 0; 22 | virtual bool validate(unsigned int id) const = 0; 23 | }; 24 | 25 | } /* namespace libcamera */ 26 | -------------------------------------------------------------------------------- /include/libcamera/internal/converter/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_headers += files([ 4 | 'converter_v4l2_m2m.h', 5 | ]) 6 | -------------------------------------------------------------------------------- /include/libcamera/internal/software_isp/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_headers += files([ 4 | 'debayer_params.h', 5 | 'software_isp.h', 6 | 'swisp_stats.h', 7 | ]) 8 | -------------------------------------------------------------------------------- /include/libcamera/internal/source_paths.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2021, Google Inc. 4 | * 5 | * Identify libcamera source and build paths 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | namespace libcamera::utils { 13 | 14 | std::string libcameraBuildPath(); 15 | std::string libcameraSourcePath(); 16 | 17 | } /* namespace libcamera::utils */ 18 | -------------------------------------------------------------------------------- /include/libcamera/internal/sysfs.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2020, Google Inc. 4 | * 5 | * Miscellaneous utility functions to access sysfs 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | namespace libcamera { 13 | 14 | namespace sysfs { 15 | 16 | std::string charDevPath(const std::string &deviceNode); 17 | 18 | std::string firmwareNodePath(const std::string &device); 19 | 20 | } /* namespace sysfs */ 21 | 22 | } /* namespace libcamera */ 23 | -------------------------------------------------------------------------------- /include/libcamera/internal/tracepoints/buffer_enums.tp: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2020, Google Inc. 4 | * 5 | * buffer_enums.tp - Tracepoint definition for enums in the buffer class 6 | */ 7 | 8 | TRACEPOINT_ENUM( 9 | libcamera, 10 | buffer_status, 11 | TP_ENUM_VALUES( 12 | ctf_enum_value("FrameSuccess", 0) 13 | ctf_enum_value("FrameError", 1) 14 | ctf_enum_value("FrameCancelled", 2) 15 | ) 16 | ) 17 | -------------------------------------------------------------------------------- /include/libcamera/internal/tracepoints/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | # enum files must go first 4 | tracepoint_files = files([ 5 | 'buffer_enums.tp', 6 | 'request_enums.tp', 7 | ]) 8 | 9 | tracepoint_files += files([ 10 | 'pipeline.tp', 11 | 'request.tp', 12 | ]) 13 | -------------------------------------------------------------------------------- /include/libcamera/internal/tracepoints/request_enums.tp: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2020, Google Inc. 4 | * 5 | * request_enums.tp - Tracepoint definition for enums in the request class 6 | */ 7 | 8 | TRACEPOINT_ENUM( 9 | libcamera, 10 | request_status, 11 | TP_ENUM_VALUES( 12 | ctf_enum_value("RequestPending", 0) 13 | ctf_enum_value("RequestComplete", 1) 14 | ctf_enum_value("RequestCancelled", 2) 15 | ) 16 | ) 17 | -------------------------------------------------------------------------------- /include/libcamera/ipa/ipa_interface.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2019, Google Inc. 4 | * 5 | * Image Processing Algorithm interface 6 | */ 7 | 8 | #pragma once 9 | 10 | namespace libcamera { 11 | 12 | /* 13 | * Structs and enums that are defined in core.mojom that have the skipHeader 14 | * tag must be #included here. 15 | */ 16 | 17 | class IPAInterface 18 | { 19 | public: 20 | virtual ~IPAInterface() = default; 21 | }; 22 | 23 | extern "C" { 24 | libcamera::IPAInterface *ipaCreate(); 25 | } 26 | 27 | } /* namespace libcamera */ 28 | -------------------------------------------------------------------------------- /include/libcamera/ipa/ipa_module_info.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2019, Google Inc. 4 | * 5 | * Image Processing Algorithm module information 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | #define IPA_MODULE_API_VERSION 1 13 | 14 | namespace libcamera { 15 | 16 | struct IPAModuleInfo { 17 | int moduleAPIVersion; 18 | uint32_t pipelineVersion; 19 | char pipelineName[256]; 20 | char name[256]; 21 | } __attribute__((packed)); 22 | 23 | extern "C" { 24 | extern const struct IPAModuleInfo ipaModuleInfo; 25 | } 26 | 27 | } /* namespace libcamera */ 28 | -------------------------------------------------------------------------------- /include/libcamera/version.h.in: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2019, Google Inc. 4 | * 5 | * Library version information 6 | * 7 | * This file is auto-generated. Do not edit. 8 | */ 9 | 10 | #pragma once 11 | 12 | #define LIBCAMERA_VERSION_MAJOR @LIBCAMERA_VERSION_MAJOR@ 13 | #define LIBCAMERA_VERSION_MINOR @LIBCAMERA_VERSION_MINOR@ 14 | #define LIBCAMERA_VERSION_PATCH @LIBCAMERA_VERSION_PATCH@ 15 | -------------------------------------------------------------------------------- /include/linux/README: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | Files in this directory are imported from v6.13-rc1-68-gf9bbbd9a696d of the Linux kernel. Do not 4 | modify them manually. 5 | -------------------------------------------------------------------------------- /include/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | include_build_dir = meson.current_build_dir() 4 | 5 | subdir('android') 6 | subdir('libcamera') 7 | -------------------------------------------------------------------------------- /src/android/camera_ops.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2019, Google Inc. 4 | * 5 | * Android Camera HAL Operations 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | int hal_dev_close(hw_device_t *hw_device); 13 | extern camera3_device_ops hal_dev_ops; 14 | -------------------------------------------------------------------------------- /src/android/cros/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | if get_option('android_platform') != 'cros' 4 | subdir_done() 5 | endif 6 | 7 | android_hal_sources += files([ 8 | 'camera3_hal.cpp', 9 | ]) 10 | 11 | android_deps += dependency('libcros_camera') 12 | 13 | android_cpp_args += ['-DOS_CHROMEOS'] 14 | -------------------------------------------------------------------------------- /src/android/cros_mojo_token.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2022, Google Inc. 4 | * 5 | * cros-specific mojo token 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | inline cros::CameraMojoChannelManagerToken *gCrosMojoToken = nullptr; 13 | -------------------------------------------------------------------------------- /src/android/data/nautilus/camera_hal.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | cameras: 4 | "\\_SB_.PCI0.I2C2.CAM0": 5 | location: back 6 | rotation: 0 7 | 8 | "\\_SB_.PCI0.XHCI.RHUB.HS09-9:1.0-04f2:b647": 9 | location: front 10 | rotation: 0 11 | -------------------------------------------------------------------------------- /src/android/data/soraka/camera_hal.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | cameras: 4 | "\\_SB_.PCI0.I2C4.CAM1": 5 | location: front 6 | rotation: 0 7 | 8 | "\\_SB_.PCI0.I2C2.CAM0": 9 | location: back 10 | rotation: 0 11 | -------------------------------------------------------------------------------- /src/android/hal_framebuffer.cpp: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2022, Google Inc. 4 | * 5 | * HAL Frame Buffer Handling 6 | */ 7 | 8 | #include "hal_framebuffer.h" 9 | 10 | #include 11 | 12 | HALFrameBuffer::HALFrameBuffer(std::unique_ptr d, 13 | buffer_handle_t handle) 14 | : FrameBuffer(std::move(d)), handle_(handle) 15 | { 16 | } 17 | 18 | HALFrameBuffer::HALFrameBuffer(const std::vector &planes, 19 | buffer_handle_t handle) 20 | : FrameBuffer(planes), handle_(handle) 21 | { 22 | } 23 | -------------------------------------------------------------------------------- /src/android/jpeg/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | android_hal_sources += files([ 4 | 'encoder_libjpeg.cpp', 5 | 'exif.cpp', 6 | 'post_processor_jpeg.cpp', 7 | 'thumbnailer.cpp' 8 | ]) 9 | 10 | platform = get_option('android_platform') 11 | if platform == 'cros' 12 | android_hal_sources += files(['encoder_jea.cpp']) 13 | android_deps += [dependency('libcros_camera')] 14 | endif 15 | -------------------------------------------------------------------------------- /src/android/mm/libhardware_stub.c: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: Apache-2.0 */ 2 | /* 3 | * Copyright (C) 2023, Ideas on Board 4 | * 5 | * Android libhardware stub for test compilation 6 | */ 7 | 8 | #include 9 | 10 | #include 11 | 12 | int hw_get_module(const char *id __attribute__((__unused__)), 13 | const struct hw_module_t **module) 14 | { 15 | *module = NULL; 16 | return -ENOTSUP; 17 | } 18 | -------------------------------------------------------------------------------- /src/apps/cam/main.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 | /* 3 | * Copyright (C) 2019, Google Inc. 4 | * 5 | * Cam application 6 | */ 7 | 8 | #pragma once 9 | 10 | enum { 11 | OptCamera = 'c', 12 | OptCapture = 'C', 13 | OptDisplay = 'D', 14 | OptFile = 'F', 15 | OptHelp = 'h', 16 | OptInfo = 'I', 17 | OptList = 'l', 18 | OptListProperties = 'p', 19 | OptMonitor = 'm', 20 | OptOrientation = 'o', 21 | OptSDL = 'S', 22 | OptStream = 's', 23 | OptListControls = 256, 24 | OptStrictFormats = 257, 25 | OptMetadata = 258, 26 | OptCaptureScript = 259, 27 | }; 28 | -------------------------------------------------------------------------------- /src/apps/cam/sdl_texture_mjpg.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 | /* 3 | * Copyright (C) 2022, Ideas on Board Oy 4 | * 5 | * SDL Texture MJPG 6 | */ 7 | 8 | #pragma once 9 | 10 | #include "sdl_texture.h" 11 | 12 | class SDLTextureMJPG : public SDLTexture 13 | { 14 | public: 15 | SDLTextureMJPG(const SDL_Rect &rect); 16 | 17 | void update(const std::vector> &data) override; 18 | 19 | private: 20 | int decompress(libcamera::Span data); 21 | 22 | std::unique_ptr rgb_; 23 | }; 24 | -------------------------------------------------------------------------------- /src/apps/common/ppm_writer.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2024, Red Hat, Inc. 4 | * 5 | * PPM writer 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | #include 13 | 14 | class PPMWriter 15 | { 16 | public: 17 | static int write(const char *filename, 18 | const libcamera::StreamConfiguration &config, 19 | const libcamera::Span &data); 20 | }; 21 | -------------------------------------------------------------------------------- /src/apps/ipa-verify/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | if not ipa_sign_module 4 | subdir_done() 5 | endif 6 | 7 | ipa_verify_sources = files([ 8 | 'main.cpp', 9 | ]) 10 | 11 | ipa_verify = executable('ipa_verify', ipa_verify_sources, 12 | dependencies : [ 13 | libcamera_private, 14 | ], 15 | install : false) 16 | -------------------------------------------------------------------------------- /src/apps/lc-compliance/environment.cpp: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 | /* 3 | * Copyright (C) 2021, Collabora Ltd. 4 | * 5 | * Common environment for tests 6 | */ 7 | 8 | #include "environment.h" 9 | 10 | using namespace libcamera; 11 | 12 | Environment *Environment::get() 13 | { 14 | static Environment instance; 15 | return &instance; 16 | } 17 | 18 | void Environment::setup(CameraManager *cm, std::string cameraId) 19 | { 20 | cm_ = cm; 21 | cameraId_ = cameraId; 22 | } 23 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/activity.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/airplay.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/alert-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/alert-octagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/alert-triangle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/align-center.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/align-justify.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/align-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/align-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/anchor.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/aperture.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/archive.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-down-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-down-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-down-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-left-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-right-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-up-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-up-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-up-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/arrow-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/at-sign.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/award.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/bar-chart-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/bar-chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/battery-charging.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/battery.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/bell-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/bell.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/bluetooth.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/bold.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/book-open.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/book.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/bookmark.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/box.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/briefcase.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/calendar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/camera-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/camera.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/cast.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/check-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/check-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/chevron-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/chevron-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/chevron-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/chevron-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/chevrons-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/chevrons-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/chevrons-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/chevrons-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/chrome.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/clipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/clock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/cloud-drizzle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/cloud-lightning.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/cloud-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/cloud-rain.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/cloud-snow.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/cloud.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/code.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/codepen.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/coffee.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/columns.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/command.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/compass.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/copy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/corner-down-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/corner-down-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/corner-left-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/corner-left-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/corner-right-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/corner-right-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/corner-up-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/corner-up-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/credit-card.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/crop.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/crosshair.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/database.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/delete.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/disc.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/dollar-sign.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/download-cloud.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/download.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/droplet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/edit-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/edit-3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/edit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/external-link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/eye-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/eye.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/facebook.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/fast-forward.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/feather.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/feathericons.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | aperture.svg 5 | camera-off.svg 6 | play-circle.svg 7 | save.svg 8 | stop-circle.svg 9 | x-circle.svg 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/figma.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/file-minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/file-plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/file-text.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/film.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/filter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/flag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/folder-minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/folder-plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/folder.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/framer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/frown.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/gift.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/git-branch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/git-commit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/git-merge.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/git-pull-request.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/gitlab.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/globe.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/grid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/hard-drive.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/hash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/headphones.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/help-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/hexagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/home.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/image.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/inbox.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/info.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/instagram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/italic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/key.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/layers.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/layout.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/life-buoy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/link-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/link.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/linkedin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/list.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/lock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/log-in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/log-out.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/mail.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/map-pin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/map.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/maximize-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/maximize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/meh.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/menu.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/message-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/message-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/mic-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/mic.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/minimize-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/minimize.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/minus-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/minus-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/monitor.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/moon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/more-horizontal.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/more-vertical.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/mouse-pointer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/move.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/music.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/navigation-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/navigation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/octagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/package.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/paperclip.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/pause-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/pause.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/pen-tool.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/percent.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/phone-call.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/phone-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/phone.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/pie-chart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/play-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/play.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/plus-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/plus-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/pocket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/power.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/printer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/radio.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/refresh-ccw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/refresh-cw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/repeat.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/rewind.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/rotate-ccw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/rotate-cw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/rss.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/save.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/scissors.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/search.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/send.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/server.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/share-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/share.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/shield-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/shield.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/shopping-bag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/shopping-cart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/shuffle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/sidebar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/skip-back.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/skip-forward.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/slash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/smartphone.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/smile.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/speaker.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/star.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/stop-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/sunrise.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/sunset.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/tablet.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/tag.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/target.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/terminal.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/thermometer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/thumbs-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/thumbs-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/toggle-left.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/toggle-right.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/tool.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/trash-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/trash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/trello.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/trending-down.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/trending-up.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/triangle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/truck.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/tv.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/twitch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/type.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/umbrella.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/underline.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/unlock.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/upload-cloud.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/upload.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/user-check.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/user-minus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/user-plus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/user-x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/user.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/users.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/video-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/video.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/voicemail.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/volume-1.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/volume-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/volume-x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/volume.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/watch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/wifi-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/wifi.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/wind.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/x-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/x-octagon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/x-square.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/x.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/youtube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/zap-off.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/zap.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/zoom-in.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/feathericons/zoom-out.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/shader/RGB.frag: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2020, Laurent Pinchart 4 | * 5 | * RGB.frag - Fragment shader code for RGB formats 6 | */ 7 | 8 | #ifdef GL_ES 9 | precision mediump float; 10 | #endif 11 | 12 | varying vec2 textureOut; 13 | uniform sampler2D tex_y; 14 | 15 | void main(void) 16 | { 17 | vec3 rgb; 18 | 19 | rgb = texture2D(tex_y, textureOut).RGB_PATTERN; 20 | 21 | gl_FragColor = vec4(rgb, 1.0); 22 | } 23 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/shader/identity.vert: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2020, Linaro 4 | * 5 | * identity.vert - Identity vertex shader for pixel format conversion 6 | */ 7 | 8 | attribute vec4 vertexIn; 9 | attribute vec2 textureIn; 10 | varying vec2 textureOut; 11 | 12 | uniform mat4 proj_matrix; 13 | uniform float stride_factor; 14 | 15 | void main(void) 16 | { 17 | gl_Position = proj_matrix * vertexIn; 18 | textureOut = vec2(textureIn.x * stride_factor, textureIn.y); 19 | } 20 | -------------------------------------------------------------------------------- /src/apps/qcam/assets/shader/shaders.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | RGB.frag 5 | YUV_2_planes.frag 6 | YUV_3_planes.frag 7 | YUV_packed.frag 8 | bayer_1x_packed.frag 9 | bayer_8.frag 10 | bayer_8.vert 11 | identity.vert 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/apps/qcam/message_handler.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 | /* 3 | * Copyright (C) 2020, Laurent Pinchart 4 | * 5 | * Log message handling 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | class MessageHandler 13 | { 14 | public: 15 | MessageHandler(bool verbose); 16 | 17 | private: 18 | static void handleMessage(QtMsgType type, 19 | const QMessageLogContext &context, 20 | const QString &msg); 21 | 22 | static QtMessageHandler handler_; 23 | static bool verbose_; 24 | }; 25 | -------------------------------------------------------------------------------- /src/gstreamer/gstlibcameraprovider.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2020, Collabora Ltd. 4 | * Author: Nicolas Dufresne 5 | * 6 | * GStreamer Device Provider 7 | */ 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | G_BEGIN_DECLS 14 | 15 | #define GST_TYPE_LIBCAMERA_PROVIDER gst_libcamera_provider_get_type() 16 | G_DECLARE_FINAL_TYPE(GstLibcameraProvider, gst_libcamera_provider, 17 | GST_LIBCAMERA, PROVIDER, GstDeviceProvider) 18 | 19 | G_END_DECLS 20 | -------------------------------------------------------------------------------- /src/gstreamer/gstlibcamerasrc.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2019, Collabora Ltd. 4 | * Author: Nicolas Dufresne 5 | * 6 | * GStreamer Capture Element 7 | */ 8 | 9 | #pragma once 10 | 11 | #include 12 | 13 | G_BEGIN_DECLS 14 | 15 | #define GST_TYPE_LIBCAMERA_SRC gst_libcamera_src_get_type() 16 | G_DECLARE_FINAL_TYPE(GstLibcameraSrc, gst_libcamera_src, 17 | GST_LIBCAMERA, SRC, GstElement) 18 | 19 | G_END_DECLS 20 | -------------------------------------------------------------------------------- /src/ipa/ipa-sign-install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # SPDX-License-Identifier: GPL-2.0-or-later 3 | # Copyright (C) 2020, Google Inc. 4 | # 5 | # Author: Laurent Pinchart 6 | # 7 | # Regenerate IPA module signatures when installing 8 | 9 | key=$1 10 | shift 11 | modules=$* 12 | 13 | ipa_sign=$(dirname "$0")/ipa-sign.sh 14 | 15 | echo "Regenerating IPA modules signatures" 16 | 17 | for module in ${modules} ; do 18 | module="${MESON_INSTALL_DESTDIR_PREFIX}/${module}" 19 | if [ -f "${module}" ] ; then 20 | "${ipa_sign}" "${key}" "${module}" "${module}.sign" 21 | fi 22 | done 23 | -------------------------------------------------------------------------------- /src/ipa/ipa-sign.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # SPDX-License-Identifier: GPL-2.0-or-later 3 | # Copyright (C) 2020, Google Inc. 4 | # 5 | # Author: Laurent Pinchart 6 | # 7 | # Generate a signature for an IPA module 8 | 9 | key="$1" 10 | input="$2" 11 | output="$3" 12 | 13 | openssl dgst -sha256 -sign "${key}" -out "${output}" "${input}" 14 | -------------------------------------------------------------------------------- /src/ipa/ipu3/algorithms/algorithm.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2021, Ideas On Board 4 | * 5 | * IPU3 control algorithm interface 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | #include "module.h" 13 | 14 | namespace libcamera { 15 | 16 | namespace ipa::ipu3 { 17 | 18 | using Algorithm = libcamera::ipa::Algorithm; 19 | 20 | } /* namespace ipa::ipu3 */ 21 | 22 | } /* namespace libcamera */ 23 | -------------------------------------------------------------------------------- /src/ipa/ipu3/algorithms/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | ipu3_ipa_algorithms = files([ 4 | 'af.cpp', 5 | 'agc.cpp', 6 | 'awb.cpp', 7 | 'blc.cpp', 8 | 'tone_mapping.cpp', 9 | ]) 10 | -------------------------------------------------------------------------------- /src/ipa/ipu3/data/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | conf_files = files([ 4 | 'uncalibrated.yaml', 5 | ]) 6 | 7 | install_data(conf_files, 8 | install_dir : ipa_data_dir / 'ipu3', 9 | install_tag : 'runtime') 10 | -------------------------------------------------------------------------------- /src/ipa/ipu3/data/uncalibrated.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | %YAML 1.1 3 | --- 4 | version: 1 5 | algorithms: 6 | - Af: 7 | - Agc: 8 | - Awb: 9 | - BlackLevelCorrection: 10 | - ToneMapping: 11 | ... 12 | -------------------------------------------------------------------------------- /src/ipa/ipu3/module.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2022, Ideas On Board 4 | * 5 | * IPU3 IPA Module 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | #include 13 | 14 | #include 15 | 16 | #include "ipa_context.h" 17 | 18 | namespace libcamera { 19 | 20 | namespace ipa::ipu3 { 21 | 22 | using Module = ipa::Module; 24 | 25 | } /* namespace ipa::ipu3 */ 26 | 27 | } /* namespace libcamera*/ 28 | -------------------------------------------------------------------------------- /src/ipa/libipa/colours.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2024, Ideas on Board Oy 4 | * 5 | * libipa miscellaneous colour helpers 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | #include "libcamera/internal/vector.h" 13 | 14 | namespace libcamera { 15 | 16 | namespace ipa { 17 | 18 | double rec601LuminanceFromRGB(const RGB &rgb); 19 | uint32_t estimateCCT(const RGB &rgb); 20 | 21 | } /* namespace ipa */ 22 | 23 | } /* namespace libcamera */ 24 | -------------------------------------------------------------------------------- /src/ipa/mali-c55/algorithms/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | mali_c55_ipa_algorithms = files([ 4 | 'agc.cpp', 5 | 'awb.cpp', 6 | 'blc.cpp', 7 | 'lsc.cpp', 8 | ]) 9 | -------------------------------------------------------------------------------- /src/ipa/mali-c55/data/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | conf_files = files([ 4 | 'imx415.yaml', 5 | 'uncalibrated.yaml' 6 | ]) 7 | 8 | install_data(conf_files, 9 | install_dir : ipa_data_dir / 'mali-c55') 10 | -------------------------------------------------------------------------------- /src/ipa/mali-c55/data/uncalibrated.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | %YAML 1.1 3 | --- 4 | version: 1 5 | algorithms: 6 | - Agc: 7 | ... 8 | -------------------------------------------------------------------------------- /src/ipa/rkisp1/algorithms/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | rkisp1_ipa_algorithms = files([ 4 | 'agc.cpp', 5 | 'awb.cpp', 6 | 'blc.cpp', 7 | 'ccm.cpp', 8 | 'cproc.cpp', 9 | 'dpcc.cpp', 10 | 'dpf.cpp', 11 | 'filter.cpp', 12 | 'goc.cpp', 13 | 'gsl.cpp', 14 | 'lsc.cpp', 15 | 'lux.cpp', 16 | ]) 17 | -------------------------------------------------------------------------------- /src/ipa/rkisp1/data/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | conf_files = files([ 4 | 'imx219.yaml', 5 | 'imx258.yaml', 6 | 'ov2685.yaml', 7 | 'ov4689.yaml', 8 | 'ov5640.yaml', 9 | 'ov5695.yaml', 10 | 'ov8858.yaml', 11 | 'uncalibrated.yaml', 12 | ]) 13 | 14 | install_data(conf_files, 15 | install_dir : ipa_data_dir / 'rkisp1', 16 | install_tag : 'runtime') 17 | -------------------------------------------------------------------------------- /src/ipa/rkisp1/data/ov4689.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | %YAML 1.1 3 | --- 4 | version: 1 5 | algorithms: 6 | - Agc: 7 | - Awb: 8 | - BlackLevelCorrection: 9 | ... 10 | -------------------------------------------------------------------------------- /src/ipa/rkisp1/data/uncalibrated.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | %YAML 1.1 3 | --- 4 | version: 1 5 | algorithms: 6 | - Agc: 7 | - Awb: 8 | - BlackLevelCorrection: 9 | ... 10 | -------------------------------------------------------------------------------- /src/ipa/rpi/cam_helper/imx500_tensor_parser/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | rpi_ipa_cam_helper_sources += files([ 4 | 'imx500_tensor_parser.cpp', 5 | ]) 6 | -------------------------------------------------------------------------------- /src/ipa/rpi/common/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | rpi_ipa_common_sources = files([ 4 | 'ipa_base.cpp', 5 | ]) 6 | 7 | rpi_ipa_common_includes = [ 8 | include_directories('..'), 9 | ] 10 | 11 | rpi_ipa_common_deps = [ 12 | libcamera_private, 13 | ] 14 | 15 | rpi_ipa_common_lib = static_library('rpi_ipa_common', rpi_ipa_common_sources, 16 | include_directories : rpi_ipa_common_includes, 17 | dependencies : rpi_ipa_common_deps) 18 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/alsc_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2019, Raspberry Pi Ltd 4 | * 5 | * ALSC (auto lens shading correction) control algorithm status 6 | */ 7 | #pragma once 8 | 9 | #include 10 | 11 | /* 12 | * The ALSC algorithm should post the following structure into the image's 13 | * "alsc.status" metadata. 14 | */ 15 | 16 | struct AlscStatus { 17 | std::vector r; 18 | std::vector g; 19 | std::vector b; 20 | unsigned int rows; 21 | unsigned int cols; 22 | }; 23 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/awb_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2019, Raspberry Pi Ltd 4 | * 5 | * AWB control algorithm status 6 | */ 7 | #pragma once 8 | 9 | /* 10 | * The AWB algorithm places its results into both the image and global metadata, 11 | * under the tag "awb.status". 12 | */ 13 | 14 | struct AwbStatus { 15 | char mode[32]; 16 | double temperatureK; 17 | double gainR; 18 | double gainG; 19 | double gainB; 20 | }; 21 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/black_level_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2019, Raspberry Pi Ltd 4 | * 5 | * black level control algorithm status 6 | */ 7 | #pragma once 8 | 9 | /* The "black level" algorithm stores the black levels to use. */ 10 | 11 | struct BlackLevelStatus { 12 | uint16_t blackLevelR; /* out of 16 bits */ 13 | uint16_t blackLevelG; 14 | uint16_t blackLevelB; 15 | }; 16 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/cac_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2023 Raspberry Pi Ltd 4 | * 5 | * CAC (Chromatic Abberation Correction) algorithm status 6 | */ 7 | #pragma once 8 | 9 | struct CacStatus { 10 | std::vector lutRx; 11 | std::vector lutRy; 12 | std::vector lutBx; 13 | std::vector lutBy; 14 | }; 15 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/ccm_algorithm.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2019, Raspberry Pi Ltd 4 | * 5 | * CCM (colour correction matrix) control algorithm interface 6 | */ 7 | #pragma once 8 | 9 | #include "algorithm.h" 10 | 11 | namespace RPiController { 12 | 13 | class CcmAlgorithm : public Algorithm 14 | { 15 | public: 16 | CcmAlgorithm(Controller *controller) : Algorithm(controller) {} 17 | /* A CCM algorithm must provide the following: */ 18 | virtual void setSaturation(double saturation) = 0; 19 | }; 20 | 21 | } /* namespace RPiController */ 22 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/ccm_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2019, Raspberry Pi Ltd 4 | * 5 | * CCM (colour correction matrix) control algorithm status 6 | */ 7 | #pragma once 8 | 9 | /* The "ccm" algorithm generates an appropriate colour matrix. */ 10 | 11 | struct CcmStatus { 12 | double matrix[9]; 13 | double saturation; 14 | }; 15 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/contrast_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2019, Raspberry Pi Ltd 4 | * 5 | * contrast (gamma) control algorithm status 6 | */ 7 | #pragma once 8 | 9 | #include "libipa/pwl.h" 10 | 11 | /* 12 | * The "contrast" algorithm creates a gamma curve, optionally doing a little bit 13 | * of contrast stretching based on the AGC histogram. 14 | */ 15 | 16 | struct ContrastStatus { 17 | libcamera::ipa::Pwl gammaCurve; 18 | double brightness; 19 | double contrast; 20 | }; 21 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/dpc_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2019, Raspberry Pi Ltd 4 | * 5 | * DPC (defective pixel correction) control algorithm status 6 | */ 7 | #pragma once 8 | 9 | /* The "DPC" algorithm sets defective pixel correction strength. */ 10 | 11 | struct DpcStatus { 12 | int strength; /* 0 = "off", 1 = "normal", 2 = "strong" */ 13 | }; 14 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/geq_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2019, Raspberry Pi Ltd 4 | * 5 | * GEQ (green equalisation) control algorithm status 6 | */ 7 | #pragma once 8 | 9 | /* The "GEQ" algorithm calculates the green equalisation thresholds */ 10 | 11 | struct GeqStatus { 12 | uint16_t offset; 13 | double slope; 14 | }; 15 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/hdr_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2023 Raspberry Pi Ltd 4 | * 5 | * HDR control algorithm status 6 | */ 7 | #pragma once 8 | 9 | #include 10 | 11 | /* 12 | * The HDR algorithm process method should post an HdrStatus into the image 13 | * metadata under the tag "hdr.status". 14 | */ 15 | 16 | struct HdrStatus { 17 | std::string mode; 18 | std::string channel; 19 | }; 20 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/noise_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2019, Raspberry Pi Ltd 4 | * 5 | * Noise control algorithm status 6 | */ 7 | #pragma once 8 | 9 | /* The "noise" algorithm stores an estimate of the noise profile for this image. */ 10 | 11 | struct NoiseStatus { 12 | double noiseConstant; 13 | double noiseSlope; 14 | }; 15 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/pdaf_data.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2022, Raspberry Pi Ltd 4 | * 5 | * PDAF Metadata 6 | */ 7 | #pragma once 8 | 9 | #include 10 | 11 | #include "region_stats.h" 12 | 13 | namespace RPiController { 14 | 15 | struct PdafData { 16 | /* Confidence, in arbitrary units */ 17 | uint16_t conf; 18 | /* Phase error, in s16 Q4 format (S.11.4) */ 19 | int16_t phase; 20 | }; 21 | 22 | using PdafRegions = RegionStats; 23 | 24 | } /* namespace RPiController */ 25 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/saturation_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2022 Raspberry Pi Ltd 4 | * 5 | * Saturation control algorithm status 6 | */ 7 | #pragma once 8 | 9 | struct SaturationStatus { 10 | uint8_t shiftR; 11 | uint8_t shiftG; 12 | uint8_t shiftB; 13 | }; 14 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/sharpen_algorithm.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2020, Raspberry Pi Ltd 4 | * 5 | * sharpness control algorithm interface 6 | */ 7 | #pragma once 8 | 9 | #include "algorithm.h" 10 | 11 | namespace RPiController { 12 | 13 | class SharpenAlgorithm : public Algorithm 14 | { 15 | public: 16 | SharpenAlgorithm(Controller *controller) : Algorithm(controller) {} 17 | /* A sharpness control algorithm must provide the following: */ 18 | virtual void setStrength(double strength) = 0; 19 | }; 20 | 21 | } /* namespace RPiController */ 22 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/stitch_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2023 Raspberry Pi Ltd 4 | * 5 | * stitch control algorithm status 6 | */ 7 | #pragma once 8 | 9 | /* 10 | * Parameters for the stitch block. 11 | */ 12 | 13 | struct StitchStatus { 14 | uint16_t thresholdLo; 15 | uint8_t diffPower; 16 | double motionThreshold; 17 | }; 18 | -------------------------------------------------------------------------------- /src/ipa/rpi/controller/tonemap_status.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: BSD-2-Clause */ 2 | /* 3 | * Copyright (C) 2022 Raspberry Pi Ltd 4 | * 5 | * Tonemap control algorithm status 6 | */ 7 | #pragma once 8 | 9 | #include 10 | 11 | struct TonemapStatus { 12 | uint16_t detailConstant; 13 | double detailSlope; 14 | double iirStrength; 15 | double strength; 16 | libcamera::ipa::Pwl tonemap; 17 | }; 18 | -------------------------------------------------------------------------------- /src/ipa/rpi/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | subdir('cam_helper') 4 | subdir('common') 5 | subdir('controller') 6 | 7 | foreach pipeline : pipelines 8 | pipeline = pipeline.split('/') 9 | if pipeline.length() < 2 or pipeline[0] != 'rpi' 10 | continue 11 | endif 12 | 13 | subdir(pipeline[1]) 14 | endforeach 15 | -------------------------------------------------------------------------------- /src/ipa/simple/algorithms/algorithm.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2024 Red Hat, Inc. 4 | * 5 | * Software ISP control algorithm interface 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | #include "module.h" 13 | 14 | namespace libcamera { 15 | 16 | namespace ipa::soft { 17 | 18 | using Algorithm = libcamera::ipa::Algorithm; 19 | 20 | } /* namespace ipa::soft */ 21 | 22 | } /* namespace libcamera */ 23 | -------------------------------------------------------------------------------- /src/ipa/simple/algorithms/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | soft_simple_ipa_algorithms = files([ 4 | 'awb.cpp', 5 | 'agc.cpp', 6 | 'blc.cpp', 7 | 'ccm.cpp', 8 | 'lut.cpp', 9 | ]) 10 | -------------------------------------------------------------------------------- /src/ipa/simple/data/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | conf_files = files([ 4 | 'uncalibrated.yaml', 5 | ]) 6 | 7 | # The install_dir must match the name from the IPAModuleInfo 8 | install_data(conf_files, 9 | install_dir : ipa_data_dir / 'simple', 10 | install_tag : 'runtime') 11 | -------------------------------------------------------------------------------- /src/ipa/simple/data/uncalibrated.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | %YAML 1.1 3 | --- 4 | version: 1 5 | algorithms: 6 | - BlackLevel: 7 | - Awb: 8 | # Color correction matrices can be defined here. The CCM algorithm 9 | # has a significant performance impact, and should only be enabled 10 | # if tuned. 11 | # - Ccm: 12 | # ccms: 13 | # - ct: 6500 14 | # ccm: [ 1, 0, 0, 15 | # 0, 1, 0, 16 | # 0, 0, 1] 17 | - Lut: 18 | - Agc: 19 | ... 20 | -------------------------------------------------------------------------------- /src/ipa/vimc/data/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | conf_files = files([ 4 | 'vimc.conf', 5 | ]) 6 | 7 | install_data(conf_files, 8 | install_dir : ipa_data_dir / 'vimc', 9 | install_tag : 'runtime') 10 | -------------------------------------------------------------------------------- /src/ipa/vimc/data/vimc.conf: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: LGPL-2.1-or-later 2 | # 3 | # Dummy configuration file for the vimc IPA. 4 | -------------------------------------------------------------------------------- /src/libcamera/control_ids_debug.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: LGPL-2.1-or-later 2 | # 3 | %YAML 1.1 4 | --- 5 | vendor: debug 6 | controls: [] 7 | -------------------------------------------------------------------------------- /src/libcamera/control_ranges.yaml: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: LGPL-2.1-or-later 2 | # 3 | # Copyright (C) 2023, Raspberry Pi Ltd 4 | # 5 | %YAML 1.1 6 | --- 7 | # Specifies the control id ranges/offsets for core/draft libcamera and vendor 8 | # controls and properties. 9 | ranges: 10 | # Core libcamera controls 11 | libcamera: 0 12 | # Draft designated libcamera controls 13 | draft: 10000 14 | # Raspberry Pi vendor controls 15 | rpi: 20000 16 | # Controls for debug metadata 17 | debug: 30000 18 | # Next range starts at 40000 19 | 20 | ... 21 | -------------------------------------------------------------------------------- /src/libcamera/converter/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'converter_v4l2_m2m.cpp' 5 | ]) 6 | -------------------------------------------------------------------------------- /src/libcamera/ipa/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_ipa_interfaces = [] 4 | 5 | foreach file : ipa_mojom_files 6 | # {pipeline}_ipa_interface.cpp 7 | libcamera_ipa_interfaces += \ 8 | custom_target(input : file, 9 | output : '@BASENAME@_ipa_interface.cpp', 10 | command : [ 11 | mojom_docs_extractor, 12 | '-o', '@OUTPUT@', '@INPUT@' 13 | ]) 14 | endforeach 15 | -------------------------------------------------------------------------------- /src/libcamera/ipa_pub_key.cpp.in: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2020, Laurent Pinchart 4 | * 5 | * IPA module signing public key 6 | * 7 | * This file is auto-generated. Do not edit. 8 | */ 9 | 10 | #include "libcamera/internal/ipa_manager.h" 11 | 12 | namespace libcamera { 13 | 14 | #if HAVE_IPA_PUBKEY 15 | const uint8_t IPAManager::publicKeyData_[] = { 16 | ${ipa_key} 17 | }; 18 | 19 | const PubKey IPAManager::pubKey_{ { IPAManager::publicKeyData_ } }; 20 | #endif 21 | 22 | } /* namespace libcamera */ 23 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/imx8-isi/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'imx8-isi.cpp' 5 | ]) 6 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/ipu3/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'cio2.cpp', 5 | 'frames.cpp', 6 | 'imgu.cpp', 7 | 'ipu3.cpp', 8 | ]) 9 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/mali-c55/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'mali-c55.cpp' 5 | ]) 6 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | # Location of pipeline specific configuration files 4 | pipeline_data_dir = libcamera_datadir / 'pipeline' 5 | 6 | # Allow multi-level directory structuring for the pipeline handlers if needed. 7 | subdirs = [] 8 | 9 | foreach pipeline : pipelines 10 | pipeline = pipeline.split('/')[0] 11 | if pipeline in subdirs 12 | continue 13 | endif 14 | 15 | subdirs += pipeline 16 | subdir(pipeline) 17 | 18 | # Don't reuse the pipeline variable below, the subdirectory may have 19 | # overwritten it. 20 | endforeach 21 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/rkisp1/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'rkisp1.cpp', 5 | 'rkisp1_path.cpp', 6 | ]) 7 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/rpi/common/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'delayed_controls.cpp', 5 | 'pipeline_base.cpp', 6 | 'rpi_stream.cpp', 7 | ]) 8 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/rpi/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | subdir('common') 4 | 5 | foreach pipeline : pipelines 6 | pipeline = pipeline.split('/') 7 | if pipeline.length() < 2 or pipeline[0] != 'rpi' 8 | continue 9 | endif 10 | 11 | subdir(pipeline[1]) 12 | endforeach 13 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/rpi/pisp/data/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | conf_files = files([ 4 | 'example.yaml', 5 | ]) 6 | 7 | install_data(conf_files, 8 | install_dir : pipeline_data_dir / 'rpi' / 'pisp') 9 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/rpi/pisp/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'pisp.cpp', 5 | ]) 6 | 7 | librt = cc.find_library('rt', required : true) 8 | libpisp_dep = dependency('libpisp', fallback : ['libpisp', 'libpisp_dep']) 9 | 10 | libcamera_deps += [libpisp_dep, librt] 11 | 12 | subdir('data') 13 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/rpi/vc4/data/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | conf_files = files([ 4 | 'example.yaml', 5 | 'rpi_apps.yaml', 6 | ]) 7 | 8 | install_data(conf_files, 9 | install_dir : pipeline_data_dir / 'rpi' / 'vc4', 10 | install_tag : 'runtime') 11 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/rpi/vc4/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'vc4.cpp', 5 | ]) 6 | 7 | subdir('data') 8 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/simple/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'simple.cpp', 5 | ]) 6 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/uvcvideo/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'uvcvideo.cpp', 5 | ]) 6 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/vimc/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'vimc.cpp', 5 | ]) 6 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/virtual/data/meson.build: -------------------------------------------------------------------------------- 1 | install_data('virtual.yaml', 2 | install_dir : pipeline_data_dir / 'virtual', 3 | install_tag : 'runtime', 4 | rename: 'virtual.yaml.example') 5 | -------------------------------------------------------------------------------- /src/libcamera/pipeline/virtual/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'config_parser.cpp', 5 | 'image_frame_generator.cpp', 6 | 'test_pattern_generator.cpp', 7 | 'virtual.cpp', 8 | ]) 9 | 10 | libjpeg = dependency('libjpeg', required : true) 11 | 12 | libcamera_deps += [libyuv_dep] 13 | libcamera_deps += [libjpeg] 14 | 15 | subdir('data') 16 | -------------------------------------------------------------------------------- /src/libcamera/sensor/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libcamera_internal_sources += files([ 4 | 'camera_sensor.cpp', 5 | 'camera_sensor_legacy.cpp', 6 | 'camera_sensor_properties.cpp', 7 | 'camera_sensor_raw.cpp', 8 | ]) 9 | -------------------------------------------------------------------------------- /src/libcamera/software_isp/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | softisp_enabled = pipelines.contains('simple') 4 | summary({'SoftISP support' : softisp_enabled}, section : 'Configuration') 5 | 6 | if not softisp_enabled 7 | subdir_done() 8 | endif 9 | 10 | libcamera_internal_sources += files([ 11 | 'debayer.cpp', 12 | 'debayer_cpu.cpp', 13 | 'software_isp.cpp', 14 | 'swstats_cpu.cpp', 15 | ]) 16 | -------------------------------------------------------------------------------- /src/libcamera/tracepoints.cpp: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2020, Google Inc. 4 | * 5 | * Tracepoints with lttng 6 | */ 7 | #define TRACEPOINT_CREATE_PROBES 8 | #define TRACEPOINT_DEFINE 9 | 10 | #include "libcamera/internal/tracepoints.h" 11 | -------------------------------------------------------------------------------- /src/libcamera/version.cpp.in: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2019, Google Inc. 4 | * 5 | * libcamera version 6 | * 7 | * This file is auto-generated. Do not edit. 8 | */ 9 | 10 | #include 11 | 12 | namespace libcamera { 13 | 14 | const std::string CameraManager::version_("v@VCS_TAG@"); 15 | 16 | } /* namespace libcamera */ 17 | -------------------------------------------------------------------------------- /src/py/libcamera/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: LGPL-2.1-or-later 2 | # Copyright (C) 2022, Tomi Valkeinen 3 | 4 | from ._libcamera import * 5 | -------------------------------------------------------------------------------- /src/py/libcamera/py_formats_generated.cpp.in: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2022, Tomi Valkeinen 4 | * 5 | * Python bindings - Auto-generated formats 6 | * 7 | * This file is auto-generated. Do not edit. 8 | */ 9 | 10 | #include 11 | 12 | #include 13 | 14 | #include "py_main.h" 15 | 16 | namespace py = pybind11; 17 | 18 | class PyFormats 19 | { 20 | }; 21 | 22 | void init_py_formats_generated(py::module& m) 23 | { 24 | py::class_(m, "formats") 25 | ${formats} 26 | ; 27 | } 28 | -------------------------------------------------------------------------------- /src/py/libcamera/py_helpers.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 | /* 3 | * Copyright (C) 2022, Tomi Valkeinen 4 | */ 5 | 6 | #pragma once 7 | 8 | #include 9 | 10 | #include 11 | 12 | pybind11::object controlValueToPy(const libcamera::ControlValue &cv); 13 | libcamera::ControlValue pyToControlValue(const pybind11::object &ob, libcamera::ControlType type); 14 | -------------------------------------------------------------------------------- /src/py/libcamera/utils/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: LGPL-2.1-or-later 2 | # Copyright (C) 2022, Tomi Valkeinen 3 | 4 | from .MappedFrameBuffer import MappedFrameBuffer 5 | -------------------------------------------------------------------------------- /src/py/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | subdir('libcamera') 4 | -------------------------------------------------------------------------------- /subprojects/.gitignore: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | /googletest-release* 4 | /libpisp 5 | /libyaml 6 | /libyuv 7 | /packagecache 8 | -------------------------------------------------------------------------------- /subprojects/libpisp.wrap: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | [wrap-git] 4 | url = https://github.com/raspberrypi/libpisp.git 5 | revision = v1.2.0 6 | depth = 1 7 | -------------------------------------------------------------------------------- /subprojects/libyaml.wrap: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | [wrap-git] 4 | directory = libyaml 5 | url = https://github.com/yaml/libyaml 6 | # tags/0.2.5 7 | revision = 2c891fc7a770e8ba2fec34fc6b545c672beb37e6 8 | -------------------------------------------------------------------------------- /subprojects/libyuv.wrap: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | [wrap-git] 4 | directory = libyuv 5 | url = https://chromium.googlesource.com/libyuv/libyuv.git 6 | revision = 93b1b332cd60b56ab90aea14182755e379c28a80 7 | -------------------------------------------------------------------------------- /test/ipa/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | subdir('libipa') 4 | 5 | ipa_test = [ 6 | {'name': 'ipa_module_test', 'sources': ['ipa_module_test.cpp']}, 7 | {'name': 'ipa_interface_test', 'sources': ['ipa_interface_test.cpp']}, 8 | ] 9 | 10 | foreach test : ipa_test 11 | exe = executable(test['name'], test['sources'], 12 | dependencies : [libcamera_private, libipa_dep], 13 | link_with : [test_libraries], 14 | include_directories : [test_includes_internal]) 15 | 16 | test(test['name'], exe, suite : 'ipa') 17 | endforeach 18 | -------------------------------------------------------------------------------- /test/ipc/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | ipc_tests = [ 4 | {'name': 'unixsocket_ipc', 'sources': ['unixsocket_ipc.cpp']}, 5 | {'name': 'unixsocket', 'sources': ['unixsocket.cpp']}, 6 | ] 7 | 8 | foreach test : ipc_tests 9 | exe = executable(test['name'], test['sources'], 10 | dependencies : libcamera_private, 11 | link_with : test_libraries, 12 | include_directories : test_includes_internal) 13 | 14 | test(test['name'], exe, suite : 'ipc') 15 | endforeach 16 | -------------------------------------------------------------------------------- /test/libtest/camera_test.h: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 | /* 3 | * Copyright (C) 2019, Google Inc. 4 | * 5 | * libcamera camera test base class 6 | */ 7 | 8 | #pragma once 9 | 10 | #include 11 | 12 | #include 13 | #include 14 | 15 | class CameraTest 16 | { 17 | public: 18 | CameraTest(const char *name, bool isolate = false); 19 | ~CameraTest(); 20 | 21 | protected: 22 | libcamera::CameraManager *cm_; 23 | std::shared_ptr camera_; 24 | int status_; 25 | }; 26 | -------------------------------------------------------------------------------- /test/libtest/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | libtest_sources = files([ 4 | 'buffer_source.cpp', 5 | 'camera_test.cpp', 6 | 'test.cpp', 7 | ]) 8 | 9 | libtest_includes = include_directories('.') 10 | 11 | 12 | test_includes_public = [ 13 | libtest_includes, 14 | ] 15 | 16 | test_includes_internal = [ 17 | test_includes_public, 18 | ] 19 | 20 | libtest = static_library('libtest', libtest_sources, 21 | dependencies : libcamera_private, 22 | include_directories : test_includes_internal) 23 | 24 | test_libraries = [libtest] 25 | -------------------------------------------------------------------------------- /test/libtest/test.cpp: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 | /* 3 | * Copyright (C) 2018, Google Inc. 4 | * 5 | * libcamera test base class 6 | */ 7 | 8 | #include 9 | 10 | #include "test.h" 11 | 12 | Test::Test() 13 | { 14 | } 15 | 16 | Test::~Test() 17 | { 18 | } 19 | 20 | void Test::setArgs([[maybe_unused]] int argc, char *argv[]) 21 | { 22 | self_ = argv[0]; 23 | } 24 | 25 | int Test::execute() 26 | { 27 | int ret; 28 | 29 | ret = init(); 30 | if (ret) 31 | return ret; 32 | 33 | ret = run(); 34 | 35 | cleanup(); 36 | 37 | return ret; 38 | } 39 | -------------------------------------------------------------------------------- /test/log/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | log_test = [ 4 | {'name': 'log_api', 'sources': ['log_api.cpp']}, 5 | {'name': 'log_process', 'sources': ['log_process.cpp']}, 6 | ] 7 | 8 | foreach test : log_test 9 | exe = executable(test['name'], test['sources'], 10 | dependencies : libcamera_private, 11 | link_with : test_libraries, 12 | include_directories : test_includes_internal) 13 | 14 | test(test['name'], exe, suite : 'log') 15 | endforeach 16 | -------------------------------------------------------------------------------- /test/process/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | process_tests = [ 4 | {'name': 'process_test', 'sources': ['process_test.cpp']}, 5 | ] 6 | 7 | foreach test : process_tests 8 | exe = executable(test['name'], test['sources'], 9 | dependencies : libcamera_private, 10 | link_with : test_libraries, 11 | include_directories : test_includes_internal) 12 | 13 | test(test['name'], exe, suite : 'process', is_parallel : false) 14 | endforeach 15 | -------------------------------------------------------------------------------- /test/public-api.cpp: -------------------------------------------------------------------------------- 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 | /* 3 | * Copyright (C) 2021, Google Inc. 4 | * 5 | * Public API validation 6 | */ 7 | 8 | #include 9 | 10 | #include "test.h" 11 | 12 | class PublicAPITest : public Test 13 | { 14 | int run() 15 | { 16 | #ifdef LIBCAMERA_BASE_PRIVATE 17 | #error "Public interfaces should not be exposed to LIBCAMERA_BASE_PRIVATE" 18 | return TestFail; 19 | #else 20 | return TestPass; 21 | #endif 22 | } 23 | }; 24 | 25 | TEST_REGISTER(PublicAPITest) 26 | -------------------------------------------------------------------------------- /test/stream/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | stream_tests = [ 4 | {'name': 'stream_colorspace', 'sources': ['stream_colorspace.cpp']}, 5 | {'name': 'stream_formats', 'sources': ['stream_formats.cpp']}, 6 | ] 7 | 8 | foreach test : stream_tests 9 | exe = executable(test['name'], test['sources'], 10 | dependencies : libcamera_public, 11 | link_with : test_libraries, 12 | include_directories : test_includes_internal) 13 | test(test['name'], exe, suite : 'stream') 14 | endforeach 15 | -------------------------------------------------------------------------------- /test/v4l2_subdevice/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | v4l2_subdevice_tests = [ 4 | {'name': 'list_formats', 'sources': ['list_formats.cpp']}, 5 | {'name': 'test_formats', 'sources': ['test_formats.cpp']}, 6 | ] 7 | 8 | foreach test : v4l2_subdevice_tests 9 | exe = executable(test['name'], test['sources'], 'v4l2_subdevice_test.cpp', 10 | dependencies : libcamera_private, 11 | link_with : test_libraries, 12 | include_directories : test_includes_internal) 13 | test(test['name'], exe, suite : 'v4l2_subdevice', is_parallel : false) 14 | endforeach 15 | -------------------------------------------------------------------------------- /utils/codegen/gen-header.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | dst_file="$1" 4 | shift 5 | 6 | cat < "$dst_file" 7 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ 8 | /* This file is auto-generated, do not edit! */ 9 | /* 10 | * Copyright (C) 2018-2019, Google Inc. 11 | * 12 | * libcamera public API 13 | */ 14 | 15 | #pragma once 16 | 17 | EOF 18 | 19 | headers=$(for header in "$@" ; do 20 | header=$(basename "$header") 21 | echo "$header" 22 | done | sort) 23 | 24 | for header in $headers ; do 25 | echo "#include " >> "$dst_file" 26 | done 27 | -------------------------------------------------------------------------------- /utils/codegen/ipc/generators/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/libcamera/d83ff0a4ae4503bc56b7ed48cd142c3dd423ad3b/utils/codegen/ipc/generators/__init__.py -------------------------------------------------------------------------------- /utils/codegen/ipc/generators/libcamera_templates/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | mojom_template_files = files([ 4 | 'core_ipa_interface.h.tmpl', 5 | 'core_ipa_serializer.h.tmpl', 6 | 'definition_functions.tmpl', 7 | 'module_ipa_interface.h.tmpl', 8 | 'module_ipa_proxy.cpp.tmpl', 9 | 'module_ipa_proxy.h.tmpl', 10 | 'module_ipa_proxy_worker.cpp.tmpl', 11 | 'module_ipa_serializer.h.tmpl', 12 | 'proxy_functions.tmpl', 13 | 'serializer.tmpl', 14 | ]) 15 | -------------------------------------------------------------------------------- /utils/codegen/ipc/generators/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | subdir('libcamera_templates') 4 | -------------------------------------------------------------------------------- /utils/codegen/ipc/mojo/README: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | Files in this directory are imported from 9be4263648d7 of Chromium. Do not 4 | modify them manually. 5 | -------------------------------------------------------------------------------- /utils/codegen/ipc/mojo/public/tools/.style.yapf: -------------------------------------------------------------------------------- 1 | [style] 2 | based_on_style = pep8 3 | 4 | # New directories should use a .style.yapf that does not include the following: 5 | column_limit = 80 6 | indent_width = 2 7 | -------------------------------------------------------------------------------- /utils/codegen/ipc/mojo/public/tools/bindings/checks/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/libcamera/d83ff0a4ae4503bc56b7ed48cd142c3dd423ad3b/utils/codegen/ipc/mojo/public/tools/bindings/checks/__init__.py -------------------------------------------------------------------------------- /utils/codegen/ipc/mojo/public/tools/mojom/BUILD.gn: -------------------------------------------------------------------------------- 1 | # Copyright 2022 The Chromium Authors 2 | # Use of this source code is governed by a BSD-style license that can be 3 | # found in the LICENSE file. 4 | 5 | group("tests") { 6 | data = [ 7 | "check_stable_mojom_compatibility_unittest.py", 8 | "check_stable_mojom_compatibility.py", 9 | "const_unittest.py", 10 | "enum_unittest.py", 11 | "feature_unittest.py", 12 | "mojom_parser_test_case.py", 13 | "mojom_parser_unittest.py", 14 | "mojom_parser.py", 15 | "stable_attribute_unittest.py", 16 | "version_compatibility_unittest.py", 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /utils/codegen/ipc/mojo/public/tools/mojom/mojom/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/libcamera/d83ff0a4ae4503bc56b7ed48cd142c3dd423ad3b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/__init__.py -------------------------------------------------------------------------------- /utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/libcamera/d83ff0a4ae4503bc56b7ed48cd142c3dd423ad3b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/generate/__init__.py -------------------------------------------------------------------------------- /utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/libcamera/d83ff0a4ae4503bc56b7ed48cd142c3dd423ad3b/utils/codegen/ipc/mojo/public/tools/mojom/mojom/parse/__init__.py -------------------------------------------------------------------------------- /utils/codegen/ipc/parser.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # SPDX-License-Identifier: BSD-3-Clause 3 | # Copyright (C) 2020, Google Inc. 4 | # 5 | # Author: Paul Elder 6 | # 7 | # Run mojo parser with python3 8 | 9 | import os 10 | import sys 11 | 12 | # Make sure that mojom_parser.py can import mojom 13 | sys.path.insert(0, f'{os.path.dirname(__file__)}/mojo/public/tools/mojom') 14 | 15 | import mojo.public.tools.mojom.mojom_parser as parser 16 | 17 | parser.Run(sys.argv[1:]) 18 | -------------------------------------------------------------------------------- /utils/codegen/ipc/tools/README: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | Files in this directory are imported from 9be4263648d7 of Chromium. Do not 4 | modify them manually. 5 | -------------------------------------------------------------------------------- /utils/gen-ipa-priv-key.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # SPDX-License-Identifier: GPL-2.0-or-later 3 | # Copyright (C) 2020, Google Inc. 4 | # 5 | # Author: Laurent Pinchart 6 | # 7 | # Generate an RSA private key to sign IPA modules 8 | 9 | key="$1" 10 | 11 | openssl genpkey -algorithm RSA -out "${key}" -pkeyopt rsa_keygen_bits:2048 12 | -------------------------------------------------------------------------------- /utils/hooks/post-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # SPDX-License-Identifier: GPL-2.0-or-later 4 | 5 | # Execute the checkstyle script after committing any code. This allows the 6 | # commit to succeed, but ensures that the developer is aware of any potential 7 | # issues immediately, and can resolve them and fix rapidly with: 8 | # git commit --amend 9 | # 10 | # To utilise this hook, install this file with: 11 | # cp utils/hooks/post-commit .git/hooks/post-commit 12 | 13 | ./utils/checkstyle.py 14 | -------------------------------------------------------------------------------- /utils/ipu3/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | ipu3_pack = executable('ipu3-pack', 'ipu3-pack.c') 4 | ipu3_unpack = executable('ipu3-unpack', 'ipu3-unpack.c') 5 | -------------------------------------------------------------------------------- /utils/meson.build: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: CC0-1.0 2 | 3 | subdir('codegen') 4 | subdir('ipu3') 5 | 6 | ## Module signing 7 | gen_ipa_priv_key = files('gen-ipa-priv-key.sh') 8 | -------------------------------------------------------------------------------- /utils/raspberrypi/ctt/ctt_config_example.json: -------------------------------------------------------------------------------- 1 | { 2 | "disable": [], 3 | "plot": [], 4 | "alsc": { 5 | "do_alsc_colour": 1, 6 | "luminance_strength": 0.8, 7 | "max_gain": 8.0 8 | }, 9 | "awb": { 10 | "greyworld": 0 11 | }, 12 | "blacklevel": -1, 13 | "macbeth": { 14 | "small": 0, 15 | "show": 0 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /utils/raspberrypi/ctt/ctt_ref.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/libcamera/d83ff0a4ae4503bc56b7ed48cd142c3dd423ad3b/utils/raspberrypi/ctt/ctt_ref.pgm -------------------------------------------------------------------------------- /utils/run-dist.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # SPDX-License-Identifier: GPL-2.0-or-later 4 | # 5 | # On a meson dist run, generate the version string and store it in a file. 6 | # This will later be picked up by the utils/gen-version.sh script and used 7 | # instead of re-generating it. This way, if we are not building in the upstream 8 | # git source tree, the upstream version information will be preserved. 9 | 10 | cd "$MESON_SOURCE_ROOT" || return 11 | ./utils/gen-version.sh > "$MESON_DIST_ROOT"/.tarball-version 12 | -------------------------------------------------------------------------------- /utils/tuning/README.rst: -------------------------------------------------------------------------------- 1 | .. SPDX-License-Identifier: CC-BY-SA-4.0 2 | 3 | libcamera tuning tools 4 | ====================== 5 | 6 | .. Note:: The tuning tools are still very much work in progress. If in doubt, 7 | please ask on the mailing list. 8 | 9 | .. todo:: 10 | Write documentation 11 | 12 | Installation of dependencies 13 | ---------------------------- 14 | 15 | :: 16 | # Using a venv 17 | python3 -m venv venv 18 | . ./venv/bin/activate 19 | pip3 install -r requirements.txt 20 | 21 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2022, Paul Elder 4 | 5 | from libtuning.utils import * 6 | from libtuning.libtuning import * 7 | 8 | from libtuning.image import * 9 | from libtuning.macbeth import * 10 | 11 | from libtuning.average import * 12 | from libtuning.gradient import * 13 | from libtuning.smoothing import * 14 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/average.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2022, Paul Elder 4 | # 5 | # Wrapper for numpy averaging functions to enable duck-typing 6 | 7 | import numpy as np 8 | 9 | 10 | # @brief Wrapper for np averaging functions so that they can be duck-typed 11 | class Average(object): 12 | def __init__(self): 13 | pass 14 | 15 | def average(self, np_array): 16 | raise NotImplementedError 17 | 18 | 19 | class Mean(Average): 20 | def average(self, np_array): 21 | return np.mean(np_array) 22 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/generators/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2022, Paul Elder 4 | 5 | from libtuning.generators.raspberrypi_output import RaspberryPiOutput 6 | from libtuning.generators.yaml_output import YamlOutput 7 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/generators/generator.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2022, Paul Elder 4 | # 5 | # Base class for a generator to convert dict to tuning file 6 | 7 | from pathlib import Path 8 | 9 | 10 | class Generator(object): 11 | def __init__(self): 12 | pass 13 | 14 | def write(self, output_path: Path, output_dict: dict, output_order: list): 15 | raise NotImplementedError 16 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/macbeth_ref.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raspberrypi/libcamera/d83ff0a4ae4503bc56b7ed48cd142c3dd423ad3b/utils/tuning/libtuning/macbeth_ref.pgm -------------------------------------------------------------------------------- /utils/tuning/libtuning/modules/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2022, Paul Elder 4 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/modules/agc/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2024, Paul Elder 4 | 5 | from libtuning.modules.agc.agc import AGC 6 | from libtuning.modules.agc.rkisp1 import AGCRkISP1 7 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/modules/agc/agc.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: BSD-2-Clause 2 | # 3 | # Copyright (C) 2019, Raspberry Pi Ltd 4 | # Copyright (C) 2024, Paul Elder 5 | 6 | from ..module import Module 7 | 8 | import libtuning as lt 9 | 10 | 11 | class AGC(Module): 12 | type = 'agc' 13 | hr_name = 'AGC (Base)' 14 | out_name = 'GenericAGC' 15 | 16 | # \todo Add sector shapes and stuff just like lsc 17 | def __init__(self, *, 18 | debug: list): 19 | super().__init__() 20 | 21 | self.debug = debug 22 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/modules/awb/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2024, Ideas On Board 4 | 5 | from libtuning.modules.awb.awb import AWB 6 | from libtuning.modules.awb.rkisp1 import AWBRkISP1 7 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/modules/ccm/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2024, Paul Elder 4 | 5 | from libtuning.modules.ccm.ccm import CCM 6 | from libtuning.modules.ccm.rkisp1 import CCMRkISP1 7 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/modules/lsc/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2022, Paul Elder 4 | 5 | from libtuning.modules.lsc.lsc import LSC 6 | from libtuning.modules.lsc.raspberrypi import ALSCRaspberryPi 7 | from libtuning.modules.lsc.rkisp1 import LSCRkISP1 8 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/modules/lux/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2025, Ideas on Board 4 | 5 | from libtuning.modules.lux.lux import Lux 6 | from libtuning.modules.lux.rkisp1 import LuxRkISP1 7 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/parsers/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2022, Paul Elder 4 | 5 | from libtuning.parsers.raspberrypi_parser import RaspberryPiParser 6 | from libtuning.parsers.yaml_parser import YamlParser 7 | -------------------------------------------------------------------------------- /utils/tuning/libtuning/parsers/yaml_parser.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2022, Paul Elder 4 | # 5 | # Parser for YAML format config file 6 | 7 | from .parser import Parser 8 | import yaml 9 | 10 | 11 | class YamlParser(Parser): 12 | def __init__(self): 13 | super().__init__() 14 | 15 | def parse(self, config_file: str, modules: list) -> (dict, list): 16 | # Dummy implementation that just reads the file 17 | with open(config_file, 'r') as f: 18 | config = yaml.safe_load(f) 19 | 20 | return config, [] 21 | -------------------------------------------------------------------------------- /utils/tuning/raspberrypi/__init__.py: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: GPL-2.0-or-later 2 | # 3 | # Copyright (C) 2022, Paul Elder 4 | -------------------------------------------------------------------------------- /utils/tuning/requirements.txt: -------------------------------------------------------------------------------- 1 | coloredlogs 2 | matplotlib 3 | numpy 4 | opencv-python 5 | py3exiv2 6 | pyyaml 7 | rawpy 8 | scikit-learn 9 | scipy 10 | --------------------------------------------------------------------------------