better rounding in vector reducev
add before downshift to round to nearest on 16->8 fixed-point conversion
This commit is contained in:
parent
8a74609172
commit
2ab14a3590
@ -235,10 +235,13 @@ vips_reducev_compile_section( VipsReducev *reducev, Pass *pass, gboolean first )
|
|||||||
* image, otherwise write the 16-bit intermediate to our temp buffer.
|
* image, otherwise write the 16-bit intermediate to our temp buffer.
|
||||||
*/
|
*/
|
||||||
if( i >= reducev->n_point - 1 ) {
|
if( i >= reducev->n_point - 1 ) {
|
||||||
|
char sixteen[256];
|
||||||
char five[256];
|
char five[256];
|
||||||
char zero[256];
|
char zero[256];
|
||||||
char twofivefive[256];
|
char twofivefive[256];
|
||||||
|
|
||||||
|
CONST( sixteen, 16, 2 );
|
||||||
|
ASM3( "addw", "sum", "sum", sixteen );
|
||||||
CONST( five, 5, 2 );
|
CONST( five, 5, 2 );
|
||||||
ASM3( "shrsw", "sum", "sum", five );
|
ASM3( "shrsw", "sum", "sum", five );
|
||||||
|
|
||||||
@ -250,6 +253,7 @@ vips_reducev_compile_section( VipsReducev *reducev, Pass *pass, gboolean first )
|
|||||||
ASM3( "maxsw", "sum", zero, "sum" );
|
ASM3( "maxsw", "sum", zero, "sum" );
|
||||||
CONST( twofivefive, 255, 2 );
|
CONST( twofivefive, 255, 2 );
|
||||||
ASM3( "minsw", "sum", twofivefive, "sum" );
|
ASM3( "minsw", "sum", twofivefive, "sum" );
|
||||||
|
|
||||||
ASM2( "convwb", "d1", "sum" );
|
ASM2( "convwb", "d1", "sum" );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -736,8 +740,10 @@ vips_reducev_raw( VipsReducev *reducev, VipsImage *in )
|
|||||||
generate = vips_reducev_gen;
|
generate = vips_reducev_gen;
|
||||||
if( in->BandFmt == VIPS_FORMAT_UCHAR &&
|
if( in->BandFmt == VIPS_FORMAT_UCHAR &&
|
||||||
vips_vector_isenabled() &&
|
vips_vector_isenabled() &&
|
||||||
!vips_reducev_compile( reducev ) )
|
!vips_reducev_compile( reducev ) ) {
|
||||||
|
vips_info( object_class->nickname, "using vector path" );
|
||||||
generate = vips_reducev_vector_gen;
|
generate = vips_reducev_vector_gen;
|
||||||
|
}
|
||||||
|
|
||||||
if( vips_image_pipelinev( resample->out,
|
if( vips_image_pipelinev( resample->out,
|
||||||
VIPS_DEMAND_STYLE_FATSTRIP, in, NULL ) )
|
VIPS_DEMAND_STYLE_FATSTRIP, in, NULL ) )
|
||||||
|
Loading…
Reference in New Issue
Block a user