Skip to content

Critical performance/resource exhaustion on x86 with PluginHEIF/SVT-AV1 and request for libaom integration #71

Description

@lpierge

While trying to save images in AVIF format, I've encountered a "dead end" regarding resource management and encoding speed. The current implementation of SaveProc in PluginHEIF.cpp not only ignores user flags but uses an SVT-AV1 configuration that is unusable for standard image saving on 32-bit systems.

The current hard-coded configuration:

"bool SaveProc(FreeImageIO* io, FIBITMAP* dib, fi_handle handle, uint32_t /page/, uint32_t flags, void* /data/)"
and
"libHeif.heif_encoder_set_lossy_quality_f(heifEncoder, 75);"

leads to:

  • memory exhaustion: the encoder attempts to allocate massive buffers for video GOP structures (GOP size 321 in logs), leading to SvtMalloc[fatal]: allocate memory failed (at pic_buffer_desc.c:270).

  • resource bloat: logs show over 70 threads and 15,000+ mutexes spawned for a single image, with memory allocation incorrectly reported (e.g., paradoxical "4 million TB" due to 32-bit integer overflows).

  • CPU trashing: up to 45% of usage with the PC fan skyrocketing for a single static frame.

  • the "Still Image" paradox: the encoder explicitly logs: "Only a single picture was passed in. Consider setting avif=1 for improved efficiency", but the current wrapper provides no access to this fundamental flag.

Now, considering that using ImageMagick on the same image results in a successful save in a few seconds with a minimal memory/CPU footprint, my question is: do you plan to migrate PluginHEIF to use libaom (or libavif), much better for pictures, instead of SVT-AV1, which is basically for videos ?
If not, and SVT-AV1 remains the only option, I think it is vital to expose and force avif=1, intra-period=-1, and lookahead=0 to stop the encoder from initializing its video-engine overhead.

Thanks, Luca

Environment:
Library: FreeImageRe (32-bit build)
Encoder: SVT-AV1 v3.1.2 (Visual Studio 2022 build)
OS: Windows 10/11

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions