Skip to content

Commit 5154acc

Browse files
authored
Merge pull request #1 from mkassimi98/ft/1stversion_w_srt
Ft/1stversion w srt
2 parents 0e66c7f + ac29602 commit 5154acc

48 files changed

Lines changed: 4112 additions & 45 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.clang-format

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
BasedOnStyle: LLVM
3+
IndentWidth: 2
4+
TabWidth: 2
5+
UseTab: Never
6+
ColumnLimit: 100
7+
PointerAlignment: Left
8+
SortIncludes: CaseSensitive
9+
AlignTrailingComments: true
10+
AllowShortFunctionsOnASingleLine: Empty
11+
BreakBeforeBraces: Attach
12+
Standard: c++17
13+
...

.clang-tidy

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Checks: >
2+
-*,
3+
bugprone-*,
4+
performance-*,
5+
readability-*,
6+
modernize-*,
7+
cppcoreguidelines-*
8+
WarningsAsErrors: ''
9+
HeaderFilterRegex: '.*'
10+
FormatStyle: file

.editorconfig

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
end_of_line = lf
6+
insert_final_newline = true
7+
indent_style = space
8+
indent_size = 2
9+
trim_trailing_whitespace = true
10+
11+
[*.{cpp,hpp,py,xml,yaml,yml,cmake,txt,md}]
12+
indent_size = 2
13+
14+
[Makefile]
15+
indent_style = tab

.github/workflows/ci.yml

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: ros2-gst-video-bridge-ci
2+
3+
on:
4+
pull_request:
5+
push:
6+
branches: ["main", "ft/1stversion_w_srt"]
7+
schedule:
8+
- cron: "0 3 * * *"
9+
10+
jobs:
11+
build-and-test:
12+
runs-on: ubuntu-22.04
13+
steps:
14+
- name: Checkout
15+
uses: actions/checkout@v4
16+
17+
- name: Setup ROS 2 Humble
18+
uses: ros-tooling/setup-ros@v0.7
19+
with:
20+
required-ros-distributions: humble
21+
22+
- name: Build
23+
run: |
24+
source /opt/ros/humble/setup.bash
25+
colcon build --event-handlers console_direct+
26+
27+
- name: Test
28+
run: |
29+
source /opt/ros/humble/setup.bash
30+
colcon test --event-handlers console_direct+
31+
colcon test-result --all --verbose
32+
33+
nightly-matrix:
34+
if: github.event_name == 'schedule'
35+
runs-on: ubuntu-22.04
36+
steps:
37+
- name: Checkout
38+
uses: actions/checkout@v4
39+
40+
- name: Setup ROS 2 Humble
41+
uses: ros-tooling/setup-ros@v0.7
42+
with:
43+
required-ros-distributions: humble
44+
45+
- name: Build
46+
run: |
47+
source /opt/ros/humble/setup.bash
48+
colcon build --event-handlers console_direct+
49+
50+
- name: Run matrix
51+
run: |
52+
chmod +x src/ros2_gst_video_bridge/scripts/run_transport_codec_matrix.zsh
53+
src/ros2_gst_video_bridge/scripts/run_transport_codec_matrix.zsh "$PWD" /tmp/matrix.csv
54+
55+
- name: Upload report
56+
uses: actions/upload-artifact@v4
57+
with:
58+
name: transport-codec-matrix-report
59+
path: /tmp/matrix.csv

.gitignore

