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

Function compute_resize_area_tab

dnn/src/arm_common/resize/resize_cv.cpp:1504–1540  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1502}
1503
1504int compute_resize_area_tab(
1505 int ssize, int dsize, int cn, double scale, DecimateAlpha* tab) {
1506 int k = 0;
1507 for (int dx = 0; dx < dsize; dx++) {
1508 double fsx1 = dx * scale;
1509 double fsx2 = fsx1 + scale;
1510 double cellWidth = std::min(scale, ssize - fsx1);
1511
1512 int sx1 = ceil(fsx1), sx2 = floor(fsx2);
1513
1514 sx2 = std::min(sx2, ssize - 1);
1515 sx1 = std::min(sx1, sx2);
1516
1517 if (sx1 - fsx1 > 1e-3) {
1518 megdnn_assert(k < ssize * 2);
1519 tab[k].di = dx * cn;
1520 tab[k].si = (sx1 - 1) * cn;
1521 tab[k++].alpha = (float)((sx1 - fsx1) / cellWidth);
1522 }
1523
1524 for (int sx = sx1; sx < sx2; sx++) {
1525 megdnn_assert(k < ssize * 2);
1526 tab[k].di = dx * cn;
1527 tab[k].si = sx * cn;
1528 tab[k++].alpha = float(1.0 / cellWidth);
1529 }
1530
1531 if (fsx2 - sx2 > 1e-3) {
1532 megdnn_assert(k < ssize * 2);
1533 tab[k].di = dx * cn;
1534 tab[k].si = sx2 * cn;
1535 tab[k++].alpha =
1536 (float)(std::min(std::min(fsx2 - sx2, 1.), cellWidth) / cellWidth);
1537 }
1538 }
1539 return k;
1540}
1541
1542// resize Area Fast
1543template <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