From fa62874b44f75516be168f8eebc6e78283a8abd2 Mon Sep 17 00:00:00 2001 From: Dorson Tang Date: Wed, 29 Jul 2026 18:38:13 -0700 Subject: [PATCH 1/3] changed in place blurring to buffer --- src/modules/opencv/filter_opencv_tracker.cpp | 39 +++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/modules/opencv/filter_opencv_tracker.cpp b/src/modules/opencv/filter_opencv_tracker.cpp index ec0a89c56..544a39c24 100644 --- a/src/modules/opencv/filter_opencv_tracker.cpp +++ b/src/modules/opencv/filter_opencv_tracker.cpp @@ -468,18 +468,19 @@ static int filter_get_image(mlt_frame frame, } if (blur > 0 && data->boundingBox.width > 1 && data->boundingBox.height > 1) { + cv::Mat roi = cvFrame(data->boundingBox); + cv::Mat blurredRoi; + roi.copyTo(blurredRoi); + bool do_blur = true; + switch (mlt_properties_get_int(filter_properties, "blur_type")) { case 1: // Gaussian Blur - cv::GaussianBlur(cvFrame(data->boundingBox), - cvFrame(data->boundingBox), - cv::Size(0, 0), - blur); + cv::GaussianBlur(roi, blurredRoi, cv::Size(0, 0), blur); break; case 2: // Pixelate { - cv::Mat roi = cvFrame(data->boundingBox); cv::Mat res; cv::resize(roi, res, @@ -487,17 +488,17 @@ static int filter_get_image(mlt_frame frame, MAX(2, data->boundingBox.height / blur)), cv::INTER_NEAREST); cv::resize(res, - roi, + blurredRoi, cv::Size(data->boundingBox.width, data->boundingBox.height), 0, 0, cv::INTER_NEAREST); - cvFrame(data->boundingBox) = roi; } break; case 3: // Opaque fill, handled in shape_width option shape_width = -1; + do_blur = false; break; case 0: // Median Blur @@ -506,12 +507,32 @@ static int filter_get_image(mlt_frame frame, // median blur param must be odd and, minimum 3 ++blur; } - cv::medianBlur(cvFrame(data->boundingBox), cvFrame(data->boundingBox), blur); + cv::medianBlur(roi, blurredRoi, blur); break; default: - // Do nothing + do_blur = false; break; } + + if (do_blur) { + switch (mlt_properties_get_int(filter_properties, "shape")) { + case 1: + // Ellipse + { + cv::Mat mask = cv::Mat::zeros(roi.size(), CV_8UC1); + cv::RotatedRect bounding = cv::RotatedRect(cv::Point2f(data->boundingBox.width / 2.0f, + data->boundingBox.height / 2.0f), + cv::Size2f(data->boundingBox.width, data->boundingBox.height), + 0); + cv::ellipse(mask, bounding, cv::Scalar(255), -1, 1); + blurredRoi.copyTo(roi, mask); + } + break; + default: + blurredRoi.copyTo(roi); + break; + } + } } // Paint overlay shape From d452d4594e617c6ed0a694654905363336108aa7 Mon Sep 17 00:00:00 2001 From: Dorson Tang Date: Fri, 31 Jul 2026 12:55:54 -0700 Subject: [PATCH 2/3] unnecessary copy and change constant to enum --- src/modules/opencv/filter_opencv_tracker.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/modules/opencv/filter_opencv_tracker.cpp b/src/modules/opencv/filter_opencv_tracker.cpp index 544a39c24..b7bc9c029 100644 --- a/src/modules/opencv/filter_opencv_tracker.cpp +++ b/src/modules/opencv/filter_opencv_tracker.cpp @@ -470,7 +470,6 @@ static int filter_get_image(mlt_frame frame, if (blur > 0 && data->boundingBox.width > 1 && data->boundingBox.height > 1) { cv::Mat roi = cvFrame(data->boundingBox); cv::Mat blurredRoi; - roi.copyTo(blurredRoi); bool do_blur = true; switch (mlt_properties_get_int(filter_properties, "blur_type")) { @@ -524,7 +523,7 @@ static int filter_get_image(mlt_frame frame, data->boundingBox.height / 2.0f), cv::Size2f(data->boundingBox.width, data->boundingBox.height), 0); - cv::ellipse(mask, bounding, cv::Scalar(255), -1, 1); + cv::ellipse(mask, bounding, cv::Scalar(255), -1, cv::LINE_4); blurredRoi.copyTo(roi, mask); } break; From 72bf9d8af52c0cc42b238bd60ee632d98e8634db Mon Sep 17 00:00:00 2001 From: Dorson Tang Date: Fri, 31 Jul 2026 12:57:53 -0700 Subject: [PATCH 3/3] change existing value to enum --- src/modules/opencv/filter_opencv_tracker.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/opencv/filter_opencv_tracker.cpp b/src/modules/opencv/filter_opencv_tracker.cpp index b7bc9c029..43b157d55 100644 --- a/src/modules/opencv/filter_opencv_tracker.cpp +++ b/src/modules/opencv/filter_opencv_tracker.cpp @@ -566,7 +566,7 @@ static int filter_get_image(mlt_frame frame, bounding, cv::Scalar(shape_color.r, shape_color.g, shape_color.b), shape_width, - 1); + cv::LINE_4); } break; case 0: