@@ -300,10 +300,11 @@ static inline int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame,
return AVERROR_EOF;
got_frame = 0;
-
- if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) {
+#if HAVE_THREADS
+ if (avctx->active_thread_type & FF_THREAD_FRAME) {
ret = ff_thread_decode_frame(avctx, frame, &got_frame, pkt);
} else {
+#endif
ret = codec->cb.decode(avctx, frame, &got_frame, pkt);
if (!(codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS))
@@ -320,7 +321,9 @@ static inline int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame,
if (frame->format == AV_PIX_FMT_NONE) frame->format = avctx->pix_fmt;
}
}
+#if HAVE_THREADS
}
+#endif
emms_c();
actual_got_frame = got_frame;
@@ -269,17 +269,20 @@ static int encode_simple_internal(AVCodecContext *avctx, AVPacket *avpkt)
got_packet = 0;
av_assert0(codec->cb_type == FF_CODEC_CB_TYPE_ENCODE);
-
+#if CONFIG_FRAME_THREAD_ENCODER
if (CONFIG_FRAME_THREAD_ENCODER && avci->frame_thread_encoder)
/* This will unref frame. */
ret = ff_thread_video_encode_frame(avctx, avpkt, frame, &got_packet);
else {
+#endif
ret = ff_encode_encode_cb(avctx, avpkt, frame, &got_packet);
#if FF_API_THREAD_SAFE_CALLBACKS
if (frame)
av_frame_unref(frame);
#endif
+#if CONFIG_FRAME_THREAD_ENCODER
}
+#endif
if (avci->draining && !got_packet)
avci->draining_done = 1;
@@ -670,11 +673,11 @@ int ff_encode_preinit(AVCodecContext *avctx)
return AVERROR(ENOMEM);
}
- if (CONFIG_FRAME_THREAD_ENCODER) {
+#if CONFIG_FRAME_THREAD_ENCODER
ret = ff_frame_thread_encoder_init(avctx);
if (ret < 0)
return ret;
- }
+#endif
return 0;
}
@@ -933,13 +933,13 @@ static int finalize_frame(H264Context *h, AVFrame *dst, H264Picture *out, int *g
*got_frame = 1;
- if (CONFIG_MPEGVIDEODEC) {
- ff_print_debug_info2(h->avctx, dst, NULL,
- out->mb_type,
- out->qscale_table,
- out->motion_val,
- out->mb_width, out->mb_height, out->mb_stride, 1);
- }
+#if CONFIG_MPEGVIDEODEC
+ ff_print_debug_info2(h->avctx, dst, NULL,
+ out->mb_type,
+ out->qscale_table,
+ out->motion_val,
+ out->mb_width, out->mb_height, out->mb_stride, 1);
+#endif
}
return 0;
From: Pawday <pawday@mail.ru> Thank you for showing me logic substitution issues. So, if you curious i am trying to substitute calling thread depending functions for unuptimized compiler where dead code illumination is not working and it couse linking error on my microcontroller toolchain without any thread model support. --- libavcodec/avcodec.c | 23 ++++++++++++++++------- libavcodec/decode.c | 7 +++++-- libavcodec/encode.c | 9 ++++++--- libavcodec/h264dec.c | 14 +++++++------- 4 files changed, 34 insertions(+), 19 deletions(-) +++ b/libavcodec/avcodec.c @ -403,10 +403,16 @@ void avcodec_flush_buffers(AVCodecContext *avctx) av_frame_unref(avci->buffer_frame); av_packet_unref(avci->buffer_pkt); - if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) +#if HAVE_THREADS + if (avctx->active_thread_type & FF_THREAD_FRAME) ff_thread_flush(avctx); - else if (ffcodec(avctx->codec)->flush) - ffcodec(avctx->codec)->flush(avctx); + else { +#endif + if (ffcodec(avctx->codec)->flush) + ffcodec(avctx->codec)->flush(avctx); +#if HAVE_THREADS + } +#endif } void avsubtitle_free(AVSubtitle *sub) @@ -441,12 +447,15 @@ av_cold int avcodec_close(AVCodecContext *avctx) if (avcodec_is_open(avctx)) { AVCodecInternal *avci = avctx->internal; - if (CONFIG_FRAME_THREAD_ENCODER && - avci->frame_thread_encoder && avctx->thread_count > 1) { +#if CONFIG_FRAME_THREAD_ENCODER + if (avci->frame_thread_encoder && avctx->thread_count > 1) { ff_frame_thread_encoder_free(avctx); } - if (HAVE_THREADS && avci->thread_ctx) +#endif +#if HAVE_THREADS + if (avci->thread_ctx) ff_thread_free(avctx); +#endif if (avci->needs_close && ffcodec(avctx->codec)->close) ffcodec(avctx->codec)->close(avctx); avci->byte_buffer_size = 0;