oops, put the flags test on a subclass
This commit is contained in:
parent
6f94cb5ed4
commit
0a4991cbc0
@ -4,6 +4,8 @@
|
|||||||
* - wrap a class around the jpeg writer
|
* - wrap a class around the jpeg writer
|
||||||
* 29/11/11
|
* 29/11/11
|
||||||
* - split to make load, load from buffer and load from file
|
* - split to make load, load from buffer and load from file
|
||||||
|
* 18/2/16
|
||||||
|
* - don't cache progressive jpgs, they take too much mem
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -92,6 +94,25 @@ typedef VipsForeignLoadClass VipsForeignLoadJpegClass;
|
|||||||
G_DEFINE_ABSTRACT_TYPE( VipsForeignLoadJpeg, vips_foreign_load_jpeg,
|
G_DEFINE_ABSTRACT_TYPE( VipsForeignLoadJpeg, vips_foreign_load_jpeg,
|
||||||
VIPS_TYPE_FOREIGN_LOAD );
|
VIPS_TYPE_FOREIGN_LOAD );
|
||||||
|
|
||||||
|
static VipsOperationFlags
|
||||||
|
vips_foreign_load_jpeg_operation_get_flags( VipsOperation *operation )
|
||||||
|
{
|
||||||
|
VipsForeignLoad *load = VIPS_FOREIGN_LOAD( operation );
|
||||||
|
|
||||||
|
VipsOperationFlags flags;
|
||||||
|
int multiscan;
|
||||||
|
|
||||||
|
flags = VIPS_OPERATION_CLASS( vips_foreign_load_jpeg_parent_class )->
|
||||||
|
get_flags( operation );
|
||||||
|
if( load->out &&
|
||||||
|
!vips_image_get_int( load->out,
|
||||||
|
"jpeg-multiscan", &multiscan ) &&
|
||||||
|
multiscan )
|
||||||
|
flags |= VIPS_OPERATION_NOCACHE;
|
||||||
|
|
||||||
|
return( flags );
|
||||||
|
}
|
||||||
|
|
||||||
static VipsForeignFlags
|
static VipsForeignFlags
|
||||||
vips_foreign_load_jpeg_get_flags( VipsForeignLoad *load )
|
vips_foreign_load_jpeg_get_flags( VipsForeignLoad *load )
|
||||||
{
|
{
|
||||||
@ -126,6 +147,7 @@ vips_foreign_load_jpeg_class_init( VipsForeignLoadJpegClass *class )
|
|||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS( class );
|
GObjectClass *gobject_class = G_OBJECT_CLASS( class );
|
||||||
VipsObjectClass *object_class = (VipsObjectClass *) class;
|
VipsObjectClass *object_class = (VipsObjectClass *) class;
|
||||||
|
VipsOperationClass *operation_class = (VipsOperationClass *) class;
|
||||||
VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
|
VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
|
||||||
|
|
||||||
gobject_class->set_property = vips_object_set_property;
|
gobject_class->set_property = vips_object_set_property;
|
||||||
@ -135,6 +157,8 @@ vips_foreign_load_jpeg_class_init( VipsForeignLoadJpegClass *class )
|
|||||||
object_class->description = _( "load jpeg" );
|
object_class->description = _( "load jpeg" );
|
||||||
object_class->build = vips_foreign_load_jpeg_build;
|
object_class->build = vips_foreign_load_jpeg_build;
|
||||||
|
|
||||||
|
operation_class->get_flags = vips_foreign_load_jpeg_operation_get_flags;
|
||||||
|
|
||||||
load_class->get_flags = vips_foreign_load_jpeg_get_flags;
|
load_class->get_flags = vips_foreign_load_jpeg_get_flags;
|
||||||
|
|
||||||
VIPS_ARG_INT( class, "shrink", 10,
|
VIPS_ARG_INT( class, "shrink", 10,
|
||||||
@ -179,25 +203,6 @@ typedef VipsForeignLoadJpegClass VipsForeignLoadJpegFileClass;
|
|||||||
G_DEFINE_TYPE( VipsForeignLoadJpegFile, vips_foreign_load_jpeg_file,
|
G_DEFINE_TYPE( VipsForeignLoadJpegFile, vips_foreign_load_jpeg_file,
|
||||||
vips_foreign_load_jpeg_get_type() );
|
vips_foreign_load_jpeg_get_type() );
|
||||||
|
|
||||||
static VipsOperationFlags
|
|
||||||
vips_foreign_load_jpeg_operation_get_flags( VipsOperation *operation )
|
|
||||||
{
|
|
||||||
VipsForeignLoad *load = VIPS_FOREIGN_LOAD( operation );
|
|
||||||
|
|
||||||
VipsOperationFlags flags;
|
|
||||||
int multiscan;
|
|
||||||
|
|
||||||
flags = VIPS_OPERATION_CLASS( vips_foreign_load_jpeg_parent_class )->
|
|
||||||
get_flags( operation );
|
|
||||||
if( load->out &&
|
|
||||||
!vips_image_get_int( load->out,
|
|
||||||
"jpeg-multiscan", &multiscan ) &&
|
|
||||||
multiscan )
|
|
||||||
flags |= VIPS_OPERATION_NOCACHE;
|
|
||||||
|
|
||||||
return( flags );
|
|
||||||
}
|
|
||||||
|
|
||||||
static VipsForeignFlags
|
static VipsForeignFlags
|
||||||
vips_foreign_load_jpeg_file_get_flags_filename( const char *filename )
|
vips_foreign_load_jpeg_file_get_flags_filename( const char *filename )
|
||||||
{
|
{
|
||||||
@ -248,7 +253,6 @@ vips_foreign_load_jpeg_file_class_init( VipsForeignLoadJpegFileClass *class )
|
|||||||
{
|
{
|
||||||
GObjectClass *gobject_class = G_OBJECT_CLASS( class );
|
GObjectClass *gobject_class = G_OBJECT_CLASS( class );
|
||||||
VipsObjectClass *object_class = (VipsObjectClass *) class;
|
VipsObjectClass *object_class = (VipsObjectClass *) class;
|
||||||
VipsOperationClass *operation_class = (VipsOperationClass *) class;
|
|
||||||
VipsForeignClass *foreign_class = (VipsForeignClass *) class;
|
VipsForeignClass *foreign_class = (VipsForeignClass *) class;
|
||||||
VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
|
VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class;
|
||||||
|
|
||||||
@ -258,8 +262,6 @@ vips_foreign_load_jpeg_file_class_init( VipsForeignLoadJpegFileClass *class )
|
|||||||
object_class->nickname = "jpegload";
|
object_class->nickname = "jpegload";
|
||||||
object_class->description = _( "load jpeg from file" );
|
object_class->description = _( "load jpeg from file" );
|
||||||
|
|
||||||
operation_class->get_flags = vips_foreign_load_jpeg_operation_get_flags;
|
|
||||||
|
|
||||||
foreign_class->suffs = jpeg_suffs;
|
foreign_class->suffs = jpeg_suffs;
|
||||||
|
|
||||||
/* We are fast at is_a(), so high priority.
|
/* We are fast at is_a(), so high priority.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user