libcamera: ipa: raspberrypi: ALSC: Improve locking in a few places

Fix up a few locations where we call notify_one() with the lock
held. In particular, restartAsync does not need to be called with the
lock held for its entire duration.

Signed-off-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
David Plowman 2020-08-01 09:01:49 +01:00 committed by Laurent Pinchart
parent 3a680a667f
commit db552b0b92

View file

@ -32,8 +32,8 @@ Alsc::~Alsc()
{ {
std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::mutex> lock(mutex_);
async_abort_ = true; async_abort_ = true;
async_signal_.notify_one();
} }
async_signal_.notify_one();
async_thread_.join(); async_thread_.join();
} }
@ -268,8 +268,11 @@ void Alsc::restartAsync(StatisticsPtr &stats, Metadata *image_metadata)
frame_phase_ = 0; frame_phase_ = 0;
// copy the camera mode so it won't change during the calculations // copy the camera mode so it won't change during the calculations
async_camera_mode_ = camera_mode_; async_camera_mode_ = camera_mode_;
async_start_ = true;
async_started_ = true; async_started_ = true;
{
std::lock_guard<std::mutex> lock(mutex_);
async_start_ = true;
}
async_signal_.notify_one(); async_signal_.notify_one();
} }
@ -315,7 +318,6 @@ void Alsc::Process(StatisticsPtr &stats, Metadata *image_metadata)
RPI_LOG("Alsc: frame_phase " << frame_phase_); RPI_LOG("Alsc: frame_phase " << frame_phase_);
if (frame_phase_ >= (int)config_.frame_period || if (frame_phase_ >= (int)config_.frame_period ||
frame_count2_ < (int)config_.startup_frames) { frame_count2_ < (int)config_.startup_frames) {
std::unique_lock<std::mutex> lock(mutex_);
if (async_started_ == false) { if (async_started_ == false) {
RPI_LOG("ALSC thread starting"); RPI_LOG("ALSC thread starting");
restartAsync(stats, image_metadata); restartAsync(stats, image_metadata);
@ -339,8 +341,8 @@ void Alsc::asyncFunc()
{ {
std::lock_guard<std::mutex> lock(mutex_); std::lock_guard<std::mutex> lock(mutex_);
async_finished_ = true; async_finished_ = true;
sync_signal_.notify_one();
} }
sync_signal_.notify_one();
} }
} }