- remove no_subsample from inner calls

This commit is contained in:
elad laufer 2020-02-18 18:04:29 +02:00
parent 22b3a0d161
commit 8749871c71
4 changed files with 53 additions and 32 deletions

View File

@ -114,6 +114,24 @@ static int bandfmt_jpeg[10] = {
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
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->description = _( "save jpeg" );
object_class->build = vips_foreign_save_jpeg_build;
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,
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
jpeg->interlace, save->strip, jpeg->no_subsample,
jpeg->trellis_quant, jpeg->overshoot_deringing,
jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode ) )
jpeg->interlace, save->strip, jpeg->trellis_quant,
jpeg->overshoot_deringing, jpeg->optimize_scans,
jpeg->quant_table, jpeg->subsample_mode ) )
return( -1 );
return( 0 );
@ -305,9 +324,9 @@ vips_foreign_save_jpeg_file_build( VipsObject *object )
return( -1 );
if( vips__jpeg_write_target( save->ready, target,
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
jpeg->interlace, save->strip, jpeg->no_subsample,
jpeg->trellis_quant, jpeg->overshoot_deringing,
jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode ) ) {
jpeg->interlace, save->strip, jpeg->trellis_quant,
jpeg->overshoot_deringing, jpeg->optimize_scans,
jpeg->quant_table, jpeg->subsample_mode ) ) {
VIPS_UNREF( target );
return( -1 );
}
@ -375,9 +394,9 @@ vips_foreign_save_jpeg_buffer_build( VipsObject *object )
if( vips__jpeg_write_target( save->ready, target,
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
jpeg->interlace, save->strip, jpeg->no_subsample,
jpeg->trellis_quant, jpeg->overshoot_deringing,
jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode ) ) {
jpeg->interlace, save->strip, jpeg->trellis_quant,
jpeg->overshoot_deringing, jpeg->optimize_scans,
jpeg->quant_table, jpeg->subsample_mode ) ) {
VIPS_UNREF( target );
return( -1 );
}
@ -448,9 +467,9 @@ vips_foreign_save_jpeg_mime_build( VipsObject *object )
if( vips__jpeg_write_target( save->ready, target,
jpeg->Q, jpeg->profile, jpeg->optimize_coding,
jpeg->interlace, save->strip, jpeg->no_subsample,
jpeg->trellis_quant, jpeg->overshoot_deringing,
jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode ) ) {
jpeg->interlace, save->strip, jpeg->trellis_quant,
jpeg->overshoot_deringing, jpeg->optimize_scans,
jpeg->quant_table, jpeg->subsample_mode ) ) {
VIPS_UNREF( target );
return( -1 );
}

View File

@ -164,9 +164,9 @@ extern const char *vips__jpeg_suffs[];
int vips__jpeg_write_target( VipsImage *in, VipsTarget *target,
int Q, const char *profile,
gboolean optimize_coding, gboolean progressive, gboolean strip,
gboolean no_subsample, gboolean trellis_quant,
gboolean overshoot_deringing, gboolean optimize_scans,
int quant_table, VipsForeignJpegSubsample subsample_mode );
gboolean trellis_quant, gboolean overshoot_deringing,
gboolean optimize_scans, int quant_table,
VipsForeignJpegSubsample subsample_mode );
int vips__jpeg_read_source( VipsSource *source, VipsImage *out,
gboolean header_only, int shrink, int fail, gboolean autorotate );

View File

@ -782,9 +782,9 @@ int
vips__jpeg_write_target( VipsImage *in, VipsTarget *target,
int Q, const char *profile,
gboolean optimize_coding, gboolean progressive,
gboolean strip, gboolean no_subsample, gboolean trellis_quant,
gboolean overshoot_deringing, gboolean optimize_scans, int quant_table,
VipsForeignJpegSubsample subsample_mode)
gboolean strip, gboolean trellis_quant,
gboolean overshoot_deringing, gboolean optimize_scans,
int quant_table, VipsForeignJpegSubsample subsample_mode)
{
Write *write;
@ -806,12 +806,6 @@ vips__jpeg_write_target( VipsImage *in, VipsTarget *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.
*/
if( write_vips( write,

View File

@ -258,18 +258,26 @@ class TestForeign:
def test_jpegsave(self):
im = pyvips.Image.new_from_file(JPEG_FILE)
# higher Q should mean a bigger buffer
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")
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")
assert len(q90) > len(q90_subsample_on)
assert len(q90) == len(q90_subsample_auto)
q90_subsample_on = im.jpegsave_buffer(Q=90, subsample_mode="on")
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")
def test_truncated(self):