@ -1154,6 +1154,30 @@ TEST(UMat, map_unmap_counting)
}
}
static void process_with_async_cleanup ( Mat & frame )
{
UMat blurResult ;
{
UMat umat_buffer = frame . getUMat ( ACCESS_READ ) ;
cv : : blur ( umat_buffer , blurResult , Size ( 3 , 3 ) ) ; // UMat doesn't support inplace, this call is not synchronized
}
Mat result ;
blurResult . copyTo ( result ) ;
swap ( result , frame ) ;
// umat_buffer cleanup is done asynchronously, silence warning about original 'frame' cleanup here (through 'result')
// - release input 'frame' (as 'result')
// - release 'umat_buffer' asynchronously and silence warning about "parent" buffer (in debug builds)
}
TEST ( UMat , async_cleanup_without_call_chain_warning )
{
Mat frame ( Size ( 640 , 480 ) , CV_8UC1 , Scalar : : all ( 128 ) ) ;
for ( int i = 0 ; i < 10 ; i + + )
{
process_with_async_cleanup ( frame ) ;
}
}
///////////// oclCleanupCallback threadsafe check (#5062) /////////////////////
///////////// oclCleanupCallback threadsafe check (#5062) /////////////////////
// Case 1: reuse of old src Mat in OCL pipe. Hard to catch!
// Case 1: reuse of old src Mat in OCL pipe. Hard to catch!