Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2799c74

Browse files
committed
Use Carotene implementation of TEGRA_GaussianBlurBinomial 3x3 and 5x5 on ARM.
1 parent75339a5 commit2799c74

File tree

1 file changed

+74
-1
lines changed

1 file changed

+74
-1
lines changed

‎3rdparty/carotene/hal/tegra_hal.hpp‎

Lines changed: 74 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1286,7 +1286,6 @@ inline int TEGRA_SEPFILTERFREE(cvhalFilter2D *context)
12861286
#undef cv_hal_sepFilterFree
12871287
#definecv_hal_sepFilterFree TEGRA_SEPFILTERFREE
12881288

1289-
12901289
structMorphCtx
12911290
{
12921291
int 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+
inlineintTEGRA_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+
elseif (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+
elseif (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+
elseif (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+
#definecv_hal_gaussianBlurBinomial TEGRA_GaussianBlurBinomial
1930+
1931+
#endif// DCAROTENE_NEON_ARCH=7
1932+
18601933
#endif// OPENCV_IMGPROC_HAL_INTERFACE_H
18611934

18621935
#endif

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp