diff --git a/CMakeLists.txt b/CMakeLists.txt index 890b5a1..5981469 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,6 +99,16 @@ if(RK3588_ENABLE_FFMPEG) target_link_libraries(media-server PRIVATE PkgConfig::FFMPEG PkgConfig::SWSCALE) endif() +if(RK3588_ENABLE_MPP) + target_include_directories(media-server SYSTEM PRIVATE + ${RK_MPP_ROOT}/inc + ${RK_RKNN_ROOT}/examples/3rdparty/mpp/include + ) + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(media-server PRIVATE -Wno-pedantic) + endif() +endif() + if(RK3588_ENABLE_RGA) # Use system librga by default (rknpu2 prebuilt may contain broken symlinks) if(NOT RK_RGA_INCLUDE_DIR) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index e1fe89b..7eef9fe 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -128,11 +128,14 @@ if(RK3588_ENABLE_FFMPEG) endif() if(RK3588_ENABLE_MPP AND RK_MPP_LIB) target_compile_definitions(input_rtsp PRIVATE RK3588_ENABLE_MPP) - target_include_directories(input_rtsp PRIVATE + target_include_directories(input_rtsp SYSTEM PRIVATE ${RK_MPP_ROOT}/inc ${RK_RKNN_ROOT}/examples/3rdparty/mpp/include ) target_link_libraries(input_rtsp PRIVATE ${RK_MPP_LIB}) + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(input_rtsp PRIVATE -Wno-pedantic) + endif() endif() set_target_properties(input_rtsp PROPERTIES OUTPUT_NAME "input_rtsp" @@ -155,11 +158,14 @@ if(RK3588_ENABLE_FFMPEG) endif() if(RK3588_ENABLE_MPP AND RK_MPP_LIB) target_compile_definitions(input_file PRIVATE RK3588_ENABLE_MPP) - target_include_directories(input_file PRIVATE + target_include_directories(input_file SYSTEM PRIVATE ${RK_MPP_ROOT}/inc ${RK_RKNN_ROOT}/examples/3rdparty/mpp/include ) target_link_libraries(input_file PRIVATE ${RK_MPP_LIB}) + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(input_file PRIVATE -Wno-pedantic) + endif() endif() set_target_properties(input_file PROPERTIES OUTPUT_NAME "input_file" @@ -182,11 +188,14 @@ if(RK3588_ENABLE_FFMPEG) endif() if(RK3588_ENABLE_MPP AND RK_MPP_LIB) target_compile_definitions(publish PRIVATE RK3588_ENABLE_MPP) - target_include_directories(publish PRIVATE + target_include_directories(publish SYSTEM PRIVATE ${RK_MPP_ROOT}/inc ${RK_RKNN_ROOT}/examples/3rdparty/mpp/include ) target_link_libraries(publish PRIVATE ${RK_MPP_LIB}) + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(publish PRIVATE -Wno-pedantic) + endif() endif() if(RK3588_ENABLE_ZLMEDIAKIT AND RK_ZLMK_API_LIB) target_compile_definitions(publish PRIVATE RK3588_ENABLE_ZLMEDIAKIT) @@ -519,11 +528,14 @@ if(RK3588_ENABLE_FFMPEG) endif() if(RK3588_ENABLE_MPP AND RK_MPP_LIB) target_compile_definitions(storage PRIVATE RK3588_ENABLE_MPP) - target_include_directories(storage PRIVATE + target_include_directories(storage SYSTEM PRIVATE ${RK_MPP_ROOT}/inc ${RK_RKNN_ROOT}/examples/3rdparty/mpp/include ) target_link_libraries(storage PRIVATE ${RK_MPP_LIB}) + if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(storage PRIVATE -Wno-pedantic) + endif() endif() set_target_properties(storage PROPERTIES OUTPUT_NAME "storage" diff --git a/plugins/ai_yolo/ai_yolo_node.cpp b/plugins/ai_yolo/ai_yolo_node.cpp index 8d2b942..415e484 100644 --- a/plugins/ai_yolo/ai_yolo_node.cpp +++ b/plugins/ai_yolo/ai_yolo_node.cpp @@ -38,19 +38,6 @@ enum class YoloVersion { V5, V8 }; enum class V8BoxFormat { Auto, CxCyWh, XyXy, XyWh }; enum class V8ClsActivation { Auto, None, Sigmoid }; -const char* kCocoLabels[kObjClassNum] = { - "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", - "traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", - "dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", - "umbrella", "handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", - "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", "tennis racket", - "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", - "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", - "couch", "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", - "remote", "keyboard", "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", - "book", "clock", "vase", "scissors", "teddy bear", "hair drier", "toothbrush" -}; - inline int Clamp(float val, int min_val, int max_val) { return val > min_val ? (val < max_val ? static_cast(val) : max_val) : min_val; } @@ -242,7 +229,7 @@ void NMS(int valid_count, std::vector& boxes, std::vector& class_ids #if defined(RK3588_ENABLE_RKNN) // YOLOv5 feature map processing (anchor-based) int ProcessFeatureMapV5(int8_t* input, const int* anchor, int grid_h, int grid_w, - int model_h, int model_w, int stride, + int /*model_h*/, int /*model_w*/, int stride, std::vector& boxes, std::vector& obj_probs, std::vector& class_ids, float conf_thresh, int32_t zp, float scale) { int valid_count = 0; diff --git a/plugins/input_file/input_file_node.cpp b/plugins/input_file/input_file_node.cpp index 948e310..5c91608 100644 --- a/plugins/input_file/input_file_node.cpp +++ b/plugins/input_file/input_file_node.cpp @@ -398,11 +398,8 @@ private: break; } - MppCodingType coding = MPP_VIDEO_CodingAVC; auto codec_id = fmt_ctx->streams[video_stream]->codecpar->codec_id; - if (codec_id == AV_CODEC_ID_H264) coding = MPP_VIDEO_CodingAVC; - else if (codec_id == AV_CODEC_ID_HEVC) coding = MPP_VIDEO_CodingHEVC; - else { + if (codec_id != AV_CODEC_ID_H264 && codec_id != AV_CODEC_ID_HEVC) { LogError("[input_file] unsupported codec for mpp"); Cleanup(fmt_ctx, nullptr, pkt, nullptr); running_.store(false); diff --git a/plugins/input_rtsp/input_rtsp_node.cpp b/plugins/input_rtsp/input_rtsp_node.cpp index bbd27ac..ca5fe6c 100644 --- a/plugins/input_rtsp/input_rtsp_node.cpp +++ b/plugins/input_rtsp/input_rtsp_node.cpp @@ -508,11 +508,8 @@ private: continue; } - MppCodingType coding = MPP_VIDEO_CodingAVC; auto codec_id = fmt_ctx->streams[video_stream]->codecpar->codec_id; - if (codec_id == AV_CODEC_ID_H264) coding = MPP_VIDEO_CodingAVC; - else if (codec_id == AV_CODEC_ID_HEVC) coding = MPP_VIDEO_CodingHEVC; - else { + if (codec_id != AV_CODEC_ID_H264 && codec_id != AV_CODEC_ID_HEVC) { LogError("[input_rtsp] unsupported codec for mpp"); if (bsf_ctx) av_bsf_free(&bsf_ctx); if (filt_pkt) av_packet_free(&filt_pkt); diff --git a/plugins/logic_gate/spatial_matcher.cpp b/plugins/logic_gate/spatial_matcher.cpp index b26e994..39d8d08 100644 --- a/plugins/logic_gate/spatial_matcher.cpp +++ b/plugins/logic_gate/spatial_matcher.cpp @@ -99,6 +99,8 @@ float SpatialMatcher::CalculateDistance(const Rect& anchor, const Rect& target, } bool SpatialMatcher::IsBelow(const Rect& anchor, const Rect& target, int img_w, int img_h) { + (void)img_w; + (void)img_h; // 简单判断:目标的顶部是否在锚点底部的下方 return target.y >= (anchor.y + anchor.h * 0.8f); } diff --git a/src/hw_image_processor.cpp b/src/hw_image_processor.cpp index 2e01927..a9c92b3 100644 --- a/src/hw_image_processor.cpp +++ b/src/hw_image_processor.cpp @@ -43,27 +43,6 @@ size_t CalcImageSize(int w, int h, PixelFormat fmt) { } } -size_t CalcImageSizeStrided(int wstride, int hstride, PixelFormat fmt) { - if (wstride <= 0 || hstride <= 0) return 0; - const size_t ws = static_cast(wstride); - const size_t hs = static_cast(hstride); - switch (fmt) { - case PixelFormat::NV12: { - return ws * hs + ws * (hs / 2); - } - case PixelFormat::YUV420: { - const size_t y = ws * hs; - const size_t uv = (ws / 2) * (hs / 2); - return y + uv + uv; - } - case PixelFormat::RGB: - case PixelFormat::BGR: - return ws * hs * 3; - default: - return 0; - } -} - void SetupPlanes(Frame& f, PixelFormat fmt) { if (!f.data) return; @@ -137,6 +116,27 @@ void SetupPlanes(Frame& f, PixelFormat fmt) { } #if defined(RK3588_ENABLE_RGA) +size_t CalcImageSizeStrided(int wstride, int hstride, PixelFormat fmt) { + if (wstride <= 0 || hstride <= 0) return 0; + const size_t ws = static_cast(wstride); + const size_t hs = static_cast(hstride); + switch (fmt) { + case PixelFormat::NV12: { + return ws * hs + ws * (hs / 2); + } + case PixelFormat::YUV420: { + const size_t y = ws * hs; + const size_t uv = (ws / 2) * (hs / 2); + return y + uv + uv; + } + case PixelFormat::RGB: + case PixelFormat::BGR: + return ws * hs * 3; + default: + return 0; + } +} + int ToRgaFormat(PixelFormat fmt) { switch (fmt) { case PixelFormat::NV12: return RK_FORMAT_YCbCr_420_SP;