.. _program_listing_file__tmp_ws_src_vitis_common_include_aie_imgproc_xf_convertscaleabs_aie.hpp: Program Listing for File xf_convertscaleabs_aie.hpp =================================================== |exhale_lsh| :ref:`Return to documentation for file ` (``/tmp/ws/src/vitis_common/include/aie/imgproc/xf_convertscaleabs_aie.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp /* * Copyright 2021 Xilinx, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #ifndef _AIE_CONVERTSCALEABS_H_ #define _AIE_CONVERTSCALEABS_H_ #define SHIFT_CNT 8 #include namespace xf { namespace cv { namespace aie { template inline void convertscaleabs(const T* restrict img_in, T* restrict img_out, const int16_t img_width, const int16_t img_height, const float alpha, const float beta) { int16_t alpha_q1dot15 = float2fix(alpha, SHIFT_CNT); //(alpha * (1 << 15)); int16_t beta_q1dot15 = float2fix(beta, SHIFT_CNT); //(beta * (1 << 15)); ::aie::vector data_buf1; ::aie::vector alpha_reg; ::aie::vector beta_reg; ::aie::accum acc; ::aie::accum beta_out; for (int i = 0; i < 16; i++) { beta_reg[i] = beta_q1dot15; alpha_reg[i] = alpha_q1dot15; } beta_out.from_vector(beta_reg); set_sat(); for (int j = 0; j < (img_height * img_width); j += 16) // 32x samples per loop chess_prepare_for_pipelining chess_loop_range(14, ) { data_buf1 = ::aie::load_v(img_in); // in1:00++15|_________|_________|_________ img_in += N; acc = ::aie::mac(beta_out, alpha_reg, data_buf1); ::aie::store_v(img_out, acc.template to_vector(SHIFT_CNT).unpack()); img_out += N; } clr_sat(); } void convertscaleabs_api(input_window_int16* img_in, output_window_int16* img_out, const float& alpha, const float& beta) { int16_t* img_in_ptr = (int16_t*)img_in->ptr; int16_t* img_out_ptr = (int16_t*)img_out->ptr; const int16_t img_width = xfcvGetTileWidth(img_in_ptr); const int16_t img_height = xfcvGetTileHeight(img_in_ptr); xfcvCopyMetaData(img_in_ptr, img_out_ptr); int16_t* ptr0 = (int16_t*)xfcvGetImgDataPtr(img_in_ptr); int16_t* ptr_out = (int16_t*)xfcvGetImgDataPtr(img_out_ptr); convertscaleabs<16, int16_t>(ptr0, ptr_out, img_width, img_height, alpha, beta); } } // aie } // cv } // xf #endif