MCPcopy Create free account
hub / github.com/creatale/node-dv / transform_32f

Function transform_32f

deps/opencv/modules/core/src/matmul.cpp:1561–1616  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1559
1560
1561static void
1562transform_32f( const float* src, float* dst, const float* m, int len, int scn, int dcn )
1563{
1564#if CV_SSE2
1565 if( USE_SSE2 )
1566 {
1567 int x = 0;
1568 if( scn == 3 && dcn == 3 )
1569 {
1570 __m128 m0, m1, m2, m3;
1571 load3x3Matrix(m, m0, m1, m2, m3);
1572
1573 for( ; x < (len - 1)*3; x += 3 )
1574 {
1575 __m128 x0 = _mm_loadu_ps(src + x);
1576 __m128 y0 = _mm_add_ps(_mm_add_ps(_mm_add_ps(
1577 _mm_mul_ps(m0, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(0,0,0,0))),
1578 _mm_mul_ps(m1, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(1,1,1,1)))),
1579 _mm_mul_ps(m2, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(2,2,2,2)))), m3);
1580 _mm_storel_pi((__m64*)(dst + x), y0);
1581 _mm_store_ss(dst + x + 2, _mm_movehl_ps(y0,y0));
1582 }
1583
1584 for( ; x < len*3; x += 3 )
1585 {
1586 float v0 = src[x], v1 = src[x+1], v2 = src[x+2];
1587 float t0 = saturate_cast<float>(m[0]*v0 + m[1]*v1 + m[2]*v2 + m[3]);
1588 float t1 = saturate_cast<float>(m[4]*v0 + m[5]*v1 + m[6]*v2 + m[7]);
1589 float t2 = saturate_cast<float>(m[8]*v0 + m[9]*v1 + m[10]*v2 + m[11]);
1590 dst[x] = t0; dst[x+1] = t1; dst[x+2] = t2;
1591 }
1592 return;
1593 }
1594
1595 if( scn == 4 && dcn == 4 )
1596 {
1597 __m128 m0, m1, m2, m3, m4;
1598 load4x4Matrix(m, m0, m1, m2, m3, m4);
1599
1600 for( ; x < len*4; x += 4 )
1601 {
1602 __m128 x0 = _mm_loadu_ps(src + x);
1603 __m128 y0 = _mm_add_ps(_mm_add_ps(_mm_add_ps(_mm_add_ps(
1604 _mm_mul_ps(m0, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(0,0,0,0))),
1605 _mm_mul_ps(m1, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(1,1,1,1)))),
1606 _mm_mul_ps(m2, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(2,2,2,2)))),
1607 _mm_mul_ps(m3, _mm_shuffle_ps(x0,x0,_MM_SHUFFLE(3,3,3,3)))), m4);
1608 _mm_storeu_ps(dst + x, y0);
1609 }
1610 return;
1611 }
1612 }
1613#endif
1614
1615 transform_(src, dst, m, len, scn, dcn);
1616}
1617
1618

Callers

nothing calls this directly

Calls 3

load3x3MatrixFunction · 0.85
load4x4MatrixFunction · 0.85
transform_Function · 0.85

Tested by

no test coverage detected