avoid libaom crash when encoding >8bpc images at high speed
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ac3b19f..0c2f749 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
 
 ### Changed
 - use right-most and bottom-most UV pixels in images with odd-dimensions (ledyba-z)
+- avoid libaom crash when encoding >8bpc images at high speed
 
 ## [0.5.5] - 2020-02-13
 ### Added
diff --git a/src/codec_aom.c b/src/codec_aom.c
index 9344a43..6c325e9 100644
--- a/src/codec_aom.c
+++ b/src/codec_aom.c
@@ -254,6 +254,26 @@
         }
     }
 
+    if (image->depth > 8) {
+        // Due to a known issue with libavif v1.0.0-errata1-avif, 10bpc and
+        // 12bpc image encodes will call the wrong variant of
+        // aom_subtract_block when cpu-used is 7 or 8, and crash. Until we get
+        // a new tagged release from libaom with the fix and can verify we're
+        // running with that version of libaom, we must avoid using
+        // cpu-used=7/8 on any >8bpc image encodes.
+        //
+        // Context:
+        //   * https://github.com/AOMediaCodec/libavif/issues/49
+        //   * https://bugs.chromium.org/p/aomedia/issues/detail?id=2587
+        //
+        // Continued bug tracking here:
+        //   * https://github.com/AOMediaCodec/libavif/issues/56
+
+        if (aomCpuUsed > 6) {
+            aomCpuUsed = 6;
+        }
+    }
+
     int yShift = 0;
     aom_img_fmt_t aomFormat = avifImageCalcAOMFmt(image, alpha, &yShift);
     if (aomFormat == AOM_IMG_FMT_NONE) {