reduce the number of copy() ops
reduce the number of copy() ops issued during colour conversion
This commit is contained in:
parent
cc9517df20
commit
35650c2244
3
TODO
3
TODO
|
@ -10,6 +10,9 @@
|
||||||
|
|
||||||
no better, strange
|
no better, strange
|
||||||
|
|
||||||
|
- we have a buffer reserve list on each image ... could we junk this on
|
||||||
|
"minimise"?
|
||||||
|
|
||||||
- try SEQ_UNBUFFERED on jpg source, get out of order error?
|
- try SEQ_UNBUFFERED on jpg source, get out of order error?
|
||||||
|
|
||||||
- add reduceh > 3 warning for wtc shrink to 1280x1280
|
- add reduceh > 3 warning for wtc shrink to 1280x1280
|
||||||
|
|
|
@ -321,10 +321,16 @@ vips_colour_build( VipsObject *object )
|
||||||
in[i], colour->input_bands ) )
|
in[i], colour->input_bands ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
if( vips_extract_band( in[i], &new_in[i], 0,
|
if( in[i]->Bands > colour->input_bands ) {
|
||||||
"n", colour->input_bands,
|
if( vips_extract_band( in[i], &new_in[i], 0,
|
||||||
NULL ) )
|
"n", colour->input_bands,
|
||||||
return( -1 );
|
NULL ) )
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
new_in[i] = in[i];
|
||||||
|
g_object_ref( new_in[i] );
|
||||||
|
}
|
||||||
|
|
||||||
if( in[i]->Bands > colour->input_bands )
|
if( in[i]->Bands > colour->input_bands )
|
||||||
if( vips_extract_band( in[i], &extra_bands[i],
|
if( vips_extract_band( in[i], &extra_bands[i],
|
||||||
|
@ -445,8 +451,15 @@ vips_colour_transform_build( VipsObject *object )
|
||||||
|
|
||||||
/* We only process float.
|
/* We only process float.
|
||||||
*/
|
*/
|
||||||
if( vips_cast_float( transform->in, &t[0], NULL ) )
|
if( transform->in &&
|
||||||
return( -1 );
|
transform->in->BandFmt != VIPS_FORMAT_FLOAT ) {
|
||||||
|
if( vips_cast_float( transform->in, &t[0], NULL ) )
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
t[0] = transform->in;
|
||||||
|
g_object_ref( t[0] );
|
||||||
|
}
|
||||||
|
|
||||||
/* We always do 3 bands -> 3 bands.
|
/* We always do 3 bands -> 3 bands.
|
||||||
*/
|
*/
|
||||||
|
@ -527,7 +540,8 @@ vips_colour_code_build( VipsObject *object )
|
||||||
|
|
||||||
if( in &&
|
if( in &&
|
||||||
code->input_coding == VIPS_CODING_NONE &&
|
code->input_coding == VIPS_CODING_NONE &&
|
||||||
code->input_format != VIPS_FORMAT_NOTSET ) {
|
code->input_format != VIPS_FORMAT_NOTSET &&
|
||||||
|
in->BandFmt != code->input_format ) {
|
||||||
if( vips_cast( in, &t[3], code->input_format, NULL ) )
|
if( vips_cast( in, &t[3], code->input_format, NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
in = t[3];
|
in = t[3];
|
||||||
|
@ -535,7 +549,8 @@ vips_colour_code_build( VipsObject *object )
|
||||||
|
|
||||||
if( in &&
|
if( in &&
|
||||||
code->input_coding == VIPS_CODING_NONE &&
|
code->input_coding == VIPS_CODING_NONE &&
|
||||||
code->input_interpretation != VIPS_INTERPRETATION_ERROR ) {
|
code->input_interpretation != VIPS_INTERPRETATION_ERROR &&
|
||||||
|
in->Type != code->input_interpretation ) {
|
||||||
if( vips_colourspace( in, &t[4],
|
if( vips_colourspace( in, &t[4],
|
||||||
code->input_interpretation, NULL ) )
|
code->input_interpretation, NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
@ -616,21 +631,37 @@ vips_colour_difference_build( VipsObject *object )
|
||||||
*/
|
*/
|
||||||
colour->input_bands = 3;
|
colour->input_bands = 3;
|
||||||
|
|
||||||
if( vips_colourspace( left, &t[6], difference->interpretation, NULL ) )
|
if( left &&
|
||||||
return( -1 );
|
left->Type != difference->interpretation ) {
|
||||||
left = t[6];
|
if( vips_colourspace( left, &t[6],
|
||||||
if( vips_colourspace( right, &t[7], difference->interpretation, NULL ) )
|
difference->interpretation, NULL ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
right = t[7];
|
left = t[6];
|
||||||
|
}
|
||||||
|
|
||||||
|
if( right &&
|
||||||
|
right->Type != difference->interpretation ) {
|
||||||
|
if( vips_colourspace( right, &t[7],
|
||||||
|
difference->interpretation, NULL ) )
|
||||||
|
return( -1 );
|
||||||
|
right = t[7];
|
||||||
|
}
|
||||||
|
|
||||||
/* We only process float.
|
/* We only process float.
|
||||||
*/
|
*/
|
||||||
if( vips_cast_float( left, &t[8], NULL ) )
|
if( left &&
|
||||||
return( -1 );
|
left->BandFmt != VIPS_FORMAT_FLOAT ) {
|
||||||
left = t[8];
|
if( vips_cast_float( left, &t[8], NULL ) )
|
||||||
if( vips_cast_float( right, &t[9], NULL ) )
|
return( -1 );
|
||||||
return( -1 );
|
left = t[8];
|
||||||
right = t[9];
|
}
|
||||||
|
|
||||||
|
if( right &&
|
||||||
|
right->BandFmt != VIPS_FORMAT_FLOAT ) {
|
||||||
|
if( vips_cast_float( right, &t[9], NULL ) )
|
||||||
|
return( -1 );
|
||||||
|
right = t[9];
|
||||||
|
}
|
||||||
|
|
||||||
if( vips__sizealike( left, right, &t[10], &t[11] ) )
|
if( vips__sizealike( left, right, &t[10], &t[11] ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
|
@ -192,8 +192,14 @@ vips_sRGB2scRGB_build( VipsObject *object )
|
||||||
|
|
||||||
format = in->Type == VIPS_INTERPRETATION_RGB16 ?
|
format = in->Type == VIPS_INTERPRETATION_RGB16 ?
|
||||||
VIPS_FORMAT_USHORT : VIPS_FORMAT_UCHAR;
|
VIPS_FORMAT_USHORT : VIPS_FORMAT_UCHAR;
|
||||||
if( vips_cast( in, &t[0], format, NULL ) )
|
if( in->BandFmt != format ) {
|
||||||
return( -1 );
|
if( vips_cast( in, &t[0], format, NULL ) )
|
||||||
|
return( -1 );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
t[0] = in;
|
||||||
|
g_object_ref( t[0] );
|
||||||
|
}
|
||||||
in = t[0];
|
in = t[0];
|
||||||
|
|
||||||
out = vips_image_new();
|
out = vips_image_new();
|
||||||
|
|
Loading…
Reference in New Issue