MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / compute_resize_area_tab

Function compute_resize_area_tab

dnn/src/fallback/resize/gi/resize_cv.cpp:1030–1066  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1028}
1029
1030int compute_resize_area_tab(
1031 int ssize, int dsize, int cn, double scale, DecimateAlpha* tab) {
1032 int k = 0;
1033 for (int dx = 0; dx < dsize; dx++) {
1034 double fsx1 = dx * scale;
1035 double fsx2 = fsx1 + scale;
1036 double cellWidth = std::min(scale, ssize - fsx1);
1037
1038 int sx1 = ceil(fsx1), sx2 = floor(fsx2);
1039
1040 sx2 = std::min(sx2, ssize - 1);
1041 sx1 = std::min(sx1, sx2);
1042
1043 if (sx1 - fsx1 > 1e-3) {
1044 megdnn_assert(k < ssize * 2);
1045 tab[k].di = dx * cn;
1046 tab[k].si = (sx1 - 1) * cn;
1047 tab[k++].alpha = (float)((sx1 - fsx1) / cellWidth);
1048 }
1049
1050 for (int sx = sx1; sx < sx2; sx++) {
1051 megdnn_assert(k < ssize * 2);
1052 tab[k].di = dx * cn;
1053 tab[k].si = sx * cn;
1054 tab[k++].alpha = float(1.0 / cellWidth);
1055 }
1056
1057 if (fsx2 - sx2 > 1e-3) {
1058 megdnn_assert(k < ssize * 2);
1059 tab[k].di = dx * cn;
1060 tab[k].si = sx2 * cn;
1061 tab[k++].alpha =
1062 (float)(std::min(std::min(fsx2 - sx2, 1.), cellWidth) / cellWidth);
1063 }
1064 }
1065 return k;
1066}
1067
1068// resize Area Fast
1069template <typename T, typename WT, typename VecOp>

Callers 1

resize_opencvFunction · 0.70

Calls 3

minFunction · 0.50
ceilFunction · 0.50
floorFunction · 0.50

Tested by

no test coverage detected