diff --git a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.h b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.h index 116638d4f6e5c1bf37043caf2320b6404c0f28e8..5f301e22b910402583e6d5ac8b999483d6036268 100644 --- a/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.h +++ b/services/cameraservice/sourceservice/include/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.h @@ -42,6 +42,7 @@ public: void UpdateInterval(uint32_t fps); private: + void StartEvent(); void LooperContinue(); void LooperSnapShot(); int32_t FeedStreamToDriver(const std::shared_ptr& dhBase, const std::shared_ptr& buffer); @@ -54,6 +55,7 @@ private: std::string dhId_; std::thread producerThread_; + std::thread eventThread_; std::condition_variable producerCon_; std::mutex producerMutex_; std::queue> buffers_; diff --git a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.cpp b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.cpp index bd611bc87304be4188214bf23d0bf639bbb88db0..16445cd8ab29c306b1c7fe83557672b5058062ff 100644 --- a/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.cpp +++ b/services/cameraservice/sourceservice/src/distributedcameramgr/dcameradata/dcamera_stream_data_process_producer.cpp @@ -51,9 +51,7 @@ void DCameraStreamDataProcessProducer::Start() state_ = DCAMERA_PRODUCER_STATE_START; if (streamType_ == CONTINUOUS_FRAME) { producerThread_ = std::thread(&DCameraStreamDataProcessProducer::LooperContinue, this); - std::string threadName = "DCameraProducer_" + std::to_string(streamType_) + "_" + std::to_string(streamId_); - auto runner = AppExecFwk::EventRunner::Create(threadName); - eventHandler_ = std::make_shared(runner); + eventThread_ = std::thread(&DCameraStreamDataProcessProducer::StartEvent, this); } else { producerThread_ = std::thread(&DCameraStreamDataProcessProducer::LooperSnapShot, this); } @@ -66,7 +64,11 @@ void DCameraStreamDataProcessProducer::Stop() state_ = DCAMERA_PRODUCER_STATE_STOP; producerCon_.notify_one(); producerThread_.join(); - eventHandler_ = nullptr; + if (streamType_ == CONTINUOUS_FRAME) { + eventHandler_->GetEventRunner()->Stop(); + eventThread_.join(); + eventHandler_ = nullptr; + } DHLOGI("DCameraStreamDataProcessProducer Stop end devId: %s dhId: %s streamType: %d streamId: %d state: %d", GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str(), streamType_, streamId_, state_); } @@ -87,6 +89,13 @@ void DCameraStreamDataProcessProducer::FeedStream(const std::shared_ptr(runner); + runner->Run(); +} + void DCameraStreamDataProcessProducer::LooperContinue() { DHLOGI("LooperContinue producer devId: %s dhId: %s streamType: %d streamId: %d state: %d",