From ff9dea465f33c1712b145153360aa0244116887d Mon Sep 17 00:00:00 2001 From: Jake Archibald Date: Mon, 10 May 2021 18:56:33 +0100 Subject: [PATCH] Updating AVIF, and 'auto' SSIM option (#1008) --- codecs/avif/Makefile | 4 ++-- codecs/avif/enc/avif_enc.cpp | 10 ++++++---- codecs/avif/enc/avif_enc.d.ts | 8 +++++++- codecs/avif/enc/avif_enc.wasm | Bin 2195332 -> 2195301 bytes codecs/avif/enc/avif_enc_mt.js | 4 ++-- codecs/avif/enc/avif_enc_mt.wasm | Bin 2240119 -> 2240094 bytes codecs/avif/enc/avif_node_enc.wasm | Bin 2195332 -> 2195301 bytes src/features/encoders/avif/client/index.tsx | 17 +++++++++-------- src/features/encoders/avif/shared/meta.ts | 6 +++--- 9 files changed, 29 insertions(+), 20 deletions(-) diff --git a/codecs/avif/Makefile b/codecs/avif/Makefile index 59d0b7de..c22eef1e 100644 --- a/codecs/avif/Makefile +++ b/codecs/avif/Makefile @@ -1,9 +1,9 @@ # libavif and libaom versions are from # https://docs.google.com/document/d/1wEEA5rRU7wT54k41u3qyZIZHDCJArIMzLuzsrLAwaK8/edit -CODEC_URL = https://github.com/AOMediaCodec/libavif/archive/d37ef74127986184500e571bf1f9793cc0bdef50.tar.gz +CODEC_URL = https://github.com/AOMediaCodec/libavif/archive/1c39e772c2c0d687691dd4b589a12c323f5f767d.tar.gz CODEC_PACKAGE = node_modules/libavif.tar.gz -LIBAOM_URL = https://aomedia.googlesource.com/aom/+archive/0a5da45c7f942908974f5ab8e107c9fa82048ae7.tar.gz +LIBAOM_URL = https://aomedia.googlesource.com/aom/+archive/v3.1.0.tar.gz LIBAOM_PACKAGE = node_modules/libaom.tar.gz export CODEC_DIR = node_modules/libavif diff --git a/codecs/avif/enc/avif_enc.cpp b/codecs/avif/enc/avif_enc.cpp index 23774b07..e7f63b43 100644 --- a/codecs/avif/enc/avif_enc.cpp +++ b/codecs/avif/enc/avif_enc.cpp @@ -29,8 +29,10 @@ struct AvifOptions { bool chromaDeltaQ; // 0-7 int sharpness; - // Target ssim rather than psnr - bool targetSsim; + // 0 = auto + // 1 = PSNR + // 2 = SSIM + int tune; // 0-50 int denoiseLevel; }; @@ -98,7 +100,7 @@ val encode(std::string buffer, int width, int height, AvifOptions options) { std::to_string(options.cqAlphaLevel).c_str()); } - if (options.targetSsim) { + if (options.tune == 2 || (options.tune == 0 && options.cqLevel <= 32)) { avifEncoderSetCodecSpecificOption(encoder, "tune", "ssim"); } @@ -136,7 +138,7 @@ EMSCRIPTEN_BINDINGS(my_module) { .field("speed", &AvifOptions::speed) .field("chromaDeltaQ", &AvifOptions::chromaDeltaQ) .field("sharpness", &AvifOptions::sharpness) - .field("targetSsim", &AvifOptions::targetSsim) + .field("tune", &AvifOptions::tune) .field("denoiseLevel", &AvifOptions::denoiseLevel) .field("subsample", &AvifOptions::subsample); diff --git a/codecs/avif/enc/avif_enc.d.ts b/codecs/avif/enc/avif_enc.d.ts index 5d14a092..cab6bb18 100644 --- a/codecs/avif/enc/avif_enc.d.ts +++ b/codecs/avif/enc/avif_enc.d.ts @@ -1,3 +1,9 @@ +export const enum AVIFTune { + auto, + psnr, + ssim, +} + export interface EncodeOptions { cqLevel: number; denoiseLevel: number; @@ -8,7 +14,7 @@ export interface EncodeOptions { subsample: number; chromaDeltaQ: boolean; sharpness: number; - targetSsim: boolean; + tune: AVIFTune; } export interface AVIFModule extends EmscriptenWasm.Module { diff --git a/codecs/avif/enc/avif_enc.wasm b/codecs/avif/enc/avif_enc.wasm index a9dc3e5b8b09bf32a19dbd31454a338bc9490f1c..7c1701bd0911d408e46d870ec026f7dfe24f5720 100755 GIT binary patch delta 17170 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 diff --git a/codecs/avif/enc/avif_enc_mt.js b/codecs/avif/enc/avif_enc_mt.js index 77d1143f..7c2551cb 100644 --- a/codecs/avif/enc/avif_enc_mt.js +++ b/codecs/avif/enc/avif_enc_mt.js @@ -18,7 +18,7 @@ function Ia(a){for(var b=0,c=0;c=a||a>aa().length||a&1||0>b)return-28;if(0==b)return 0;2147483647<=b&&(b=Infinity);var c=Atomics.load(w(),M.vb>>2),d=0;if(c==a&&Atomics.compareExchange(w(),M.vb>>2,c,0)==c&&(--b,d=1,0>=b))return 1;a=Atomics.notify(w(),a>>2,b);if(0<=a)return a+d;throw"Atomics.notify returned an unexpected value "+a;}z._emscripten_futex_wake=ab; function bb(a){if(B)throw"Internal Error! cleanupThread() can only ever be called from main application thread!";if(!a)throw"Internal Error! Null pthread_ptr in cleanupThread!";w()[a+12>>2]=0;(a=M.Ya[a])&&M.jb(a.worker)} var M={ac:1,kc:{yb:0,zb:0},Wa:[],$a:[],Lb:function(){for(var a=navigator.hardwareConcurrency,b=0;ba;++a)y()[M.Ua/4+a]=0;w()[M.Ua+12>>2]=M.Ua;a=M.Ua+156;w()[a>>2]=a;var b=N(512);for(a=0;128>a;++a)y()[b/4+a]=0;Atomics.store(y(),M.Ua+104>>2,b);Atomics.store(y(),M.Ua+40>>2,M.Ua);Atomics.store(y(),M.Ua+44>>2,42);M.tb();$a(M.Ua,!1,1);cb(M.Ua)},Nb:function(){M.tb();oa(z);M.receiveObjectTransfer=M.Sb;M.setThreadStatus=M.Tb;M.threadCancel=M.Yb;M.threadExit= @@ -86,7 +86,7 @@ z._emscripten_sync_run_in_main_thread_1=function(){return(z._emscripten_sync_run z._emscripten_sync_run_in_main_thread_3=function(){return(z._emscripten_sync_run_in_main_thread_3=z.asm.Ga).apply(null,arguments)};var Cc=z._emscripten_sync_run_in_main_thread_4=function(){return(Cc=z._emscripten_sync_run_in_main_thread_4=z.asm.Ha).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_5=function(){return(z._emscripten_sync_run_in_main_thread_5=z.asm.Ia).apply(null,arguments)}; z._emscripten_sync_run_in_main_thread_6=function(){return(z._emscripten_sync_run_in_main_thread_6=z.asm.Ja).apply(null,arguments)};z._emscripten_sync_run_in_main_thread_7=function(){return(z._emscripten_sync_run_in_main_thread_7=z.asm.Ka).apply(null,arguments)}; var Wb=z._emscripten_run_in_main_runtime_thread_js=function(){return(Wb=z._emscripten_run_in_main_runtime_thread_js=z.asm.La).apply(null,arguments)},bc=z.__emscripten_call_on_thread=function(){return(bc=z.__emscripten_call_on_thread=z.asm.Ma).apply(null,arguments)};z._emscripten_tls_init=function(){return(z._emscripten_tls_init=z.asm.Na).apply(null,arguments)};z.dynCall_jiiiiiiiii=function(){return(z.dynCall_jiiiiiiiii=z.asm.Oa).apply(null,arguments)}; -z.dynCall_jiji=function(){return(z.dynCall_jiji=z.asm.Pa).apply(null,arguments)};z.dynCall_jiiiiiiii=function(){return(z.dynCall_jiiiiiiii=z.asm.Qa).apply(null,arguments)};z.dynCall_jiiiiii=function(){return(z.dynCall_jiiiiii=z.asm.Ra).apply(null,arguments)};z.dynCall_jiiiii=function(){return(z.dynCall_jiiiii=z.asm.Sa).apply(null,arguments)};z.dynCall_iiijii=function(){return(z.dynCall_iiijii=z.asm.Ta).apply(null,arguments)};var db=z._main_thread_futex=899124; +z.dynCall_jiji=function(){return(z.dynCall_jiji=z.asm.Pa).apply(null,arguments)};z.dynCall_jiiiiiiii=function(){return(z.dynCall_jiiiiiiii=z.asm.Qa).apply(null,arguments)};z.dynCall_jiiiiii=function(){return(z.dynCall_jiiiiii=z.asm.Ra).apply(null,arguments)};z.dynCall_jiiiii=function(){return(z.dynCall_jiiiii=z.asm.Sa).apply(null,arguments)};z.dynCall_iiijii=function(){return(z.dynCall_iiijii=z.asm.Ta).apply(null,arguments)};var db=z._main_thread_futex=899108; function zc(a,b){var c=Y();try{H.get(a)(b)}catch(d){P(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function Bc(a,b,c,d,f){var g=Y();try{H.get(a)(b,c,d,f)}catch(h){P(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function Ac(a,b,c){var d=Y();try{H.get(a)(b,c)}catch(f){P(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function yc(a,b,c,d,f,g,h,k,m,q){var p=Y();try{return H.get(a)(b,c,d,f,g,h,k,m,q)}catch(v){P(p);if(v!==v+0&&"longjmp"!==v)throw v;Z(1,0)}} function vc(a,b,c){var d=Y();try{return H.get(a)(b,c)}catch(f){P(d);if(f!==f+0&&"longjmp"!==f)throw f;Z(1,0)}}function wc(a,b,c,d,f){var g=Y();try{return H.get(a)(b,c,d,f)}catch(h){P(g);if(h!==h+0&&"longjmp"!==h)throw h;Z(1,0)}}function uc(a,b){var c=Y();try{return H.get(a)(b)}catch(d){P(c);if(d!==d+0&&"longjmp"!==d)throw d;Z(1,0)}}function xc(a,b,c,d,f,g,h,k,m){var q=Y();try{return H.get(a)(b,c,d,f,g,h,k,m)}catch(p){P(q);if(p!==p+0&&"longjmp"!==p)throw p;Z(1,0)}}z.PThread=M;z.PThread=M; z._pthread_self=oc;z.wasmMemory=e;z.ExitStatus=Fc;var Gc;function Fc(a){this.name="ExitStatus";this.message="Program terminated with exit("+a+")";this.status=a}Qa=function Hc(){Gc||Ic();Gc||(Qa=Hc)}; diff --git a/codecs/avif/enc/avif_enc_mt.wasm b/codecs/avif/enc/avif_enc_mt.wasm index 54ee4bef0b997188c6d871f46d0a8d010d817a83..a00bafa5dfb9c610713b95652c75d64ad5fb671d 100755 GIT binary patch delta 13879 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 e`LeVpbN!RpT&+3RKY~rw+L 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 diff --git a/codecs/avif/enc/avif_node_enc.wasm b/codecs/avif/enc/avif_node_enc.wasm index a9dc3e5b8b09bf32a19dbd31454a338bc9490f1c..7c1701bd0911d408e46d870ec026f7dfe24f5720 100755 GIT binary patch delta 17170 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 diff --git a/src/features/encoders/avif/client/index.tsx b/src/features/encoders/avif/client/index.tsx index dc2e2a05..651c2fd3 100644 --- a/src/features/encoders/avif/client/index.tsx +++ b/src/features/encoders/avif/client/index.tsx @@ -1,4 +1,4 @@ -import { EncodeOptions, defaultOptions } from '../shared/meta'; +import { EncodeOptions, defaultOptions, AVIFTune } from '../shared/meta'; import type WorkerBridge from 'client/lazy-app/worker-bridge'; import { h, Component } from 'preact'; import { preventDefault, shallowEqual } from 'client/lazy-app/util'; @@ -37,7 +37,7 @@ interface State { sharpness: number; denoiseLevel: number; aqMode: number; - tune: 'ssim' | 'psnr'; + tune: AVIFTune; } const maxQuant = 63; @@ -82,7 +82,7 @@ export class Options extends Component { chromaDeltaQ: options.chromaDeltaQ, sharpness: options.sharpness, denoiseLevel: options.denoiseLevel, - tune: options.targetSsim ? 'ssim' : 'psnr', + tune: options.tune, }; } @@ -133,7 +133,7 @@ export class Options extends Component { chromaDeltaQ: optionState.chromaDeltaQ, sharpness: optionState.sharpness, denoiseLevel: optionState.denoiseLevel, - targetSsim: optionState.tune === 'ssim', + tune: optionState.tune, }; // Updating options, so we don't recalculate in getDerivedStateFromProps. @@ -268,13 +268,14 @@ export class Options extends Component { diff --git a/src/features/encoders/avif/shared/meta.ts b/src/features/encoders/avif/shared/meta.ts index 21371e27..2349a350 100644 --- a/src/features/encoders/avif/shared/meta.ts +++ b/src/features/encoders/avif/shared/meta.ts @@ -10,9 +10,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import type { EncodeOptions } from 'codecs/avif/enc/avif_enc'; +import { EncodeOptions, AVIFTune } from 'codecs/avif/enc/avif_enc'; -export { EncodeOptions }; +export { EncodeOptions, AVIFTune }; export const label = 'AVIF'; export const mimeType = 'image/avif'; @@ -27,5 +27,5 @@ export const defaultOptions: EncodeOptions = { subsample: 1, chromaDeltaQ: false, sharpness: 0, - targetSsim: false, + tune: AVIFTune.auto, };