diff --git a/codecs/avif/enc/avif_enc.cpp b/codecs/avif/enc/avif_enc.cpp index 998e8821..84740dcf 100644 --- a/codecs/avif/enc/avif_enc.cpp +++ b/codecs/avif/enc/avif_enc.cpp @@ -68,7 +68,7 @@ val encode(std::string buffer, int width, int height, AvifOptions options) { } bool lossless = options.quality == AVIF_QUANTIZER_LOSSLESS && - options.qualityAlpha <= AVIF_QUANTIZER_LOSSLESS && + (options.qualityAlpha == -1 || options.qualityAlpha == AVIF_QUALITY_LOSSLESS) && format == AVIF_PIXEL_FORMAT_YUV444; avifImage* image = avifImageCreate(width, height, depth, format); @@ -100,12 +100,16 @@ val encode(std::string buffer, int width, int height, AvifOptions options) { std::to_string(options.sharpness).c_str()); RETURN_NULL_IF_NOT_EQUALS(status, AVIF_RESULT_OK); + // Set base quality encoder->quality = options.quality; - if (options.qualityAlpha != -1) { + // Conditionally set alpha quality + if (options.qualityAlpha == -1) { + encoder->qualityAlpha = options.quality; + } else { encoder->qualityAlpha = options.qualityAlpha; } - if (options.tune == 2 || (options.tune == 0 && options.quality <= 32)) { + if (options.tune == 2 || (options.tune == 0 && options.quality >= 50)) { status = avifEncoderSetCodecSpecificOption(encoder, "tune", "ssim"); RETURN_NULL_IF_NOT_EQUALS(status, AVIF_RESULT_OK); } diff --git a/codecs/avif/enc/avif_enc.wasm b/codecs/avif/enc/avif_enc.wasm index 8eb41d00..e187ce27 100755 Binary files a/codecs/avif/enc/avif_enc.wasm and b/codecs/avif/enc/avif_enc.wasm differ diff --git a/codecs/avif/enc/avif_enc_mt.wasm b/codecs/avif/enc/avif_enc_mt.wasm index 45d01c28..43f20982 100755 Binary files a/codecs/avif/enc/avif_enc_mt.wasm and b/codecs/avif/enc/avif_enc_mt.wasm differ diff --git a/codecs/avif/enc/avif_node_enc.wasm b/codecs/avif/enc/avif_node_enc.wasm index 8eb41d00..e187ce27 100755 Binary files a/codecs/avif/enc/avif_node_enc.wasm and b/codecs/avif/enc/avif_node_enc.wasm differ diff --git a/codecs/avif/enc/avif_node_enc_mt.wasm b/codecs/avif/enc/avif_node_enc_mt.wasm index 45d01c28..43f20982 100755 Binary files a/codecs/avif/enc/avif_node_enc_mt.wasm and b/codecs/avif/enc/avif_node_enc_mt.wasm differ