From ace89efa5986e9e9075b5031ff7d85c815cbd0db Mon Sep 17 00:00:00 2001 From: Jonathan Thomas Date: Wed, 6 Jun 2018 06:31:46 -0500 Subject: [PATCH] Move critical sections to prevent crash on Windows --- src/effects/Mask.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/effects/Mask.cpp b/src/effects/Mask.cpp index 5ed0ede2..58f00d20 100644 --- a/src/effects/Mask.cpp +++ b/src/effects/Mask.cpp @@ -59,29 +59,35 @@ void Mask::init_effect_details() // This method is required for all derived classes of EffectBase, and returns a // modified openshot::Frame object -std::shared_ptr Mask::GetFrame(std::shared_ptr frame, int64_t frame_number) -{ +std::shared_ptr Mask::GetFrame(std::shared_ptr frame, int64_t frame_number) { // Get the mask image (from the mask reader) std::shared_ptr frame_image = frame->GetImage(); // Check if mask reader is open - if (reader && !reader->IsOpen()) - #pragma omp critical (open_mask_reader) - reader->Open(); + #pragma omp critical (open_mask_reader) + { + if (reader && !reader->IsOpen()) + reader->Open(); + } // No reader (bail on applying the mask) if (!reader) return frame; // Get mask image (if missing or different size than frame image) - if (!original_mask || !reader->info.has_single_image || (original_mask && original_mask->size() != frame_image->size())) { - #pragma omp critical (open_mask_reader) - { + #pragma omp critical (open_mask_reader) + { + if (!original_mask || !reader->info.has_single_image || + (original_mask && original_mask->size() != frame_image->size())) { + // Only get mask if needed - std::shared_ptr mask_without_sizing = std::shared_ptr(new QImage(*reader->GetFrame(frame_number)->GetImage())); + std::shared_ptr mask_without_sizing = std::shared_ptr( + new QImage(*reader->GetFrame(frame_number)->GetImage())); // Resize mask image to match frame size - original_mask = std::shared_ptr(new QImage(mask_without_sizing->scaled(frame_image->width(), frame_image->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation))); + original_mask = std::shared_ptr(new QImage( + mask_without_sizing->scaled(frame_image->width(), frame_image->height(), Qt::IgnoreAspectRatio, + Qt::SmoothTransformation))); } }