| 598 | } |
| 599 | |
| 600 | void calc_cache_8uc3_2( |
| 601 | const Mat8u& src, const Mat8u& dst, const AlignedVector<int>& tabsx, |
| 602 | const AlignedVector<int>& tabsy, const AlignedVector<int>& tabrx, |
| 603 | const AlignedVector<int>& tabry, int dx, AlignedVector<int>& cache0, |
| 604 | AlignedVector<int>& cache1) { |
| 605 | (void)tabrx; |
| 606 | const uchar* psrc0 = src.ptr(tabsx[dx] + 0); |
| 607 | const uchar* psrc1 = src.ptr(tabsx[dx] + 1); |
| 608 | int dstcols = dst.cols(); |
| 609 | int dy = 0, dy3 = 0; |
| 610 | |
| 611 | // 4 pixels each time |
| 612 | for (; dy < dstcols; ++dy, dy3 += 3) { |
| 613 | const uchar* pcsrc00 = psrc0 + (tabsy[dy] + 0) * 3; |
| 614 | const uchar* pcsrc01 = psrc0 + (tabsy[dy] + 1) * 3; |
| 615 | const uchar* pcsrc10 = psrc1 + (tabsy[dy] + 0) * 3; |
| 616 | const uchar* pcsrc11 = psrc1 + (tabsy[dy] + 1) * 3; |
| 617 | int ry = tabry[dy]; |
| 618 | int iry = (1 << SCALE) - ry; |
| 619 | cache0[dy3 + 0] = pcsrc01[0] * ry + pcsrc00[0] * iry; |
| 620 | cache1[dy3 + 0] = pcsrc11[0] * ry + pcsrc10[0] * iry; |
| 621 | cache0[dy3 + 1] = pcsrc01[1] * ry + pcsrc00[1] * iry; |
| 622 | cache1[dy3 + 1] = pcsrc11[1] * ry + pcsrc10[1] * iry; |
| 623 | cache0[dy3 + 2] = pcsrc01[2] * ry + pcsrc00[2] * iry; |
| 624 | cache1[dy3 + 2] = pcsrc11[2] * ry + pcsrc10[2] * iry; |
| 625 | } |
| 626 | } |
| 627 | |
| 628 | void resize_linear_8u_neon(const Mat8u& src, Mat8u& dst) { |
| 629 | AlignedVector<int> tabsx(dst.rows()); |
no test coverage detected