From 28925304aaeeedb4484d7c041281b616b402cd25 Mon Sep 17 00:00:00 2001 From: fiss <2657262686@qq.com> Date: Tue, 21 Mar 2023 08:55:35 +0000 Subject: [PATCH] makefile优化 --- src/Makefile | 12 ++++++------ src/demo/Makefile | 38 ++++++++++++++++++++------------------ src/demo/Makefile.dvpp | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++-------------------- src/demo/Makefile.o.nvdec | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------- src/demo/main_dvpp.cpp | 337 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/demo/main_dvpp.cpp1 | 337 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/demo/main_nvdec.cpp | 456 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ src/demo/main_nvdec.cpp1 | 456 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/dvpp/Makefile | 6 +++--- src/interface/FFNvDecoderManager.h | 2 +- src/nvdec/Makefile | 8 ++++---- 11 files changed, 931 insertions(+), 880 deletions(-) create mode 100644 src/demo/main_dvpp.cpp delete mode 100644 src/demo/main_dvpp.cpp1 delete mode 100644 src/demo/main_nvdec.cpp create mode 100644 src/demo/main_nvdec.cpp1 diff --git a/src/Makefile b/src/Makefile index 95539c0..decdbdf 100644 --- a/src/Makefile +++ b/src/Makefile @@ -7,7 +7,7 @@ BUILD_DIR:=$(TOP_DIR)/build BIN_DIR:=$(BUILD_DIR)/bin export BUILD_DIR -PROJECT_ROOT= /mnt/data/cmhu/FFNvDecoder +PROJECT_ROOT= /home/huchunming/FFNvDecoder THIRDPARTY_ROOT = $(PROJECT_ROOT)/3rdparty export PROJECT_ROOT THIRDPARTY_ROOT @@ -24,16 +24,16 @@ INCS:=-I $(TOP_DIR) \ -I $(SPDLOG_ROOT)/include \ -I $(FFMPEG_DIR)/include \ -MACROS:= - # 链接器 -LIBS:= -L $(SPDLOG_ROOT) -l:libspdlog.a \ +LIBS:= -L $(SPDLOG_ROOT)/lib -l:libspdlog.a \ -L $(FFMPEG_DIR)/lib -lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice \ export CXX INCS MACROS LIBS +MACROS:= -DUSE_DVPP + # 各个模块 -MODULES:= nvdec gb28181 interface demo +MODULES:= dvpp interface demo # 各个模块对应的库 # MODULE_LIBS:=$(BUILD_DIR)/nvdec/lib/nvdec.a\ @@ -50,7 +50,7 @@ all:$(TARGET) # 最终目标依赖关系 $(TARGET):FORCE | $(BIN_DIR) @for n in $(MODULES); do make -s -f $(TOP_DIR)/$$n/Makefile MODULE=$$n || exit "$$?"; done - @echo -e "\e[32m""Linking executable $(TARGET)""\e[0m" +# @echo -e "\e[32m""Linking executable $(TARGET)""\e[0m" #@$(LD) $(LDFLAGS) -o $@ $(MODULE_LIBS) $(LIBS) # 若没有bin目录则自动生成 diff --git a/src/demo/Makefile b/src/demo/Makefile index 91b0cac..a456115 100644 --- a/src/demo/Makefile +++ b/src/demo/Makefile @@ -12,30 +12,32 @@ DEPS:=$(addprefix $(DEP_DIR)/, $(patsubst %.cpp, %.d,a $(SRCS))) # 自动生成头文件依赖选项 DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d +DEFS = -DENABLE_DVPP_INTERFACE + # 最终目标文件 -TARGET:=/mnt/data/cmhu/FFNvDecoder/bin/lib/demo +TARGET:=$(BUILD_DIR)/bin/demo + +include_dir=-I/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/include -JRTP_ROOT = $(THIRDPARTY_ROOT)/jrtp_export +lib_dir=-L/usr/lib \ + -L/usr/local/lib \ + -L/usr/local/Ascend/driver/lib64 \ + -L/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/atc/lib64\ + -L/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/lib64 \ + -L/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/lib64/stub \ + -L/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/lib64 \ + -L/usr/local/Ascend/driver/lib64/driver + +lib=-lacl_dvpp -lascendcl -lmmpa -lglog -lgflags -lpthread -lz -lacl_dvpp_mpi -lruntime -lascendalog -lc_sec -lmsprofiler -lgert -lge_executor -lge_common \ + -lgraph -lascend_protobuf -lprofapi -lerror_manager -lexe_graph -lregister -lplatform INCLUDE= -I $(TOP_DIR)/interface \ - -I $(TOP_DIR)/nvdec \ - -I $(TOP_DIR)/gb28181 \ - -I $(CUDA_ROOT)/include \ - -I $(TOP_DIR)/common/inc \ - -I $(TOP_DIR)/common/UtilNPP \ - -I $(TOP_DIR)/ \ - -I $(JRTP_ROOT)/jrtplib/include/jrtplib3 \ - -I $(JRTP_ROOT)/jthread/include/jthread LIBSPATH= -L $(BUILD_DIR)/interface/lib -l:interface.a \ - -L $(BUILD_DIR)/nvdec/lib -l:nvdec.a \ - -L $(BUILD_DIR)/gb28181/lib -l:gb28181.a \ - -L $(CUDA_ROOT)/lib64 -lcuda -lcudart -lnvcuvid -lcurand -lcublas -lnvjpeg \ - -L $(JRTP_ROOT)/jthread/lib -l:libjthread.a \ - -L $(JRTP_ROOT)/jrtplib/lib -l:libjrtp.a + -L $(BUILD_DIR)/dvpp/lib -l:dvpp.a -CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(LIBSPATH) $(INCS) $(LIBS) $(MACROS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -Wwrite-strings +CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(include_dir) $(LIBSPATH) $(INCS) $(LIBS) $(lib_dir) $(lib) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl # -DUNICODE -D_UNICODE # 默认最终目标 @@ -45,8 +47,8 @@ all:$(TARGET) # 生成最终目标 $(TARGET): $(OBJS) | $(LIB_DIR) @echo -e "\e[32m""Linking static library $(TARGET)""\e[0m" - @echo -e "$(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(LIBSPATH) $(MACROS)" - $(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(LIBSPATH) $(MACROS) + @echo -e "$(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(MACROS)" + $(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(MACROS) # 若没有lib目录则自动生成 $(LIB_DIR): diff --git a/src/demo/Makefile.dvpp b/src/demo/Makefile.dvpp index d369b20..a456115 100644 --- a/src/demo/Makefile.dvpp +++ b/src/demo/Makefile.dvpp @@ -1,14 +1,22 @@ -XX = g++ +# 各项目录 +LIB_DIR:=$(BUILD_DIR)/$(MODULE)/lib +DEP_DIR:=$(BUILD_DIR)/$(MODULE)/.dep +OBJ_DIR:=$(BUILD_DIR)/$(MODULE)/obj +SRC_DIR:=$(TOP_DIR)/$(MODULE) +# 源文件以及中间目标文件和依赖文件 +SRCS:=$(notdir $(wildcard $(SRC_DIR)/*.cpp)) +OBJS:=$(addprefix $(OBJ_DIR)/, $(patsubst %.cpp, %.o, $(SRCS))) +DEPS:=$(addprefix $(DEP_DIR)/, $(patsubst %.cpp, %.d,a $(SRCS))) -PROJECT_ROOT= /mnt/data/cmhu/FFNvDecoder - -SRC_ROOT = $(PROJECT_ROOT)/src - -TARGET= $(PROJECT_ROOT)/src/build/bin/demo +# 自动生成头文件依赖选项 +DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d DEFS = -DENABLE_DVPP_INTERFACE +# 最终目标文件 +TARGET:=$(BUILD_DIR)/bin/demo + include_dir=-I/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/include @@ -23,26 +31,50 @@ lib_dir=-L/usr/lib \ lib=-lacl_dvpp -lascendcl -lmmpa -lglog -lgflags -lpthread -lz -lacl_dvpp_mpi -lruntime -lascendalog -lc_sec -lmsprofiler -lgert -lge_executor -lge_common \ -lgraph -lascend_protobuf -lprofapi -lerror_manager -lexe_graph -lregister -lplatform -LIBS= -lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice -CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(include_dir) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -SRCS:=$(wildcard $(SRC_ROOT)/demo/*.cpp) -OBJS = $(patsubst %.cpp, %.o, $(notdir $(SRCS))) +INCLUDE= -I $(TOP_DIR)/interface \ + +LIBSPATH= -L $(BUILD_DIR)/interface/lib -l:interface.a \ + -L $(BUILD_DIR)/dvpp/lib -l:dvpp.a -OBJ_ROOT = $(PROJECT_ROOT)/src/build -DVPP_SRCS:=$(wildcard $(OBJ_ROOT)/dvpp/obj/*.o) -INTEFACE_SRCS:=$(wildcard $(OBJ_ROOT)/interface/obj/*.o) +CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(include_dir) $(LIBSPATH) $(INCS) $(LIBS) $(lib_dir) $(lib) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl + # -DUNICODE -D_UNICODE +# 默认最终目标 +.PHONY:all +all:$(TARGET) -$(TARGET):$(OBJS) $(INTEFACE_SRCS) $(NVDECODER_SRCS) $(GB28181_SRCS) - rm -f $(TARGET) +# 生成最终目标 +$(TARGET): $(OBJS) | $(LIB_DIR) + @echo -e "\e[32m""Linking static library $(TARGET)""\e[0m" + @echo -e "$(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(MACROS)" + $(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(MACROS) + +# 若没有lib目录则自动生成 +$(LIB_DIR): + @mkdir -p $@ + +# 生成中间目标文件 +$(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp $(DEP_DIR)/%.d | $(OBJ_DIR) $(DEP_DIR) @echo -e "\e[33m""Building object $@""\e[0m" - $(XX) -o $@ $^ $(CXXFLAGS) $(LIBS) $(lib_dir) $(lib) -Wwrite-strings - rm -f *.o + @echo -e "$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $<" + $(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $< + +# 若没有obj目录则自动生成 +$(OBJ_DIR): + @mkdir -p $@ + +# 若没有.dep目录则自动生成 +$(DEP_DIR): + @mkdir -p $@ -%.o:$(SRC_ROOT)/demo/%.cpp - $(XX) $(CXXFLAGS) -c $< +# 依赖文件会在生成中间文件的时候自动生成,这里只是为了防止报错 +$(DEPS): +# 引入中间目标文件头文件依赖关系 +include $(wildcard $(DEPS)) +# 直接删除组件build目录 +.PHONY:clean clean: - rm -f *.o $(TARGET) \ No newline at end of file + @rm -rf $(BUILD_DIR)/$(MODULE) diff --git a/src/demo/Makefile.o.nvdec b/src/demo/Makefile.o.nvdec index a40488b..91b0cac 100644 --- a/src/demo/Makefile.o.nvdec +++ b/src/demo/Makefile.o.nvdec @@ -1,61 +1,78 @@ -XX = g++ +# 各项目录 +LIB_DIR:=$(BUILD_DIR)/$(MODULE)/lib +DEP_DIR:=$(BUILD_DIR)/$(MODULE)/.dep +OBJ_DIR:=$(BUILD_DIR)/$(MODULE)/obj +SRC_DIR:=$(TOP_DIR)/$(MODULE) +# 源文件以及中间目标文件和依赖文件 +SRCS:=$(notdir $(wildcard $(SRC_DIR)/*.cpp)) +OBJS:=$(addprefix $(OBJ_DIR)/, $(patsubst %.cpp, %.o, $(SRCS))) +DEPS:=$(addprefix $(DEP_DIR)/, $(patsubst %.cpp, %.d,a $(SRCS))) -PROJECT_ROOT= /mnt/data/cmhu/FFNvDecoder +# 自动生成头文件依赖选项 +DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d -CUDA_ROOT = /usr/local/cuda-11.1 +# 最终目标文件 +TARGET:=/mnt/data/cmhu/FFNvDecoder/bin/lib/demo -DEPEND_DIR = $(PROJECT_ROOT)/bin -THIRDPARTY_ROOT = $(PROJECT_ROOT)/3rdparty -SPDLOG_ROOT = $(THIRDPARTY_ROOT)/spdlog-1.9.2/release -JRTP_ROOT = $(THIRDPARTY_ROOT)/jrtp_export - -SRC_ROOT = $(PROJECT_ROOT)/src -TARGET= $(PROJECT_ROOT)/bin/lib/demo - -DEFS = -DENABLE_DVPP_INTERFACE +JRTP_ROOT = $(THIRDPARTY_ROOT)/jrtp_export -INCLUDE= -I $(SRC_ROOT)/interface \ - -I $(SRC_ROOT)/dvpp \ - -I $(SRC_ROOT)/gb28181 \ - -I $(SRC_ROOT)/nvdec \ - -I $(DEPEND_DIR)/include \ +INCLUDE= -I $(TOP_DIR)/interface \ + -I $(TOP_DIR)/nvdec \ + -I $(TOP_DIR)/gb28181 \ -I $(CUDA_ROOT)/include \ -I $(TOP_DIR)/common/inc \ -I $(TOP_DIR)/common/UtilNPP \ -I $(TOP_DIR)/ \ - -I $(SPDLOG_ROOT)/include \ -I $(JRTP_ROOT)/jrtplib/include/jrtplib3 \ -I $(JRTP_ROOT)/jthread/include/jthread -LIBSPATH= -L $(DEPEND_DIR)/lib -lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice \ +LIBSPATH= -L $(BUILD_DIR)/interface/lib -l:interface.a \ + -L $(BUILD_DIR)/nvdec/lib -l:nvdec.a \ + -L $(BUILD_DIR)/gb28181/lib -l:gb28181.a \ -L $(CUDA_ROOT)/lib64 -lcuda -lcudart -lnvcuvid -lcurand -lcublas -lnvjpeg \ - -L $(SPDLOG_ROOT) -l:libspdlog.a \ -L $(JRTP_ROOT)/jthread/lib -l:libjthread.a \ -L $(JRTP_ROOT)/jrtplib/lib -l:libjrtp.a +CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(LIBSPATH) $(INCS) $(LIBS) $(MACROS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -Wwrite-strings + # -DUNICODE -D_UNICODE -CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl +# 默认最终目标 +.PHONY:all +all:$(TARGET) -SRCS:=$(wildcard $(SRC_ROOT)/demo/*.cpp) -OBJS = $(patsubst %.cpp, %.o, $(notdir $(SRCS))) +# 生成最终目标 +$(TARGET): $(OBJS) | $(LIB_DIR) + @echo -e "\e[32m""Linking static library $(TARGET)""\e[0m" + @echo -e "$(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(LIBSPATH) $(MACROS)" + $(CXX) -o $@ $^ $(DEPFLAGS) $(CXXFLAGS) $(LIBSPATH) $(MACROS) -OBJ_ROOT = $(PROJECT_ROOT)/src/build -INTEFACE_SRCS:=$(wildcard $(OBJ_ROOT)/interface/obj/*.o) -NVDECODER_SRCS:=$(wildcard $(OBJ_ROOT)/nvdec/obj/*.o) -GB28181_SRCS:=$(wildcard $(OBJ_ROOT)/gb28181/obj/*.o) +# 若没有lib目录则自动生成 +$(LIB_DIR): + @mkdir -p $@ - -$(TARGET):$(OBJS) $(INTEFACE_SRCS) $(NVDECODER_SRCS) $(GB28181_SRCS) - rm -f $(TARGET) +# 生成中间目标文件 +$(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp $(DEP_DIR)/%.d | $(OBJ_DIR) $(DEP_DIR) @echo -e "\e[33m""Building object $@""\e[0m" - $(XX) -o $@ $^ $(CXXFLAGS) $(LIBSPATH) -Wwrite-strings - rm -f *.o + @echo -e "$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $<" + $(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $< + +# 若没有obj目录则自动生成 +$(OBJ_DIR): + @mkdir -p $@ + +# 若没有.dep目录则自动生成 +$(DEP_DIR): + @mkdir -p $@ -%.o:$(SRC_ROOT)/demo/%.cpp - $(XX) $(CXXFLAGS) -c $< +# 依赖文件会在生成中间文件的时候自动生成,这里只是为了防止报错 +$(DEPS): +# 引入中间目标文件头文件依赖关系 +include $(wildcard $(DEPS)) +# 直接删除组件build目录 +.PHONY:clean clean: - rm -f *.o $(TARGET) \ No newline at end of file + @rm -rf $(BUILD_DIR)/$(MODULE) diff --git a/src/demo/main_dvpp.cpp b/src/demo/main_dvpp.cpp new file mode 100644 index 0000000..602a170 --- /dev/null +++ b/src/demo/main_dvpp.cpp @@ -0,0 +1,337 @@ +#include <iostream> +#include <pthread.h> +#include <thread> +#include <chrono> +#include <unistd.h> + + +#ifdef _WIN32 +#include "Winsock2.h" +#pragma comment(lib, "ws2_32.lib") +#endif + +#ifdef __linux__ +#include "arpa/inet.h" +#endif + +#include "../interface/FFNvDecoderManager.h" +#include "../interface/utiltools.hpp" + +#define MIN_RTP_PORT 10000 +#define MAX_RTP_PORT 60000 + +// ȡ MIN_RTP_PORT(10000)~MAX_RTP_PORT(60000)֮�������˿�(ż���������������˿ڿ���) +int allocRtpPort() { + + static int s_rtpPort = MIN_RTP_PORT; + if (MIN_RTP_PORT == s_rtpPort) + { + srand((unsigned int)time(NULL)); + s_rtpPort = MIN_RTP_PORT + (rand() % MIN_RTP_PORT); + } + + if (s_rtpPort % 2) + ++s_rtpPort; + + while (true) + { + s_rtpPort += 2; + s_rtpPort = s_rtpPort >= MAX_RTP_PORT ? MIN_RTP_PORT : s_rtpPort; + + int i = 0; + for (; i < 2; i++) + { + sockaddr_in sRecvAddr; + int s = socket(AF_INET, SOCK_DGRAM, 0); + + sRecvAddr.sin_family = AF_INET; + sRecvAddr.sin_addr.s_addr = htonl(INADDR_ANY); + sRecvAddr.sin_port = htons(s_rtpPort + i); + + int nResult = bind(s, (sockaddr *)&sRecvAddr, sizeof(sRecvAddr)); + if (nResult != 0) + { + break; + } + + nResult = close(s); + if (nResult != 0) + { + printf("closesocket failed:%d\n", nResult); + break; + } + } + + if (i == 2) + break; + } + + return s_rtpPort; +} + + + + + +unsigned char *pHwRgb[2] = {nullptr, nullptr}; + +int sum1 = 0; +int sum2 = 0; + + +string data_home = "/mnt/data/cmhu/tmp/"; + + + + +/** + * 注意: gpuFrame 在解码器设置的显卡上,后续操作要十分注意这一点,尤其是多线程情况 + * */ +void postDecoded(const void * userPtr, DeviceRgbMemory* devFrame){ + AbstractDecoder* decoder = (AbstractDecoder*)userPtr; + if (decoder!= nullptr) + { + } + + if(devFrame){ + delete devFrame; + devFrame = nullptr; + } +} + +long start_time = 0; +long end_time = 0; +bool count_flag = false; +int count = 0; +int count_std = 100; + + +static int sum = 0; +unsigned char *pHwData = nullptr; + +void postDecoded0(const void * userPtr, DeviceRgbMemory* devFrame){ + // std::this_thread::sleep_for(std::chrono::milliseconds(30000)); + + AbstractDecoder* decoder = (AbstractDecoder*)userPtr; + if (decoder!= nullptr) + { + // cout << "decode name: " << decoder->getName() << endl; + if (decoder->getName() == "dec") + { + if (! count_flag) + { + count_flag = true; + count = 0; + end_time = start_time = UtilTools::get_cur_time_ms(); + } + count++; + sum ++ ; + if (count >= count_std) + { + // end_time = UtilTools::get_cur_time_ms(); + // long time_using = end_time - start_time; + // double time_per_frame = double(time_using)/count_std ; + // cout << count_std << "帧用时:" << time_using << "ms 每帧用时:" << time_per_frame << "ms" << endl; + cout << decoder->getName() << " keyframe: " << devFrame->isKeyFrame() << " width: " << devFrame->getWidth() << " height: "<< devFrame->getHeight() << endl; + // cout << gpuFrame->pts << endl; + + count_flag = false; + } + // cout << "帧数:" << sum << endl; + } + } +} + +void decode_finished_cbk(const void* userPtr){ + cout << "当前时间戳: " << UtilTools::get_cur_time_ms() << endl; +} + +bool decode_request_stream_cbk(const char* deviceId){ + cout << "需在此请求流" << endl; + return true; +} + +// string test_uri = "rtmp://192.168.10.56:1935/objecteye/1"; +// string test_uri = "/home/cmhu/data/output_800x480.mp4"; +// string test_uri = "/home/cmhu/data/output_1920x1080.mp4"; +// string test_uri = "rtsp://176.10.0.2:8554/stream"; +// string test_uri = "/mnt/f/fiss/test_data/h265.mp4"; +// string test_uri = "rtsp://176.10.0.4:8554/stream"; +// string test_uri = "rtsp://admin:admin@123456@192.168.60.176:554/cam/realmonitor?channel=1&subtype=0"; +string test_uri = "/home/huchunming/data/woyikewangh265.mp4"; + +void createDecode(int index, const char* gpu_id){ + FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); + MgrDecConfig config; + config.name = "dec" + to_string(index); + config.cfg.uri = test_uri; + config.cfg.post_decoded_cbk = postDecoded; + config.cfg.decode_finished_cbk = decode_finished_cbk; + config.cfg.force_tcp = true; + config.dec_type = DECODER_TYPE_FFMPEG; + + config.cfg.gpuid = gpu_id; + // if (index % 2 == 0) + // { + // config.cfg.gpuid = "0"; + // } + // else + // { + // config.cfg.gpuid = "0"; + // } + + AbstractDecoder* decoder = pDecManager->createDecoder(config); + if (!decoder) + { + return ; + } + pDecManager->setPostDecArg(config.name, decoder); + pDecManager->setFinishedDecArg(config.name, decoder); + pDecManager->startDecodeByName(config.name); +} + +void createGB28181Decode(int index, char* gpu_id, int port){ + FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); + MgrDecConfig config; + config.name = "dec" + to_string(index); + config.cfg.uri = config.name; + config.cfg.post_decoded_cbk = postDecoded; + config.cfg.decode_finished_cbk = decode_finished_cbk; + config.cfg.request_stream_cbk = decode_request_stream_cbk; + config.cfg.force_tcp = true; + + config.dec_type = DECODER_TYPE_GB28181; + config.cfg.port = port;//allocRtpPort(); + + config.cfg.gpuid = gpu_id; + + AbstractDecoder* decoder = pDecManager->createDecoder(config); + if (!decoder) + { + return ; + } + pDecManager->setPostDecArg(config.name, decoder); + pDecManager->setFinishedDecArg(config.name, decoder); + pDecManager->startDecodeByName(config.name); +} + +void createDvppDecoder(int index, char* devId, int channelId){ + FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); + MgrDecConfig config; + config.name = "dec" + to_string(index); + config.cfg.uri = test_uri; + config.cfg.post_decoded_cbk = postDecoded; + config.cfg.decode_finished_cbk = decode_finished_cbk; + config.cfg.force_tcp = true; + config.dec_type = DECODER_TYPE_DVPP; + + config.cfg.gpuid = devId; + + AbstractDecoder* decoder = pDecManager->createDecoder(config); + if (!decoder) + { + cout << "创建解码器失败" << endl; + return ; + } + pDecManager->setPostDecArg(config.name, decoder); + pDecManager->setFinishedDecArg(config.name, decoder); + pDecManager->startDecodeByName(config.name); +} + +void logFF(void *, int level, const char *fmt, va_list ap) +{ + vfprintf(stdout, fmt, ap); +} + + +int main(int argc, char* argv[]){ + + // test_uri = argv[1]; + char* gpuid = argv[2]; + int port = atoi(argv[3]); + cout << test_uri << " gpu_id:" << gpuid << " port:" << port << endl; + + // av_log_set_callback(&logFF); + + // CheckCUDAProperty(atoi(gpuid)); + + pthread_t m_decode_thread; + pthread_create(&m_decode_thread,0, + [](void* arg) + { + // cudaSetDevice(atoi(gpuid)); + while (true) + { + std::this_thread::sleep_for(std::chrono::seconds(10)); + FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); + int count = pDecManager->count(); + cout << "当前时间:" << UtilTools::get_cur_time_ms() << " 当前运行路数: " << pDecManager->count() << endl; + } + + return (void*)0; + } + ,nullptr); + + + FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); + int i = 0; + + while (true) + { + int ch = getchar(); + if (ch == 'q') + { + break; + } + + switch (ch) + { + case 'f': + case 'F': + createDecode(i, gpuid); + i++; + break; + case 'g': + case 'G': + createGB28181Decode(i, gpuid, port); + i++; + break; + case 'd': + case 'D': + createDvppDecoder(i, gpuid, 0); + i++; + break; + case 'r': + case 'R': + pDecManager->resumeDecoder("dec0"); + break; + case 'p': + case 'P': + pDecManager->pauseDecoder("dec0"); + break; + + case 'c': + case 'C': + i--; + pDecManager->closeDecoderByName("dec" + to_string(i)); + break; + + case 'i': + case 'I': + { + int w,h; + pDecManager->getResolution("dec0", w,h); + printf( "%s : %dx%d\n", "dec0" , w,h ); + } + break; + + default: + break; + } + + /* code */ + } + + cout << "总共帧数:" << sum << endl; + pDecManager->closeAllDecoder(); +} \ No newline at end of file diff --git a/src/demo/main_dvpp.cpp1 b/src/demo/main_dvpp.cpp1 deleted file mode 100644 index 602a170..0000000 --- a/src/demo/main_dvpp.cpp1 +++ /dev/null @@ -1,337 +0,0 @@ -#include <iostream> -#include <pthread.h> -#include <thread> -#include <chrono> -#include <unistd.h> - - -#ifdef _WIN32 -#include "Winsock2.h" -#pragma comment(lib, "ws2_32.lib") -#endif - -#ifdef __linux__ -#include "arpa/inet.h" -#endif - -#include "../interface/FFNvDecoderManager.h" -#include "../interface/utiltools.hpp" - -#define MIN_RTP_PORT 10000 -#define MAX_RTP_PORT 60000 - -// ȡ MIN_RTP_PORT(10000)~MAX_RTP_PORT(60000)֮�������˿�(ż���������������˿ڿ���) -int allocRtpPort() { - - static int s_rtpPort = MIN_RTP_PORT; - if (MIN_RTP_PORT == s_rtpPort) - { - srand((unsigned int)time(NULL)); - s_rtpPort = MIN_RTP_PORT + (rand() % MIN_RTP_PORT); - } - - if (s_rtpPort % 2) - ++s_rtpPort; - - while (true) - { - s_rtpPort += 2; - s_rtpPort = s_rtpPort >= MAX_RTP_PORT ? MIN_RTP_PORT : s_rtpPort; - - int i = 0; - for (; i < 2; i++) - { - sockaddr_in sRecvAddr; - int s = socket(AF_INET, SOCK_DGRAM, 0); - - sRecvAddr.sin_family = AF_INET; - sRecvAddr.sin_addr.s_addr = htonl(INADDR_ANY); - sRecvAddr.sin_port = htons(s_rtpPort + i); - - int nResult = bind(s, (sockaddr *)&sRecvAddr, sizeof(sRecvAddr)); - if (nResult != 0) - { - break; - } - - nResult = close(s); - if (nResult != 0) - { - printf("closesocket failed:%d\n", nResult); - break; - } - } - - if (i == 2) - break; - } - - return s_rtpPort; -} - - - - - -unsigned char *pHwRgb[2] = {nullptr, nullptr}; - -int sum1 = 0; -int sum2 = 0; - - -string data_home = "/mnt/data/cmhu/tmp/"; - - - - -/** - * 注意: gpuFrame 在解码器设置的显卡上,后续操作要十分注意这一点,尤其是多线程情况 - * */ -void postDecoded(const void * userPtr, DeviceRgbMemory* devFrame){ - AbstractDecoder* decoder = (AbstractDecoder*)userPtr; - if (decoder!= nullptr) - { - } - - if(devFrame){ - delete devFrame; - devFrame = nullptr; - } -} - -long start_time = 0; -long end_time = 0; -bool count_flag = false; -int count = 0; -int count_std = 100; - - -static int sum = 0; -unsigned char *pHwData = nullptr; - -void postDecoded0(const void * userPtr, DeviceRgbMemory* devFrame){ - // std::this_thread::sleep_for(std::chrono::milliseconds(30000)); - - AbstractDecoder* decoder = (AbstractDecoder*)userPtr; - if (decoder!= nullptr) - { - // cout << "decode name: " << decoder->getName() << endl; - if (decoder->getName() == "dec") - { - if (! count_flag) - { - count_flag = true; - count = 0; - end_time = start_time = UtilTools::get_cur_time_ms(); - } - count++; - sum ++ ; - if (count >= count_std) - { - // end_time = UtilTools::get_cur_time_ms(); - // long time_using = end_time - start_time; - // double time_per_frame = double(time_using)/count_std ; - // cout << count_std << "帧用时:" << time_using << "ms 每帧用时:" << time_per_frame << "ms" << endl; - cout << decoder->getName() << " keyframe: " << devFrame->isKeyFrame() << " width: " << devFrame->getWidth() << " height: "<< devFrame->getHeight() << endl; - // cout << gpuFrame->pts << endl; - - count_flag = false; - } - // cout << "帧数:" << sum << endl; - } - } -} - -void decode_finished_cbk(const void* userPtr){ - cout << "当前时间戳: " << UtilTools::get_cur_time_ms() << endl; -} - -bool decode_request_stream_cbk(const char* deviceId){ - cout << "需在此请求流" << endl; - return true; -} - -// string test_uri = "rtmp://192.168.10.56:1935/objecteye/1"; -// string test_uri = "/home/cmhu/data/output_800x480.mp4"; -// string test_uri = "/home/cmhu/data/output_1920x1080.mp4"; -// string test_uri = "rtsp://176.10.0.2:8554/stream"; -// string test_uri = "/mnt/f/fiss/test_data/h265.mp4"; -// string test_uri = "rtsp://176.10.0.4:8554/stream"; -// string test_uri = "rtsp://admin:admin@123456@192.168.60.176:554/cam/realmonitor?channel=1&subtype=0"; -string test_uri = "/home/huchunming/data/woyikewangh265.mp4"; - -void createDecode(int index, const char* gpu_id){ - FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); - MgrDecConfig config; - config.name = "dec" + to_string(index); - config.cfg.uri = test_uri; - config.cfg.post_decoded_cbk = postDecoded; - config.cfg.decode_finished_cbk = decode_finished_cbk; - config.cfg.force_tcp = true; - config.dec_type = DECODER_TYPE_FFMPEG; - - config.cfg.gpuid = gpu_id; - // if (index % 2 == 0) - // { - // config.cfg.gpuid = "0"; - // } - // else - // { - // config.cfg.gpuid = "0"; - // } - - AbstractDecoder* decoder = pDecManager->createDecoder(config); - if (!decoder) - { - return ; - } - pDecManager->setPostDecArg(config.name, decoder); - pDecManager->setFinishedDecArg(config.name, decoder); - pDecManager->startDecodeByName(config.name); -} - -void createGB28181Decode(int index, char* gpu_id, int port){ - FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); - MgrDecConfig config; - config.name = "dec" + to_string(index); - config.cfg.uri = config.name; - config.cfg.post_decoded_cbk = postDecoded; - config.cfg.decode_finished_cbk = decode_finished_cbk; - config.cfg.request_stream_cbk = decode_request_stream_cbk; - config.cfg.force_tcp = true; - - config.dec_type = DECODER_TYPE_GB28181; - config.cfg.port = port;//allocRtpPort(); - - config.cfg.gpuid = gpu_id; - - AbstractDecoder* decoder = pDecManager->createDecoder(config); - if (!decoder) - { - return ; - } - pDecManager->setPostDecArg(config.name, decoder); - pDecManager->setFinishedDecArg(config.name, decoder); - pDecManager->startDecodeByName(config.name); -} - -void createDvppDecoder(int index, char* devId, int channelId){ - FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); - MgrDecConfig config; - config.name = "dec" + to_string(index); - config.cfg.uri = test_uri; - config.cfg.post_decoded_cbk = postDecoded; - config.cfg.decode_finished_cbk = decode_finished_cbk; - config.cfg.force_tcp = true; - config.dec_type = DECODER_TYPE_DVPP; - - config.cfg.gpuid = devId; - - AbstractDecoder* decoder = pDecManager->createDecoder(config); - if (!decoder) - { - cout << "创建解码器失败" << endl; - return ; - } - pDecManager->setPostDecArg(config.name, decoder); - pDecManager->setFinishedDecArg(config.name, decoder); - pDecManager->startDecodeByName(config.name); -} - -void logFF(void *, int level, const char *fmt, va_list ap) -{ - vfprintf(stdout, fmt, ap); -} - - -int main(int argc, char* argv[]){ - - // test_uri = argv[1]; - char* gpuid = argv[2]; - int port = atoi(argv[3]); - cout << test_uri << " gpu_id:" << gpuid << " port:" << port << endl; - - // av_log_set_callback(&logFF); - - // CheckCUDAProperty(atoi(gpuid)); - - pthread_t m_decode_thread; - pthread_create(&m_decode_thread,0, - [](void* arg) - { - // cudaSetDevice(atoi(gpuid)); - while (true) - { - std::this_thread::sleep_for(std::chrono::seconds(10)); - FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); - int count = pDecManager->count(); - cout << "当前时间:" << UtilTools::get_cur_time_ms() << " 当前运行路数: " << pDecManager->count() << endl; - } - - return (void*)0; - } - ,nullptr); - - - FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); - int i = 0; - - while (true) - { - int ch = getchar(); - if (ch == 'q') - { - break; - } - - switch (ch) - { - case 'f': - case 'F': - createDecode(i, gpuid); - i++; - break; - case 'g': - case 'G': - createGB28181Decode(i, gpuid, port); - i++; - break; - case 'd': - case 'D': - createDvppDecoder(i, gpuid, 0); - i++; - break; - case 'r': - case 'R': - pDecManager->resumeDecoder("dec0"); - break; - case 'p': - case 'P': - pDecManager->pauseDecoder("dec0"); - break; - - case 'c': - case 'C': - i--; - pDecManager->closeDecoderByName("dec" + to_string(i)); - break; - - case 'i': - case 'I': - { - int w,h; - pDecManager->getResolution("dec0", w,h); - printf( "%s : %dx%d\n", "dec0" , w,h ); - } - break; - - default: - break; - } - - /* code */ - } - - cout << "总共帧数:" << sum << endl; - pDecManager->closeAllDecoder(); -} \ No newline at end of file diff --git a/src/demo/main_nvdec.cpp b/src/demo/main_nvdec.cpp deleted file mode 100644 index 227bc8a..0000000 --- a/src/demo/main_nvdec.cpp +++ /dev/null @@ -1,456 +0,0 @@ -#include "FFNvDecoderManager.h" -#include <iostream> - -// #include "cuda_kernels.h" -// #include "NvJpegEncoder.h" - -#include <pthread.h> -#include <thread> - -#include <chrono> - -#include <unistd.h> - - -#ifdef _WIN32 -#include "Winsock2.h" -#pragma comment(lib, "ws2_32.lib") -#endif - -#ifdef __linux__ -#include "arpa/inet.h" -#endif - -#include "utiltools.hpp" - -#define MIN_RTP_PORT 10000 -#define MAX_RTP_PORT 60000 - -// ȡ MIN_RTP_PORT(10000)~MAX_RTP_PORT(60000)֮�������˿�(ż���������������˿ڿ���) -int allocRtpPort() { - - static int s_rtpPort = MIN_RTP_PORT; - if (MIN_RTP_PORT == s_rtpPort) - { - srand((unsigned int)time(NULL)); - s_rtpPort = MIN_RTP_PORT + (rand() % MIN_RTP_PORT); - } - - if (s_rtpPort % 2) - ++s_rtpPort; - - while (true) - { - s_rtpPort += 2; - s_rtpPort = s_rtpPort >= MAX_RTP_PORT ? MIN_RTP_PORT : s_rtpPort; - - int i = 0; - for (; i < 2; i++) - { - sockaddr_in sRecvAddr; - int s = socket(AF_INET, SOCK_DGRAM, 0); - - sRecvAddr.sin_family = AF_INET; - sRecvAddr.sin_addr.s_addr = htonl(INADDR_ANY); - sRecvAddr.sin_port = htons(s_rtpPort + i); - - int nResult = bind(s, (sockaddr *)&sRecvAddr, sizeof(sRecvAddr)); - if (nResult != 0) - { - break; - } - - nResult = close(s); - if (nResult != 0) - { - printf("closesocket failed:%d\n", nResult); - break; - } - } - - if (i == 2) - break; - } - - return s_rtpPort; -} - - - - - -unsigned char *pHwRgb[2] = {nullptr, nullptr}; - -int sum1 = 0; -int sum2 = 0; - -// cudaStream_t stream[2]; - -string data_home = "/mnt/data/cmhu/tmp/"; - - -// #define checkCudaErrors(S) do {CUresult status; \ -// status = S; \ -// if (status != CUDA_SUCCESS ) std::cout << __LINE__ <<" checkCudaErrors - status = " << status << std::endl; \ -// } while (false) - - -// static void gpu_helper(int gpuid) -// { -// cudaSetDevice(gpuid); - -// // int *dn; -// // cudaMalloc((void **)&dn, 1 * sizeof(int)); - -// size_t free_byte; -// size_t total_byte; - -// CUresult cuda_status = cuMemGetInfo(&free_byte, &total_byte); - -// const char *pStr = nullptr; -// if (CUDA_SUCCESS != cuda_status) { -// cuGetErrorString(cuda_status, &pStr); -// printf("Error: cudaMemGetInfo fails, %s \n", pStr); -// return; -// } - -// double free_db = (double)free_byte; -// double total_db = (double)total_byte; -// double used_db_1 = (total_db - free_db) / 1024.0 / 1024.0; - -// std::cout <<"显存已使用 " << used_db_1 << " MB\n"; - -// // cudaFree(dn); -// } - -// int CheckCUDAProperty( int devId ) -// { -// cuInit(0); - -// CUdevice dev = devId; -// size_t memSize = 0; -// char devName[256] = {0}; -// int major = 0, minor = 0; -// CUresult rlt = CUDA_SUCCESS; - -// rlt = cuDeviceGetAttribute(&major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, dev); -// checkCudaErrors( rlt ); - -// rlt = cuDeviceGetAttribute(&minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, dev); -// checkCudaErrors( rlt ); - -// rlt = cuDeviceGetName( devName, sizeof( devName ), dev ); -// checkCudaErrors( rlt ); - -// printf( "Using GPU Device %d: %s has SM %d.%d compute capability\n", -// dev, devName, major, minor ); - -// rlt = cuDeviceTotalMem( &memSize, dev ); -// checkCudaErrors( rlt ); - -// printf( "Total amount of global memory: %4.4f MB\n", -// (float)memSize / ( 1024 * 1024 ) ); - -// return 0; -// } - -/** - * 注意: gpuFrame 在解码器设置的显卡上,后续操作要十分注意这一点,尤其是多线程情况 - * */ -static long lastpts = 0; -void postDecoded(const void * userPtr, DeviceRgbMemory * gpuFrame){ - AbstractDecoder* decoder = (AbstractDecoder*)userPtr; - if (decoder!= nullptr) - { - long curpts = UtilTools::get_cur_time_ms(); - cout << decoder->getName() << " " << gpuFrame->getWidth() << "x" << gpuFrame->getHeight() << " " << curpts - lastpts << endl; - lastpts = curpts; - delete gpuFrame; - gpuFrame = nullptr; - - // const char* gpu_pixfmt = av_get_pix_fmt_name((AVPixelFormat)gpuFrame->format); - // cout << "pixfmt: " << gpu_pixfmt << endl; - // cout << "keyframe: " << gpuFrame->key_frame << " width: " << gpuFrame->width << " height: "<< gpuFrame->height << endl; - // cout << "decode successed ✿✿ヽ(°▽°)ノ✿ " << endl; - - // int sum = sum1; - // if (decoder->getName() == "dec0") - // { - // sum1 ++ ; - // sum = sum1; - - // if (gpuFrame->format == AV_PIX_FMT_CUDA) - // { - // // cout << "gpuid = " << atoi(decoder->m_cfg.gpuid.c_str()) << endl; - // cudaSetDevice(atoi(decoder->m_cfg.gpuid.c_str())); - // cudaError_t cudaStatus; - // if(pHwRgb[0] == nullptr){ - // // cudaStreamCreate(&stream[0]); - // cuda_common::setColorSpace( ITU_709, 0 ); - // cudaStatus = cudaMalloc((void **)&pHwRgb[0], 3 * gpuFrame->width * gpuFrame->height * sizeof(unsigned char)); - // } - // cudaStatus = cuda_common::CUDAToBGR((CUdeviceptr)gpuFrame->data[0],(CUdeviceptr)gpuFrame->data[1], gpuFrame->linesize[0], gpuFrame->linesize[1], pHwRgb[0], gpuFrame->width, gpuFrame->height); - // cudaDeviceSynchronize(); - // if (cudaStatus != cudaSuccess) { - // cout << "CUDAToBGR failed !!!" << endl; - // return; - // } - - // string path = data_home + decoder->getName() + ".jpg"; - // saveJpeg(path.c_str(), pHwRgb[0], gpuFrame->width, gpuFrame->height, stream[0]); // 验证 CUDAToRGB - // } - // } else if (decoder->getName() == "dec2") - // { - // sum2 ++ ; - // sum = sum2; - - // if (gpuFrame->format == AV_PIX_FMT_CUDA) - // { - // // cout << "gpuid = " << atoi(decoder->m_cfg.gpuid.c_str()) << endl; - // cudaSetDevice(atoi(decoder->m_cfg.gpuid.c_str())); - // cudaError_t cudaStatus; - // if(pHwRgb[1] == nullptr){ - // // cudaStreamCreate(&stream[1]); - // cuda_common::setColorSpace( ITU_709, 0 ); - // cudaStatus = cudaMalloc((void **)&pHwRgb[1], 3 * gpuFrame->width * gpuFrame->height * sizeof(unsigned char)); - // } - // cudaStatus = cuda_common::CUDAToBGR((CUdeviceptr)gpuFrame->data[0],(CUdeviceptr)gpuFrame->data[1], gpuFrame->linesize[0], gpuFrame->linesize[1], pHwRgb[1], gpuFrame->width, gpuFrame->height); - // cudaDeviceSynchronize(); - // if (cudaStatus != cudaSuccess) { - // cout << "CUDAToBGR failed !!!" << endl; - // return; - // } - - // string path = data_home + decoder->getName() + ".jpg"; - // saveJpeg(path.c_str(), pHwRgb[1], gpuFrame->width, gpuFrame->height, stream[1]); // 验证 CUDAToRGB - // } - // } - } -} - -long start_time = 0; -long end_time = 0; -bool count_flag = false; -int count = 0; -int count_std = 100; - - -static int sum = 0; -unsigned char *pHwData = nullptr; - -void postDecoded0(const void * userPtr, DeviceRgbMemory* gpuFrame){ - // std::this_thread::sleep_for(std::chrono::milliseconds(30000)); - - AbstractDecoder* decoder = (AbstractDecoder*)userPtr; - if (decoder!= nullptr) - { - // cout << "decode name: " << decoder->getName() << endl; - // if (decoder->getName() == "dec") - // { - // if (! count_flag) - // { - // count_flag = true; - // count = 0; - // end_time = start_time = UtilTools::get_cur_time_ms(); - // } - // count++; - // sum ++ ; - // if (count >= count_std) - // { - // // end_time = UtilTools::get_cur_time_ms(); - // // long time_using = end_time - start_time; - // // double time_per_frame = double(time_using)/count_std ; - // // cout << count_std << "帧用时:" << time_using << "ms 每帧用时:" << time_per_frame << "ms" << endl; - // cout << decoder->getName() << " keyframe: " << gpuFrame->key_frame << " width: " << gpuFrame->width << " height: "<< gpuFrame->height << endl; - // // cout << gpuFrame->pts << endl; - - // count_flag = false; - // } - // // cout << "帧数:" << sum << endl; - - // if (gpuFrame->format == AV_PIX_FMT_CUDA) - // { - // cudaSetDevice(atoi(decoder->m_cfg.gpuid.c_str())); - // // cout << "gpu id : " << decoder->m_cfg.gpuid.c_str() << endl; - // cudaError_t cudaStatus; - // if(pHwData == nullptr){ - // cuda_common::setColorSpace( ITU_709, 0 ); - // cudaStatus = cudaMalloc((void **)&pHwData, 3 * gpuFrame->width * gpuFrame->height * sizeof(unsigned char)); - // } - // cudaStatus = cuda_common::CUDAToBGR((CUdeviceptr)gpuFrame->data[0],(CUdeviceptr)gpuFrame->data[1], gpuFrame->linesize[0], gpuFrame->linesize[1], pHwData, gpuFrame->width, gpuFrame->height); - // cudaDeviceSynchronize(); - // if (cudaStatus != cudaSuccess) { - // cout << "CUDAToBGR failed !!!" << endl; - // return; - // } - - // string path = data_home + decoder->getName() + ".jpg"; - // saveJpeg(path.c_str(), pHwData, gpuFrame->width, gpuFrame->height, nullptr); // 验证 CUDAToRGB - // } - // } - } -} - -void decode_finished_cbk(const void* userPtr){ - cout << "当前时间戳: " << UtilTools::get_cur_time_ms() << endl; -} - -bool decode_request_stream_cbk(const char* deviceId){ - cout << "需在此请求流" << endl; - return true; -} - -// string test_uri = "rtmp://192.168.10.56:1935/objecteye/1"; -// string test_uri = "/home/cmhu/data/output_800x480.mp4"; -// string test_uri = "/home/cmhu/data/output_1920x1080.mp4"; -// string test_uri = "rtsp://176.10.0.2:8554/stream"; -// string test_uri = "/mnt/f/fiss/test_data/h265.mp4"; -string test_uri = "rtsp://176.10.0.4:8554/stream"; - -void createDecode(int index, const char* gpu_id){ - FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); - MgrDecConfig config; - config.name = "dec" + to_string(index); - config.cfg.uri = test_uri; - config.cfg.post_decoded_cbk = postDecoded; - config.cfg.decode_finished_cbk = decode_finished_cbk; - config.cfg.force_tcp = true; - config.dec_type = DECODER_TYPE_FFMPEG; - - config.cfg.gpuid = gpu_id; - // if (index % 2 == 0) - // { - // config.cfg.gpuid = "0"; - // } - // else - // { - // config.cfg.gpuid = "0"; - // } - - AbstractDecoder* decoder = pDecManager->createDecoder(config); - if (!decoder) - { - return ; - } - pDecManager->setPostDecArg(config.name, decoder); - pDecManager->setFinishedDecArg(config.name, decoder); - pDecManager->startDecodeByName(config.name); -} - -void createGB28181Decode(int index, char* gpu_id, int port){ - FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); - MgrDecConfig config; - config.name = "dec" + to_string(index); - config.cfg.uri = config.name; - config.cfg.post_decoded_cbk = postDecoded; - config.cfg.decode_finished_cbk = decode_finished_cbk; - config.cfg.request_stream_cbk = decode_request_stream_cbk; - config.cfg.force_tcp = true; - - config.dec_type = DECODER_TYPE_GB28181; - config.cfg.port = port;//allocRtpPort(); - - config.cfg.gpuid = gpu_id; - - AbstractDecoder* decoder = pDecManager->createDecoder(config); - if (!decoder) - { - return ; - } - pDecManager->setPostDecArg(config.name, decoder); - pDecManager->setFinishedDecArg(config.name, decoder); - pDecManager->startDecodeByName(config.name); -} - -void logFF(void *, int level, const char *fmt, va_list ap) -{ - vfprintf(stdout, fmt, ap); -} - - -int main(int argc, char* argv[]){ - - test_uri = "rtsp://admin:admin@123456@192.168.60.176:554/cam/realmonitor?channel=1&subtype=0";//argv[1]; - char* gpuid = argv[2]; - int port = atoi(argv[3]); - cout << test_uri << " gpu_id:" << gpuid << " port:" << port << endl; - - // av_log_set_callback(&logFF); - - // CheckCUDAProperty(atoi(gpuid)); - - pthread_t m_decode_thread; - pthread_create(&m_decode_thread,0, - [](void* arg) - { - // cudaSetDevice(atoi(gpuid)); - while (true) - { - std::this_thread::sleep_for(std::chrono::minutes(1)); - FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); - int count = pDecManager->count(); - cout << "当前时间:" << UtilTools::get_cur_time_ms() << " 当前运行路数: " << pDecManager->count() << endl; - } - - return (void*)0; - } - ,nullptr); - - - FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); - int i = 0; - - while (true) - { - int ch = getchar(); - if (ch == 'q') - { - break; - } - - switch (ch) - { - case 'f': - case 'F': - createDecode(i, gpuid); - i++; - break; - case 'g': - case 'G': - createGB28181Decode(i, gpuid, port); - i++; - break; - case 'r': - case 'R': - pDecManager->resumeDecoder("dec0"); - break; - case 'p': - case 'P': - pDecManager->pauseDecoder("dec0"); - break; - - case 'c': - case 'C': - i--; - pDecManager->closeDecoderByName("dec" + to_string(i)); - break; - - case 'i': - case 'I': - { - int w,h; - pDecManager->getResolution("dec0", w,h); - printf( "%s : %dx%d\n", "dec0" , w,h ); - } - break; - - default: - break; - } - - /* code */ - } - - cout << "总共帧数:" << sum << endl; - pDecManager->closeAllDecoder(); -} \ No newline at end of file diff --git a/src/demo/main_nvdec.cpp1 b/src/demo/main_nvdec.cpp1 new file mode 100644 index 0000000..227bc8a --- /dev/null +++ b/src/demo/main_nvdec.cpp1 @@ -0,0 +1,456 @@ +#include "FFNvDecoderManager.h" +#include <iostream> + +// #include "cuda_kernels.h" +// #include "NvJpegEncoder.h" + +#include <pthread.h> +#include <thread> + +#include <chrono> + +#include <unistd.h> + + +#ifdef _WIN32 +#include "Winsock2.h" +#pragma comment(lib, "ws2_32.lib") +#endif + +#ifdef __linux__ +#include "arpa/inet.h" +#endif + +#include "utiltools.hpp" + +#define MIN_RTP_PORT 10000 +#define MAX_RTP_PORT 60000 + +// ȡ MIN_RTP_PORT(10000)~MAX_RTP_PORT(60000)֮�������˿�(ż���������������˿ڿ���) +int allocRtpPort() { + + static int s_rtpPort = MIN_RTP_PORT; + if (MIN_RTP_PORT == s_rtpPort) + { + srand((unsigned int)time(NULL)); + s_rtpPort = MIN_RTP_PORT + (rand() % MIN_RTP_PORT); + } + + if (s_rtpPort % 2) + ++s_rtpPort; + + while (true) + { + s_rtpPort += 2; + s_rtpPort = s_rtpPort >= MAX_RTP_PORT ? MIN_RTP_PORT : s_rtpPort; + + int i = 0; + for (; i < 2; i++) + { + sockaddr_in sRecvAddr; + int s = socket(AF_INET, SOCK_DGRAM, 0); + + sRecvAddr.sin_family = AF_INET; + sRecvAddr.sin_addr.s_addr = htonl(INADDR_ANY); + sRecvAddr.sin_port = htons(s_rtpPort + i); + + int nResult = bind(s, (sockaddr *)&sRecvAddr, sizeof(sRecvAddr)); + if (nResult != 0) + { + break; + } + + nResult = close(s); + if (nResult != 0) + { + printf("closesocket failed:%d\n", nResult); + break; + } + } + + if (i == 2) + break; + } + + return s_rtpPort; +} + + + + + +unsigned char *pHwRgb[2] = {nullptr, nullptr}; + +int sum1 = 0; +int sum2 = 0; + +// cudaStream_t stream[2]; + +string data_home = "/mnt/data/cmhu/tmp/"; + + +// #define checkCudaErrors(S) do {CUresult status; \ +// status = S; \ +// if (status != CUDA_SUCCESS ) std::cout << __LINE__ <<" checkCudaErrors - status = " << status << std::endl; \ +// } while (false) + + +// static void gpu_helper(int gpuid) +// { +// cudaSetDevice(gpuid); + +// // int *dn; +// // cudaMalloc((void **)&dn, 1 * sizeof(int)); + +// size_t free_byte; +// size_t total_byte; + +// CUresult cuda_status = cuMemGetInfo(&free_byte, &total_byte); + +// const char *pStr = nullptr; +// if (CUDA_SUCCESS != cuda_status) { +// cuGetErrorString(cuda_status, &pStr); +// printf("Error: cudaMemGetInfo fails, %s \n", pStr); +// return; +// } + +// double free_db = (double)free_byte; +// double total_db = (double)total_byte; +// double used_db_1 = (total_db - free_db) / 1024.0 / 1024.0; + +// std::cout <<"显存已使用 " << used_db_1 << " MB\n"; + +// // cudaFree(dn); +// } + +// int CheckCUDAProperty( int devId ) +// { +// cuInit(0); + +// CUdevice dev = devId; +// size_t memSize = 0; +// char devName[256] = {0}; +// int major = 0, minor = 0; +// CUresult rlt = CUDA_SUCCESS; + +// rlt = cuDeviceGetAttribute(&major, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MAJOR, dev); +// checkCudaErrors( rlt ); + +// rlt = cuDeviceGetAttribute(&minor, CU_DEVICE_ATTRIBUTE_COMPUTE_CAPABILITY_MINOR, dev); +// checkCudaErrors( rlt ); + +// rlt = cuDeviceGetName( devName, sizeof( devName ), dev ); +// checkCudaErrors( rlt ); + +// printf( "Using GPU Device %d: %s has SM %d.%d compute capability\n", +// dev, devName, major, minor ); + +// rlt = cuDeviceTotalMem( &memSize, dev ); +// checkCudaErrors( rlt ); + +// printf( "Total amount of global memory: %4.4f MB\n", +// (float)memSize / ( 1024 * 1024 ) ); + +// return 0; +// } + +/** + * 注意: gpuFrame 在解码器设置的显卡上,后续操作要十分注意这一点,尤其是多线程情况 + * */ +static long lastpts = 0; +void postDecoded(const void * userPtr, DeviceRgbMemory * gpuFrame){ + AbstractDecoder* decoder = (AbstractDecoder*)userPtr; + if (decoder!= nullptr) + { + long curpts = UtilTools::get_cur_time_ms(); + cout << decoder->getName() << " " << gpuFrame->getWidth() << "x" << gpuFrame->getHeight() << " " << curpts - lastpts << endl; + lastpts = curpts; + delete gpuFrame; + gpuFrame = nullptr; + + // const char* gpu_pixfmt = av_get_pix_fmt_name((AVPixelFormat)gpuFrame->format); + // cout << "pixfmt: " << gpu_pixfmt << endl; + // cout << "keyframe: " << gpuFrame->key_frame << " width: " << gpuFrame->width << " height: "<< gpuFrame->height << endl; + // cout << "decode successed ✿✿ヽ(°▽°)ノ✿ " << endl; + + // int sum = sum1; + // if (decoder->getName() == "dec0") + // { + // sum1 ++ ; + // sum = sum1; + + // if (gpuFrame->format == AV_PIX_FMT_CUDA) + // { + // // cout << "gpuid = " << atoi(decoder->m_cfg.gpuid.c_str()) << endl; + // cudaSetDevice(atoi(decoder->m_cfg.gpuid.c_str())); + // cudaError_t cudaStatus; + // if(pHwRgb[0] == nullptr){ + // // cudaStreamCreate(&stream[0]); + // cuda_common::setColorSpace( ITU_709, 0 ); + // cudaStatus = cudaMalloc((void **)&pHwRgb[0], 3 * gpuFrame->width * gpuFrame->height * sizeof(unsigned char)); + // } + // cudaStatus = cuda_common::CUDAToBGR((CUdeviceptr)gpuFrame->data[0],(CUdeviceptr)gpuFrame->data[1], gpuFrame->linesize[0], gpuFrame->linesize[1], pHwRgb[0], gpuFrame->width, gpuFrame->height); + // cudaDeviceSynchronize(); + // if (cudaStatus != cudaSuccess) { + // cout << "CUDAToBGR failed !!!" << endl; + // return; + // } + + // string path = data_home + decoder->getName() + ".jpg"; + // saveJpeg(path.c_str(), pHwRgb[0], gpuFrame->width, gpuFrame->height, stream[0]); // 验证 CUDAToRGB + // } + // } else if (decoder->getName() == "dec2") + // { + // sum2 ++ ; + // sum = sum2; + + // if (gpuFrame->format == AV_PIX_FMT_CUDA) + // { + // // cout << "gpuid = " << atoi(decoder->m_cfg.gpuid.c_str()) << endl; + // cudaSetDevice(atoi(decoder->m_cfg.gpuid.c_str())); + // cudaError_t cudaStatus; + // if(pHwRgb[1] == nullptr){ + // // cudaStreamCreate(&stream[1]); + // cuda_common::setColorSpace( ITU_709, 0 ); + // cudaStatus = cudaMalloc((void **)&pHwRgb[1], 3 * gpuFrame->width * gpuFrame->height * sizeof(unsigned char)); + // } + // cudaStatus = cuda_common::CUDAToBGR((CUdeviceptr)gpuFrame->data[0],(CUdeviceptr)gpuFrame->data[1], gpuFrame->linesize[0], gpuFrame->linesize[1], pHwRgb[1], gpuFrame->width, gpuFrame->height); + // cudaDeviceSynchronize(); + // if (cudaStatus != cudaSuccess) { + // cout << "CUDAToBGR failed !!!" << endl; + // return; + // } + + // string path = data_home + decoder->getName() + ".jpg"; + // saveJpeg(path.c_str(), pHwRgb[1], gpuFrame->width, gpuFrame->height, stream[1]); // 验证 CUDAToRGB + // } + // } + } +} + +long start_time = 0; +long end_time = 0; +bool count_flag = false; +int count = 0; +int count_std = 100; + + +static int sum = 0; +unsigned char *pHwData = nullptr; + +void postDecoded0(const void * userPtr, DeviceRgbMemory* gpuFrame){ + // std::this_thread::sleep_for(std::chrono::milliseconds(30000)); + + AbstractDecoder* decoder = (AbstractDecoder*)userPtr; + if (decoder!= nullptr) + { + // cout << "decode name: " << decoder->getName() << endl; + // if (decoder->getName() == "dec") + // { + // if (! count_flag) + // { + // count_flag = true; + // count = 0; + // end_time = start_time = UtilTools::get_cur_time_ms(); + // } + // count++; + // sum ++ ; + // if (count >= count_std) + // { + // // end_time = UtilTools::get_cur_time_ms(); + // // long time_using = end_time - start_time; + // // double time_per_frame = double(time_using)/count_std ; + // // cout << count_std << "帧用时:" << time_using << "ms 每帧用时:" << time_per_frame << "ms" << endl; + // cout << decoder->getName() << " keyframe: " << gpuFrame->key_frame << " width: " << gpuFrame->width << " height: "<< gpuFrame->height << endl; + // // cout << gpuFrame->pts << endl; + + // count_flag = false; + // } + // // cout << "帧数:" << sum << endl; + + // if (gpuFrame->format == AV_PIX_FMT_CUDA) + // { + // cudaSetDevice(atoi(decoder->m_cfg.gpuid.c_str())); + // // cout << "gpu id : " << decoder->m_cfg.gpuid.c_str() << endl; + // cudaError_t cudaStatus; + // if(pHwData == nullptr){ + // cuda_common::setColorSpace( ITU_709, 0 ); + // cudaStatus = cudaMalloc((void **)&pHwData, 3 * gpuFrame->width * gpuFrame->height * sizeof(unsigned char)); + // } + // cudaStatus = cuda_common::CUDAToBGR((CUdeviceptr)gpuFrame->data[0],(CUdeviceptr)gpuFrame->data[1], gpuFrame->linesize[0], gpuFrame->linesize[1], pHwData, gpuFrame->width, gpuFrame->height); + // cudaDeviceSynchronize(); + // if (cudaStatus != cudaSuccess) { + // cout << "CUDAToBGR failed !!!" << endl; + // return; + // } + + // string path = data_home + decoder->getName() + ".jpg"; + // saveJpeg(path.c_str(), pHwData, gpuFrame->width, gpuFrame->height, nullptr); // 验证 CUDAToRGB + // } + // } + } +} + +void decode_finished_cbk(const void* userPtr){ + cout << "当前时间戳: " << UtilTools::get_cur_time_ms() << endl; +} + +bool decode_request_stream_cbk(const char* deviceId){ + cout << "需在此请求流" << endl; + return true; +} + +// string test_uri = "rtmp://192.168.10.56:1935/objecteye/1"; +// string test_uri = "/home/cmhu/data/output_800x480.mp4"; +// string test_uri = "/home/cmhu/data/output_1920x1080.mp4"; +// string test_uri = "rtsp://176.10.0.2:8554/stream"; +// string test_uri = "/mnt/f/fiss/test_data/h265.mp4"; +string test_uri = "rtsp://176.10.0.4:8554/stream"; + +void createDecode(int index, const char* gpu_id){ + FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); + MgrDecConfig config; + config.name = "dec" + to_string(index); + config.cfg.uri = test_uri; + config.cfg.post_decoded_cbk = postDecoded; + config.cfg.decode_finished_cbk = decode_finished_cbk; + config.cfg.force_tcp = true; + config.dec_type = DECODER_TYPE_FFMPEG; + + config.cfg.gpuid = gpu_id; + // if (index % 2 == 0) + // { + // config.cfg.gpuid = "0"; + // } + // else + // { + // config.cfg.gpuid = "0"; + // } + + AbstractDecoder* decoder = pDecManager->createDecoder(config); + if (!decoder) + { + return ; + } + pDecManager->setPostDecArg(config.name, decoder); + pDecManager->setFinishedDecArg(config.name, decoder); + pDecManager->startDecodeByName(config.name); +} + +void createGB28181Decode(int index, char* gpu_id, int port){ + FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); + MgrDecConfig config; + config.name = "dec" + to_string(index); + config.cfg.uri = config.name; + config.cfg.post_decoded_cbk = postDecoded; + config.cfg.decode_finished_cbk = decode_finished_cbk; + config.cfg.request_stream_cbk = decode_request_stream_cbk; + config.cfg.force_tcp = true; + + config.dec_type = DECODER_TYPE_GB28181; + config.cfg.port = port;//allocRtpPort(); + + config.cfg.gpuid = gpu_id; + + AbstractDecoder* decoder = pDecManager->createDecoder(config); + if (!decoder) + { + return ; + } + pDecManager->setPostDecArg(config.name, decoder); + pDecManager->setFinishedDecArg(config.name, decoder); + pDecManager->startDecodeByName(config.name); +} + +void logFF(void *, int level, const char *fmt, va_list ap) +{ + vfprintf(stdout, fmt, ap); +} + + +int main(int argc, char* argv[]){ + + test_uri = "rtsp://admin:admin@123456@192.168.60.176:554/cam/realmonitor?channel=1&subtype=0";//argv[1]; + char* gpuid = argv[2]; + int port = atoi(argv[3]); + cout << test_uri << " gpu_id:" << gpuid << " port:" << port << endl; + + // av_log_set_callback(&logFF); + + // CheckCUDAProperty(atoi(gpuid)); + + pthread_t m_decode_thread; + pthread_create(&m_decode_thread,0, + [](void* arg) + { + // cudaSetDevice(atoi(gpuid)); + while (true) + { + std::this_thread::sleep_for(std::chrono::minutes(1)); + FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); + int count = pDecManager->count(); + cout << "当前时间:" << UtilTools::get_cur_time_ms() << " 当前运行路数: " << pDecManager->count() << endl; + } + + return (void*)0; + } + ,nullptr); + + + FFNvDecoderManager* pDecManager = FFNvDecoderManager::getInstance(); + int i = 0; + + while (true) + { + int ch = getchar(); + if (ch == 'q') + { + break; + } + + switch (ch) + { + case 'f': + case 'F': + createDecode(i, gpuid); + i++; + break; + case 'g': + case 'G': + createGB28181Decode(i, gpuid, port); + i++; + break; + case 'r': + case 'R': + pDecManager->resumeDecoder("dec0"); + break; + case 'p': + case 'P': + pDecManager->pauseDecoder("dec0"); + break; + + case 'c': + case 'C': + i--; + pDecManager->closeDecoderByName("dec" + to_string(i)); + break; + + case 'i': + case 'I': + { + int w,h; + pDecManager->getResolution("dec0", w,h); + printf( "%s : %dx%d\n", "dec0" , w,h ); + } + break; + + default: + break; + } + + /* code */ + } + + cout << "总共帧数:" << sum << endl; + pDecManager->closeAllDecoder(); +} \ No newline at end of file diff --git a/src/dvpp/Makefile b/src/dvpp/Makefile index 1f044f5..8bca911 100644 --- a/src/dvpp/Makefile +++ b/src/dvpp/Makefile @@ -15,7 +15,7 @@ DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d DEFS = -DENABLE_DVPP_INTERFACE # 最终目标文件 -TARGET:=$(LIB_DIR)/lib$(MODULE).a +TARGET:=$(LIB_DIR)/$(MODULE).a export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/runtime/lib64:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=/usr/local/Ascend/ascend-toolkit/6.3.RC1.alpha001/lib64:$LD_LIBRARY_PATH @@ -25,7 +25,7 @@ include_dir=-I/usr/local/Ascend/ascend-toolkit/latest/acllib/include lib_dir=-L/usr/lib -L/usr/local/lib -L/usr/local/Ascend/ascend-toolkit/latest/acllib/lib64 -L/usr/local/Ascend/driver/lib64 -L/usr/local/Ascend/ascend-toolkit/latest/atc/lib64 lib=-lacl_dvpp -lascendcl -lmmpa -lglog -lgflags -lpthread -lz -CXXFLAGS= -g -O0 -fPIC $(include_dir) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl +CXXFLAGS= -g -O0 -fPIC $(include_dir) $(INCS) $(LIBS) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl # -DUNICODE -D_UNICODE # 默认最终目标 @@ -44,7 +44,7 @@ $(LIB_DIR): # 生成中间目标文件 $(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp $(DEP_DIR)/%.d | $(OBJ_DIR) $(DEP_DIR) @echo -e "\e[33m""Building object $@""\e[0m" - @$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) $(INCS) $(LDFLAGS) $(lib_dir) $(lib) $(MACROS) -o $@ $< + @$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) $(LDFLAGS) $(lib_dir) $(lib) $(MACROS) -o $@ $< # 若没有obj目录则自动生成 $(OBJ_DIR): diff --git a/src/interface/FFNvDecoderManager.h b/src/interface/FFNvDecoderManager.h index ca23f91..2c1e3eb 100644 --- a/src/interface/FFNvDecoderManager.h +++ b/src/interface/FFNvDecoderManager.h @@ -14,7 +14,7 @@ struct MgrDecConfig string name{""}; // 解码器名称 }; -#define USE_NVDEC +// #define USE_NVDEC // #define USE_DVPP /** * 解码器管理类,单例类 diff --git a/src/nvdec/Makefile b/src/nvdec/Makefile index 5d1e8ad..2a6afb2 100644 --- a/src/nvdec/Makefile +++ b/src/nvdec/Makefile @@ -15,7 +15,7 @@ NVCC = $(CUDA_ROOT)/bin/nvcc # 自动生成头文件依赖选项 DEPFLAGS=-MT $@ -MMD -MP -MF $(DEP_DIR)/$*.d -DEFS = -DENABLE_DVPP_INTERFACE +DEFS = # 最终目标文件 TARGET:=$(LIB_DIR)/$(MODULE).a @@ -34,7 +34,7 @@ LIBSPATH= -L $(JRTP_ROOT)/jthread/lib -l:libjthread.a \ -L $(JRTP_ROOT)/jrtplib/lib -l:libjrtp.a \ -L $(CUDA_ROOT)/lib64 -lcuda -lcudart -lnvcuvid -lcurand -lcublas -lnvjpeg \ -CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(LIBSPATH) $(DEFS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -Wwrite-strings +CXXFLAGS= -g -O0 -fPIC $(INCLUDE) $(LIBSPATH) $(DEFS) $(INCS) $(LIBS) $(MACROS) -lpthread -lrt -lz -fexceptions -std=c++11 -fvisibility=hidden -Wl,-Bsymbolic -ldl -Wwrite-strings # -DUNICODE -D_UNICODE NFLAGS_LIB=-g -c -shared -Xcompiler -fPIC @@ -61,8 +61,8 @@ $(LIB_DIR): # 生成中间目标文件 $(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp $(DEP_DIR)/%.d | $(OBJ_DIR) $(DEP_DIR) @echo -e "\e[33m""Building object $@""\e[0m" - @echo "$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) $(INCS) $(LIBS) $(MACROS) -o $@ $<" - @$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) $(INCS) $(LIBS) $(MACROS) -o $@ $< + @echo "$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $<" + @$(CXX) -c $(DEPFLAGS) $(CXXFLAGS) -o $@ $< $(OBJ_DIR)%.o:$(SRC_DIR)/%.cu @echo -e "\e[33m""Building object $@""\e[0m" -- libgit2 0.21.4