Closed jmachuca77 closed 4 months ago
The nvvidconv element isn't linking to the appsink element. This might be caused by a pipeline negotiation failure. In this case appsink is expecting "video/x-raw,format=(string)RGB", can nvvidconv provide this?
Ptr to caps in code: https://github.com/clydemcqueen/gscam2/blob/16cbefb1cbd1a86e0803827dda0977d63694cf89/src/gscam_node.cpp#L162
You can increase debugging to see what is going on: export GST_DEBUG=3
. More info on debugging: https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html?gi-language=c
Yeah I figured out that nvvidconv doesn't look like it supports that format which is very unfortunate:
$ gst-inspect-1.0 nvvidconv
Factory Details:
Rank primary (256)
Long-name NvVidConv Plugin
Klass Filter/Converter/Video/Scaler
Description Converts video from one colorspace to another & Resizes
Author amit pandya <apandya@nvidia.com>
Plugin Details:
Name nvvidconv
Description video Colorspace conversion & scaler
Filename /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstnvvidconv.so
Version 1.2.3
License Proprietary
Source module gstreamer-nvvconv-plugin
Binary package GStreamer nvvconv Plugin
Origin URL http://nvidia.com/
GObject
+----GInitiallyUnowned
+----GstObject
+----GstElement
+----GstBaseTransform
+----Gstnvvconv
Pad Templates:
SRC template: 'src'
Availability: Always
Capabilities:
video/x-raw(memory:NVMM)
format: { (string)I420, (string)I420_10LE, (string)P010_10LE, (string)UYVY, (string)YUY2, (string)YVYU, (string)NV12, (string)NV16, (string)NV24, (string)GRAY8, (string)BGRx, (string)RGBA, (string)Y42B, (string)Y444 }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw
format: { (string)I420, (string)UYVY, (string)YUY2, (string)YVYU, (string)NV12, (string)NV16, (string)NV24, (string)GRAY8, (string)BGRx, (string)RGBA, (string)Y42B, (string)Y444 }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
SINK template: 'sink'
Availability: Always
Capabilities:
video/x-raw(memory:NVMM)
format: { (string)I420, (string)I420_10LE, (string)P010_10LE, (string)I420_12LE, (string)UYVY, (string)YUY2, (string)YVYU, (string)NV12, (string)NV16, (string)NV24, (string)GRAY8, (string)BGRx, (string)RGBA, (string)Y42B, (string)Y444 }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw
format: { (string)I420, (string)UYVY, (string)YUY2, (string)YVYU, (string)NV12, (string)NV16, (string)NV24, (string)P010_10LE, (string)GRAY8, (string)BGRx, (string)RGBA, (string)Y42B, (string)Y444 }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
Element has no clocking capabilities.
Element has no URI handling capabilities.
Pads:
SINK: 'sink'
Pad Template: 'sink'
SRC: 'src'
Pad Template: 'src'
Element Properties:
bl-output : Blocklinear output, applicable only for memory:NVMM NV12 format output buffer when compute hw is VIC
flags: readable, writable
Boolean. Default: true
bottom : Pixels to crop at bottom
flags: readable, writable
Integer. Range: 0 - 2147483647 Default: 0
compute-hw : Compute Scaling HW
flags: readable, writable, controllable
Enum "GstNvVidConvComputeHWType" Default: 0, "Default"
(0): Default - Default, VIC for Jetson
(1): GPU - GPU
(2): VIC - VIC
flip-method : video flip methods
flags: readable, writable, controllable
Enum "GstNvVideoFlipMethod" Default: 0, "none"
(0): none - Identity (no rotation)
(1): counterclockwise - Rotate counter-clockwise 90 degrees
(2): rotate-180 - Rotate 180 degrees
(3): clockwise - Rotate clockwise 90 degrees
(4): horizontal-flip - Flip horizontally
(5): upper-right-diagonal - Flip across upper right/lower left diagonal
(6): vertical-flip - Flip vertically
(7): upper-left-diagonal - Flip across upper left/lower right diagonal
gpu-id : Set GPU Device ID for operation
flags: readable, writable, changeable only in NULL or READY state
Unsigned Integer. Range: 0 - 4294967295 Default: 0
interpolation-method: Set interpolation methods
flags: readable, writable, controllable
Enum "GstInterpolationMethod" Default: 0, "Nearest"
(0): Nearest - Nearest
(1): Bilinear - Bilinear
(2): 5-Tap - 5-Tap
(3): 10-Tap - 10-Tap
(4): Smart - Smart
(5): Nicest - Nicest
left : Pixels to crop at left
flags: readable, writable
Integer. Range: 0 - 2147483647 Default: 0
name : The name of the object
flags: readable, writable
String. Default: "nvvconv0"
nvbuf-memory-type : Type of NvBufSurface Memory to be allocated for output buffers when compute hw is GPU and memory is NVMM
flags: readable, writable, changeable only in NULL or READY state
Enum "GstNvVidConvBufMemoryType" Default: 0, "nvbuf-mem-default"
(0): nvbuf-mem-default - Default memory allocated, specific to particular platform
(1): nvbuf-mem-cuda-pinned - Allocate Pinned/Host cuda memory
(2): nvbuf-mem-cuda-device - Allocate Device cuda memory
(4): nvbuf-mem-surface-array - Allocate Surface Array memory, applicable for Jetson
output-buffers : number of output buffers
flags: readable, writable, changeable in NULL, READY, PAUSED or PLAYING state
Unsigned Integer. Range: 1 - 4294967295 Default: 4
parent : The parent of the object
flags: readable, writable
Object of type "GstObject"
qos : Handle Quality-of-Service events
flags: readable, writable
Boolean. Default: false
right : Pixels to crop at right
flags: readable, writable
Integer. Range: 0 - 2147483647 Default: 0
silent : Produce verbose output ?
flags: readable, writable
Boolean. Default: false
top : Pixels to crop at top
flags: readable, writable
Integer. Range: 0 - 2147483647 Default: 0
However videoconvert does, so I switched to that but Im still getting the same error, with no other output even increasing the debug level for GST to 3, I don't see RGB8 listed though so could it be that the source is in RGB8 and that's why its failing? and if so what would be a workaround?:
Factory Details:
Rank none (0)
Long-name Colorspace converter
Klass Filter/Converter/Video
Description Converts video from one colorspace to another
Author GStreamer maintainers <gstreamer-devel@lists.freedesktop.org>
Plugin Details:
Name videoconvert
Description Colorspace conversion
Filename /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgstvideoconvert.so
Version 1.16.3
License LGPL
Source module gst-plugins-base
Source release date 2020-10-21
Binary package GStreamer Base Plugins (Ubuntu)
Origin URL https://launchpad.net/distros/ubuntu/+source/gst-plugins-base1.0
GObject
+----GInitiallyUnowned
+----GstObject
+----GstElement
+----GstBaseTransform
+----GstVideoFilter
+----GstVideoConvert
Pad Templates:
SRC template: 'src'
Availability: Always
Capabilities:
video/x-raw
format: { (string)I420, (string)YV12, (string)YUY2, (string)UYVY, (string)AYUV, (string)VUYA, (string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR, **(string)RGB**, (string)BGR, (string)Y41B, (string)Y42B, (string)YVYU, (string)Y444, (string)v210, (string)v216, (string)Y210, (string)Y410, (string)NV12, (string)NV21, (string)GRAY8, (string)GRAY16_BE, (string)GRAY16_LE, (string)v308, (string)RGB16, (string)BGR16, (string)RGB15, (string)BGR15, (string)UYVP, (string)A420, (string)RGB8P, (string)YUV9, (string)YVU9, (string)IYU1, (string)ARGB64, (string)AYUV64, (string)r210, (string)I420_10BE, (string)I420_10LE, (string)I422_10BE, (string)I422_10LE, (string)Y444_10BE, (string)Y444_10LE, (string)GBR, (string)GBR_10BE, (string)GBR_10LE, (string)NV16, (string)NV24, (string)NV12_64Z32, (string)A420_10BE, (string)A420_10LE, (string)A422_10BE, (string)A422_10LE, (string)A444_10BE, (string)A444_10LE, (string)NV61, (string)P010_10BE, (string)P010_10LE, (string)IYU2, (string)VYUY, (string)GBRA, (string)GBRA_10BE, (string)GBRA_10LE, (string)BGR10A2_LE, (string)GBR_12BE, (string)GBR_12LE, (string)GBRA_12BE, (string)GBRA_12LE, (string)I420_12BE, (string)I420_12LE, (string)I422_12BE, (string)I422_12LE, (string)Y444_12BE, (string)Y444_12LE, (string)GRAY10_LE32, (string)NV12_10LE32, (string)NV16_10LE32, (string)NV12_10LE40 }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw(ANY)
format: { (string)I420, (string)YV12, (string)YUY2, (string)UYVY, (string)AYUV, (string)VUYA, (string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR, **(string)RGB**, (string)BGR, (string)Y41B, (string)Y42B, (string)YVYU, (string)Y444, (string)v210, (string)v216, (string)Y210, (string)Y410, (string)NV12, (string)NV21, (string)GRAY8, (string)GRAY16_BE, (string)GRAY16_LE, (string)v308, (string)RGB16, (string)BGR16, (string)RGB15, (string)BGR15, (string)UYVP, (string)A420, (string)RGB8P, (string)YUV9, (string)YVU9, (string)IYU1, (string)ARGB64, (string)AYUV64, (string)r210, (string)I420_10BE, (string)I420_10LE, (string)I422_10BE, (string)I422_10LE, (string)Y444_10BE, (string)Y444_10LE, (string)GBR, (string)GBR_10BE, (string)GBR_10LE, (string)NV16, (string)NV24, (string)NV12_64Z32, (string)A420_10BE, (string)A420_10LE, (string)A422_10BE, (string)A422_10LE, (string)A444_10BE, (string)A444_10LE, (string)NV61, (string)P010_10BE, (string)P010_10LE, (string)IYU2, (string)VYUY, (string)GBRA, (string)GBRA_10BE, (string)GBRA_10LE, (string)BGR10A2_LE, (string)GBR_12BE, (string)GBR_12LE, (string)GBRA_12BE, (string)GBRA_12LE, (string)I420_12BE, (string)I420_12LE, (string)I422_12BE, (string)I422_12LE, (string)Y444_12BE, (string)Y444_12LE, (string)GRAY10_LE32, (string)NV12_10LE32, (string)NV16_10LE32, (string)NV12_10LE40 }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
SINK template: 'sink'
Availability: Always
Capabilities:
video/x-raw
format: { (string)I420, (string)YV12, (string)YUY2, (string)UYVY, (string)AYUV, (string)VUYA, (string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR, **(string)RGB**, (string)BGR, (string)Y41B, (string)Y42B, (string)YVYU, (string)Y444, (string)v210, (string)v216, (string)Y210, (string)Y410, (string)NV12, (string)NV21, (string)GRAY8, (string)GRAY16_BE, (string)GRAY16_LE, (string)v308, (string)RGB16, (string)BGR16, (string)RGB15, (string)BGR15, (string)UYVP, (string)A420, (string)RGB8P, (string)YUV9, (string)YVU9, (string)IYU1, (string)ARGB64, (string)AYUV64, (string)r210, (string)I420_10BE, (string)I420_10LE, (string)I422_10BE, (string)I422_10LE, (string)Y444_10BE, (string)Y444_10LE, (string)GBR, (string)GBR_10BE, (string)GBR_10LE, (string)NV16, (string)NV24, (string)NV12_64Z32, (string)A420_10BE, (string)A420_10LE, (string)A422_10BE, (string)A422_10LE, (string)A444_10BE, (string)A444_10LE, (string)NV61, (string)P010_10BE, (string)P010_10LE, (string)IYU2, (string)VYUY, (string)GBRA, (string)GBRA_10BE, (string)GBRA_10LE, (string)BGR10A2_LE, (string)GBR_12BE, (string)GBR_12LE, (string)GBRA_12BE, (string)GBRA_12LE, (string)I420_12BE, (string)I420_12LE, (string)I422_12BE, (string)I422_12LE, (string)Y444_12BE, (string)Y444_12LE, (string)GRAY10_LE32, (string)NV12_10LE32, (string)NV16_10LE32, (string)NV12_10LE40 }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
video/x-raw(ANY)
format: { (string)I420, (string)YV12, (string)YUY2, (string)UYVY, (string)AYUV, (string)VUYA, (string)RGBx, (string)BGRx, (string)xRGB, (string)xBGR, (string)RGBA, (string)BGRA, (string)ARGB, (string)ABGR, **(string)RGB**, (string)BGR, (string)Y41B, (string)Y42B, (string)YVYU, (string)Y444, (string)v210, (string)v216, (string)Y210, (string)Y410, (string)NV12, (string)NV21, (string)GRAY8, (string)GRAY16_BE, (string)GRAY16_LE, (string)v308, (string)RGB16, (string)BGR16, (string)RGB15, (string)BGR15, (string)UYVP, (string)A420, (string)RGB8P, (string)YUV9, (string)YVU9, (string)IYU1, (string)ARGB64, (string)AYUV64, (string)r210, (string)I420_10BE, (string)I420_10LE, (string)I422_10BE, (string)I422_10LE, (string)Y444_10BE, (string)Y444_10LE, (string)GBR, (string)GBR_10BE, (string)GBR_10LE, (string)NV16, (string)NV24, (string)NV12_64Z32, (string)A420_10BE, (string)A420_10LE, (string)A422_10BE, (string)A422_10LE, (string)A444_10BE, (string)A444_10LE, (string)NV61, (string)P010_10BE, (string)P010_10LE, (string)IYU2, (string)VYUY, (string)GBRA, (string)GBRA_10BE, (string)GBRA_10LE, (string)BGR10A2_LE, (string)GBR_12BE, (string)GBR_12LE, (string)GBRA_12BE, (string)GBRA_12LE, (string)I420_12BE, (string)I420_12LE, (string)I422_12BE, (string)I422_12LE, (string)Y444_12BE, (string)Y444_12LE, (string)GRAY10_LE32, (string)NV12_10LE32, (string)NV16_10LE32, (string)NV12_10LE40 }
width: [ 1, 2147483647 ]
height: [ 1, 2147483647 ]
framerate: [ 0/1, 2147483647/1 ]
Element has no clocking capabilities.
Element has no URI handling capabilities.
Pads:
SINK: 'sink'
Pad Template: 'sink'
SRC: 'src'
Pad Template: 'src'
Element Properties:
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"
(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
dither-quantization : Quantizer to use
flags: readable, writable
Unsigned Integer. Range: 0 - 4294967295 Default: 1
gamma-mode : Gamma Conversion Mode
flags: readable, writable
Enum "GstVideoGammaMode" Default: 0, "none"
(0): none - GST_VIDEO_GAMMA_MODE_NONE
(1): remap - GST_VIDEO_GAMMA_MODE_REMAP
matrix-mode : Matrix Conversion Mode
flags: readable, writable
Enum "GstVideoMatrixMode" Default: 0, "full"
(0): full - GST_VIDEO_MATRIX_MODE_FULL
(1): input-only - GST_VIDEO_MATRIX_MODE_INPUT_ONLY
(2): output-only - GST_VIDEO_MATRIX_MODE_OUTPUT_ONLY
(3): none - GST_VIDEO_MATRIX_MODE_NONE
n-threads : Maximum number of threads to use
flags: readable, writable
Unsigned Integer. Range: 0 - 4294967295 Default: 1
name : The name of the object
flags: readable, writable
String. Default: "videoconvert0"
parent : The parent of the object
flags: readable, writable
Object of type "GstObject"
primaries-mode : Primaries Conversion Mode
flags: readable, writable
Enum "GstVideoPrimariesMode" Default: 0, "none"
(0): none - GST_VIDEO_PRIMARIES_MODE_NONE
(1): merge-only - GST_VIDEO_PRIMARIES_MODE_MERGE_ONLY
(2): fast - GST_VIDEO_PRIMARIES_MODE_FAST
qos : Handle Quality-of-Service events
flags: readable, writable
Boolean. Default: true
output:
$ export GSCAM_CONFIG='udpsrc port=50008 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! queue ! h264parse ! nvv4l2decoder ! queue ! videoconvert'
() $ ros2 run gscam2 gscam_main --ros-args -p camera_info_url:=file:///home/jaime/kaya_ws/src/gscam2/cfg/my_camera.ini
[INFO] [1715969737.881941999] [gscam_publisher]: use_intra_process_comms=0
[INFO] [1715969737.882382840] [gscam_publisher]: gst_plugin_path =
[INFO] [1715969737.882418073] [gscam_publisher]: gscam_config =
[INFO] [1715969737.882440026] [gscam_publisher]: sync_sink = true
[INFO] [1715969737.882456282] [gscam_publisher]: preroll = false
[INFO] [1715969737.882471642] [gscam_publisher]: use_gst_timestamps = false
[INFO] [1715969737.882491099] [gscam_publisher]: image_encoding = rgb8
[INFO] [1715969737.882508635] [gscam_publisher]: camera_info_url = file:///home/jaime/kaya_ws/src/gscam2/cfg/my_camera.ini
[INFO] [1715969737.882525787] [gscam_publisher]: camera_name =
[INFO] [1715969737.882541660] [gscam_publisher]: frame_id = camera_frame
[INFO] [1715969737.882561340] [gscam_publisher]: Using GSCAM_CONFIG env var: udpsrc port=50008 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! queue ! h264parse ! nvv4l2decoder ! queue ! videoconvert
[INFO] [1715969737.882613213] [gscam_publisher]: camera calibration URL: file:///home/jaime/kaya_ws/src/gscam2/cfg/my_camera.ini
[INFO] [1715969737.882868162] [gscam_publisher]: Loaded camera calibration from file:///home/jaime/kaya_ws/src/gscam2/cfg/my_camera.ini
[INFO] [1715969737.894341967] [gscam_publisher]: Gstreamer initialized
[INFO] [1715969737.894442577] [gscam_publisher]: Gstreamer version: GStreamer 1.16.3
[INFO] [1715969737.951642186] [gscam_publisher]: Adding RGB Caps
[FATAL] [1715969737.953675220] [gscam_publisher]: Cannot link outelement("videoconvert0") -> sink
[INFO] [1715969737.953955257] [gscam_publisher]: Pipeline deleted
^C^C[INFO] [1715969745.593488357] [rclcpp]: signal_handler(signum=2)
A few possibilities, easiest to hardest:
Try ending with "! nvvidconv ! videoconvert".
gscam uses image_transport, gscam2 does not. IIRC image_transport will do some format conversions. You might try gscam to see if it will behave differently.
nvvidconv can provide YUY2, which maps to yuv422_yuy2 in ROS. Try setting the image_encoding to yuv422_yuy2. But the downstream nodes will need to convert yuv422_yuy2 to whatever you need.
You could add more gstreamer formats to gscam2.
I am puzzled by something: I am running Ubuntu 22.04, which has gstreamer 1.20.1 installed (the default). When I run gst-inspect-1.0 videoconvert
I see that RGB is listed in the SRC pad template format list, which I expected. You seem to be running gstreamer 1.16.3, and I don't see RGB listed in the SRC pad template format list. But it still works? I am not sure what to make of this.
P.S. setting GST_DEBUG=4 will give you way too much output, but buried in that you should see the create of caps objects, something like GST_EVENT gstevent.c:892:gst_event_new_caps: creating caps event video/x-raw, format=(string)YV12, width=(int)1280, height=(int)720, framerate=(fraction)30/1, multiview-mode=(string)mono, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
Closing for now thanks for your help. For future references I was not able to get gscam2 working, but was able to get gscam ros2 branch to work.
I'm glad gscam worked!
I need a bit of help with the pipeline string, I have a udp camera connected and I can visualize the video with this gst-launch-1.0 command:
Im trying to use that as an input to gscam by setting the following env variable:
However I get the following error:
I tried with a simple pipeline with
'videotestsrc ! video/x-raw, format=BGRx ! videoconvert'
and that works, but not with the above settings. Any ideas on what is wrong? the following is the full output: