NVIDIA-ISAAC-ROS / isaac_ros_compression

NVIDIA-accelerated data compression
https://developer.nvidia.com/isaac-ros-gems
Apache License 2.0
53 stars 7 forks source link

[NitrosNode] LoadApplication Error: GXF_PARAMETER_PARSER_ERROR #7

Closed jtaveau closed 10 months ago

jtaveau commented 1 year ago

Hi, I'm trying to use the h264 encoder launch file and get this error all the time.

ros2 launch isaac_ros_h264_encoder isaac_ros_h264_encoder.launch.py 
[INFO] [launch]: All log files can be found below /home/julien/.ros/log/2023-10-24-12-18-24-141974-julienhusarnet-1212719
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [component_container-1]: process started with pid [1212732]
[component_container-1] [INFO] [1698142704.509503520] [encoder_container]: Load Library: /home/julien/dev/catkin_ws/ros2/install/isaac_ros_h264_encoder/lib/libencoder_node.so
[component_container-1] [INFO] [1698142704.524241742] [encoder_container]: Found class: rclcpp_components::NodeFactoryTemplate<nvidia::isaac_ros::h264_encoder::EncoderNode>
[component_container-1] [INFO] [1698142704.524304441] [encoder_container]: Instantiate class: rclcpp_components::NodeFactoryTemplate<nvidia::isaac_ros::h264_encoder::EncoderNode>
[component_container-1] [INFO] [1698142704.531501999] [NitrosContext]: [NitrosContext] Creating a new shared context
[component_container-1] [INFO] [1698142704.531594209] [encoder]: [NitrosNode] Initializing NitrosNode
[component_container-1] [INFO] [1698142704.532582632] [NitrosContext]: [NitrosContext] Loading extension: gxf/lib/std/libgxf_std.so
[component_container-1] [INFO] [1698142704.537515307] [NitrosContext]: [NitrosContext] Loading extension: gxf/lib/libgxf_gxf_helpers.so
[component_container-1] [INFO] [1698142704.540487374] [NitrosContext]: [NitrosContext] Loading extension: gxf/lib/libgxf_sight.so
[component_container-1] [INFO] [1698142704.543565972] [NitrosContext]: [NitrosContext] Loading extension: gxf/lib/libgxf_atlas.so
[component_container-1] [INFO] [1698142704.546644043] [NitrosContext]: [NitrosContext] Loading application: '/home/julien/dev/catkin_ws/ros2/install/isaac_ros_nitros/share/isaac_ros_nitros/config/type_adapter_nitros_context_graph.yaml'
[component_container-1] [INFO] [1698142704.547310573] [NitrosContext]: [NitrosContext] Initializing application...
[component_container-1] [INFO] [1698142704.550291071] [NitrosContext]: [NitrosContext] Running application...
[component_container-1] 2023-10-24 12:18:24.550 WARN  gxf/std/program.cpp@514: No system specified. Nothing to do
[component_container-1] [INFO] [1698142704.551519965] [encoder]: [NitrosNode] Starting NitrosNode
[component_container-1] [INFO] [1698142704.551544435] [encoder]: [NitrosNode] Loading built-in preset extension specs
[component_container-1] [INFO] [1698142704.552842916] [encoder]: [NitrosNode] Loading built-in extension specs
[component_container-1] [INFO] [1698142704.552855624] [encoder]: [NitrosNode] Loading preset extension specs
[component_container-1] [INFO] [1698142704.553262747] [encoder]: [NitrosNode] Loading extension specs
[component_container-1] [INFO] [1698142704.553268417] [encoder]: [NitrosNode] Loading generator rules
[component_container-1] [INFO] [1698142704.553402206] [encoder]: [NitrosNode] Loading extensions
[component_container-1] [INFO] [1698142704.553795201] [encoder]: [NitrosContext] Loading extension: gxf/lib/libgxf_message_compositor.so
[component_container-1] [INFO] [1698142704.555152798] [encoder]: [NitrosContext] Loading extension: gxf/lib/multimedia/libgxf_multimedia.so
[component_container-1] [INFO] [1698142704.556790550] [encoder]: [NitrosContext] Loading extension: gxf/lib/cuda/libgxf_cuda.so
[component_container-1] [INFO] [1698142704.558627793] [encoder]: [NitrosContext] Loading extension: gxf/lib/serialization/libgxf_serialization.so
[component_container-1] [INFO] [1698142704.561458785] [encoder]: [NitrosContext] Loading extension: gxf/lib/image_proc/libgxf_tensorops.so
[component_container-1] [INFO] [1698142704.565100725] [encoder]: [NitrosContext] Loading extension: gxf/lib/codec/libgxf_video_encoder_extension.so
[component_container-1] [INFO] [1698142704.567888762] [encoder]: [NitrosNode] Loading graph to the optimizer
[component_container-1] [INFO] [1698142704.569154716] [encoder]: [NitrosNode] Running optimization
[component_container-1] [INFO] [1698142704.576009058] [encoder]: [NitrosNode] Obtaining graph IO group info from the optimizer
[component_container-1] [INFO] [1698142704.576566195] [encoder]: [NitrosNode] Creating negotiated publishers/subscribers
[component_container-1] [INFO] [1698142704.583581187] [encoder]: [NitrosNode] Starting negotiation...
[INFO] [launch_ros.actions.load_composable_nodes]: Loaded node '/encoder' in container '/encoder_container'
[component_container-1] [INFO] [1698142704.718249613] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142704.753936178] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142704.821431192] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142704.921723658] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142705.021601108] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142705.121529032] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142705.221441601] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142705.321541641] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142705.421699791] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142705.521679413] [encoder]: [NitrosSubscriber] Received a message but the application receiver's pointer is not yet set.
[component_container-1] [INFO] [1698142705.584971882] [encoder]: [NitrosNode] Starting post negotiation setup
[component_container-1] [INFO] [1698142705.585041117] [encoder]: [NitrosNode] Getting data format negotiation results
[component_container-1] [INFO] [1698142705.585060345] [encoder]: [NitrosSubscriber] Negotiation ended with no results
[component_container-1] [INFO] [1698142705.585069471] [encoder]: [NitrosSubscriber] Use the compatible subscriber: topic_name="/flir_camera/image_raw", data_format="nitros_image_bgr8"
[component_container-1] [INFO] [1698142705.585126034] [encoder]: [NitrosPublisher] Negotiation ended with no results
[component_container-1] [INFO] [1698142705.585135942] [encoder]: [NitrosPublisher] Use only the compatible publisher: topic_name="/flir_camera/image_raw/compressed", data_format="nitros_compressed_image"
[component_container-1] [INFO] [1698142705.585148768] [encoder]: [NitrosNode] Exporting the final graph based on the negotiation results
[component_container-1] [INFO] [1698142705.588203071] [encoder]: [NitrosNode] Wrote the final top level YAML graph to "/home/julien/dev/catkin_ws/ros2/install/isaac_ros_h264_encoder/share/isaac_ros_h264_encoder/WCKMAXFRNO.yaml"
[component_container-1] [INFO] [1698142705.588245450] [encoder]: [NitrosNode] Calling user's pre-load-graph callback
[component_container-1] [INFO] [1698142705.588282968] [encoder]: [EncoderNode] preLoadGraphCallback().
[component_container-1] [INFO] [1698142705.588290221] [encoder]: [NitrosNode] Loading application
[component_container-1] [INFO] [1698142705.588299014] [encoder]: [NitrosContext] Loading application: '/home/julien/dev/catkin_ws/ros2/install/isaac_ros_h264_encoder/share/isaac_ros_h264_encoder/WCKMAXFRNO.yaml'
[component_container-1] 2023-10-24 12:18:25.589 ERROR /home/julien/dev/catkin_ws/ros2/install/isaac_ros_gxf/share/isaac_ros_gxf/gxf/include/gxf/std/parameter_parser.hpp@181: Could not parse parameter 'receiver' from 'data_receiver'
[component_container-1] [ERROR] [1698142705.589834649] [encoder]: [NitrosNode] LoadApplication Error: GXF_PARAMETER_PARSER_ERROR
[component_container-1] terminate called after throwing an instance of 'std::runtime_error'
[component_container-1]   what():  [NitrosNode] LoadApplication Error: GXF_PARAMETER_PARSER_ERROR
[ERROR] [component_container-1]: process has died [pid 1212732, exit code -6, cmd '/home/julien/ros2_humble/install/rclcpp_components/lib/rclcpp_components/component_container --ros-args --log-level info --ros-args -r __node:=encoder_container -r __ns:=/'].

I didn't change much in the launch file, just remapping the topic names and changed the resolution for my camera.

# SPDX-FileCopyrightText: NVIDIA CORPORATION & AFFILIATES
# Copyright (c) 2022-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0

import launch
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import ComposableNodeContainer
from launch_ros.descriptions import ComposableNode

def generate_launch_description():
    """Launch the H.264 Encoder Node."""
    launch_args = [
        DeclareLaunchArgument(
            'input_height',
            default_value='1024',
            description='Height of the original image'),
        DeclareLaunchArgument(
            'input_width',
            default_value='1408',
            description='Width of the original image'),
    ]

    # Encoder parameters
    input_height = LaunchConfiguration('input_height')
    input_width = LaunchConfiguration('input_width')

    encoder_node = ComposableNode(
        name='encoder',
        package='isaac_ros_h264_encoder',
        plugin='nvidia::isaac_ros::h264_encoder::EncoderNode',
        parameters=[{
                'input_height': input_height,
                'input_width': input_width,
        }],
        remappings=[
            ('image_raw', 'flir_camera/image_raw'),
            ('image_compressed', 'flir_camera/image_raw/compressed')
        ]
    )

    container = ComposableNodeContainer(
        name='encoder_container',
        namespace='',
        package='rclcpp_components',
        executable='component_container',
        composable_node_descriptions=[encoder_node],
        output='screen',
        arguments=['--ros-args', '--log-level', 'info']
    )

    return (launch.LaunchDescription(launch_args + [container]))

And that's the YAML file the parser is not able to deal with, I haven't modified the nitros_encoder_node.yaml config file.

---
name: WCKMAXFRNO_color_converter
components:
  - name: data_receiver
    type: nvidia::gxf::DoubleBufferReceiver
    parameters:
      capacity: 12
      policy: 0
  - type: nvidia::gxf::MessageAvailableSchedulingTerm
    parameters:
      receiver: data_receiver
      min_size: 1
  - name: data_transmitter
    type: nvidia::gxf::DoubleBufferTransmitter
    parameters:
      capacity: 12
      policy: 0
  - type: nvidia::gxf::DownstreamReceptiveSchedulingTerm
    parameters:
      transmitter: data_transmitter
      min_size: 1
  - name: pool
    type: nvidia::gxf::BlockMemoryPool
    parameters:
      storage_type: 1
      block_size: 6278400
      num_blocks: 40
  - name: color_converter_operator
    type: nvidia::isaac::tensor_ops::StreamConvertColorFormat
    parameters:
      output_type: NV12
      receiver: data_receiver
      transmitter: data_transmitter
      pool: pool
      input_adapter: WCKMAXFRNO_global/adapter
      output_adapter: WCKMAXFRNO_global/adapter
      output_name: image
      stream: WCKMAXFRNO_global/stream
---
name: WCKMAXFRNO_global
components:
  - name: adapter
    type: nvidia::isaac::tensor_ops::ImageAdapter
    parameters:
      message_type: VideoBuffer
  - name: stream
    type: nvidia::isaac::tensor_ops::TensorStream
    parameters:
      backend_type: VPI
      engine_type: GPU
  - name: encoder_context
    type: nvidia::gxf::VideoEncoderContext
    parameters:
      scheduling_term: WCKMAXFRNO_encoder_response/async_st
---
name: WCKMAXFRNO_encoder
components:
  - name: data_receiver
    type: nvidia::gxf::DoubleBufferReceiver
    parameters:
      capacity: 1
      policy: 0
  - type: nvidia::gxf::MessageAvailableSchedulingTerm
    parameters:
      receiver: data_receiver
      min_size: 1
  - name: encoder_request
    type: nvidia::gxf::VideoEncoderRequest
    parameters:
      input_frame: data_receiver
      inbuf_storage_type: 1
      profile: 0
      qp: 20
      hw_preset_type: 0
      input_width: 1920
      input_height: 1080
      input_format: nv12
      config: pframe_cqp
      iframe_interval: 5
      videoencoder_context: WCKMAXFRNO_global/encoder_context
---
name: WCKMAXFRNO_encoder_response
components:
  - name: output
    type: nvidia::gxf::DoubleBufferTransmitter
    parameters:
      capacity: 1
      policy: 0
  - type: nvidia::gxf::DownstreamReceptiveSchedulingTerm
    parameters:
      transmitter: output
      min_size: 1
  - name: pool
    type: nvidia::gxf::BlockMemoryPool
    parameters:
      storage_type: 0
      block_size: 6912000
      num_blocks: 40
  - type: nvidia::gxf::VideoEncoderResponse
    parameters:
      videoencoder_context: WCKMAXFRNO_global/encoder_context
      output_transmitter: output
      outbuf_storage_type: 0
      pool: pool
  - name: async_st
    type: nvidia::gxf::AsynchronousSchedulingTerm
---
name: WCKMAXFRNO_sink
components:
  - name: signal
    type: nvidia::gxf::DoubleBufferReceiver
    parameters:
      capacity: 1
      policy: 0
  - type: nvidia::gxf::MessageAvailableSchedulingTerm
    parameters:
      receiver: signal
      min_size: 1
  - name: sink
    type: nvidia::isaac_ros::MessageRelay
    parameters:
      source: signal
      max_waiting_count: 1
      drop_waiting: false
---
name: WCKMAXFRNO_connections
components:
  - type: nvidia::gxf::Connection
    parameters:
      source: WCKMAXFRNO_color_converter/data_transmitter
      target: WCKMAXFRNO_encoder/data_receiver
  - type: nvidia::gxf::Connection
    parameters:
      source: WCKMAXFRNO_encoder_response/output
      target: WCKMAXFRNO_sink/signal
---
name: WCKMAXFRNO_LGHNRFWMTY
components:
  - name: clock
    type: nvidia::gxf::RealtimeClock
  - type: nvidia::gxf::MultiThreadScheduler
    parameters:
      clock: clock
      stop_on_deadlock: false
      check_recession_period_ms: 1
      worker_thread_number: 2
  - type: nvidia::gxf::JobStatistics
    parameters:
      clock: clock

I'm running ROS Humble built from sources on Ubuntu 20.04 on my laptop. The different NVidia dependencies have been installed via the Deepstream SDK.

Could you help me with that, please?

jaiveersinghNV commented 1 year ago

This error looks like it might be related to an incorrect version of libyaml-cpp installed on your machine.

Could you run the following command and let me know what the installed version is? We expect 0.7.0 to be installed.

sudo apt-cache policy libyaml-cpp-dev

To avoid these kinds of dependency issues, we provide the Isaac ROS Dev Docker image with all required dependencies preinstalled.

Additionally, please note the following input limitations for the isaac_ros_h264_encoder:

  1. The input image resolution must be the same as the dimension you provided, and the resolution must be no larger than 1920x1200.
  2. The input image should be in rgb8 or bgr8 format, and it will be converted to nv12 format before being sent to the encoder.

The input resolution you've provided in your graph is too tall to be directly encoded; you could use the Isaac ROS Image Resize node as a preprocessing step. Depending on the input encoding of your camera, you may need to convert the color format as well.

jtaveau commented 1 year ago

I recompiled it with the correct version of libyaml-cpp built from source, and I'm using a lower resolution.

I get a different error now.

[component_container_mt-1] [INFO] [1698855379.831493587] [encoder.encoder_container]: Load Library: /home/julien/dev/catkin_ws/ros2/install/isaac_ros_h264_encoder/lib/libencoder_node.so
[component_container_mt-1] [INFO] [1698855379.875697845] [encoder.encoder_container]: Found class: rclcpp_components::NodeFactoryTemplate<nvidia::isaac_ros::h264_encoder::EncoderNode>
[component_container_mt-1] [INFO] [1698855379.875752794] [encoder.encoder_container]: Instantiate class: rclcpp_components::NodeFactoryTemplate<nvidia::isaac_ros::h264_encoder::EncoderNode>
[component_container_mt-1] [INFO] [1698855379.878919184] [NitrosContext]: [NitrosContext] Creating a new shared context
[component_container_mt-1] [INFO] [1698855379.879270967] [encoder]: [NitrosNode] Initializing NitrosNode
[component_container_mt-1] [INFO] [1698855379.880803680] [NitrosContext]: [NitrosContext] Loading extension: gxf/lib/std/libgxf_std.so
[component_container_mt-1] [INFO] [1698855379.892004362] [NitrosContext]: [NitrosContext] Loading extension: gxf/lib/libgxf_gxf_helpers.so
[component_container_mt-1] [INFO] [1698855379.900854698] [NitrosContext]: [NitrosContext] Loading extension: gxf/lib/libgxf_sight.so
[component_container_mt-1] [INFO] [1698855379.911780622] [NitrosContext]: [NitrosContext] Loading extension: gxf/lib/libgxf_atlas.so
[component_container_mt-1] [INFO] [1698855379.923791966] [NitrosContext]: [NitrosContext] Loading application: '/home/julien/dev/catkin_ws/ros2/install/isaac_ros_nitros/share/isaac_ros_nitros/config/type_adapter_nitros_context_graph.yaml'
[component_container_mt-1] [INFO] [1698855379.925451318] [NitrosContext]: [NitrosContext] Initializing application...
[component_container_mt-1] [INFO] [1698855379.928786177] [NitrosContext]: [NitrosContext] Running application...
[component_container_mt-1] 2023-11-01 17:16:19.928 WARN  gxf/std/program.cpp@514: No system specified. Nothing to do
[component_container_mt-1] [INFO] [1698855379.930708431] [encoder]: [NitrosNode] Starting NitrosNode
[component_container_mt-1] [INFO] [1698855379.930726948] [encoder]: [NitrosNode] Loading built-in preset extension specs
[component_container_mt-1] [INFO] [1698855379.934005302] [encoder]: [NitrosNode] Loading built-in extension specs
[component_container_mt-1] [INFO] [1698855379.934019577] [encoder]: [NitrosNode] Loading preset extension specs
[component_container_mt-1] [INFO] [1698855379.934627371] [encoder]: [NitrosNode] Loading extension specs
[component_container_mt-1] [INFO] [1698855379.934634262] [encoder]: [NitrosNode] Loading generator rules
[component_container_mt-1] [INFO] [1698855379.934890895] [encoder]: [NitrosNode] Loading extensions
[component_container_mt-1] [INFO] [1698855379.935537812] [encoder]: [NitrosContext] Loading extension: gxf/lib/libgxf_message_compositor.so
[component_container_mt-1] [INFO] [1698855379.937680907] [encoder]: [NitrosContext] Loading extension: gxf/lib/multimedia/libgxf_multimedia.so
[component_container_mt-1] [INFO] [1698855379.939813824] [encoder]: [NitrosContext] Loading extension: gxf/lib/cuda/libgxf_cuda.so
[component_container_mt-1] [INFO] [1698855379.941369855] [encoder]: [NitrosContext] Loading extension: gxf/lib/serialization/libgxf_serialization.so
[component_container_mt-1] [INFO] [1698855379.949475730] [encoder]: [NitrosContext] Loading extension: gxf/lib/image_proc/libgxf_tensorops.so
[component_container_mt-1] [ERROR] [1698855379.955850505] [encoder]: [NitrosContext] dlopen failed when opening "/home/julien/dev/catkin_ws/ros2/install/isaac_ros_image_proc/share/isaac_ros_image_proc/gxf/lib/image_proc/libgxf_tensorops.so": /home/julien/dev/catkin_ws/ros2/install/isaac_ros_image_proc/share/isaac_ros_image_proc/gxf/lib/image_proc/libgxf_tensorops.so: undefined symbol: _ZN4YAML6detail4node8m_amountE
[component_container_mt-1] [ERROR] [1698855379.955915732] [encoder]: [NitrosNode] loadExtensions Error: GXF_FAILURE
[component_container_mt-1] [INFO] [1698855379.956336594] [encoder]: [NitrosNode] Terminating the running application
[component_container_mt-1] [INFO] [1698855379.956347045] [encoder]: [NitrosContext] Interrupting GXF...
[component_container_mt-1] 2023-11-01 17:16:19.956 ERROR gxf/std/program.cpp@533: Attempted interrupting when not running (state=0).
[component_container_mt-1] 2023-11-01 17:16:19.956 ERROR gxf/core/runtime.cpp@1400: Graph interrupt failed with error: GXF_INVALID_EXECUTION_SEQUENCE
[component_container_mt-1] [ERROR] [1698855379.956371756] [encoder]: [NitrosContext] GxfGraphInterrupt Error: GXF_INVALID_EXECUTION_SEQUENCE
[component_container_mt-1] [INFO] [1698855379.956377205] [encoder]: [NitrosContext] Waiting on GXF...
[component_container_mt-1] [INFO] [1698855379.956384981] [encoder]: [NitrosContext] Deinitializing...
[component_container_mt-1] [INFO] [1698855379.956392258] [encoder]: [NitrosContext] Destroying context
[component_container_mt-1] [INFO] [1698855379.956735675] [encoder]: [NitrosNode] Application termination done
[component_container_mt-1] [ERROR] [1698855379.959742735] [encoder.encoder_container]: Component constructor threw an exception: [NitrosNode] loadExtensions Error: GXF_FAILURE
[ERROR] [launch_ros.actions.load_composable_nodes]: Failed to load node 'encoder' of type 'nvidia::isaac_ros::h264_encoder::EncoderNode' in container '/encoder/encoder_container': Component constructor threw an exception: [NitrosNode] loadExtensions Error: GXF_FAILURE

