diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c
index 41b8079..6be3c43 100644
--- a/libavcodec/dnxhdenc.c
+++ b/libavcodec/dnxhdenc.c
@@ -365,7 +365,7 @@ fail:
 static av_cold int dnxhd_encode_init(AVCodecContext *avctx)
 {
     DNXHDEncContext *ctx = avctx->priv_data;
-    int i, index, ret;
+    int index, ret;
 
     switch (avctx->pix_fmt) {
     case AV_PIX_FMT_YUV422P:
@@ -526,26 +526,11 @@ FF_DISABLE_DEPRECATION_WARNINGS
 FF_ENABLE_DEPRECATION_WARNINGS
 #endif
 
-    if (avctx->active_thread_type == FF_THREAD_SLICE) {
-        if (avctx->thread_count > MAX_THREADS) {
-            av_log(avctx, AV_LOG_ERROR, "too many threads\n");
-            return AVERROR(EINVAL);
-        }
-    }
-
     if (avctx->qmax <= 1) {
         av_log(avctx, AV_LOG_ERROR, "qmax must be at least 2\n");
         return AVERROR(EINVAL);
     }
 
-    ctx->thread[0] = ctx;
-    if (avctx->active_thread_type == FF_THREAD_SLICE) {
-        for (i = 1; i < avctx->thread_count; i++) {
-            ctx->thread[i] = av_malloc(sizeof(DNXHDEncContext));
-            memcpy(ctx->thread[i], ctx, sizeof(DNXHDEncContext));
-        }
-    }
-
     return 0;
 fail:  // for FF_ALLOCZ_OR_GOTO
     return AVERROR(ENOMEM);
@@ -713,11 +698,11 @@ void dnxhd_get_blocks(DNXHDEncContext *ctx, int mb_x, int mb_y)
     int dct_uv_offset = ctx->dct_uv_offset;
     int linesize = ctx->m.linesize;
     int uvlinesize = ctx->m.uvlinesize;
-    const uint8_t *ptr_y = ctx->thread[0]->src[0] +
+    const uint8_t *ptr_y = ctx->src[0] +
                            ((mb_y << 4) * ctx->m.linesize) + (mb_x << bs + 1);
-    const uint8_t *ptr_u = ctx->thread[0]->src[1] +
+    const uint8_t *ptr_u = ctx->src[1] +
                            ((mb_y << 4) * ctx->m.uvlinesize) + (mb_x << bs + ctx->is_444);
-    const uint8_t *ptr_v = ctx->thread[0]->src[2] +
+    const uint8_t *ptr_v = ctx->src[2] +
                            ((mb_y << 4) * ctx->m.uvlinesize) + (mb_x << bs + ctx->is_444);
     PixblockDSPContext *pdsp = &ctx->m.pdsp;
     VideoDSPContext *vdsp = &ctx->m.vdsp;
@@ -853,7 +838,6 @@ static int dnxhd_calc_bits_thread(AVCodecContext *avctx, void *arg,
     int mb_y = jobnr, mb_x;
     int qscale = ctx->qscale;
     LOCAL_ALIGNED_16(int16_t, block, [64]);
-    ctx = ctx->thread[threadnr];
 
     ctx->m.last_dc[0] =
     ctx->m.last_dc[1] =
@@ -908,7 +892,6 @@ static int dnxhd_encode_thread(AVCodecContext *avctx, void *arg,
 {
     DNXHDEncContext *ctx = avctx->priv_data;
     int mb_y = jobnr, mb_x;
-    ctx = ctx->thread[threadnr];
     init_put_bits(&ctx->m.pb, (uint8_t *)arg + ctx->data_offset + ctx->slice_offs[jobnr],
                   ctx->slice_size[jobnr]);
 
@@ -969,9 +952,8 @@ static int dnxhd_mb_var_thread(AVCodecContext *avctx, void *arg,
     int partial_last_row = (mb_y == ctx->m.mb_height - 1) &&
                            ((avctx->height >> ctx->interlaced) & 0xF);
 
-    ctx = ctx->thread[threadnr];
     if (ctx->bit_depth == 8) {
-        uint8_t *pix = ctx->thread[0]->src[0] + ((mb_y << 4) * ctx->m.linesize);
+        uint8_t *pix = ctx->src[0] + ((mb_y << 4) * ctx->m.linesize);
         for (mb_x = 0; mb_x < ctx->m.mb_width; ++mb_x, pix += 16) {
             unsigned mb = mb_y * ctx->m.mb_width + mb_x;
             int sum;
@@ -1000,7 +982,7 @@ static int dnxhd_mb_var_thread(AVCodecContext *avctx, void *arg,
     } else { // 10-bit
         const int linesize = ctx->m.linesize >> 1;
         for (mb_x = 0; mb_x < ctx->m.mb_width; ++mb_x) {
-            uint16_t *pix = (uint16_t *)ctx->thread[0]->src[0] +
+            uint16_t *pix = (uint16_t *)ctx->src[0] +
                             ((mb_y << 4) * linesize) + (mb_x << 4);
             unsigned mb  = mb_y * ctx->m.mb_width + mb_x;
             int sum = 0;
@@ -1264,14 +1246,11 @@ static int dnxhd_encode_fast(AVCodecContext *avctx, DNXHDEncContext *ctx)
 
 static void dnxhd_load_picture(DNXHDEncContext *ctx, const AVFrame *frame)
 {
-    int i;
 
-    for (i = 0; i < ctx->m.avctx->thread_count; i++) {
-        ctx->thread[i]->m.linesize    = frame->linesize[0] << ctx->interlaced;
-        ctx->thread[i]->m.uvlinesize  = frame->linesize[1] << ctx->interlaced;
-        ctx->thread[i]->dct_y_offset  = ctx->m.linesize  *8;
-        ctx->thread[i]->dct_uv_offset = ctx->m.uvlinesize*8;
-    }
+    ctx->m.linesize    = frame->linesize[0] << ctx->interlaced;
+    ctx->m.uvlinesize  = frame->linesize[1] << ctx->interlaced;
+    ctx->dct_y_offset  = ctx->m.linesize  *8;
+    ctx->dct_uv_offset = ctx->m.uvlinesize*8;
 
 #if FF_API_CODED_FRAME
 FF_DISABLE_DEPRECATION_WARNINGS
@@ -1354,7 +1333,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
 static av_cold int dnxhd_encode_end(AVCodecContext *avctx)
 {
     DNXHDEncContext *ctx = avctx->priv_data;
-    int i;
 
     av_freep(&ctx->orig_vlc_codes);
     av_freep(&ctx->orig_vlc_bits);
@@ -1374,11 +1352,6 @@ static av_cold int dnxhd_encode_end(AVCodecContext *avctx)
     av_freep(&ctx->qmatrix_c16);
     av_freep(&ctx->qmatrix_l16);
 
-    if (avctx->active_thread_type == FF_THREAD_SLICE) {
-        for (i = 1; i < avctx->thread_count; i++)
-            av_freep(&ctx->thread[i]);
-    }
-
     return 0;
 }
 
diff --git a/libavcodec/dnxhdenc.h b/libavcodec/dnxhdenc.h
index 7b0d862..972f2e2 100644
--- a/libavcodec/dnxhdenc.h
+++ b/libavcodec/dnxhdenc.h
@@ -55,8 +55,6 @@ typedef struct DNXHDEncContext {
     uint32_t *slice_size;
     uint32_t *slice_offs;
 
-    struct DNXHDEncContext *thread[MAX_THREADS];
-
     // Because our samples are either 8 or 16 bits for 8-bit and 10-bit
     // encoding respectively, these refer either to bytes or to two-byte words.
     unsigned dct_y_offset;
