It's clear that there are leaked image instances (not closed after use) but I didn't figure out where.
Replacing CamEngine.kt Line 230
var lastImg = imageReader.acquireNextImage()
with
var lastImg = imageReader.acquireLatestImage()
can be a temporary workaround for the issue, but we'd better find out where the images leaked.