Quantcast
Channel: Raspberry Pi Forums
Viewing all articles
Browse latest Browse all 4909

Camera board • GStreamer Bayer Data Off a IMX219

$
0
0
So..... There I wanted to use GStreamer to make my life a little bit easier when it came to getting the bayer data from an IMX219 sensor

The first thing I did was use

Code:

libcamera-hello --list
to determine what resolutions were supported by the IMX219 and I got the following

Code:

Available cameras-----------------0 : imx219 [3280x2464 10-bit RGGB] (/base/axi/pcie@120000/rp1/i2c@88000/imx219@10)    Modes: 'SRGGB10_CSI2P' : 640x480 [206.65 fps - (1000, 752)/1280x960 crop]                             1640x1232 [41.85 fps - (0, 0)/3280x2464 crop]                             1920x1080 [47.57 fps - (680, 692)/1920x1080 crop]                             3280x2464 [21.19 fps - (0, 0)/3280x2464 crop]           'SRGGB8' : 640x480 [206.65 fps - (1000, 752)/1280x960 crop]                      1640x1232 [83.70 fps - (0, 0)/3280x2464 crop]                      1920x1080 [47.57 fps - (680, 692)/1920x1080 crop]                      3280x2464 [21.19 fps - (0, 0)/3280x2464 crop]1 : imx219 [3280x2464 10-bit RGGB] (/base/axi/pcie@120000/rp1/i2c@80000/imx219@10)    Modes: 'SRGGB10_CSI2P' : 640x480 [206.65 fps - (1000, 752)/1280x960 crop]                             1640x1232 [41.85 fps - (0, 0)/3280x2464 crop]                             1920x1080 [47.57 fps - (680, 692)/1920x1080 crop]                             3280x2464 [21.19 fps - (0, 0)/3280x2464 crop]           'SRGGB8' : 640x480 [206.65 fps - (1000, 752)/1280x960 crop]                      1640x1232 [83.70 fps - (0, 0)/3280x2464 crop]                      1920x1080 [47.57 fps - (680, 692)/1920x1080 crop]                      3280x2464 [21.19 fps - (0, 0)/3280x2464 crop]
So the next step I did was to double check if libcamerasrc supports the bayer format, which it did after I verified the matter with the following output

Code:

Factory Details:  Rank                     primary (256)  Long-name                libcamera Source  Klass                    Source/Video  Description              Linux Camera source using libcamera  Author                   Nicolas Dufresne <nicolas.dufresne@collabora.com>Plugin Details:  Name                     libcamera  Description              libcamera capture plugin  Filename                 /lib/aarch64-linux-gnu/gstreamer-1.0/libgstlibcamera.so  Version                  0.3.2+99-1230f78d  License                  LGPL  Source module            libcamera  Binary package           libcamera  Origin URL               https://libcamera.orgGObject +----GInitiallyUnowned       +----GstObject             +----GstElement                   +----GstLibcameraSrcImplemented Interfaces:  GstChildProxyPad Templates:  SRC template: 'src'    Availability: Always    Capabilities:      video/x-raw      image/jpeg      video/x-bayer    Type: GstLibcameraPad    Pad Properties:      stream-role         : The selected stream role                            flags: readable, writable, changeable only in NULL or READY state                            Enum "GstLibcameraStreamRole" Default: 2, "video-recording"                               (1): still-capture    - libcamera::StillCapture                               (2): video-recording  - libcamera::VideoRecording                               (3): view-finder      - libcamera::Viewfinder
And I tripled check if the videoconvert element supported RGGB as stated by the libcamera-hello --list command and I noticed that the Pad templates only listed the capabilities for video/x-raw and NOT video/x-bayer

Code:

