Merge pull request #6863 from SorcererX:patch-1
This commit is contained in:
commit
07b18b0e8a
@ -759,14 +759,50 @@ static void computeDisparitySGBM( const Mat& img1, const Mat& img2,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for( d = 0; d < D; d++ )
|
#if CV_SSE2
|
||||||
|
if( useSIMD )
|
||||||
{
|
{
|
||||||
int Sval = Sp[d];
|
__m128i _minS = _mm_set1_epi16(MAX_COST), _bestDisp = _mm_set1_epi16(-1);
|
||||||
if( Sval < minS )
|
__m128i _d8 = _mm_setr_epi16(0, 1, 2, 3, 4, 5, 6, 7), _8 = _mm_set1_epi16(8);
|
||||||
{
|
|
||||||
minS = Sval;
|
for( d = 0; d < D; d+= 8 )
|
||||||
bestDisp = d;
|
{
|
||||||
}
|
__m128i L0 = _mm_load_si128((const __m128i*)( Sp + d ));
|
||||||
|
__m128i mask = _mm_cmplt_epi16( L0, _minS );
|
||||||
|
_minS = _mm_min_epi16( L0, _minS );
|
||||||
|
_bestDisp = _mm_xor_si128(_bestDisp, _mm_and_si128(_mm_xor_si128( _bestDisp, _d8), mask));
|
||||||
|
_d8 = _mm_adds_epi16(_d8, _8 );
|
||||||
|
}
|
||||||
|
short CV_DECL_ALIGNED(16) bestDispBuf[8];
|
||||||
|
_mm_store_si128((__m128i*)bestDispBuf, _bestDisp);
|
||||||
|
short CV_DECL_ALIGNED(16) minSBuf[8];
|
||||||
|
_mm_store_si128((__m128i*)minSBuf, _minS );
|
||||||
|
|
||||||
|
for( int i = 0; i < 8; i++ )
|
||||||
|
{
|
||||||
|
int Sval = minSBuf[ i ];
|
||||||
|
if( Sval <= minS )
|
||||||
|
{
|
||||||
|
if( ( Sval < minS ) || ( bestDispBuf[i] < bestDisp ) )
|
||||||
|
{
|
||||||
|
bestDisp = bestDispBuf[i];
|
||||||
|
}
|
||||||
|
minS = Sval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
for( d = 0; d < D; d++ )
|
||||||
|
{
|
||||||
|
int Sval = Sp[d];
|
||||||
|
if( Sval < minS )
|
||||||
|
{
|
||||||
|
minS = Sval;
|
||||||
|
bestDisp = d;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user