diff --git a/intrinsiccv/include/config.h b/intrinsiccv/include/config.h index d0dde78b8e9a660069a2c04743ac804c05134e12..4777522bfd9de0afacfd6fbf27ce3df9d2f98ded 100644 --- a/intrinsiccv/include/config.h +++ b/intrinsiccv/include/config.h @@ -49,17 +49,17 @@ // Derived configuration switches and macros below. #if INTRINSICCV_TARGET_NEON -#define INTRINSICCV_TARGET_FN_ATTS INTRINSICCV_ATTR_SECTION(".text.neon") +#define INTRINSICCV_TARGET_FN_ATTRS INTRINSICCV_ATTR_SECTION(".text.neon") #endif #if INTRINSICCV_TARGET_SVE2 -#define INTRINSICCV_TARGET_FN_ATTS INTRINSICCV_ATTR_SECTION(".text.sve2") +#define INTRINSICCV_TARGET_FN_ATTRS INTRINSICCV_ATTR_SECTION(".text.sve2") #endif #if INTRINSICCV_TARGET_SME2 #undef INTRINSICCV_SVE2_128 #define INTRINSICCV_SVE2_128 0 -#define INTRINSICCV_TARGET_FN_ATTS INTRINSICCV_ATTR_SECTION(".text.sme2") +#define INTRINSICCV_TARGET_FN_ATTRS INTRINSICCV_ATTR_SECTION(".text.sme2") #define INTRINSICCV_LOCALLY_STREAMING __arm_locally_streaming #define INTRINSICCV_STREAMING_COMPATIBLE __arm_streaming_compatible #else diff --git a/intrinsiccv/src/analysis/canny_neon.cpp b/intrinsiccv/src/analysis/canny_neon.cpp index 46ab5fc0922c2927b8ba500b62c49cf962fc34b7..f3c1d2d9320179debaba895897d5cf8d3e4d70ec 100644 --- a/intrinsiccv/src/analysis/canny_neon.cpp +++ b/intrinsiccv/src/analysis/canny_neon.cpp @@ -456,7 +456,7 @@ static void perform_hysteresis(StrongEdgeStack &strong_edge_pixels, } } -extern "C" INTRINSICCV_TARGET_FN_ATTS void INTRINSICCV_C_API(canny_u8)( +extern "C" INTRINSICCV_TARGET_FN_ATTRS void INTRINSICCV_C_API(canny_u8)( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, double low_threshold, double high_threshold) { Rectangle dst_rect{width, height}; diff --git a/intrinsiccv/src/analysis/count_nonzeros_neon.cpp b/intrinsiccv/src/analysis/count_nonzeros_neon.cpp index 86f3a6184cd42aeb31a494e3ec97373eb98530f8..0d692a270199bcf413d983ebc3250c0b1f6491c0 100644 --- a/intrinsiccv/src/analysis/count_nonzeros_neon.cpp +++ b/intrinsiccv/src/analysis/count_nonzeros_neon.cpp @@ -51,10 +51,10 @@ static size_t count_nonzeros_impl(Rows src, Rectangle rect) { } // namespace neon template -INTRINSICCV_TARGET_FN_ATTS static size_t count_nonzeros(const T *src, - size_t src_stride, - size_t width, - size_t height) { +INTRINSICCV_TARGET_FN_ATTRS static size_t count_nonzeros(const T *src, + size_t src_stride, + size_t width, + size_t height) { Rectangle rect{width, height}; Rows src_rows{src, src_stride}; return neon::count_nonzeros_impl(src_rows, rect); @@ -62,7 +62,7 @@ INTRINSICCV_TARGET_FN_ATTS static size_t count_nonzeros(const T *src, extern "C" { -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS size_t INTRINSICCV_C_API(count_nonzeros_u8)(const uint8_t *src, size_t src_stride, size_t width, size_t height) { diff --git a/intrinsiccv/src/analysis/min_max_loc_neon.cpp b/intrinsiccv/src/analysis/min_max_loc_neon.cpp index b1a586f22038f89244cdad4241030a8278f631f4..63e25c5b703ab4d05ed286d49e0a2bf5a8ca9877 100644 --- a/intrinsiccv/src/analysis/min_max_loc_neon.cpp +++ b/intrinsiccv/src/analysis/min_max_loc_neon.cpp @@ -321,7 +321,7 @@ void min_max_loc(const ScalarType *src, size_t src_stride, size_t width, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void min_max_loc( \ + template INTRINSICCV_TARGET_FN_ATTRS void min_max_loc( \ const type *src, size_t src_stride, size_t width, size_t height, \ size_t *min_offset, size_t *max_offset) diff --git a/intrinsiccv/src/analysis/min_max_neon.cpp b/intrinsiccv/src/analysis/min_max_neon.cpp index 6e6b9dd1410342c75a55a2c63764984890446bed..d3ec27c5657b673cc4477ed813b2da7a0240ba6c 100644 --- a/intrinsiccv/src/analysis/min_max_neon.cpp +++ b/intrinsiccv/src/analysis/min_max_neon.cpp @@ -60,7 +60,7 @@ void min_max(const ScalarType *src, size_t src_stride, size_t width, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void min_max( \ + template INTRINSICCV_TARGET_FN_ATTRS void min_max( \ const type *src, size_t src_stride, size_t width, size_t height, \ type *min_value, type *max_value) diff --git a/intrinsiccv/src/arithmetics/absdiff_neon.cpp b/intrinsiccv/src/arithmetics/absdiff_neon.cpp index 856605f35c2585824c0a15f8406798a658d6dd50..f484941c462d93f92c8e065dd481be2a5140aed4 100644 --- a/intrinsiccv/src/arithmetics/absdiff_neon.cpp +++ b/intrinsiccv/src/arithmetics/absdiff_neon.cpp @@ -49,7 +49,7 @@ void saturating_absdiff(const T *src_a, size_t src_a_stride, const T *src_b, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_absdiff( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_absdiff( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height) diff --git a/intrinsiccv/src/arithmetics/absdiff_sme2.cpp b/intrinsiccv/src/arithmetics/absdiff_sme2.cpp index d3ffc1cbfb00143e9e3fe1293c3e56184a04163f..2d43fe1895d1249733646ee0245bfc8d92d6678c 100644 --- a/intrinsiccv/src/arithmetics/absdiff_sme2.cpp +++ b/intrinsiccv/src/arithmetics/absdiff_sme2.cpp @@ -50,7 +50,7 @@ INTRINSICCV_LOCALLY_STREAMING void saturating_absdiff( } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_absdiff( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_absdiff( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height) diff --git a/intrinsiccv/src/arithmetics/absdiff_sve2.cpp b/intrinsiccv/src/arithmetics/absdiff_sve2.cpp index cc138013d2ce0426272242333e85a06d010728bf..fae233708fba983046a096d895e4fb6c7a0bbe67 100644 --- a/intrinsiccv/src/arithmetics/absdiff_sve2.cpp +++ b/intrinsiccv/src/arithmetics/absdiff_sve2.cpp @@ -47,7 +47,7 @@ void saturating_absdiff(const T *src_a, size_t src_a_stride, const T *src_b, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_absdiff( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_absdiff( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height) diff --git a/intrinsiccv/src/arithmetics/add_abs_with_threshold_neon.cpp b/intrinsiccv/src/arithmetics/add_abs_with_threshold_neon.cpp index 63837a62a1d65d07d613bb0f72d91f026cf0c3a2..ace9f63810c5b918a5a1184f08218c7e7e111d1c 100644 --- a/intrinsiccv/src/arithmetics/add_abs_with_threshold_neon.cpp +++ b/intrinsiccv/src/arithmetics/add_abs_with_threshold_neon.cpp @@ -47,10 +47,10 @@ void add_abs_with_threshold(const T *src_a, size_t src_a_stride, const T *src_b, apply_operation_by_rows(operation, rect, src_a_rows, src_b_rows, dst_rows); } -#define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void add_abs_with_threshold( \ - const type *src_a, size_t src_a_stride, const type *src_b, \ - size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ +#define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ + template INTRINSICCV_TARGET_FN_ATTRS void add_abs_with_threshold( \ + const type *src_a, size_t src_a_stride, const type *src_b, \ + size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height, type threshold) INTRINSICCV_INSTANTIATE_TEMPLATE(int16_t); diff --git a/intrinsiccv/src/arithmetics/add_abs_with_threshold_sme2.cpp b/intrinsiccv/src/arithmetics/add_abs_with_threshold_sme2.cpp index 998b54b9143f57327b7d42e83343957d6d043474..358fe66706a7c861c25a3417388e5e57b14c81b4 100644 --- a/intrinsiccv/src/arithmetics/add_abs_with_threshold_sme2.cpp +++ b/intrinsiccv/src/arithmetics/add_abs_with_threshold_sme2.cpp @@ -7,7 +7,7 @@ namespace intrinsiccv::sme2 { template -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void add_abs_with_threshold(const T *src_a, size_t src_a_stride, const T *src_b, size_t src_b_stride, T *dst, size_t dst_stride, size_t width, size_t height, T threshold) { @@ -15,10 +15,10 @@ add_abs_with_threshold(const T *src_a, size_t src_a_stride, const T *src_b, dst_stride, width, height, threshold); } -#define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void add_abs_with_threshold( \ - const type *src_a, size_t src_a_stride, const type *src_b, \ - size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ +#define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ + template INTRINSICCV_TARGET_FN_ATTRS void add_abs_with_threshold( \ + const type *src_a, size_t src_a_stride, const type *src_b, \ + size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height, type threshold) INTRINSICCV_INSTANTIATE_TEMPLATE(int16_t); diff --git a/intrinsiccv/src/arithmetics/add_abs_with_threshold_sve2.cpp b/intrinsiccv/src/arithmetics/add_abs_with_threshold_sve2.cpp index 14ad1df2a4a0082e33146e8199d3f81ef3f5a2f0..f3f0cf2fe4f3e1da08994e386cb2a8ec53f19057 100644 --- a/intrinsiccv/src/arithmetics/add_abs_with_threshold_sve2.cpp +++ b/intrinsiccv/src/arithmetics/add_abs_with_threshold_sve2.cpp @@ -7,17 +7,17 @@ namespace intrinsiccv::sve2 { template -void INTRINSICCV_TARGET_FN_ATTS add_abs_with_threshold( +void INTRINSICCV_TARGET_FN_ATTRS add_abs_with_threshold( const T *src_a, size_t src_a_stride, const T *src_b, size_t src_b_stride, T *dst, size_t dst_stride, size_t width, size_t height, T threshold) { add_abs_with_threshold_sc(src_a, src_a_stride, src_b, src_b_stride, dst, dst_stride, width, height, threshold); } -#define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template void INTRINSICCV_TARGET_FN_ATTS add_abs_with_threshold( \ - const type *src_a, size_t src_a_stride, const type *src_b, \ - size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ +#define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ + template void INTRINSICCV_TARGET_FN_ATTRS add_abs_with_threshold( \ + const type *src_a, size_t src_a_stride, const type *src_b, \ + size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height, type threshold) INTRINSICCV_INSTANTIATE_TEMPLATE(int16_t); diff --git a/intrinsiccv/src/arithmetics/add_neon.cpp b/intrinsiccv/src/arithmetics/add_neon.cpp index c431a070d37cfd29b8006516a18c9c9a34292312..64cc8d44ee1583809acd50deed1231364b18cdba 100644 --- a/intrinsiccv/src/arithmetics/add_neon.cpp +++ b/intrinsiccv/src/arithmetics/add_neon.cpp @@ -47,7 +47,7 @@ void saturating_add(const T *src_a, size_t src_a_stride, const T *src_b, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_add( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_add( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height) diff --git a/intrinsiccv/src/arithmetics/add_sme2.cpp b/intrinsiccv/src/arithmetics/add_sme2.cpp index 1cab9a7750a1abf72b919a4bc6b4b662060535ed..e0bf7b2146d49086238fafa375d68bb9fbf20c56 100644 --- a/intrinsiccv/src/arithmetics/add_sme2.cpp +++ b/intrinsiccv/src/arithmetics/add_sme2.cpp @@ -36,7 +36,7 @@ INTRINSICCV_LOCALLY_STREAMING void saturating_add( } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_add( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_add( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height) diff --git a/intrinsiccv/src/arithmetics/add_sve2.cpp b/intrinsiccv/src/arithmetics/add_sve2.cpp index a6ab56cc14f3958f5b6ba598627ccc22dc4ddd9d..74cdf1e4c9bbc3e80ca988b9479705ab88a03af9 100644 --- a/intrinsiccv/src/arithmetics/add_sve2.cpp +++ b/intrinsiccv/src/arithmetics/add_sve2.cpp @@ -35,7 +35,7 @@ void saturating_add(const T *src_a, size_t src_a_stride, const T *src_b, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_add( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_add( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height) diff --git a/intrinsiccv/src/arithmetics/multiply_neon.cpp b/intrinsiccv/src/arithmetics/multiply_neon.cpp index 201cf3c25b34beefae9fa424716960f36a6dc655..561013db4dfad28239cbc03b7a9f84ff4ca18a6d 100644 --- a/intrinsiccv/src/arithmetics/multiply_neon.cpp +++ b/intrinsiccv/src/arithmetics/multiply_neon.cpp @@ -79,7 +79,7 @@ void saturating_multiply(const T *src_a, size_t src_a_stride, const T *src_b, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_multiply( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_multiply( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height, double scale) diff --git a/intrinsiccv/src/arithmetics/multiply_sve2.cpp b/intrinsiccv/src/arithmetics/multiply_sve2.cpp index 4077a94c7074dc1a9e344fbf25bdadd0d7a9a6eb..eb9090b43f1f443e5b7a96891fe0644bc9d878d5 100644 --- a/intrinsiccv/src/arithmetics/multiply_sve2.cpp +++ b/intrinsiccv/src/arithmetics/multiply_sve2.cpp @@ -55,7 +55,7 @@ void saturating_multiply(const T *src_a, size_t src_a_stride, const T *src_b, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_multiply( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_multiply( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height, double scale) diff --git a/intrinsiccv/src/arithmetics/scale_neon.cpp b/intrinsiccv/src/arithmetics/scale_neon.cpp index 9845ddfd9aec953b718d4009a6c0580c2739dc58..c5af029253b89dd9cd61951574079bd4947632a2 100644 --- a/intrinsiccv/src/arithmetics/scale_neon.cpp +++ b/intrinsiccv/src/arithmetics/scale_neon.cpp @@ -189,7 +189,7 @@ void scale(const T *src, size_t src_stride, T *dst, size_t dst_stride, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void scale( \ + template INTRINSICCV_TARGET_FN_ATTRS void scale( \ const type *src, size_t src_stride, type *dst, size_t dst_stride, \ size_t width, size_t height, float scale, float shift) diff --git a/intrinsiccv/src/arithmetics/sub_neon.cpp b/intrinsiccv/src/arithmetics/sub_neon.cpp index b8fe9b7a19222e4f1502f9c9585907090cba5194..826bd05c4afa212385a84b8feb4c168924eef6e2 100644 --- a/intrinsiccv/src/arithmetics/sub_neon.cpp +++ b/intrinsiccv/src/arithmetics/sub_neon.cpp @@ -47,7 +47,7 @@ void saturating_sub(const T *src_a, size_t src_a_stride, const T *src_b, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_sub( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_sub( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height) diff --git a/intrinsiccv/src/arithmetics/sub_sme2.cpp b/intrinsiccv/src/arithmetics/sub_sme2.cpp index 4c0b66e1cd50e1a4be78395d8463e0d5838be2e9..73b722f1231f9a6c584030441ff5613a08a4b817 100644 --- a/intrinsiccv/src/arithmetics/sub_sme2.cpp +++ b/intrinsiccv/src/arithmetics/sub_sme2.cpp @@ -36,7 +36,7 @@ INTRINSICCV_LOCALLY_STREAMING void saturating_sub( } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_sub( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_sub( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height) diff --git a/intrinsiccv/src/arithmetics/sub_sve2.cpp b/intrinsiccv/src/arithmetics/sub_sve2.cpp index 67e08daf34351db01c9d35205d23e324f2dd443e..7c889acae7f56b7e4614c5bc1097fd40f8cd96c6 100644 --- a/intrinsiccv/src/arithmetics/sub_sve2.cpp +++ b/intrinsiccv/src/arithmetics/sub_sve2.cpp @@ -35,7 +35,7 @@ void saturating_sub(const T *src_a, size_t src_a_stride, const T *src_b, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void saturating_sub( \ + template INTRINSICCV_TARGET_FN_ATTRS void saturating_sub( \ const type *src_a, size_t src_a_stride, const type *src_b, \ size_t src_b_stride, type *dst, size_t dst_stride, size_t width, \ size_t height) diff --git a/intrinsiccv/src/arithmetics/threshold_neon.cpp b/intrinsiccv/src/arithmetics/threshold_neon.cpp index 9045bf70d1079d756f15354260c2e5dbab61e519..3f6a43ca08bf2b895f18c778c59849e6becfa230 100644 --- a/intrinsiccv/src/arithmetics/threshold_neon.cpp +++ b/intrinsiccv/src/arithmetics/threshold_neon.cpp @@ -49,7 +49,7 @@ void threshold_binary(const T *src, size_t src_stride, T *dst, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void threshold_binary( \ + template INTRINSICCV_TARGET_FN_ATTRS void threshold_binary( \ const type *src, size_t src_stride, type *dst, size_t dst_stride, \ size_t width, size_t height, type threshold, type value) diff --git a/intrinsiccv/src/arithmetics/threshold_sme2.cpp b/intrinsiccv/src/arithmetics/threshold_sme2.cpp index 60ac7987a24d2a1f76e6c3810231b521b2057c9a..8668aa97ad076d827b40c37bb236ba0ae98583ac 100644 --- a/intrinsiccv/src/arithmetics/threshold_sme2.cpp +++ b/intrinsiccv/src/arithmetics/threshold_sme2.cpp @@ -7,7 +7,7 @@ namespace intrinsiccv::sme2 { template -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void threshold_binary( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void threshold_binary( const T *src, size_t src_stride, T *dst, size_t dst_stride, size_t width, size_t height, T threshold, T value) { intrinsiccv::sve2::threshold_binary_sc(src, src_stride, dst, dst_stride, @@ -15,7 +15,7 @@ INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void threshold_binary( } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void threshold_binary( \ + template INTRINSICCV_TARGET_FN_ATTRS void threshold_binary( \ const type *src, size_t src_stride, type *dst, size_t dst_stride, \ size_t width, size_t height, type threshold, type value) diff --git a/intrinsiccv/src/arithmetics/threshold_sve2.cpp b/intrinsiccv/src/arithmetics/threshold_sve2.cpp index 0ca49274105e379b5277d7bab98df01e4d8c261a..6ef323dff9c18dfa9987e3e3479d8207a908e19e 100644 --- a/intrinsiccv/src/arithmetics/threshold_sve2.cpp +++ b/intrinsiccv/src/arithmetics/threshold_sve2.cpp @@ -7,17 +7,17 @@ namespace intrinsiccv::sve2 { template -void INTRINSICCV_TARGET_FN_ATTS threshold_binary(const T *src, - size_t src_stride, T *dst, - size_t dst_stride, - size_t width, size_t height, - T threshold, T value) { +void INTRINSICCV_TARGET_FN_ATTRS threshold_binary(const T *src, + size_t src_stride, T *dst, + size_t dst_stride, + size_t width, size_t height, + T threshold, T value) { threshold_binary_sc(src, src_stride, dst, dst_stride, width, height, threshold, value); } #define INTRINSICCV_INSTANTIATE_TEMPLATE(type) \ - template INTRINSICCV_TARGET_FN_ATTS void threshold_binary( \ + template INTRINSICCV_TARGET_FN_ATTRS void threshold_binary( \ const type *src, size_t src_stride, type *dst, size_t dst_stride, \ size_t width, size_t height, type threshold, type value) diff --git a/intrinsiccv/src/arithmetics/transpose_neon.cpp b/intrinsiccv/src/arithmetics/transpose_neon.cpp index d785b4184fd787b79d2a14f2b965eb1c889239fd..c70742078d530378a81cdf80e70601ea6bbd3d75 100644 --- a/intrinsiccv/src/arithmetics/transpose_neon.cpp +++ b/intrinsiccv/src/arithmetics/transpose_neon.cpp @@ -207,7 +207,7 @@ static void transpose(const void *src, size_t src_stride, void *dst, } } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void transpose(const void *src, size_t src_stride, void *dst, size_t dst_stride, size_t src_width, size_t src_height, size_t element_size) { bool inplace = false; diff --git a/intrinsiccv/src/conversions/gray_to_rgb_neon.cpp b/intrinsiccv/src/conversions/gray_to_rgb_neon.cpp index f7dea810005c1e7979adca2fdf336305749d2d99..81ae9e55cd8c8d6f8291309373430e643cab4a7d 100644 --- a/intrinsiccv/src/conversions/gray_to_rgb_neon.cpp +++ b/intrinsiccv/src/conversions/gray_to_rgb_neon.cpp @@ -103,7 +103,7 @@ class GrayToRGBA final : public UnrollTwice { #endif }; // end of class GrayToRGBA -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void gray_to_rgb_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { Rectangle rect{width, height}; @@ -113,7 +113,7 @@ void gray_to_rgb_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void gray_to_rgba_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { Rectangle rect{width, height}; diff --git a/intrinsiccv/src/conversions/gray_to_rgb_sc.h b/intrinsiccv/src/conversions/gray_to_rgb_sc.h index 1340284e8dd896ab91c8744b94f1dd3b68bf0d99..3c091c45dbee85e892bc5d1172ed5906f0fa3891 100644 --- a/intrinsiccv/src/conversions/gray_to_rgb_sc.h +++ b/intrinsiccv/src/conversions/gray_to_rgb_sc.h @@ -196,7 +196,7 @@ class GrayToRGBA final : #endif // INTRINSICCV_PREFER_INTERLEAVING_LOAD_STORE }; // end of class GrayToRGBA -INTRINSICCV_TARGET_FN_ATTS static void gray_to_rgb_u8_sc( +INTRINSICCV_TARGET_FN_ATTRS static void gray_to_rgb_u8_sc( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) INTRINSICCV_STREAMING_COMPATIBLE { Rectangle rect{width, height}; @@ -211,7 +211,7 @@ INTRINSICCV_TARGET_FN_ATTS static void gray_to_rgb_u8_sc( sve2::apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS static void gray_to_rgba_u8_sc( +INTRINSICCV_TARGET_FN_ATTRS static void gray_to_rgba_u8_sc( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) INTRINSICCV_STREAMING_COMPATIBLE { Rectangle rect{width, height}; diff --git a/intrinsiccv/src/conversions/gray_to_rgb_sme2.cpp b/intrinsiccv/src/conversions/gray_to_rgb_sme2.cpp index fbe0e53fb5fb70a6980cbff50be94cf866da9d7c..e373b7ddc68dde0219b3e883eed427ad8125a0e8 100644 --- a/intrinsiccv/src/conversions/gray_to_rgb_sme2.cpp +++ b/intrinsiccv/src/conversions/gray_to_rgb_sme2.cpp @@ -6,14 +6,14 @@ namespace intrinsiccv::sme2 { -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void gray_to_rgb_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void gray_to_rgb_u8( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { intrinsiccv::sve2::gray_to_rgb_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void gray_to_rgba_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void gray_to_rgba_u8( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { intrinsiccv::sve2::gray_to_rgba_u8_sc(src, src_stride, dst, dst_stride, width, diff --git a/intrinsiccv/src/conversions/gray_to_rgb_sve2.cpp b/intrinsiccv/src/conversions/gray_to_rgb_sve2.cpp index 7d66892ca6a2105238fc649d84b1cbe8e21c3398..edcfa00225d8029f832f34367e8c6dd6b5fbf094 100644 --- a/intrinsiccv/src/conversions/gray_to_rgb_sve2.cpp +++ b/intrinsiccv/src/conversions/gray_to_rgb_sve2.cpp @@ -6,17 +6,18 @@ namespace intrinsiccv::sve2 { -INTRINSICCV_TARGET_FN_ATTS void gray_to_rgb_u8(const uint8_t *src, - size_t src_stride, uint8_t *dst, - size_t dst_stride, size_t width, - size_t height) { - gray_to_rgb_u8_sc(src, src_stride, dst, dst_stride, width, height); -} - -INTRINSICCV_TARGET_FN_ATTS void gray_to_rgba_u8(const uint8_t *src, +INTRINSICCV_TARGET_FN_ATTRS void gray_to_rgb_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { + gray_to_rgb_u8_sc(src, src_stride, dst, dst_stride, width, height); +} + +INTRINSICCV_TARGET_FN_ATTRS void gray_to_rgba_u8(const uint8_t *src, + size_t src_stride, + uint8_t *dst, + size_t dst_stride, + size_t width, size_t height) { gray_to_rgba_u8_sc(src, src_stride, dst, dst_stride, width, height); } diff --git a/intrinsiccv/src/conversions/merge_neon.cpp b/intrinsiccv/src/conversions/merge_neon.cpp index bc61c9ab3709a336e35aa61c10b7d673167401fe..395db8068e44161ccb43177a4dfd6ad4eb6afd8f 100644 --- a/intrinsiccv/src/conversions/merge_neon.cpp +++ b/intrinsiccv/src/conversions/merge_neon.cpp @@ -400,7 +400,7 @@ void merge(const void **srcs, const size_t *src_strides, void *dst, } } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void merge(const void **srcs, const size_t *src_strides, void *dst, size_t dst_stride, size_t width, size_t height, size_t channels, size_t element_size) { diff --git a/intrinsiccv/src/conversions/rgb_to_rgb_neon.cpp b/intrinsiccv/src/conversions/rgb_to_rgb_neon.cpp index e035e8feb4e33c90729bb4f620d7ce6795b1efb7..a85cb7b893937024ff7de509b02216266395d463 100644 --- a/intrinsiccv/src/conversions/rgb_to_rgb_neon.cpp +++ b/intrinsiccv/src/conversions/rgb_to_rgb_neon.cpp @@ -187,7 +187,7 @@ class RGBAToRGB final : public UnrollTwice { } }; // end of class RGBAToRGB -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgb_to_bgr_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { Rectangle rect{width, height}; @@ -197,7 +197,7 @@ void rgb_to_bgr_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgba_to_bgra_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { Rectangle rect{width, height}; @@ -207,7 +207,7 @@ void rgba_to_bgra_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgb_to_bgra_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { Rectangle rect{width, height}; @@ -217,7 +217,7 @@ void rgb_to_bgra_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgb_to_rgba_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { Rectangle rect{width, height}; @@ -227,7 +227,7 @@ void rgb_to_rgba_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgba_to_bgr_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { Rectangle rect{width, height}; @@ -237,7 +237,7 @@ void rgba_to_bgr_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgba_to_rgb_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { Rectangle rect{width, height}; diff --git a/intrinsiccv/src/conversions/rgb_to_rgb_sc.h b/intrinsiccv/src/conversions/rgb_to_rgb_sc.h index 026a4d32f0478c6e5713ced06fb06ffd504d89a5..8bdfa32247dc9ec28d0942009514155c6f7a272e 100644 --- a/intrinsiccv/src/conversions/rgb_to_rgb_sc.h +++ b/intrinsiccv/src/conversions/rgb_to_rgb_sc.h @@ -181,7 +181,7 @@ class RGBAToRGB final : public UnrollTwice { } }; // end of class RGBAToRGB -INTRINSICCV_TARGET_FN_ATTS static void rgb_to_bgr_u8_sc( +INTRINSICCV_TARGET_FN_ATTRS static void rgb_to_bgr_u8_sc( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) INTRINSICCV_STREAMING_COMPATIBLE { Rectangle rect{width, height}; @@ -196,7 +196,7 @@ INTRINSICCV_TARGET_FN_ATTS static void rgb_to_bgr_u8_sc( sve2::apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void rgba_to_bgra_u8_sc(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) INTRINSICCV_STREAMING_COMPATIBLE { @@ -207,7 +207,7 @@ static void rgba_to_bgra_u8_sc(const uint8_t *src, size_t src_stride, sve2::apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void rgb_to_bgra_u8_sc(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) INTRINSICCV_STREAMING_COMPATIBLE { @@ -218,7 +218,7 @@ static void rgb_to_bgra_u8_sc(const uint8_t *src, size_t src_stride, sve2::apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void rgb_to_rgba_u8_sc(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) INTRINSICCV_STREAMING_COMPATIBLE { @@ -229,7 +229,7 @@ static void rgb_to_rgba_u8_sc(const uint8_t *src, size_t src_stride, sve2::apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void rgba_to_bgr_u8_sc(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) INTRINSICCV_STREAMING_COMPATIBLE { @@ -240,7 +240,7 @@ static void rgba_to_bgr_u8_sc(const uint8_t *src, size_t src_stride, sve2::apply_operation_by_rows(operation, rect, src_rows, dst_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void rgba_to_rgb_u8_sc(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) INTRINSICCV_STREAMING_COMPATIBLE { diff --git a/intrinsiccv/src/conversions/rgb_to_rgb_sme2.cpp b/intrinsiccv/src/conversions/rgb_to_rgb_sme2.cpp index 389599af66adcba36ee9d6faec368c3682fc909a..b3ba5d9599c042546f20c97c2484df6f9f767202 100644 --- a/intrinsiccv/src/conversions/rgb_to_rgb_sme2.cpp +++ b/intrinsiccv/src/conversions/rgb_to_rgb_sme2.cpp @@ -6,42 +6,42 @@ namespace intrinsiccv::sme2 { -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void rgb_to_bgr_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void rgb_to_bgr_u8( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { intrinsiccv::sve2::rgb_to_bgr_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void rgba_to_bgra_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void rgba_to_bgra_u8( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { intrinsiccv::sve2::rgba_to_bgra_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void rgb_to_bgra_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void rgb_to_bgra_u8( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { intrinsiccv::sve2::rgb_to_bgra_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void rgb_to_rgba_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void rgb_to_rgba_u8( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { intrinsiccv::sve2::rgb_to_rgba_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void rgba_to_bgr_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void rgba_to_bgr_u8( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { intrinsiccv::sve2::rgba_to_bgr_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void rgba_to_rgb_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void rgba_to_rgb_u8( const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { intrinsiccv::sve2::rgba_to_rgb_u8_sc(src, src_stride, dst, dst_stride, width, diff --git a/intrinsiccv/src/conversions/rgb_to_rgb_sve2.cpp b/intrinsiccv/src/conversions/rgb_to_rgb_sve2.cpp index 883ff53468efb9d7155ffaa15cb88cbde6485536..fe9e695d8f4c988d9e88adecb6c6b967254a19dd 100644 --- a/intrinsiccv/src/conversions/rgb_to_rgb_sve2.cpp +++ b/intrinsiccv/src/conversions/rgb_to_rgb_sve2.cpp @@ -6,37 +6,37 @@ namespace intrinsiccv::sve2 { -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgb_to_bgr_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { rgb_to_bgr_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgba_to_bgra_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { rgba_to_bgra_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgb_to_bgra_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { rgb_to_bgra_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgb_to_rgba_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { rgb_to_rgba_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgba_to_bgr_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { rgba_to_bgr_u8_sc(src, src_stride, dst, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void rgba_to_rgb_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height) { rgba_to_rgb_u8_sc(src, src_stride, dst, dst_stride, width, height); diff --git a/intrinsiccv/src/conversions/split_neon.cpp b/intrinsiccv/src/conversions/split_neon.cpp index 7b61c005e8bd39633903f2eee2eac162777770aa..d125c549126e912420d17657939be7bca9020445 100644 --- a/intrinsiccv/src/conversions/split_neon.cpp +++ b/intrinsiccv/src/conversions/split_neon.cpp @@ -292,7 +292,7 @@ void split(const void *src_data, const size_t src_stride, void **dst_data, } } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void split(const void *src_data, size_t src_stride, void **dst_data, size_t *dst_strides, size_t width, size_t height, size_t channels, size_t element_size) { diff --git a/intrinsiccv/src/conversions/yuv_to_rgb_neon.cpp b/intrinsiccv/src/conversions/yuv_to_rgb_neon.cpp index c872fc3eca526e2e602d4bca0fb099f2f1f94476..79b34ff534f672c22706767602db4adeaea4ea4d 100644 --- a/intrinsiccv/src/conversions/yuv_to_rgb_neon.cpp +++ b/intrinsiccv/src/conversions/yuv_to_rgb_neon.cpp @@ -302,7 +302,7 @@ void yuv2rgbx_operation(OperationType &operation, const ScalarType *src_y, zip_parallel_rows(row_based_operation, rect, y_rows, uv_rows, rgbx_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_rgb_u8(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, @@ -312,7 +312,7 @@ void yuv_sp_to_rgb_u8(const uint8_t *src_y, size_t src_y_stride, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_rgba_u8(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, @@ -322,7 +322,7 @@ void yuv_sp_to_rgba_u8(const uint8_t *src_y, size_t src_y_stride, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_bgr_u8(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, @@ -332,7 +332,7 @@ void yuv_sp_to_bgr_u8(const uint8_t *src_y, size_t src_y_stride, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_bgra_u8(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, diff --git a/intrinsiccv/src/conversions/yuv_to_rgb_sc.h b/intrinsiccv/src/conversions/yuv_to_rgb_sc.h index 0d2ca35c5c841e591fe472859c959cb971813345..f36fafbd93dd081d0ee25393baa725a93cacbc5c 100644 --- a/intrinsiccv/src/conversions/yuv_to_rgb_sc.h +++ b/intrinsiccv/src/conversions/yuv_to_rgb_sc.h @@ -208,7 +208,7 @@ void yuv2rgbx_operation(OperationType &operation, const ScalarType *src_y, zip_parallel_rows(row_based_operation, rect, y_rows, uv_rows, rgbx_rows); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void yuv_sp_to_rgb_u8_sc(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, @@ -219,7 +219,7 @@ static void yuv_sp_to_rgb_u8_sc(const uint8_t *src_y, size_t src_y_stride, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void yuv_sp_to_rgba_u8_sc( const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, @@ -229,7 +229,7 @@ static void yuv_sp_to_rgba_u8_sc( dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void yuv_sp_to_bgr_u8_sc(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, @@ -240,7 +240,7 @@ static void yuv_sp_to_bgr_u8_sc(const uint8_t *src_y, size_t src_y_stride, dst_stride, width, height); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void yuv_sp_to_bgra_u8_sc( const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, diff --git a/intrinsiccv/src/conversions/yuv_to_rgb_sme2.cpp b/intrinsiccv/src/conversions/yuv_to_rgb_sme2.cpp index a5088aa8821ae9fbefc5a981f2df6e7f1d0036f8..8b1cb889e33a03dd9a0645c1dd2546149e26804a 100644 --- a/intrinsiccv/src/conversions/yuv_to_rgb_sme2.cpp +++ b/intrinsiccv/src/conversions/yuv_to_rgb_sme2.cpp @@ -6,7 +6,7 @@ namespace intrinsiccv::sme2 { -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void yuv_sp_to_rgb_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_rgb_u8( const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, bool is_nv21) { @@ -15,16 +15,17 @@ INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void yuv_sp_to_rgb_u8( height, is_nv21); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void yuv_sp_to_rgba_u8( - const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, - size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, - size_t height, bool is_nv21) { +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void +yuv_sp_to_rgba_u8(const uint8_t *src_y, size_t src_y_stride, + const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, + size_t dst_stride, size_t width, size_t height, + bool is_nv21) { intrinsiccv::sve2::yuv_sp_to_rgba_u8_sc(src_y, src_y_stride, src_uv, src_uv_stride, dst, dst_stride, width, height, is_nv21); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void yuv_sp_to_bgr_u8( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_bgr_u8( const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, bool is_nv21) { @@ -33,10 +34,11 @@ INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void yuv_sp_to_bgr_u8( height, is_nv21); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void yuv_sp_to_bgra_u8( - const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, - size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, - size_t height, bool is_nv21) { +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void +yuv_sp_to_bgra_u8(const uint8_t *src_y, size_t src_y_stride, + const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, + size_t dst_stride, size_t width, size_t height, + bool is_nv21) { intrinsiccv::sve2::yuv_sp_to_bgra_u8_sc(src_y, src_y_stride, src_uv, src_uv_stride, dst, dst_stride, width, height, is_nv21); diff --git a/intrinsiccv/src/conversions/yuv_to_rgb_sve2.cpp b/intrinsiccv/src/conversions/yuv_to_rgb_sve2.cpp index 73c75689307d5719006f50ede827f6fbe70b11b8..c15e94e0dca04287b214394a186afa1af591f7f4 100644 --- a/intrinsiccv/src/conversions/yuv_to_rgb_sve2.cpp +++ b/intrinsiccv/src/conversions/yuv_to_rgb_sve2.cpp @@ -6,7 +6,7 @@ namespace intrinsiccv::sve2 { -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_rgb_u8(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, @@ -15,7 +15,7 @@ void yuv_sp_to_rgb_u8(const uint8_t *src_y, size_t src_y_stride, dst_stride, width, height, is_nv21); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_rgba_u8(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, @@ -24,7 +24,7 @@ void yuv_sp_to_rgba_u8(const uint8_t *src_y, size_t src_y_stride, dst_stride, width, height, is_nv21); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_bgr_u8(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, @@ -33,7 +33,7 @@ void yuv_sp_to_bgr_u8(const uint8_t *src_y, size_t src_y_stride, dst_stride, width, height, is_nv21); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void yuv_sp_to_bgra_u8(const uint8_t *src_y, size_t src_y_stride, const uint8_t *src_uv, size_t src_uv_stride, uint8_t *dst, size_t dst_stride, size_t width, diff --git a/intrinsiccv/src/filters/gaussian_blur_neon.cpp b/intrinsiccv/src/filters/gaussian_blur_neon.cpp index ac67b6ba27d181b93cc04424090ea87552aa36e6..4e29acd38711dce598c43134cc32fbde8ea1ba94 100644 --- a/intrinsiccv/src/filters/gaussian_blur_neon.cpp +++ b/intrinsiccv/src/filters/gaussian_blur_neon.cpp @@ -161,7 +161,7 @@ void discrete_gaussian_blur(const ScalarType *src, size_t src_stride, workspace->process(rect, src_rows, dst_rows, channels, border_type, filter); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void gaussian_blur_3x3_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels, @@ -171,7 +171,7 @@ void gaussian_blur_3x3_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, height, channels, border_type, params); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void gaussian_blur_5x5_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels, diff --git a/intrinsiccv/src/filters/gaussian_blur_sme2.cpp b/intrinsiccv/src/filters/gaussian_blur_sme2.cpp index 34f9b749b1fc1ce53771c660abeb2eae89cdb7d5..ccd474a9be7644f24fdab1410307b4fa86aade40 100644 --- a/intrinsiccv/src/filters/gaussian_blur_sme2.cpp +++ b/intrinsiccv/src/filters/gaussian_blur_sme2.cpp @@ -7,7 +7,7 @@ namespace intrinsiccv::sme2 { -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void gaussian_blur_5x5_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels, intrinsiccv_border_type_t border_type, diff --git a/intrinsiccv/src/filters/gaussian_blur_sve2.cpp b/intrinsiccv/src/filters/gaussian_blur_sve2.cpp index 67d1d07d5f3ee8e3915b7ff68a9196d5686d45ec..f0444df235a047a1c46442d3edef720d1c104e04 100644 --- a/intrinsiccv/src/filters/gaussian_blur_sve2.cpp +++ b/intrinsiccv/src/filters/gaussian_blur_sve2.cpp @@ -7,7 +7,7 @@ namespace intrinsiccv::sve2 { -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void gaussian_blur_5x5_u8(const uint8_t *src, size_t src_stride, uint8_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels, diff --git a/intrinsiccv/src/filters/sobel_neon.cpp b/intrinsiccv/src/filters/sobel_neon.cpp index cea293099a0f9cea92fe433d371229483e7baa31..820c2b0d86c750b98a2d46363e7b91598082cd74 100644 --- a/intrinsiccv/src/filters/sobel_neon.cpp +++ b/intrinsiccv/src/filters/sobel_neon.cpp @@ -116,7 +116,7 @@ class VerticalSobel3x3 { } }; // end of class VerticalSobel3x3 -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void sobel_3x3_horizontal_s16_u8(const uint8_t *src, size_t src_stride, int16_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels) { @@ -136,7 +136,7 @@ void sobel_3x3_horizontal_s16_u8(const uint8_t *src, size_t src_stride, INTRINSICCV_BORDER_TYPE_REPLICATE, filter); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void sobel_3x3_vertical_s16_u8(const uint8_t *src, size_t src_stride, int16_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels) { diff --git a/intrinsiccv/src/filters/sobel_sc.h b/intrinsiccv/src/filters/sobel_sc.h index a4f0d96ec1fb66f674cfef06780611ae89da15c0..d3c172f56c5c8a45878f0db20c3c0afaaea1322c 100644 --- a/intrinsiccv/src/filters/sobel_sc.h +++ b/intrinsiccv/src/filters/sobel_sc.h @@ -115,7 +115,7 @@ class VerticalSobel3x3 { } }; // end of class VerticalSobel3x3 -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void sobel_3x3_horizontal_s16_u8_sc( const uint8_t *src, size_t src_stride, int16_t *dst, size_t dst_stride, size_t width, size_t height, @@ -137,7 +137,7 @@ static void sobel_3x3_horizontal_s16_u8_sc( INTRINSICCV_BORDER_TYPE_REPLICATE, filter); } -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS static void sobel_3x3_vertical_s16_u8_sc( const uint8_t *src, size_t src_stride, int16_t *dst, size_t dst_stride, size_t width, size_t height, diff --git a/intrinsiccv/src/filters/sobel_sme2.cpp b/intrinsiccv/src/filters/sobel_sme2.cpp index 7b4550758f1c470cc8092f2e21442cf778e8d679..2d973850c66284a7a38a08b9a1bc192971fa3899 100644 --- a/intrinsiccv/src/filters/sobel_sme2.cpp +++ b/intrinsiccv/src/filters/sobel_sme2.cpp @@ -6,7 +6,7 @@ namespace intrinsiccv::sme2 { -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void sobel_3x3_horizontal_s16_u8(const uint8_t *src, size_t src_stride, int16_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels) { @@ -14,7 +14,7 @@ sobel_3x3_horizontal_s16_u8(const uint8_t *src, size_t src_stride, int16_t *dst, src, src_stride, dst, dst_stride, width, height, channels); } -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void sobel_3x3_vertical_s16_u8(const uint8_t *src, size_t src_stride, int16_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels) { diff --git a/intrinsiccv/src/filters/sobel_sve2.cpp b/intrinsiccv/src/filters/sobel_sve2.cpp index 4db53d9185624e725275db42784ef5b48dbc70d0..bfa3185ac58227bab437c24e202e524662ac7085 100644 --- a/intrinsiccv/src/filters/sobel_sve2.cpp +++ b/intrinsiccv/src/filters/sobel_sve2.cpp @@ -6,14 +6,14 @@ namespace intrinsiccv::sve2 { -INTRINSICCV_TARGET_FN_ATTS void sobel_3x3_horizontal_s16_u8( +INTRINSICCV_TARGET_FN_ATTRS void sobel_3x3_horizontal_s16_u8( const uint8_t *src, size_t src_stride, int16_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels) { sobel_3x3_horizontal_s16_u8_sc(src, src_stride, dst, dst_stride, width, height, channels); } -INTRINSICCV_TARGET_FN_ATTS void sobel_3x3_vertical_s16_u8( +INTRINSICCV_TARGET_FN_ATTRS void sobel_3x3_vertical_s16_u8( const uint8_t *src, size_t src_stride, int16_t *dst, size_t dst_stride, size_t width, size_t height, size_t channels) { sobel_3x3_vertical_s16_u8_sc(src, src_stride, dst, dst_stride, width, height, diff --git a/intrinsiccv/src/morphology/morphology_neon.cpp b/intrinsiccv/src/morphology/morphology_neon.cpp index f2da2cd72d4f61437ba669ee940a4da312e84236..eab1d0b40cf2a7c593e9c680718806097b70eafd 100644 --- a/intrinsiccv/src/morphology/morphology_neon.cpp +++ b/intrinsiccv/src/morphology/morphology_neon.cpp @@ -567,7 +567,7 @@ void erode(const T *src, size_t src_stride, T *dst, size_t dst_stride, } #define INTRINSICCV_INSTANTIATE_TEMPLATE(name, type) \ - template INTRINSICCV_TARGET_FN_ATTS void name( \ + template INTRINSICCV_TARGET_FN_ATTRS void name( \ const type *src, size_t src_stride, type *dst, size_t dst_stride, \ size_t width, size_t height, \ const intrinsiccv_morphology_params_t *params) diff --git a/intrinsiccv/src/morphology/morphology_sme2.cpp b/intrinsiccv/src/morphology/morphology_sme2.cpp index a3c70f0b95aed4a2b81089830e713172e5322fdd..d91ea0b95bfbf4abc5356a8f38600da85a95f4b8 100644 --- a/intrinsiccv/src/morphology/morphology_sme2.cpp +++ b/intrinsiccv/src/morphology/morphology_sme2.cpp @@ -7,7 +7,7 @@ namespace intrinsiccv::sme2 { template -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void dilate( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void dilate( const T *src, size_t src_stride, T *dst, size_t dst_stride, size_t width, size_t height, const intrinsiccv_morphology_params_t *params) { intrinsiccv::sve2::dilate_sc(src, src_stride, dst, dst_stride, width, @@ -15,7 +15,7 @@ INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void dilate( } template -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void erode( +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void erode( const T *src, size_t src_stride, T *dst, size_t dst_stride, size_t width, size_t height, const intrinsiccv_morphology_params_t *params) { intrinsiccv::sve2::erode_sc(src, src_stride, dst, dst_stride, width, @@ -23,7 +23,7 @@ INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void erode( } #define INTRINSICCV_INSTANTIATE_TEMPLATE(name, type) \ - template INTRINSICCV_TARGET_FN_ATTS void name( \ + template INTRINSICCV_TARGET_FN_ATTRS void name( \ const type *src, size_t src_stride, type *dst, size_t dst_stride, \ size_t width, size_t height, \ const intrinsiccv_morphology_params_t *params) diff --git a/intrinsiccv/src/morphology/morphology_sve2.cpp b/intrinsiccv/src/morphology/morphology_sve2.cpp index e0d6c16bf5daf6ccd1aeb5c061796679569907b2..55332d1f419b62a1acf9b51e79c19fb952e1879a 100644 --- a/intrinsiccv/src/morphology/morphology_sve2.cpp +++ b/intrinsiccv/src/morphology/morphology_sve2.cpp @@ -7,21 +7,21 @@ namespace intrinsiccv::sve2 { template -void INTRINSICCV_TARGET_FN_ATTS +void INTRINSICCV_TARGET_FN_ATTRS dilate(const T *src, size_t src_stride, T *dst, size_t dst_stride, size_t width, size_t height, const intrinsiccv_morphology_params_t *params) { dilate_sc(src, src_stride, dst, dst_stride, width, height, params); } template -void INTRINSICCV_TARGET_FN_ATTS +void INTRINSICCV_TARGET_FN_ATTRS erode(const T *src, size_t src_stride, T *dst, size_t dst_stride, size_t width, size_t height, const intrinsiccv_morphology_params_t *params) { erode_sc(src, src_stride, dst, dst_stride, width, height, params); } #define INTRINSICCV_INSTANTIATE_TEMPLATE(name, type) \ - template INTRINSICCV_TARGET_FN_ATTS void name( \ + template INTRINSICCV_TARGET_FN_ATTRS void name( \ const type *src, size_t src_stride, type *dst, size_t dst_stride, \ size_t width, size_t height, \ const intrinsiccv_morphology_params_t *params) diff --git a/intrinsiccv/src/resize/resize_neon.cpp b/intrinsiccv/src/resize/resize_neon.cpp index 8b0d845cf708df8a6241a0252a183686931ff446..4d69a2cf6dde76e0aabe04c7c0e07814bc77be65 100644 --- a/intrinsiccv/src/resize/resize_neon.cpp +++ b/intrinsiccv/src/resize/resize_neon.cpp @@ -8,7 +8,7 @@ namespace intrinsiccv::neon { -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void resize_to_quarter_u8(const uint8_t *src, size_t src_stride, size_t src_width, size_t src_height, uint8_t *dst, size_t dst_stride, size_t dst_width, diff --git a/intrinsiccv/src/resize/resize_sc.h b/intrinsiccv/src/resize/resize_sc.h index 107d345b21c2efd8990d20a0b117e3c4519a091b..1e417114e5dd6ba7b4a56b5704f6c94e503a6fee 100644 --- a/intrinsiccv/src/resize/resize_sc.h +++ b/intrinsiccv/src/resize/resize_sc.h @@ -139,7 +139,7 @@ static inline void process_single_row( } } -INTRINSICCV_TARGET_FN_ATTS static void resize_to_quarter_u8_sc( +INTRINSICCV_TARGET_FN_ATTRS static void resize_to_quarter_u8_sc( const uint8_t *src, size_t src_stride, size_t src_width, size_t src_height, uint8_t *dst, size_t dst_stride, size_t dst_width, size_t dst_height) INTRINSICCV_STREAMING_COMPATIBLE { diff --git a/intrinsiccv/src/resize/resize_sme2.cpp b/intrinsiccv/src/resize/resize_sme2.cpp index 3dee4382cee623005c1558f5f49107dc3109397f..428ac023dec28b575b0c66d9757b9b12c77235e3 100644 --- a/intrinsiccv/src/resize/resize_sme2.cpp +++ b/intrinsiccv/src/resize/resize_sme2.cpp @@ -7,7 +7,7 @@ namespace intrinsiccv::sme2 { -INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTS void +INTRINSICCV_LOCALLY_STREAMING INTRINSICCV_TARGET_FN_ATTRS void resize_to_quarter_u8(const uint8_t *src, size_t src_stride, size_t src_width, size_t src_height, uint8_t *dst, size_t dst_stride, size_t dst_width, size_t dst_height) { diff --git a/intrinsiccv/src/resize/resize_sve2.cpp b/intrinsiccv/src/resize/resize_sve2.cpp index 8c3bb36b9a9fb7f7d97b0e6fdea3ea4719071888..2fe08bed64f85b7db6ea9b2bfa38c34fd445b999 100644 --- a/intrinsiccv/src/resize/resize_sve2.cpp +++ b/intrinsiccv/src/resize/resize_sve2.cpp @@ -7,7 +7,7 @@ namespace intrinsiccv::sve2 { -INTRINSICCV_TARGET_FN_ATTS +INTRINSICCV_TARGET_FN_ATTRS void resize_to_quarter_u8(const uint8_t *src, size_t src_stride, size_t src_width, size_t src_height, uint8_t *dst, size_t dst_stride, size_t dst_width,