- remove no_subsample from inner calls
This commit is contained in:
parent
22b3a0d161
commit
8749871c71
@ -114,6 +114,24 @@ static int bandfmt_jpeg[10] = {
|
|||||||
UC, UC, UC, UC, UC, UC, UC, UC, UC, UC
|
UC, UC, UC, UC, UC, UC, UC, UC, UC, UC
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
vips_foreign_save_jpeg_build( VipsObject *object )
|
||||||
|
{
|
||||||
|
VipsForeignSaveJpeg *jpeg = (VipsForeignSaveJpeg *) object;
|
||||||
|
|
||||||
|
if( VIPS_OBJECT_CLASS( vips_foreign_save_jpeg_parent_class )->
|
||||||
|
build( object ) )
|
||||||
|
return( -1 );
|
||||||
|
|
||||||
|
/* no_subsample is deprecated, but we retain backwards compatibility
|
||||||
|
* new code should use subsample_mode
|
||||||
|
*/
|
||||||
|
if( vips_object_argument_isset(object, "no_subsample") )
|
||||||
|
jpeg->subsample_mode = jpeg->no_subsample ? VIPS_FOREIGN_JPEG_SUBSAMPLE_OFF : VIPS_FOREIGN_JPEG_SUBSAMPLE_AUTO;
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
vips_foreign_save_jpeg_class_init( VipsForeignSaveJpegClass *class )
|
vips_foreign_save_jpeg_class_init( VipsForeignSaveJpegClass *class )
|
||||||
{
|
{
|
||||||
@ -127,6 +145,7 @@ vips_foreign_save_jpeg_class_init( VipsForeignSaveJpegClass *class )
|
|||||||
|
|
||||||
object_class->nickname = "jpegsave_base";
|
object_class->nickname = "jpegsave_base";
|
||||||
object_class->description = _( "save jpeg" );
|
object_class->description = _( "save jpeg" );
|
||||||
|
object_class->build = vips_foreign_save_jpeg_build;
|
||||||
|
|
||||||
foreign_class->suffs = vips__jpeg_suffs;
|
foreign_class->suffs = vips__jpeg_suffs;
|
||||||
|
|
||||||
@ -239,9 +258,9 @@ vips_foreign_save_jpeg_target_build( VipsObject *object )
|
|||||||
|
|
||||||
if( vips__jpeg_write_target( save->ready, target->target,
|
if( vips__jpeg_write_target( save->ready, target->target,
|
||||||
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
|
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
|
||||||
jpeg->interlace, save->strip, jpeg->no_subsample,
|
jpeg->interlace, save->strip, jpeg->trellis_quant,
|
||||||
jpeg->trellis_quant, jpeg->overshoot_deringing,
|
jpeg->overshoot_deringing, jpeg->optimize_scans,
|
||||||
jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode ) )
|
jpeg->quant_table, jpeg->subsample_mode ) )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
@ -305,9 +324,9 @@ vips_foreign_save_jpeg_file_build( VipsObject *object )
|
|||||||
return( -1 );
|
return( -1 );
|
||||||
if( vips__jpeg_write_target( save->ready, target,
|
if( vips__jpeg_write_target( save->ready, target,
|
||||||
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
|
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
|
||||||
jpeg->interlace, save->strip, jpeg->no_subsample,
|
jpeg->interlace, save->strip, jpeg->trellis_quant,
|
||||||
jpeg->trellis_quant, jpeg->overshoot_deringing,
|
jpeg->overshoot_deringing, jpeg->optimize_scans,
|
||||||
jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode ) ) {
|
jpeg->quant_table, jpeg->subsample_mode ) ) {
|
||||||
VIPS_UNREF( target );
|
VIPS_UNREF( target );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
@ -375,9 +394,9 @@ vips_foreign_save_jpeg_buffer_build( VipsObject *object )
|
|||||||
|
|
||||||
if( vips__jpeg_write_target( save->ready, target,
|
if( vips__jpeg_write_target( save->ready, target,
|
||||||
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
|
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
|
||||||
jpeg->interlace, save->strip, jpeg->no_subsample,
|
jpeg->interlace, save->strip, jpeg->trellis_quant,
|
||||||
jpeg->trellis_quant, jpeg->overshoot_deringing,
|
jpeg->overshoot_deringing, jpeg->optimize_scans,
|
||||||
jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode ) ) {
|
jpeg->quant_table, jpeg->subsample_mode ) ) {
|
||||||
VIPS_UNREF( target );
|
VIPS_UNREF( target );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
@ -448,9 +467,9 @@ vips_foreign_save_jpeg_mime_build( VipsObject *object )
|
|||||||
|
|
||||||
if( vips__jpeg_write_target( save->ready, target,
|
if( vips__jpeg_write_target( save->ready, target,
|
||||||
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
|
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
|
||||||
jpeg->interlace, save->strip, jpeg->no_subsample,
|
jpeg->interlace, save->strip, jpeg->trellis_quant,
|
||||||
jpeg->trellis_quant, jpeg->overshoot_deringing,
|
jpeg->overshoot_deringing, jpeg->optimize_scans,
|
||||||
jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode ) ) {
|
jpeg->quant_table, jpeg->subsample_mode ) ) {
|
||||||
VIPS_UNREF( target );
|
VIPS_UNREF( target );
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
|
@ -164,9 +164,9 @@ extern const char *vips__jpeg_suffs[];
|
|||||||
int vips__jpeg_write_target( VipsImage *in, VipsTarget *target,
|
int vips__jpeg_write_target( VipsImage *in, VipsTarget *target,
|
||||||
int Q, const char *profile,
|
int Q, const char *profile,
|
||||||
gboolean optimize_coding, gboolean progressive, gboolean strip,
|
gboolean optimize_coding, gboolean progressive, gboolean strip,
|
||||||
gboolean no_subsample, gboolean trellis_quant,
|
gboolean trellis_quant, gboolean overshoot_deringing,
|
||||||
gboolean overshoot_deringing, gboolean optimize_scans,
|
gboolean optimize_scans, int quant_table,
|
||||||
int quant_table, VipsForeignJpegSubsample subsample_mode );
|
VipsForeignJpegSubsample subsample_mode );
|
||||||
|
|
||||||
int vips__jpeg_read_source( VipsSource *source, VipsImage *out,
|
int vips__jpeg_read_source( VipsSource *source, VipsImage *out,
|
||||||
gboolean header_only, int shrink, int fail, gboolean autorotate );
|
gboolean header_only, int shrink, int fail, gboolean autorotate );
|
||||||
|
@ -782,9 +782,9 @@ int
|
|||||||
vips__jpeg_write_target( VipsImage *in, VipsTarget *target,
|
vips__jpeg_write_target( VipsImage *in, VipsTarget *target,
|
||||||
int Q, const char *profile,
|
int Q, const char *profile,
|
||||||
gboolean optimize_coding, gboolean progressive,
|
gboolean optimize_coding, gboolean progressive,
|
||||||
gboolean strip, gboolean no_subsample, gboolean trellis_quant,
|
gboolean strip, gboolean trellis_quant,
|
||||||
gboolean overshoot_deringing, gboolean optimize_scans, int quant_table,
|
gboolean overshoot_deringing, gboolean optimize_scans,
|
||||||
VipsForeignJpegSubsample subsample_mode)
|
int quant_table, VipsForeignJpegSubsample subsample_mode)
|
||||||
{
|
{
|
||||||
Write *write;
|
Write *write;
|
||||||
|
|
||||||
@ -806,12 +806,6 @@ vips__jpeg_write_target( VipsImage *in, VipsTarget *target,
|
|||||||
*/
|
*/
|
||||||
target_dest( &write->cinfo, target );
|
target_dest( &write->cinfo, target );
|
||||||
|
|
||||||
/* Retain old behavior for now
|
|
||||||
*/
|
|
||||||
if( no_subsample ) {
|
|
||||||
subsample_mode = VIPS_FOREIGN_JPEG_SUBSAMPLE_OFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert! Write errors come back here as an error return.
|
/* Convert! Write errors come back here as an error return.
|
||||||
*/
|
*/
|
||||||
if( write_vips( write,
|
if( write_vips( write,
|
||||||
|
@ -258,18 +258,26 @@ class TestForeign:
|
|||||||
def test_jpegsave(self):
|
def test_jpegsave(self):
|
||||||
im = pyvips.Image.new_from_file(JPEG_FILE)
|
im = pyvips.Image.new_from_file(JPEG_FILE)
|
||||||
|
|
||||||
# higher Q should mean a bigger buffer
|
|
||||||
q10 = im.jpegsave_buffer(Q=10)
|
q10 = im.jpegsave_buffer(Q=10)
|
||||||
|
q10_subsample_auto = im.jpegsave_buffer(Q=10, subsample_mode="auto")
|
||||||
|
q10_subsample_on = im.jpegsave_buffer(Q=10, subsample_mode="on")
|
||||||
q10_subsample_off = im.jpegsave_buffer(Q=10, subsample_mode="off")
|
q10_subsample_off = im.jpegsave_buffer(Q=10, subsample_mode="off")
|
||||||
|
|
||||||
q90 = im.jpegsave_buffer(Q=90)
|
q90 = im.jpegsave_buffer(Q=90)
|
||||||
assert len(q90) > len(q10)
|
|
||||||
assert len(q10_subsample_off) > len(q10)
|
|
||||||
|
|
||||||
# force subsampling should result in smaller buffer
|
|
||||||
q90_subsample_on = im.jpegsave_buffer(Q=90, subsample_mode="on")
|
|
||||||
q90_subsample_auto = im.jpegsave_buffer(Q=90, subsample_mode="auto")
|
q90_subsample_auto = im.jpegsave_buffer(Q=90, subsample_mode="auto")
|
||||||
assert len(q90) > len(q90_subsample_on)
|
q90_subsample_on = im.jpegsave_buffer(Q=90, subsample_mode="on")
|
||||||
assert len(q90) == len(q90_subsample_auto)
|
q90_subsample_off = im.jpegsave_buffer(Q=90, subsample_mode="off")
|
||||||
|
|
||||||
|
# higher Q should mean a bigger buffer
|
||||||
|
assert len(q90) > len(q10)
|
||||||
|
|
||||||
|
assert len(q10_subsample_auto) == len(q10)
|
||||||
|
assert len(q10_subsample_on) == len(q10_subsample_auto)
|
||||||
|
assert len(q10_subsample_off) > len(q10)
|
||||||
|
|
||||||
|
assert len(q90_subsample_auto) == len(q90)
|
||||||
|
assert len(q90_subsample_on) < len(q90)
|
||||||
|
assert len(q90_subsample_off) == len(q90_subsample_auto)
|
||||||
|
|
||||||
@skip_if_no("jpegload")
|
@skip_if_no("jpegload")
|
||||||
def test_truncated(self):
|
def test_truncated(self):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user