Is there anyway to display the GXF logs in ROS2?

I guess it's because Deepstream 6.3 for Ubuntu 20.04 is based on libyaml-cpp 0.6.2.

jaiveersinghNV commented 11 months ago

Hi @jtaveau ,

This line in your log indicates that there seems to be an incompatible version of the libgxf_tensorops.so binary used by Isaac ROS Image Proc:

[component_container_mt-1] [ERROR] [1698855379.955850505] [encoder]: [NitrosContext] dlopen failed when opening "/home/julien/dev/catkin_ws/ros2/install/isaac_ros_image_proc/share/isaac_ros_image_proc/gxf/lib/image_proc/libgxf_tensorops.so": /home/julien/dev/catkin_ws/ros2/install/isaac_ros_image_proc/share/isaac_ros_image_proc/gxf/lib/image_proc/libgxf_tensorops.so: undefined symbol: _ZN4YAML6detail4node8m_amountE

Could you try cleaning out your ROS workspace's build/ and install/ folders, updating Isaac ROS Image Proc to the latest version, and building again?

As an alternative, could you please update to the latest Isaac ROS 2.1 release? As part of this release, we've made prebuilt Debian packages available on our Isaac ROS buildfarm. Instead of building our packages from source, you can now install them using apt:

sudo apt-get install -y ros-humble-isaac-ros-h264-decoder