diff --git a/libavcodec/hqx.c b/libavcodec/hqx.c
index de460a55b87c0854cee6553952afc6ab5fbbaadd..11b872cbb363f19c670bc96ad786e73437ca2122 100644
--- a/libavcodec/hqx.c
+++ b/libavcodec/hqx.c
@@ -523,13 +523,10 @@ static av_cold int hqx_decode_close(AVCodecContext *avctx)
 static av_cold int hqx_decode_init(AVCodecContext *avctx)
 {
     HQXContext *ctx = avctx->priv_data;
-    int ret = ff_hqx_init_vlcs(ctx);
-    if (ret < 0)
-        hqx_decode_close(avctx);
 
     ff_hqxdsp_init(&ctx->hqxdsp);
 
-    return ret;
+    return ff_hqx_init_vlcs(ctx);
 }
 
 AVCodec ff_hqx_decoder = {
@@ -542,4 +539,6 @@ AVCodec ff_hqx_decoder = {
     .decode         = hqx_decode_frame,
     .close          = hqx_decode_close,
     .capabilities   = CODEC_CAP_DR1 | CODEC_CAP_SLICE_THREADS,
+    .caps_internal  = FF_CODEC_CAP_INIT_THREADSAFE |
+                      FF_CODEC_CAP_INIT_CLEANUP,
 };