MCPcopy Create free account
hub / github.com/OpenShot/libopenshot / GetMaskImage

Method GetMaskImage

src/EffectBase.cpp:432–480  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

430}
431
432std::shared_ptr<QImage> EffectBase::GetMaskImage(std::shared_ptr<QImage> target_image, int64_t frame_number) {
433 if (!mask_reader || !target_image || target_image->isNull())
434 return {};
435
436 std::shared_ptr<QImage> source_mask;
437 bool used_cached_scaled = false;
438 #pragma omp critical (open_effect_mask_reader)
439 {
440 try {
441 if (!mask_reader->IsOpen())
442 mask_reader->Open();
443
444 if (mask_reader->info.has_single_image &&
445 cached_single_mask_image &&
446 cached_single_mask_width == target_image->width() &&
447 cached_single_mask_height == target_image->height()) {
448 source_mask = cached_single_mask_image;
449 used_cached_scaled = true;
450 }
451 else {
452 const int64_t mapped_frame = MapMaskFrameNumber(frame_number);
453 auto source_frame = mask_reader->GetFrame(mapped_frame);
454 if (source_frame && source_frame->GetImage() && !source_frame->GetImage()->isNull())
455 source_mask = std::make_shared<QImage>(*source_frame->GetImage());
456 }
457 } catch (const std::exception& e) {
458 ZmqLogger::Instance()->Log(
459 std::string("EffectBase::GetMaskImage unable to read mask frame: ") + e.what());
460 source_mask.reset();
461 }
462 }
463
464 if (!source_mask || source_mask->isNull())
465 return {};
466
467 if (used_cached_scaled)
468 return source_mask;
469
470 auto scaled_mask = std::make_shared<QImage>(
471 source_mask->scaled(
472 target_image->width(), target_image->height(),
473 Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
474 if (mask_reader->info.has_single_image) {
475 cached_single_mask_image = scaled_mask;
476 cached_single_mask_width = target_image->width();
477 cached_single_mask_height = target_image->height();
478 }
479 return scaled_mask;
480}
481
482void EffectBase::BlendWithMask(std::shared_ptr<QImage> original_image, std::shared_ptr<QImage> effected_image,
483 std::shared_ptr<QImage> mask_image) const {

Callers

nothing calls this directly

Calls 7

GetImageMethod · 0.80
LogMethod · 0.80
resetMethod · 0.80
IsOpenMethod · 0.45
OpenMethod · 0.45
GetFrameMethod · 0.45
whatMethod · 0.45

Tested by

no test coverage detected