diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9f04d15..0fdc12e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,10 +21,13 @@ jobs: - name: Installer list run: | tee pylon-installer.txt <<"EOF" + ${PYLON_DOWNLOAD_URL_BASE}/pylon_7.2.1.25747_x86_64_setup.tar.gz ${PYLON_DOWNLOAD_URL_BASE}/pylon_7.1.0.25066_x86_64_setup.tar.gz ${PYLON_DOWNLOAD_URL_BASE}/pylon_6.3.0.23157_x86_64_setup.tar.gz + ${PYLON_DOWNLOAD_URL_BASE}/pylon_7.2.1.25747_aarch64_setup.tar.gz ${PYLON_DOWNLOAD_URL_BASE}/pylon_7.1.0.25066_aarch64_setup.tar.gz ${PYLON_DOWNLOAD_URL_BASE_62}/pylon_6.2.0.21487_aarch64_setup.tar.gz + ${PYLON_DOWNLOAD_URL_BASE}/Basler_pylon_7.2.1.25747.exe ${PYLON_DOWNLOAD_URL_BASE}/Basler_pylon_7.1.0.25066.exe ${PYLON_DOWNLOAD_URL_BASE}/pylon-6.2.0.21487.dmg EOF @@ -59,7 +62,7 @@ jobs: strategy: matrix: os: [windows-latest] - py_version: [7.1.0.25066 ] + py_version: [7.2.1.25747, 7.1.0.25066 ] fail-fast: false runs-on: ${{ matrix.os }} name: Build pylon ${{ matrix.py_version }} on ${{ matrix.os }}-x86_64 @@ -112,7 +115,7 @@ jobs: strategy: matrix: os: [ubuntu18.04, ubuntu20.04, ubuntu22.04] - py_version: [7.1.0.25066, 6.2.0.21487 ] + py_version: [7.2.1.25747, 7.1.0.25066, 6.2.0.21487 ] fail-fast: false runs-on: ubuntu-18.04 name: Build pylon ${{ matrix.py_version }} on ${{ matrix.os }}-aarch64 @@ -192,7 +195,7 @@ jobs: strategy: matrix: os: [ubuntu-18.04, ubuntu-20.04, ubuntu-22.04] - py_version: [7.1.0.25066, 6.3.0.23157 ] + py_version: [7.2.1.25747, 7.1.0.25066, 6.3.0.23157 ] fail-fast: false runs-on: ${{ matrix.os }} name: Build pylon ${{ matrix.py_version }} on ${{ matrix.os }}-x64 diff --git a/CHANGELOG.md b/CHANGELOG.md index acce2fa..760c959 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,46 @@ # Changelog All notable changes to this project will be documented in this file. -## [next] +## [0.5.0] - 2022-12-09 + +### Added +- Access to all pylon image metadata + * GrabResult + * BlockID + * ImageNumber + * SkippedImages + * OffsetX/Y + * Camera Timestamp + * Chunkdata + * all enabled chunks are added as key/value GstStructure elements + * for sample user code see the [show_meta](tests/examples/pylon/show_meta.c) example +- Generation of includes, library and pkg-config files to access the GstMeta data of the plugin +- Camera properties accessible by integer based selectors are now accessible as gstreamer properties + * some properties e.g. ActionGroupMask are selected by an integer index. Support for these properties is now integrated. ### Changed - Breaking change for width/height fixation: - * old: prefer max(1080P, camera.max) + * old: prefer min(1080P, camera.max) * new: prefer current camera value after user-set and pfs-file +- Startup time on some camera models extended up to ~5s + * This is a side effect of the fixes to properly capture the absolute min/max values of a property. + * The first gst-inspect-1.0 after compilation/installation will block twice as long. + * A caching infrastructure to skip this time on subsequent usages of pylonsrc is scheduled for the next release. + +### Fixed +- Properties have now proper flags to allow changing in PLAYING state if valid for pylon. +- Plugin uses only a single 'pylonsrc' debug channel (Fixes #22) + * usage of 'default' and 'pylonsrc' channel was root cause of stability issues with extensive logging +- Detect the absolute min/max values of properties + * the feature limits of GenICam based cameras can change depending on the operating point. The plugin now explores the min/max values possible with the current device. +- Allow generic introspection of plugin properties ( Fixes #18) + * internal restructuring of property type system + * for sample user code see the [list_properties](tests/examples/pylon/list_properties.c) example +- Update readme to cover exact steps to build the plugin (Fixes #23, #19, #20) +- Upstream gstreamer fix to properly detect typos in gst-launch-1.0 pipeline definitions [!2908](https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2908) + * Fix is available in gstreamer >= 1.21 + + ## [0.4.0] - 2022-10-06 diff --git a/README.md b/README.md index 798f22a..556aac7 100644 --- a/README.md +++ b/README.md @@ -23,6 +23,8 @@ To display the video stream of a single Basler camera is as simple as: gst-launch-1.0 pylonsrc ! videoconvert ! autovideosink ``` +The dynamic registration of camera features in the plugin can take ~5s on some camera models. An optimization is scheduled for the next release. + The following sections describe how to select and configure the camera. ## Camera selection @@ -239,12 +241,21 @@ Configure a hardware trigger on Line1 for the trigger FrameStart: gst-launch-1.0 pylonsrc cam::TriggerSource-FrameStart=Line1 cam::TriggerMode-FrameStart=On ! videoconvert ! autovideosink ``` -### Chunks +### Chunks and Capture metadata Chunk support is available. The selected chunks will be appended to each gstreamer buffer as meta data. The `cam::ChunkModeActive` feature needs to be set to `true` for chunks to be enabled. +The pylon image meta data ( pylon GrabResult ) is appended per default. The values available are: + +* GrabResult +* BlockID +* ImageNumber +* SkippedImages +* OffsetX/Y +* Camera Timestamp + **Example** Enable Timestamp, ExposureTime and CounterValue chunks: @@ -252,6 +263,12 @@ Enable Timestamp, ExposureTime and CounterValue chunks: gst-launch-1.0 pylonsrc cam::ChunkModeActive=True cam::ChunkEnable-Timestamp=True cam::ChunkEnable-ExposureTime=true cam::ChunkEnable-CounterValue=true ! videoconvert ! autovideosink ``` +**GstMetaPylon** + +The plugin meta data is defined in [gstpylonmeta.h](gst-libs/gst/pylon/gstpylonmeta.h). + +A programming sample using these defintions to decode the data is in [show_meta](tests/examples/pylon/show_meta.c) + # Building This plugin is build using the [meson](https://mesonbuild.com/) build system. The meson version has to be >= 0.61. @@ -261,11 +278,11 @@ As a first step install Basler pylon according to your platform. Downloads are a The supported pylon versions on the different platforms are: -| | 7.1 | 6.2 | -|-----------------|:----:|:----:| -| Windows x86_64 | x | | -| Linux x86_64 | x | | -| Linux aarch64 | x | x | +| | 7.2 | 7.1 | 6.2 | +|-----------------|:----:|:----:|:----:| +| Windows x86_64 | x | x | | +| Linux x86_64 | x | x | | +| Linux aarch64 | x | x | x | | macOS x86_64 | - | | @@ -301,6 +318,8 @@ list of configuration options. On Debian-based systems, make sure you configure the project as: ```bash +git clone https://github.com/basler/gst-plugin-pylon.git +cd gst-plugin-pylon meson setup builddir --prefix /usr/ ``` @@ -417,6 +436,8 @@ set CMAKE_PREFIX_PATH=C:\Program Files\Basler\pylon 7\Development\CMake\pylon\ Then the plugin can be compiled and installed using Ninja: ``` +git clone https://github.com/basler/gst-plugin-pylon.git +cd gst-plugin-pylon meson setup build --prefix=%GSTREAMER_1_0_ROOT_MSVC_X86_64% ninja -C build ``` diff --git a/meson.build b/meson.build index 8b38e29..83e1416 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('gst-plugin-pylon', 'c', 'cpp', - version : '0.4.0', + version : '0.5.0', meson_version : '>= 0.61', default_options : [ 'warning_level=1', 'buildtype=debugoptimized' ])