From 3fa8f19daf8b36b0703002d78a84e5bb7919849b Mon Sep 17 00:00:00 2001 From: Nikita Kostovsky Date: Thu, 23 Jan 2025 12:08:26 +0100 Subject: add support of inno-maker ov9281 --- src/image.cpp | 44 ++++++++++++++++++++++++++++---------------- 1 file changed, 28 insertions(+), 16 deletions(-) (limited to 'src/image.cpp') diff --git a/src/image.cpp b/src/image.cpp index 7d1c824..ce814da 100644 --- a/src/image.cpp +++ b/src/image.cpp @@ -1,11 +1,20 @@ #include "image.h" +#include + #include "macro.h" #include "pixels.h" -float process_column(const uint16_t (&column)[]) +uint64_t sum_elapsed_ns = 0; +uint64_t corr_elapsed_ns = 0; +uint64_t max_elapsed_ns = 0; +uint64_t value_elapsed_ns = 0; + +float process_column(const uint8_t (&column)[]) { start_timer(process_column); + QElapsedTimer t; + t.start(); float result = std::numeric_limits::quiet_NaN(); @@ -24,23 +33,20 @@ float process_column(const uint16_t (&column)[]) memset(correlation, 0, img_height * sizeof(correlation[0])); integralSum[0] = 0; - for (uint32_t i = 1; i < img_height; ++i) - { - // if (column[i] < 100) - // { - // column[i] = 0; - // } - - integralSum[i] = column[i] / 256 + integralSum[i - 1]; + for (uint32_t i = 1; i < img_height; ++i) { + integralSum[i] = column[i] + integralSum[i - 1]; } + sum_elapsed_ns += t.nsecsElapsed(); + t.restart(); for (uint32_t i = 0; i < correlationSize; ++i) - correlation[i + patternSize / 2] = column[i + patternSize / 2] / 256 * - (integralSum[i + patternOffset] - - integralSum[i]); + correlation[i + patternSize / 2] = column[i + patternSize / 2] + * (integralSum[i + patternOffset] - integralSum[i]); - for (uint32_t i = 3; i < img_height - 2; ++i) - { + corr_elapsed_ns += t.nsecsElapsed(); + t.restart(); + + for (uint32_t i = 3; i < img_height - 2; ++i) { const auto sum = correlation[i - 1] + correlation[i] + correlation[i + 1]; @@ -69,6 +75,9 @@ float process_column(const uint16_t (&column)[]) } } + value_elapsed_ns += t.nsecsElapsed(); + t.restart(); + result = (y2 != y1) ? (float(x1) - (float(y1) / (y2 - y1))) : std::numeric_limits::quiet_NaN(); @@ -81,6 +90,8 @@ void Image::rotate() using namespace std; +#pragma omp parallel +#pragma omp for for (size_t i = 0; i < img_height; ++i) { for (size_t j = 0; j < img_width; ++j) @@ -99,8 +110,9 @@ std::shared_ptr Image::pixels() const start_timer(process_columns); - for (size_t i = 0; i < width; i++) - { +#pragma omp chunk +#pragma omp parallel for + for (size_t i = 0; i < img_width; i++) { result->pixels[i] = process_column(rotated_cw[i]); } -- cgit v1.2.3-70-g09d2