@@ -1422,6 +1422,10 @@ static int extended_tests(FILE *file, int fmt)
1422
1422
struct spng_plte plte = {0 };
1423
1423
static unsigned char chunk_data [9000 ];
1424
1424
1425
+ /* NOTE: This value is compressed to 2 bits by zlib, it's not a 1:1 mapping */
1426
+ int compression_level = 0 ;
1427
+ int expected_compression_level = 0 ;
1428
+
1425
1429
spng_set_png_file (dec , file );
1426
1430
1427
1431
spng_get_ihdr (dec , & ihdr );
@@ -1435,6 +1439,7 @@ static int extended_tests(FILE *file, int fmt)
1435
1439
enc = spng_ctx_new (SPNG_CTX_ENCODER );
1436
1440
1437
1441
spng_set_option (enc , SPNG_ENCODE_TO_BUFFER , 1 );
1442
+ spng_set_option (enc , SPNG_IMG_COMPRESSION_LEVEL , compression_level );
1438
1443
1439
1444
spng_set_ihdr (enc , & ihdr );
1440
1445
@@ -1475,6 +1480,31 @@ static int extended_tests(FILE *file, int fmt)
1475
1480
}
1476
1481
1477
1482
spng_ctx_free (enc );
1483
+ enc = NULL ;
1484
+
1485
+ /* Verify the image's zlib FLEVEL */
1486
+ spng_ctx_free (dec );
1487
+ dec = spng_ctx_new (0 );
1488
+
1489
+ spng_set_png_buffer (dec , encoded , bytes_encoded );
1490
+
1491
+ spng_decode_image (dec , NULL , 0 , SPNG_FMT_PNG , SPNG_DECODE_PROGRESSIVE );
1492
+
1493
+ ret = spng_get_option (dec , SPNG_IMG_COMPRESSION_LEVEL , & compression_level );
1494
+
1495
+ if (ret || (compression_level != expected_compression_level ) )
1496
+ {
1497
+ if (ret ) printf ("error getting image compression level: %s\n" , spng_strerror (ret ));
1498
+ else
1499
+ {
1500
+ printf ("unexpected compression level (expected %d, got %d)\n" ,
1501
+ expected_compression_level ,
1502
+ compression_level );
1503
+ ret = 1 ;
1504
+ }
1505
+
1506
+ goto cleanup ;
1507
+ }
1478
1508
1479
1509
/* Reencode the same image but to a stream this time */
1480
1510
enc = spng_ctx_new (SPNG_CTX_ENCODER );
@@ -1483,6 +1513,8 @@ static int extended_tests(FILE *file, int fmt)
1483
1513
1484
1514
spng_set_png_stream (enc , stream_write_checked , & state );
1485
1515
1516
+ spng_set_option (enc , SPNG_IMG_COMPRESSION_LEVEL , compression_level );
1517
+
1486
1518
spng_set_ihdr (enc , & ihdr );
1487
1519
1488
1520
if (plte .n_entries ) spng_set_plte (enc , & plte );
0 commit comments