MCPcopy Create free account
hub / github.com/MegEngine/MegEngine / operator()

Method operator()

dnn/src/common/cv/filter.h:361–400  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

359 : ColumnFilter<CastOp, VecOp>(kernel_, anchor_, cast_op_, vec_op_) {}
360
361 void operator()(const uchar** src, uchar* dst, int dststep, int count, int width) {
362 int ksize2 = this->ksize / 2;
363 const ST* ky = this->kernel.ptr() + ksize2;
364 int i, k;
365 src += ksize2;
366
367 for (; count > 0; count--, dst += dststep, src++) {
368 DT* D = (DT*)dst;
369 i = (this->vec_op)(src, dst, count, width);
370#if MEGCV_ENABLE_UNROLLED
371 for (; i <= width - 4; i += 4) {
372 ST f = ky[0];
373 const ST *S = (const ST*)src[0] + i, *S2;
374 ST s0 = f * S[0], s1 = f * S[1], s2 = f * S[2], s3 = f * S[3];
375
376 for (k = 1; k <= ksize2; k++) {
377 S = (const ST*)src[k] + i;
378 S2 = (const ST*)src[-k] + i;
379 f = ky[k];
380 s0 += f * (S[0] + S2[0]);
381 s1 += f * (S[1] + S2[1]);
382 s2 += f * (S[2] + S2[2]);
383 s3 += f * (S[3] + S2[3]);
384 }
385
386 D[i] = this->cast_op(s0);
387 D[i + 1] = this->cast_op(s1);
388 D[i + 2] = this->cast_op(s2);
389 D[i + 3] = this->cast_op(s3);
390 }
391#endif
392 for (; i < width; i++) {
393 ST s0 = ky[0] * ((const ST*)src[0])[i];
394 for (k = 1; k <= ksize2; k++) {
395 s0 += ky[k] * (((const ST*)src[k])[i] + ((const ST*)src[-k])[i]);
396 }
397 D[i] = this->cast_op(s0);
398 }
399 }
400 }
401};
402
403template <class CastOp, class VecOp>

Callers

nothing calls this directly

Calls 1

ptrMethod · 0.45

Tested by

no test coverage detected