Lines changed: 18 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,25 @@
1-
devel/
2-
logs/
1+
# ROS 2 / colcon
32
build/
4-
bin/
5-
lib/
6-
msg_gen/
7-
srv_gen/
8-
msg/*Action.msg
9-
msg/*ActionFeedback.msg
10-
msg/*ActionGoal.msg
11-
msg/*ActionResult.msg
12-
msg/*Feedback.msg
13-
msg/*Goal.msg
14-
msg/*Result.msg
15-
msg/_*.py
16-
build_isolated/
17-
devel_isolated/
3+
install/
4+
log/
185

19-
# Generated by dynamic reconfigure
20-
*.cfgc
21-
/cfg/cpp/
22-
/cfg/*.py
23-
24-
# Ignore generated docs
25-
*.dox
26-
*.wikidoc
27-
28-
# eclipse stuff
29-
.project
30-
.cproject
31-
32-
# qcreator stuff
33-
CMakeLists.txt.user
34-
35-
srv/_*.py
36-
*.pcd
6+
# Python
7+
__pycache__/
378
*.pyc
38-
qtcreator-*
39-
*.user
409

41-
/planning/cfg
42-
/planning/docs
43-
/planning/src
10+
# C/C++ build systems
11+
*.o
12+
*.so
13+
*.a
14+
*.dSYM/
15+
compile_commands.json
4416

17+
# Editors / IDEs
18+
.vscode/
19+
.idea/
20+
*.user
21+
*.swp
4522
*~
4623

47-
# Emacs
48-
.#*
49-
50-
# Catkin custom files
51-
CATKIN_IGNORE
24+
# Local planning
25+
TODO.md

CMakeLists.txt

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
cmake_minimum_required(VERSION 3.8)
2+
project(ros2_gst_video_bridge)
3+
4+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
5+
add_compile_options(-Wall -Wextra -Wpedantic)
6+
endif()
7+
8+
set(CMAKE_CXX_STANDARD 20)
9+
set(CMAKE_CXX_STANDARD_REQUIRED ON)
10+
set(CMAKE_CXX_EXTENSIONS OFF)
11+
12+
option(ROS2_GST_VIDEO_BRIDGE_ENABLE_CLANG_TIDY "Enable clang-tidy during C++ compilation" ON)
13+
option(ROS2_GST_VIDEO_BRIDGE_ENABLE_CLANG_FORMAT_CHECK "Enable clang-format check target" ON)
14+
option(ROS2_GST_VIDEO_BRIDGE_ENABLE_AMENT_LINT "Enable ament_lint_auto checks" OFF)
15+
16+
if(ROS2_GST_VIDEO_BRIDGE_ENABLE_CLANG_TIDY)
17+
find_program(CLANG_TIDY_EXE NAMES clang-tidy clang-tidy-18 clang-tidy-17 clang-tidy-16 clang-tidy-15)
18+
if(CLANG_TIDY_EXE)
19+
set(CMAKE_CXX_CLANG_TIDY ${CLANG_TIDY_EXE})
20+
message(STATUS "clang-tidy enabled: ${CLANG_TIDY_EXE}")
21+
else()
22+
message(WARNING "clang-tidy requested but not found. Continuing without clang-tidy.")
23+
endif()
24+
endif()
25+
26+
find_package(ament_cmake REQUIRED)
27+
find_package(rclcpp REQUIRED)
28+
find_package(sensor_msgs REQUIRED)
29+
find_package(std_msgs REQUIRED)
30+
find_package(ros2_gst_video_bridge_msgs REQUIRED)
31+
find_package(PkgConfig REQUIRED)
32+
pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0 gstreamer-app-1.0)
33+
34+
if(ROS2_GST_VIDEO_BRIDGE_ENABLE_CLANG_FORMAT_CHECK)
35+
find_program(CLANG_FORMAT_EXE NAMES clang-format clang-format-18 clang-format-17 clang-format-16 clang-format-15)
36+
if(CLANG_FORMAT_EXE)
37+
file(GLOB_RECURSE ROS2_GST_VIDEO_BRIDGE_FORMAT_FILES CONFIGURE_DEPENDS
38+
"${CMAKE_CURRENT_SOURCE_DIR}/include/*.h"
39+
"${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp"
40+
"${CMAKE_CURRENT_SOURCE_DIR}/src/*.cc"
41+
)
42+
add_custom_target(clang_format_check
43+
COMMAND ${CLANG_FORMAT_EXE} --dry-run --Werror ${ROS2_GST_VIDEO_BRIDGE_FORMAT_FILES}
44+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
45+
COMMENT "Running clang-format check on C++ source files"
46+
VERBATIM
47+
)
48+
else()
49+
message(WARNING "clang-format check requested but clang-format was not found.")
50+
endif()
51+
endif()
52+
53+
add_executable(gst_video_bridge_node
54+
src/main.cc
55+
src/gst_video_bridge_node.cc
56+
src/node/core.cc
57+
src/node/lifecycle.cc
58+
src/node/modes.cc
59+
src/node/streaming.cc
60+
src/node/recovery.cc
61+
src/node/fallback.cc
62+
src/node/observability.cc
63+
src/core/config_loader.cc
64+
src/core/pipeline_builder.cc
65+
src/runtime/capability_probe.cc
66+
src/runtime/topic_introspector.cc
67+
src/runtime/stream_engine.cc
68+
src/runtime/metrics_publisher.cc
69+
)
70+
71+
target_include_directories(gst_video_bridge_node
72+
PRIVATE
73+
include
74+
${GSTREAMER_INCLUDE_DIRS}
75+
)
76+
77+
target_link_libraries(gst_video_bridge_node
78+
${GSTREAMER_LIBRARIES}
79+
)
80+
81+
target_compile_options(gst_video_bridge_node PRIVATE ${GSTREAMER_CFLAGS_OTHER})
82+
83+
ament_target_dependencies(gst_video_bridge_node
84+
rclcpp
85+
sensor_msgs
86+
std_msgs
87+
ros2_gst_video_bridge_msgs
88+
)
89+
90+
install(TARGETS gst_video_bridge_node
91+
DESTINATION lib/${PROJECT_NAME}
92+
)
93+
94+
install(DIRECTORY launch config
95+
DESTINATION share/${PROJECT_NAME}
96+
)
97+
98+
if(BUILD_TESTING)
99+
find_package(ament_cmake_gtest REQUIRED)
100+
101+
ament_add_gtest(test_config_loader test/test_config_loader.cpp src/core/config_loader.cc)
102+
target_include_directories(test_config_loader PRIVATE include)
103+
ament_target_dependencies(test_config_loader rclcpp)
104+
105+
ament_add_gtest(test_pipeline_builder test/test_pipeline_builder.cpp src/core/pipeline_builder.cc)
106+
target_include_directories(test_pipeline_builder PRIVATE include)
107+
108+
add_test(
109+
NAME smoke_runtime_validate_config
110+
COMMAND $<TARGET_FILE:gst_video_bridge_node> --ros-args -p runtime.mode:=validate_config)
111+
112+
add_test(
113+
NAME smoke_runtime_list_capabilities
114+
COMMAND $<TARGET_FILE:gst_video_bridge_node> --ros-args -p runtime.mode:=list_capabilities)
115+
116+
add_test(
117+
NAME smoke_launch_minimal_show_args
118+
COMMAND ros2 launch ros2_gst_video_bridge gst_video_bridge_minimal.launch.py --show-args)
119+
120+
add_test(
121+
NAME smoke_launch_advanced_show_args
122+
COMMAND ros2 launch ros2_gst_video_bridge gst_video_bridge_advanced.launch.py --show-args)
123+
124+
add_test(
125+
NAME smoke_launch_compat_show_args
126+
COMMAND ros2 launch ros2_gst_video_bridge gst_video_bridge.launch.py --show-args)
127+
128+
set_tests_properties(smoke_runtime_validate_config PROPERTIES TIMEOUT 20)
129+
set_tests_properties(smoke_runtime_list_capabilities PROPERTIES TIMEOUT 20)
130+
set_tests_properties(smoke_launch_minimal_show_args PROPERTIES TIMEOUT 20)
131+
set_tests_properties(smoke_launch_advanced_show_args PROPERTIES TIMEOUT 20)
132+
set_tests_properties(smoke_launch_compat_show_args PROPERTIES TIMEOUT 20)
133+
134+
if(ROS2_GST_VIDEO_BRIDGE_ENABLE_AMENT_LINT)
135+
find_package(ament_lint_auto REQUIRED)
136+
ament_lint_auto_find_test_dependencies()
137+
endif()
138+
endif()
139+
140+
ament_package()

0 commit comments

Comments
 (0)