@@ -1422,6 +1422,10 @@ static int extended_tests(FILE *file, int fmt)
14221422 struct spng_plte plte = {0 };
14231423 static unsigned char chunk_data [9000 ];
14241424
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+
14251429 spng_set_png_file (dec , file );
14261430
14271431 spng_get_ihdr (dec , & ihdr );
@@ -1435,6 +1439,7 @@ static int extended_tests(FILE *file, int fmt)
14351439 enc = spng_ctx_new (SPNG_CTX_ENCODER );
14361440
14371441 spng_set_option (enc , SPNG_ENCODE_TO_BUFFER , 1 );
1442+ spng_set_option (enc , SPNG_IMG_COMPRESSION_LEVEL , compression_level );
14381443
14391444 spng_set_ihdr (enc , & ihdr );
14401445
@@ -1475,6 +1480,31 @@ static int extended_tests(FILE *file, int fmt)
14751480 }
14761481
14771482 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+ }
14781508
14791509 /* Reencode the same image but to a stream this time */
14801510 enc = spng_ctx_new (SPNG_CTX_ENCODER );
@@ -1483,6 +1513,8 @@ static int extended_tests(FILE *file, int fmt)
14831513
14841514 spng_set_png_stream (enc , stream_write_checked , & state );
14851515
1516+ spng_set_option (enc , SPNG_IMG_COMPRESSION_LEVEL , compression_level );
1517+
14861518 spng_set_ihdr (enc , & ihdr );
14871519
14881520 if (plte .n_entries ) spng_set_plte (enc , & plte );
0 commit comments