| 222 | } |
| 223 | |
| 224 | void rotate_8uc1_counterclockwise( |
| 225 | const uchar* src, uchar* dst, const size_t rows, const size_t cols, |
| 226 | const size_t src_step, const size_t dst_step) { |
| 227 | const size_t block = 16; |
| 228 | (void)block; |
| 229 | size_t i = 0; |
| 230 | |
| 231 | for (; i + block <= rows; i += block) { |
| 232 | size_t j = 0; |
| 233 | for (; j + block <= cols; j += block) { |
| 234 | rotate_8uc1_counterclockwise_16x16( |
| 235 | src + i * src_step + j, dst + (cols - (j + block)) * dst_step + i, |
| 236 | src_step, dst_step); |
| 237 | } |
| 238 | for (; j < cols; ++j) { |
| 239 | for (size_t k = 0; k < block; ++k) { |
| 240 | dst[(cols - 1 - j) * dst_step + (i + k)] = src[(i + k) * src_step + j]; |
| 241 | } |
| 242 | } |
| 243 | } |
| 244 | |
| 245 | for (; i < rows; ++i) { |
| 246 | for (size_t j = 0; j < cols; ++j) { |
| 247 | dst[(cols - 1 - j) * dst_step + i] = src[i * src_step + j]; |
| 248 | } |
| 249 | } |
| 250 | } |
| 251 | |
| 252 | void rotate(const Mat<uchar>& src, Mat<uchar>& dst, bool clockwise) { |
| 253 | megdnn_assert(src.rows() == dst.cols()); |
no test coverage detected