Pad Templates:  SINK template: 'sink'    Availability: Always    Capabilities:      video/x-raw                 format: { (string)ABGR64_LE, (string)BGRA64_LE, (string)AYUV64, (string)ARGB64_LE, (string)ARGB64, (string)RGBA64_LE, (string)ABGR64_BE, (string)BGRA64_BE, (string)ARGB64_BE, (string)RGBA64_BE, (string)GBRA_12LE, (string)GBRA_12BE, (string)Y412_LE, (string)Y412_BE, (string)A444_10LE, (string)GBRA_10LE, (string)A444_10BE, (string)GBRA_10BE, (string)A422_10LE, (string)A422_10BE, (string)A420_10LE, (string)A420_10BE, (string)RGB10A2_LE, (string)BGR10A2_LE, (string)Y410, (string)GBRA, (string)ABGR, (string)VUYA, (string)BGRA, (string)AYUV, (string)ARGB, (string)RGBA, (string)A420, (string)AV12, (string)Y444_16LE, (string)Y444_16BE, (string)v216, (string)P016_LE, (string)P016_BE, (string)Y444_12LE, (string)GBR_12LE, (string)Y444_12BE, (string)GBR_12BE, (string)I422_12LE, (string)I422_12BE, (string)Y212_LE, (string)Y212_BE, (string)I420_12LE, (string)I420_12BE, (string)P012_LE, (string)P012_BE, (string)Y444_10LE, (string)GBR_10LE, (string)Y444_10BE, (string)GBR_10BE, (string)r210, (string)I422_10LE, (string)I422_10BE, (string)NV16_10LE32, (string)Y210, (string)v210, (string)UYVP, (string)I420_10LE, (string)I420_10BE, (string)P010_10LE, (string)NV12_10LE32, (string)NV12_10LE40, (string)P010_10BE, (string)NV12_10BE_8L128, (string)Y444, (string)RGBP, (string)GBR, (string)BGRP, (string)NV24, (string)xBGR, (string)BGRx, (string)xRGB, (string)RGBx, (string)BGR, (string)IYU2, (string)v308, (string)RGB, (string)Y42B, (string)NV61, (string)NV16, (string)VYUY, (string)UYVY, (string)YVYU, (string)YUY2, (string)I420, (string)YV12, (string)NV21, (string)NV12, (string)NV12_8L128, (string)NV12_64Z32, (string)NV12_4L4, (string)NV12_32L32, (string)NV12_16L32S, (string)Y41B, (string)IYU1, (string)YVU9, (string)YUV9, (string)RGB16, (string)BGR16, (string)RGB15, (string)BGR15, (string)RGB8P, (string)GRAY16_LE, (string)GRAY16_BE, (string)GRAY10_LE32, (string)GRAY8 }                  width: [ 1, 32767 ]                 height: [ 1, 32767 ]              framerate: [ 0/1, 2147483647/1 ]      video/x-raw(ANY)                 format: { (string)ABGR64_LE, (string)BGRA64_LE, (string)AYUV64, (string)ARGB64_LE, (string)ARGB64, (string)RGBA64_LE, (string)ABGR64_BE, (string)BGRA64_BE, (string)ARGB64_BE, (string)RGBA64_BE, (string)GBRA_12LE, (string)GBRA_12BE, (string)Y412_LE, (string)Y412_BE, (string)A444_10LE, (string)GBRA_10LE, (string)A444_10BE, (string)GBRA_10BE, (string)A422_10LE, (string)A422_10BE, (string)A420_10LE, (string)A420_10BE, (string)RGB10A2_LE, (string)BGR10A2_LE, (string)Y410, (string)GBRA, (string)ABGR, (string)VUYA, (string)BGRA, (string)AYUV, (string)ARGB, (string)RGBA, (string)A420, (string)AV12, (string)Y444_16LE, (string)Y444_16BE, (string)v216, (string)P016_LE, (string)P016_BE, (string)Y444_12LE, (string)GBR_12LE, (string)Y444_12BE, (string)GBR_12BE, (string)I422_12LE, (string)I422_12BE, (string)Y212_LE, (string)Y212_BE, (string)I420_12LE, (string)I420_12BE, (string)P012_LE, (string)P012_BE, (string)Y444_10LE, (string)GBR_10LE, (string)Y444_10BE, (string)GBR_10BE, (string)r210, (string)I422_10LE, (string)I422_10BE, (string)NV16_10LE32, (string)Y210, (string)v210, (string)UYVP, (string)I420_10LE, (string)I420_10BE, (string)P010_10LE, (string)NV12_10LE32, (string)NV12_10LE40, (string)P010_10BE, (string)NV12_10BE_8L128, (string)Y444, (string)RGBP, (string)GBR, (string)BGRP, (string)NV24, (string)xBGR, (string)BGRx, (string)xRGB, (string)RGBx, (string)BGR, (string)IYU2, (string)v308, (string)RGB, (string)Y42B, (string)NV61, (string)NV16, (string)VYUY, (string)UYVY, (string)YVYU, (string)YUY2, (string)I420, (string)YV12, (string)NV21, (string)NV12, (string)NV12_8L128, (string)NV12_64Z32, (string)NV12_4L4, (string)NV12_32L32, (string)NV12_16L32S, (string)Y41B, (string)IYU1, (string)YVU9, (string)YUV9, (string)RGB16, (string)BGR16, (string)RGB15, (string)BGR15, (string)RGB8P, (string)GRAY16_LE, (string)GRAY16_BE, (string)GRAY10_LE32, (string)GRAY8 }                  width: [ 1, 32767 ]                 height: [ 1, 32767 ]              framerate: [ 0/1, 2147483647/1 ]    SRC template: 'src'    Availability: Always    Capabilities:      video/x-raw                 format: { (string)ABGR64_LE, (string)BGRA64_LE, (string)AYUV64, (string)ARGB64_LE, (string)ARGB64, (string)RGBA64_LE, (string)ABGR64_BE, (string)BGRA64_BE, (string)ARGB64_BE, (string)RGBA64_BE, (string)GBRA_12LE, (string)GBRA_12BE, (string)Y412_LE, (string)Y412_BE, (string)A444_10LE, (string)GBRA_10LE, (string)A444_10BE, (string)GBRA_10BE, (string)A422_10LE, (string)A422_10BE, (string)A420_10LE, (string)A420_10BE, (string)RGB10A2_LE, (string)BGR10A2_LE, (string)Y410, (string)GBRA, (string)ABGR, (string)VUYA, (string)BGRA, (string)AYUV, (string)ARGB, (string)RGBA, (string)A420, (string)AV12, (string)Y444_16LE, (string)Y444_16BE, (string)v216, (string)P016_LE, (string)P016_BE, (string)Y444_12LE, (string)GBR_12LE, (string)Y444_12BE, (string)GBR_12BE, (string)I422_12LE, (string)I422_12BE, (string)Y212_LE, (string)Y212_BE, (string)I420_12LE, (string)I420_12BE, (string)P012_LE, (string)P012_BE, (string)Y444_10LE, (string)GBR_10LE, (string)Y444_10BE, (string)GBR_10BE, (string)r210, (string)I422_10LE, (string)I422_10BE, (string)NV16_10LE32, (string)Y210, (string)v210, (string)UYVP, (string)I420_10LE, (string)I420_10BE, (string)P010_10LE, (string)NV12_10LE32, (string)NV12_10LE40, (string)P010_10BE, (string)NV12_10BE_8L128, (string)Y444, (string)RGBP, (string)GBR, (string)BGRP, (string)NV24, (string)xBGR, (string)BGRx, (string)xRGB, (string)RGBx, (string)BGR, (string)IYU2, (string)v308, (string)RGB, (string)Y42B, (string)NV61, (string)NV16, (string)VYUY, (string)UYVY, (string)YVYU, (string)YUY2, (string)I420, (string)YV12, (string)NV21, (string)NV12, (string)NV12_8L128, (string)NV12_64Z32, (string)NV12_4L4, (string)NV12_32L32, (string)NV12_16L32S, (string)Y41B, (string)IYU1, (string)YVU9, (string)YUV9, (string)RGB16, (string)BGR16, (string)RGB15, (string)BGR15, (string)RGB8P, (string)GRAY16_LE, (string)GRAY16_BE, (string)GRAY10_LE32, (string)GRAY8 }                  width: [ 1, 32767 ]                 height: [ 1, 32767 ]              framerate: [ 0/1, 2147483647/1 ]      video/x-raw(ANY)                 format: { (string)ABGR64_LE, (string)BGRA64_LE, (string)AYUV64, (string)ARGB64_LE, (string)ARGB64, (string)RGBA64_LE, (string)ABGR64_BE, (string)BGRA64_BE, (string)ARGB64_BE, (string)RGBA64_BE, (string)GBRA_12LE, (string)GBRA_12BE, (string)Y412_LE, (string)Y412_BE, (string)A444_10LE, (string)GBRA_10LE, (string)A444_10BE, (string)GBRA_10BE, (string)A422_10LE, (string)A422_10BE, (string)A420_10LE, (string)A420_10BE, (string)RGB10A2_LE, (string)BGR10A2_LE, (string)Y410, (string)GBRA, (string)ABGR, (string)VUYA, (string)BGRA, (string)AYUV, (string)ARGB, (string)RGBA, (string)A420, (string)AV12, (string)Y444_16LE, (string)Y444_16BE, (string)v216, (string)P016_LE, (string)P016_BE, (string)Y444_12LE, (string)GBR_12LE, (string)Y444_12BE, (string)GBR_12BE, (string)I422_12LE, (string)I422_12BE, (string)Y212_LE, (string)Y212_BE, (string)I420_12LE, (string)I420_12BE, (string)P012_LE, (string)P012_BE, (string)Y444_10LE, (string)GBR_10LE, (string)Y444_10BE, (string)GBR_10BE, (string)r210, (string)I422_10LE, (string)I422_10BE, (string)NV16_10LE32, (string)Y210, (string)v210, (string)UYVP, (string)I420_10LE, (string)I420_10BE, (string)P010_10LE, (string)NV12_10LE32, (string)NV12_10LE40, (string)P010_10BE, (string)NV12_10BE_8L128, (string)Y444, (string)RGBP, (string)GBR, (string)BGRP, (string)NV24, (string)xBGR, (string)BGRx, (string)xRGB, (string)RGBx, (string)BGR, (string)IYU2, (string)v308, (string)RGB, (string)Y42B, (string)NV61, (string)NV16, (string)VYUY, (string)UYVY, (string)YVYU, (string)YUY2, (string)I420, (string)YV12, (string)NV21, (string)NV12, (string)NV12_8L128, (string)NV12_64Z32, (string)NV12_4L4, (string)NV12_32L32, (string)NV12_16L32S, (string)Y41B, (string)IYU1, (string)YVU9, (string)YUV9, (string)RGB16, (string)BGR16, (string)RGB15, (string)BGR15, (string)RGB8P, (string)GRAY16_LE, (string)GRAY16_BE, (string)GRAY10_LE32, (string)GRAY8 }                  width: [ 1, 32767 ]                 height: [ 1, 32767 ]              framerate: [ 0/1, 2147483647/1 ]
The only place I saw anything mentioned about bayer was in the Element Properties

