diff --git a/configure b/configure
index 4afe0dc0eee1e0dada4ddd349983113c3402d0cc..8443db437090e4179067f4954775e39f3cb2edf1 100755
--- a/configure
+++ b/configure
@@ -1511,6 +1511,7 @@ CONFIG_EXTRA="
     audio_frame_queue
     dsputil
     error_resilience
+    frame_thread_encoder
     gcrypt
     golomb
     gplv3
@@ -1671,6 +1672,7 @@ log2_deps="!msvcrt"
 # subsystems
 dct_select="rdft"
 error_resilience_select="dsputil"
+frame_thread_encoder_deps="encoders threads"
 mdct_select="fft"
 rdft_select="fft"
 mpegaudio_select="mpegaudiodsp"
@@ -4239,6 +4241,7 @@ case $target_os in
 esac
 
 enabled_any $THREADS_LIST      && enable threads
+enable frame_thread_encoder
 
 enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
 
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index a1e0171dfb7e3ec820411e9c103b03b33aaa39c8..e4fccf15124601827900fe3667bf0afe0989f6d0 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -773,9 +773,11 @@ OBJS-$(CONFIG_REMOVE_EXTRADATA_BSF)       += remove_extradata_bsf.o
 OBJS-$(CONFIG_TEXT2MOVSUB_BSF)            += movsub_bsf.o
 
 # thread libraries
-OBJS-$(HAVE_PTHREADS)                  += pthread.o frame_thread_encoder.o
-OBJS-$(HAVE_W32THREADS)                += pthread.o frame_thread_encoder.o
-OBJS-$(HAVE_OS2THREADS)                += pthread.o frame_thread_encoder.o
+OBJS-$(HAVE_PTHREADS)                  += pthread.o
+OBJS-$(HAVE_W32THREADS)                += pthread.o
+OBJS-$(HAVE_OS2THREADS)                += pthread.o
+
+OBJS-$(CONFIG_FRAME_THREAD_ENCODER)    += frame_thread_encoder.o
 
 SKIPHEADERS                            += %_tablegen.h                  \
                                           %_tables.h                    \
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 64d2e7e16e6af206a53c29bc7ab2a4b4fbdd38c0..bed664e7e864d7f086e9c2df4665fb2b11208d8b 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -1144,7 +1144,7 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code
     if (!HAVE_THREADS)
         av_log(avctx, AV_LOG_WARNING, "Warning: not compiled with thread support, using thread emulation\n");
 
-    if (HAVE_THREADS) {
+    if (CONFIG_FRAME_THREAD_ENCODER) {
         ff_unlock_avcodec(); //we will instanciate a few encoders thus kick the counter to prevent false detection of a problem
         ret = ff_frame_thread_encoder_init(avctx, options ? *options : NULL);
         ff_lock_avcodec(avctx);
@@ -1706,7 +1706,8 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx,
 
     *got_packet_ptr = 0;
 
-    if(HAVE_THREADS && avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))
+    if(CONFIG_FRAME_THREAD_ENCODER &&
+       avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))
         return ff_thread_video_encode_frame(avctx, avpkt, frame, got_packet_ptr);
 
     if ((avctx->flags&CODEC_FLAG_PASS1) && avctx->stats_out)
@@ -2279,7 +2280,8 @@ av_cold int avcodec_close(AVCodecContext *avctx)
     if (avcodec_is_open(avctx)) {
         FramePool *pool = avctx->internal->pool;
         int i;
-        if (HAVE_THREADS && avctx->internal->frame_thread_encoder && avctx->thread_count > 1) {
+        if (CONFIG_FRAME_THREAD_ENCODER &&
+            avctx->internal->frame_thread_encoder && avctx->thread_count > 1) {
             ff_unlock_avcodec();
             ff_frame_thread_encoder_free(avctx);
             ff_lock_avcodec(avctx);