shape_based_matching icon indicating copy to clipboard operation
shape_based_matching copied to clipboard

char转short疑问

Open mangoeffect opened this issue 5 years ago • 3 comments

meiqua大大你好, ` for(; j <= template_positions -mipp::N<int16_t>()2; j+=mipp::N<int16_t>()){ mipp::Reg<uint8_t> src8_v((uint8_t)lm_ptr + j);

        // uchar to short, once for N bytes
        mipp::Reg<int16_t> src16_v(mipp::interleavelo(src8_v, zero_v).r);

        mipp::Reg<int16_t> dst_v((int16_t*)dst_ptr + j);

        mipp::Reg<int16_t> res_v = src16_v + dst_v;
        res_v.store((int16_t*)dst_ptr + j);
    }`

中对于 mipp::interleavelo(src8_v, zero_v).r有些疑问,我查阅了相关的定义 模板函数中 template <typename T> inline Reg<T> interleavelo (const Reg<T> v1, const Reg<T> v2) { return v1.interleavelo(v2); } 而mipp中interleavelo直接return *this,那此直接返回v1吗?v2有何意义呢? 而对象v1的r是直接在初始化列表里面初始化的,所以不明白这char转short的过程,望指点迷津。

mangoeffect avatar May 26 '20 03:05 mangoeffect

我最近想把代码中的指令集优化部分替换成OpenCV4 的Universal intrinsics,但卡在interleavelo这里了,请问这个interleavelo操作是如下的操作吗 // v1 = [a0, b0], v2 = [a1, b1] // res = [a0, a1] // v1 = [a0, b0, c0, d0], v2 = [a1, b1, c1, d1] // res = [a0, a1, b0, b1] 如果是,那interleave后的结果应该还是和输入的v1,v2是相同的数据类型uint8,然后转int16是直接强制转换?

mangoeffect avatar May 27 '20 03:05 mangoeffect

对,就是这个意思,char < 127的时候就等于转short。MIPP直接return *this在哪?

meiqua avatar May 27 '20 13:05 meiqua

1、for (; j <= template_positions - mipp::N<int16_t>() * 2; j += mipp::N<int16_t>()) { mipp::Reg<uint8_t> src8_v((uint8_t*)lm_ptr + j); mipp::Reg<int16_t> src16_v(mipp::interleavelo(src8_v, zero_v).r);
mipp::Reg<int16_t> dst_v((int16_t*)dst_ptr + j); mipp::Reg<int16_t> res_v = src16_v + dst_v; res_v.store((int16_t*)dst_ptr + j); } 那这部分在代码中具体是实现什么功能? 2、int template_positions = span_y * W + span_x + 1;是什么意思

WangJophsen avatar May 19 '22 14:05 WangJophsen