From ee638d8ed2e12416596b105b925a92d587d64528 Mon Sep 17 00:00:00 2001 From: zhuxu Date: Mon, 15 Aug 2022 10:16:27 +0800 Subject: [PATCH] fix: modify distributed camera release data process Signed-off-by: zhuxu --- .../color_format_process.cpp | 3 ++- .../fpscontroller/fps_controller_process.cpp | 10 ++++++---- .../decoder/decode_data_process.cpp | 11 +++++----- .../decoder/decode_data_process_common.cpp | 11 +++++----- .../encoder/encode_data_process.cpp | 9 +++++---- .../encoder/encode_data_process_common.cpp | 9 +++++---- .../scale_convert_process.cpp | 20 +++++++++++-------- 7 files changed, 42 insertions(+), 31 deletions(-) diff --git a/services/data_process/src/pipeline_node/colorspace_conversion/color_format_process.cpp b/services/data_process/src/pipeline_node/colorspace_conversion/color_format_process.cpp index 88edf0f6..61f751e9 100644 --- a/services/data_process/src/pipeline_node/colorspace_conversion/color_format_process.cpp +++ b/services/data_process/src/pipeline_node/colorspace_conversion/color_format_process.cpp @@ -67,8 +67,9 @@ void ColorFormatProcess::ReleaseProcessNode() if (nextDataProcess_ != nullptr) { nextDataProcess_->ReleaseProcessNode(); + nextDataProcess_ = nullptr; } - nextDataProcess_ = nullptr; + DHLOGD("Release [%d] node : ColorFormatNode end.", nodeRank_); } int32_t ColorFormatProcess::ProcessData(std::vector>& inputBuffers) diff --git a/services/data_process/src/pipeline_node/fpscontroller/fps_controller_process.cpp b/services/data_process/src/pipeline_node/fpscontroller/fps_controller_process.cpp index 9017b797..cfa057f8 100644 --- a/services/data_process/src/pipeline_node/fpscontroller/fps_controller_process.cpp +++ b/services/data_process/src/pipeline_node/fpscontroller/fps_controller_process.cpp @@ -50,10 +50,6 @@ int32_t FpsControllerProcess::InitNode(const VideoConfigParams& sourceConfig, co void FpsControllerProcess::ReleaseProcessNode() { DHLOGD("Start release [%d] node : FPS controller.", nodeRank_); - if (nextDataProcess_ != nullptr) { - nextDataProcess_->ReleaseProcessNode(); - } - isFpsControllerProcess_ = false; isFirstFrame_ = false; targetFrameRate_ = 0; @@ -67,6 +63,12 @@ void FpsControllerProcess::ReleaseProcessNode() for (int i = 0; i < INCOME_FRAME_TIME_HISTORY_WINDOWS_SIZE; i++) { incomingFrameTimesMs_[i] = 0; } + + if (nextDataProcess_ != nullptr) { + nextDataProcess_->ReleaseProcessNode(); + nextDataProcess_ = nullptr; + } + DHLOGD("Release [%d] node : FPS controller end.", nodeRank_); } int32_t FpsControllerProcess::ProcessData(std::vector>& inputBuffers) diff --git a/services/data_process/src/pipeline_node/multimedia_codec/decoder/decode_data_process.cpp b/services/data_process/src/pipeline_node/multimedia_codec/decoder/decode_data_process.cpp index d5f6a9c3..95033078 100644 --- a/services/data_process/src/pipeline_node/multimedia_codec/decoder/decode_data_process.cpp +++ b/services/data_process/src/pipeline_node/multimedia_codec/decoder/decode_data_process.cpp @@ -326,13 +326,9 @@ void DecodeDataProcess::ReleaseProcessNode() { DHLOGD("Start release [%d] node : DecodeNode.", nodeRank_); isDecoderProcess_.store(false); - if (nextDataProcess_ != nullptr) { - nextDataProcess_->ReleaseProcessNode(); - } - - ReleaseCodecEvent(); ReleaseVideoDecoder(); ReleaseDecoderSurface(); + ReleaseCodecEvent(); processType_ = ""; std::queue>().swap(inputBuffersQueue_); @@ -341,6 +337,11 @@ void DecodeDataProcess::ReleaseProcessNode() lastFeedDecoderInputBufferTimeUs_ = 0; outputTimeStampUs_ = 0; alignedHeight_ = 0; + + if (nextDataProcess_ != nullptr) { + nextDataProcess_->ReleaseProcessNode(); + nextDataProcess_ = nullptr; + } DHLOGD("Release [%d] node : DecodeNode end.", nodeRank_); } diff --git a/services/data_process/src/pipeline_node/multimedia_codec/decoder/decode_data_process_common.cpp b/services/data_process/src/pipeline_node/multimedia_codec/decoder/decode_data_process_common.cpp index 26166903..c06b08e3 100644 --- a/services/data_process/src/pipeline_node/multimedia_codec/decoder/decode_data_process_common.cpp +++ b/services/data_process/src/pipeline_node/multimedia_codec/decoder/decode_data_process_common.cpp @@ -315,13 +315,9 @@ void DecodeDataProcess::ReleaseProcessNode() { DHLOGD("Start release [%d] node : DecodeNode.", nodeRank_); isDecoderProcess_.store(false); - if (nextDataProcess_ != nullptr) { - nextDataProcess_->ReleaseProcessNode(); - } - - ReleaseCodecEvent(); ReleaseVideoDecoder(); ReleaseDecoderSurface(); + ReleaseCodecEvent(); processType_ = ""; std::queue>().swap(inputBuffersQueue_); @@ -330,6 +326,11 @@ void DecodeDataProcess::ReleaseProcessNode() lastFeedDecoderInputBufferTimeUs_ = 0; outputTimeStampUs_ = 0; alignedHeight_ = 0; + + if (nextDataProcess_ != nullptr) { + nextDataProcess_->ReleaseProcessNode(); + nextDataProcess_ = nullptr; + } DHLOGD("Release [%d] node : DecodeNode end.", nodeRank_); } diff --git a/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process.cpp b/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process.cpp index 9d67bc14..25ed01b9 100644 --- a/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process.cpp +++ b/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process.cpp @@ -321,16 +321,17 @@ void EncodeDataProcess::ReleaseProcessNode() { DHLOGD("Start release [%d] node : EncodeNode.", nodeRank_); isEncoderProcess_.store(false); - if (nextDataProcess_ != nullptr) { - nextDataProcess_->ReleaseProcessNode(); - } - ReleaseVideoEncoder(); waitEncoderOutputCount_ = 0; lastFeedEncoderInputBufferTimeUs_ = 0; inputTimeStampUs_ = 0; processType_ = ""; + + if (nextDataProcess_ != nullptr) { + nextDataProcess_->ReleaseProcessNode(); + nextDataProcess_ = nullptr; + } DHLOGD("Release [%d] node : EncodeNode end.", nodeRank_); } diff --git a/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process_common.cpp b/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process_common.cpp index 36b61665..c95f53ca 100644 --- a/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process_common.cpp +++ b/services/data_process/src/pipeline_node/multimedia_codec/encoder/encode_data_process_common.cpp @@ -293,16 +293,17 @@ void EncodeDataProcess::ReleaseProcessNode() { DHLOGD("Start release [%d] node : EncodeNode.", nodeRank_); isEncoderProcess_.store(false); - if (nextDataProcess_ != nullptr) { - nextDataProcess_->ReleaseProcessNode(); - } - ReleaseVideoEncoder(); waitEncoderOutputCount_ = 0; lastFeedEncoderInputBufferTimeUs_ = 0; inputTimeStampUs_ = 0; processType_ = ""; + + if (nextDataProcess_ != nullptr) { + nextDataProcess_->ReleaseProcessNode(); + nextDataProcess_ = nullptr; + } DHLOGD("Release [%d] node : EncodeNode end.", nodeRank_); } diff --git a/services/data_process/src/pipeline_node/scale_conversion/scale_convert_process.cpp b/services/data_process/src/pipeline_node/scale_conversion/scale_convert_process.cpp index 19f41031..590425ea 100644 --- a/services/data_process/src/pipeline_node/scale_conversion/scale_convert_process.cpp +++ b/services/data_process/src/pipeline_node/scale_conversion/scale_convert_process.cpp @@ -82,18 +82,22 @@ void ScaleConvertProcess::ReleaseProcessNode() { DHLOGI("Start release [%d] node : ScaleConvertNode.", nodeRank_); isScaleConvert_.store(false); + + { + std::lock_guard autoLock(scaleMutex_); + if (swsContext_ != nullptr) { + av_freep(&srcData_[0]); + av_freep(&dstData_[0]); + sws_freeContext(swsContext_); + swsContext_ = nullptr; + } + } + if (nextDataProcess_ != nullptr) { nextDataProcess_->ReleaseProcessNode(); nextDataProcess_ = nullptr; } - - std::lock_guard autoLock(scaleMutex_); - if (swsContext_ != nullptr) { - av_freep(&srcData_[0]); - av_freep(&dstData_[0]); - sws_freeContext(swsContext_); - swsContext_ = nullptr; - } + DHLOGI("Release [%d] node : ScaleConvertNode end.", nodeRank_); } int ScaleConvertProcess::ProcessData(std::vector>& inputBuffers) -- Gitee