Code:

Element Properties:  add-borders         : Add black borders if necessary to keep the display aspect ratio                        flags: readable, writable                        Boolean. Default: true  alpha-mode          : Alpha Mode to use                        flags: readable, writable                        Enum "GstVideoAlphaMode" Default: 0, "copy"                           (0): copy             - GST_VIDEO_ALPHA_MODE_COPY                           (1): set              - GST_VIDEO_ALPHA_MODE_SET                           (2): mult             - GST_VIDEO_ALPHA_MODE_MULT  alpha-value         : Alpha Value to use                        flags: readable, writable                        Double. Range:               0 -               1 Default:               1   chroma-mode         : Chroma Resampling Mode                        flags: readable, writable                        Enum "GstVideoChromaMode" Default: 0, "full"                           (0): full             - GST_VIDEO_CHROMA_MODE_FULL                           (1): upsample-only    - GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY                           (2): downsample-only  - GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY                           (3): none             - GST_VIDEO_CHROMA_MODE_NONE  chroma-resampler    : Chroma resampler method                        flags: readable, writable                        Enum "GstVideoResamplerMethod" Default: 1, "linear"                           (0): nearest          - GST_VIDEO_RESAMPLER_METHOD_NEAREST                           (1): linear           - GST_VIDEO_RESAMPLER_METHOD_LINEAR                           (2): cubic            - GST_VIDEO_RESAMPLER_METHOD_CUBIC                           (3): sinc             - GST_VIDEO_RESAMPLER_METHOD_SINC                           (4): lanczos          - GST_VIDEO_RESAMPLER_METHOD_LANCZOS  dither              : Apply dithering while converting                        flags: readable, writable                        Enum "GstVideoDitherMethod" Default: 4, "bayer":                        flags: readable, writable                        Enum "GstVideoAlphaMode" Default: 0, "copy"                           (0): copy             - GST_VIDEO_ALPHA_MODE_COPY                           (1): set              - GST_VIDEO_ALPHA_MODE_SET                           (2): mult             - GST_VIDEO_ALPHA_MODE_MULT  alpha-value         : Alpha Value to use                        flags: readable, writable                        Double. Range:               0 -               1 Default:               1   chroma-mode         : Chroma Resampling Mode                        flags: readable, writable                        Enum "GstVideoChromaMode" Default: 0, "full"                           (0): full             - GST_VIDEO_CHROMA_MODE_FULL                           (1): upsample-only    - GST_VIDEO_CHROMA_MODE_UPSAMPLE_ONLY                           (2): downsample-only  - GST_VIDEO_CHROMA_MODE_DOWNSAMPLE_ONLY                           (3): none             - GST_VIDEO_CHROMA_MODE_NONE  chroma-resampler    : Chroma resampler method                        flags: readable, writable                        Enum "GstVideoResamplerMethod" Default: 1, "linear"                           (0): nearest          - GST_VIDEO_RESAMPLER_METHOD_NEAREST                           (1): linear           - GST_VIDEO_RESAMPLER_METHOD_LINEAR                           (2): cubic            - GST_VIDEO_RESAMPLER_METHOD_CUBIC                           (3): sinc             - GST_VIDEO_RESAMPLER_METHOD_SINC                           (4): lanczos          - GST_VIDEO_RESAMPLER_METHOD_LANCZOS  dither              : Apply dithering while converting                        flags: readable, writable                        Enum "GstVideoDitherMethod" Default: 4, "bayer"                           (0): none             - GST_VIDEO_DITHER_NONE                           (1): verterr          - GST_VIDEO_DITHER_VERTERR                           (2): floyd-steinberg  - GST_VIDEO_DITHER_FLOYD_STEINBERG                           (3): sierra-lite      - GST_VIDEO_DITHER_SIERRA_LITE                           (4): bayer            - GST_VIDEO_DITHER_BAYER
So the big question I wanted to ask is

