@@ -1286,7 +1286,6 @@ inline int TEGRA_SEPFILTERFREE(cvhalFilter2D *context)
12861286#undef cv_hal_sepFilterFree
12871287#define cv_hal_sepFilterFree TEGRA_SEPFILTERFREE
12881288
1289-
12901289struct MorphCtx
12911290{
12921291int operation;
@@ -1857,6 +1856,80 @@ TegraCvtColor_Invoker(bgrx2hsvf, bgrx2hsv, src_data + static_cast<size_t>(range.
18571856#define cv_hal_cvtTwoPlaneYUVtoBGREx TEGRA_CVT2PYUVTOBGR_EX
18581857#endif
18591858
1859+ // The optimized branch was developed for old armv7 processors and leads to perf degradation on armv8
1860+ #if defined(DCAROTENE_NEON_ARCH) && (DCAROTENE_NEON_ARCH == 7)
1861+ inline CAROTENE_NS::BORDER_MODEborderCV2Carotene (int borderType)
1862+ {
1863+ switch (borderType)
1864+ {
1865+ case CV_HAL_BORDER_CONSTANT:
1866+ return CAROTENE_NS::BORDER_MODE_CONSTANT;
1867+ case CV_HAL_BORDER_REPLICATE:
1868+ return CAROTENE_NS::BORDER_MODE_REPLICATE;
1869+ case CV_HAL_BORDER_REFLECT:
1870+ return CAROTENE_NS::BORDER_MODE_REFLECT;
1871+ case CV_HAL_BORDER_WRAP:
1872+ return CAROTENE_NS::BORDER_MODE_WRAP;
1873+ case CV_HAL_BORDER_REFLECT_101:
1874+ return CAROTENE_NS::BORDER_MODE_REFLECT101;
1875+ }
1876+
1877+ return CAROTENE_NS::BORDER_MODE_UNDEFINED;
1878+ }
1879+
1880+ inline int TEGRA_GaussianBlurBinomial (const uchar* src_data,size_t src_step, uchar* dst_data,size_t dst_step,
1881+ int width,int height,int depth,int cn,size_t margin_left,size_t margin_top,
1882+ size_t margin_right,size_t margin_bottom,size_t ksize,int border_type)
1883+ {
1884+ CAROTENE_NS::Size2Dsz (width, height);
1885+ CAROTENE_NS::BORDER_MODE border =borderCV2Carotene (border_type);
1886+ CAROTENE_NS::Marginmg (margin_left, margin_right, margin_top, margin_bottom);
1887+
1888+ if (ksize ==3 )
1889+ {
1890+ if ((depth != CV_8U) || (cn !=1 ))
1891+ return CV_HAL_ERROR_NOT_IMPLEMENTED;
1892+
1893+ if (CAROTENE_NS::isGaussianBlur3x3MarginSupported (sz, border, mg))
1894+ {
1895+ CAROTENE_NS::gaussianBlur3x3Margin (sz, src_data, src_step, dst_data, dst_step,
1896+ border,0 , mg);
1897+ return CV_HAL_ERROR_OK;
1898+ }
1899+ }
1900+ else if (ksize ==5 )
1901+ {
1902+ if (!CAROTENE_NS::isGaussianBlur5x5Supported (sz, cn, border))
1903+ return CV_HAL_ERROR_NOT_IMPLEMENTED;
1904+
1905+ if (depth == CV_8U)
1906+ {
1907+ CAROTENE_NS::gaussianBlur5x5 (sz, cn, (uint8_t *)src_data, src_step,
1908+ (uint8_t *)dst_data, dst_step, border,0 , mg);
1909+ return CV_HAL_ERROR_OK;
1910+ }
1911+ else if (depth == CV_16U)
1912+ {
1913+ CAROTENE_NS::gaussianBlur5x5 (sz, cn, (uint16_t *)src_data, src_step,
1914+ (uint16_t *)dst_data, dst_step, border,0 , mg);
1915+ return CV_HAL_ERROR_OK;
1916+ }
1917+ else if (depth == CV_16S)
1918+ {
1919+ CAROTENE_NS::gaussianBlur5x5 (sz, cn, (int16_t *)src_data, src_step,
1920+ (int16_t *)dst_data, dst_step, border,0 , mg);
1921+ return CV_HAL_ERROR_OK;
1922+ }
1923+ }
1924+
1925+ return CV_HAL_ERROR_NOT_IMPLEMENTED;
1926+ }
1927+
1928+ #undef cv_hal_gaussianBlurBinomial
1929+ #define cv_hal_gaussianBlurBinomial TEGRA_GaussianBlurBinomial
1930+
1931+ #endif // DCAROTENE_NEON_ARCH=7
1932+
18601933#endif// OPENCV_IMGPROC_HAL_INTERFACE_H
18611934
18621935#endif