- 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
|
||||
};
|
||||
|
||||
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 );
|
||||
}
|
||||
|
@ -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 );
|
||||
|
@ -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,
|
||||
|
@ -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):
|
||||
|
Loading…
x
Reference in New Issue
Block a user