Does GStreamer and the libcamerasrc support acquiring the 10-bit RGGB/Bayer data from the IMX219 camera sensor?

Because I've had NO luck with the following pipeline

Code:

GST_DEBUG=3 gst-launch-1.0 libcamerasrc ! video/x-bayer, format=rggb, width=640, height=480 ! bayer2rgb ! videoconvert ! autovideosink
And have gotten the following error

Code:

** (gst-launch-1.0:23040): CRITICAL **: 19:47:33.477: Unsupported media type: video/x-bayer[10:45:24.343656834] [23050]  INFO Camera camera.cpp:1197 configuring streams: (0) 640x480-YUV420[10:45:24.343789667] [23045]  INFO RPI pisp.cpp:1450 Sensor: /base/axi/pcie@120000/rp1/i2c@88000/imx219@10 - Selected sensor format: 640x480-SBGGR10_1X10 - Selected CFE format: 640x480-PC1B0:00:00.983647323 23040 0x5555b976f1e0 WARN                GST_CAPS gstpad.c:5787:pre_eventfunc_check:<capsfilter0:sink> caps video/x-raw, format=(string)I420, width=(int)640, height=(int)480, colorimetry=(string)bt709, framerate=(fraction)30/1 not accepted0:00:00.984558750 23040 0x5555b976f1e0 WARN                GST_CAPS gstpad.c:5787:pre_eventfunc_check:<capsfilter0:sink> caps video/x-raw, format=(string)I420, width=(int)640, height=(int)480, colorimetry=(string)bt709, framerate=(fraction)30/1 not accepted0:00:01.264398927 23040 0x5555b976f1e0 WARN                GST_CAPS gstpad.c:5787:pre_eventfunc_check:<capsfilter0:sink> caps video/x-raw, format=(string)I420, width=(int)640, height=(int)480, colorimetry=(string)bt709, framerate=(fraction)30/1 not accepted

Statistics: Posted by Digital1O1 — Sat Jan 11, 2025 1:52 am



Viewing all articles
Browse latest Browse all 4909

Trending Articles