diff --git a/CMakeLists.txt b/CMakeLists.txt index ac403f3..7306c81 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,6 +11,8 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +option(CUDA_USE_STATIC_CUDA_RUNTIME OFF) + # For larger projects option(BUILD_TESTS "Build tests" OFF) if(BUILD_TESTS) @@ -25,13 +27,25 @@ endif() find_package(PkgConfig REQUIRED) +find_package(CUDA REQUIRED) pkg_check_modules(GLIB REQUIRED glib-2.0 gobject-2.0 nlohmann_json gstreamer-base-1.0 gstreamer-1.0 gstreamer-video-1.0) - +if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64") + message("embed_platform on") + include_directories(/usr/local/cuda/targets/aarch64-linux/include) + link_directories(/usr/local/cuda/targets/aarch64-linux/lib) +else() + message("embed_platform off") + include_directories(/usr/local/cuda/include) + link_directories(/usr/local/cuda/lib64) +endif() include_directories(/usr/lib/x86_64-linux-gnu/glib-2.0/include) include_directories(/usr/include/gstreamer-1.0) include_directories(/usr/include/nlohmann) +include_directories(/usr/local/cuda/include) +link_directories(/usr/local/cuda/lib64/) +link_directories(/usr/local/cuda/targets/x86_64-linux/lib/) include_directories(${PROJECT_SOURCE_DIR}/camera_manager.hpp) include_directories(${PROJECT_SOURCE_DIR}/pipeline_manager.hpp) include_directories(${PROJECT_SOURCE_DIR}/streammux_manager.hpp) @@ -60,4 +74,5 @@ target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) target_include_directories(${PROJECT_NAME} PRIVATE ${GLIB_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${GLIB_LIBRARIES}) -target_link_libraries(${PROJECT_NAME} gstbase-1.0 gstreamer-1.0 gstrtp-1.0 gstvideo-1.0) \ No newline at end of file +target_link_libraries(${PROJECT_NAME} gstbase-1.0 gstreamer-1.0 gstrtp-1.0 gstvideo-1.0) +target_link_libraries(${PROJECT_NAME} cudart cuda) \ No newline at end of file diff --git a/src/pipeline_manager.cpp b/src/pipeline_manager.cpp index 6bfe606..46ef99c 100644 --- a/src/pipeline_manager.cpp +++ b/src/pipeline_manager.cpp @@ -22,6 +22,17 @@ int PipelineManager::create_pipeline() { return 1; } +void PipelineManager::set_cuda_device() { + cudaGetDevice(¤t_device); + cudaGetDeviceProperties(&prop, current_device); + + std::cout << "Device Number: " << prop.pciDeviceID << std::endl; + std::cout << "Device name: " << prop.name << std::endl; + std::cout << "Device Version: " << prop.major << "." << prop.minor + << std::endl; +} + void PipelineManager::create_pipeline_elements(int num_sources) { streammux_manager->create_streammux(num_sources); + set_cuda_device(); } \ No newline at end of file diff --git a/src/pipeline_manager.hpp b/src/pipeline_manager.hpp index 603efe6..01a115a 100644 --- a/src/pipeline_manager.hpp +++ b/src/pipeline_manager.hpp @@ -1,6 +1,7 @@ #include #include +#include "cuda_runtime_api.h" #include "streammux_manager.hpp" class PipelineManager { @@ -12,9 +13,12 @@ class PipelineManager { StreammuxManager *streammux_manager = new StreammuxManager(); public: + int current_device = -1; + struct cudaDeviceProp prop; PipelineManager(); PipelineManager(int, char **); int create_pipeline(); void create_pipeline_elements(int); + void set_cuda_device(); ~PipelineManager(); }; \ No newline at end of file