From patchwork Tue Jan 24 16:07:01 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Pavel Korotkevich X-Patchwork-Id: 40098 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3ca3:b0:b9:1511:ac2c with SMTP id b35csp465813pzj; Tue, 24 Jan 2023 08:07:13 -0800 (PST) X-Google-Smtp-Source: AMrXdXvL9ZmfbYfQhJT1IL3aBaGTx0ePdN3xvnf4YDmeYDRx3FXQs1idCBSJ/HW7K6Yag7F9uDO8 X-Received: by 2002:a17:906:d78d:b0:7c0:d452:2e74 with SMTP id pj13-20020a170906d78d00b007c0d4522e74mr31587423ejb.4.1674576433226; Tue, 24 Jan 2023 08:07:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674576433; cv=none; d=google.com; s=arc-20160816; b=OecfrHS1doKtsMz1IABgHCJeHOeruJMUA2LXhP4SzjKL0DQaReE51FmPq8uZdY0rgF GppWnYf2d6QUTiqjE9Sdu2F+M6LNLK1Klr2dOsnmtUbLJs2TEGlFZ9JK3upDBy0yqdl6 R/vxDxw73kgDOb+NvDPrtduz8RH0mAHM7EWIkS9r8DZ1RDSxq1FYaIrcsczoYREb8Qm3 zlk8fStU7lnyKmcVvQVh6kQ0AS/Mgkl5WBODb5Xfl9gL4NL+ArtS8p5DR7EW+WrlL7XX upYeITZ3Ffmld3zmEEeY6BOcp1OmMgRCE1uAiUxk9X6QYetQgLN0Hi/mQXzJWp1RyDbg 94EQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:to:from:user-agent:mime-version:date:message-id :dkim-signature:delivered-to; bh=3eIn/xBJEyCqTnvg6xc5tk/GPUzV79pv/iZFUZVweiQ=; b=Yv6mdL/xCmZx4Ot7KnmO/4Xk59en7Bn+1qcwxkxDm4DOo0XKZU/zSjXXAjQIhrdIwd hTtM3uK5GpNpVP9TyiraaXsH0e4qO2JPZxK2T1EKjbhJOFBEacwj7kXBas9ftuVPgbks cJaW/LvEtD8BWOuwoDPXiwHx9FSqfmbt0b/u/03SUhEs1s93GoEVOSGwtFfhULFvKoS0 8VaHTTe6dSAqddodZ4Pg7eLBdmihzGMQrAMB8BOtpGzf2g7r8sWPI6jb7CTCx2wGOKD3 phdymYBQOdaNG361m7HSQR5XEpk464QO4RxonnXrBY8EaHiXSszyceYfdAIhMQ0/4D26 n9Eg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@mail.ru header.s=mail4 header.b=bkdT+pbm; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id vl22-20020a17090730d600b0085b4d436b5dsi2544280ejb.804.2023.01.24.08.07.12; Tue, 24 Jan 2023 08:07:13 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@mail.ru header.s=mail4 header.b=bkdT+pbm; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AFAC968BE2B; Tue, 24 Jan 2023 18:07:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from smtp16.i.mail.ru (smtp16.i.mail.ru [95.163.41.69]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 37DD568BC47 for ; Tue, 24 Jan 2023 18:07:03 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.ru; s=mail4; h=Content-Transfer-Encoding:Content-Type:To:Subject:From:MIME-Version:Date:Message-ID:From:Subject:Content-Type:Content-Transfer-Encoding:To:Cc; bh=7NYbvSgniLatMYLlcIX/0gb80aWB+y1Ft/gDGTrR92s=; t=1674576428;x=1674666428; b=bkdT+pbmDBTpqeoRTI4vG1DBMMmAeQxikdr+y73whYk4cD/EojrREpbrBfuwkGwqXQDbKFtt63UP4FI8IX1ETMVSAXTjEAsHktCba4CoO9nNAbxhuYzS5Y/1/dUVHGML3dwlucRLZ/VWAxnTFC+e0d7+ffYlNZjwBcgRhY+yjPn/LW0JyG1gl9kXnEyNoSWdwEcqFJjwc4nxgZAVTNIPCmRDsayB90ecZ5bt7wo+q51tPuJTtRTNne3HTl0ooNoYZ7QWkUge/vjtPaK+RJRFXuEPu1jPpMw2P5dxZ6nC+ZXKusFPfMcsZ1L0jIs7V2xWZHqtH01JVXWIh9zjMifELg==; Received: by smtp16.i.mail.ru with esmtpa (envelope-from ) id 1pKLp7-0074jz-E2 for ffmpeg-devel@ffmpeg.org; Tue, 24 Jan 2023 19:07:02 +0300 Message-ID: <9ece802a-3250-0335-2f69-de1c79b1c213@mail.ru> Date: Tue, 24 Jan 2023 20:07:01 +0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.7.0 From: Pavel Korotkevich To: ffmpeg-devel@ffmpeg.org Authentication-Results: smtp16.i.mail.ru; auth=pass smtp.auth=pawday@mail.ru smtp.mailfrom=pawday@mail.ru X-Mailru-Src: smtp X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9A6D6F5724DD3A0B62236D681D1FF9E641CABCF29B2C7FA9B182A05F538085040B9E5EED06009F62F1D12BA5791AA4996AB6118CC52BD2B1E1D5EE55FBC34CA76 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7370F4F695FFFC24BEA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F790063794BAA5DA89D799D78638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D80EC9FCCB6FEE64BBE1C440D26358BAFF6F9789CCF6C18C3F8528715B7D10C86859CC434672EE6371117882F4460429724CE54428C33FAD305F5C1EE8F4F765FCECADA55FE5B58BB7A471835C12D1D9774AD6D5ED66289B52BA9C0B312567BB23117882F44604297287769387670735207532CA1512B81981C26CFBAC0749D213D2E47CDBA5A96583BA9C0B312567BB2376E601842F6C81A19E625A9149C048EE140C956E756FBB7A148812EF9080FC94D8FC6C240DEA7642DBF02ECDB25306B2B78CF848AE20165D0A6AB1C7CE11FEE32D01283D1ACF37BA6E0066C2D8992A16C4224003CC836476E2F48590F00D11D6E2021AF6380DFAD1A18204E546F3947CB11811A4A51E3B096D1867E19FE1407959CC434672EE6371089D37D7C0E48F6C8AA50765F79006378232763E5C060036EFF80C71ABB335746BA297DBC24807EABDAD6C7F3747799A X-B7AD71C0: 6FEFE4C63DFE2D8573200ABC580ADFC1883583F2629FC7A8C7882EC8C46567D385C6D04FB55BF89C5CAB7E110488AB019802F73044CFF384AD55E636E89D042D X-C1DE0DAB: 0D63561A33F958A55FD25EBAAC07568C1CB13A584D347E8A233865388549D6FD5A4FF58CDAEABE2AA132EA92956906CB697742550EFD07B08A6F03AC25FB4B01 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D3430FC2BC1B917F018290D69705EB9CC7518E2544A8B5DC7F0356C1BA08919498AF5CE09610FF92B411D7E09C32AA3244C3C87DD4C016D152D6C52F220258BE76E97FE24653F78E6683EB3F6AD6EA9203E X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2bioj4ukhBIi/0FABjB8GJEYSRA== X-Mailru-Sender: 7F53729568FFBF28BAC5A23C9FF6F70B43BA5B2C37B37856F7936E3B2E48E3DE00DEFA9476EB03196BCD89EFCAA5B95A3182BEA23F8D30570919CA7848C88715AE27536645352AA2540CD94B559F21E07652F063092A458A0D4ABDE8C577C2ED X-Mras: Ok Subject: [FFmpeg-devel] [PATCH] avcodec: insert threads dependent function calls into compile time conditions X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: kQS6eBachkMu Signed-off-by: Pawday --- libavcodec/avcodec.c | 44 +++++++++++++++++++++++++++++++------------- libavcodec/decode.c | 10 +++++++--- libavcodec/encode.c | 19 +++++++++++++------ libavcodec/h264dec.c | 14 +++++++------- 4 files changed, 58 insertions(+), 29 deletions(-) diff --git a/libavcodec/avcodec.c b/libavcodec/avcodec.c index a85d3c2309..1af8a5937f 100644 --- a/libavcodec/avcodec.c +++ b/libavcodec/avcodec.c @@ -38,9 +38,16 @@ #include "codec_internal.h" #include "decode.h" #include "encode.h" + +#if CONFIG_FRAME_THREAD_ENCODER #include "frame_thread_encoder.h" +#endif + #include "internal.h" + +#if HAVE_THREADS #include "thread.h" +#endif int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size) { @@ -67,7 +74,7 @@ int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, emms_c(); return 0; } - +#if HAVE_THREADS static AVMutex codec_mutex = AV_MUTEX_INITIALIZER; static void lock_avcodec(const FFCodec *codec) @@ -81,6 +88,10 @@ static void unlock_avcodec(const FFCodec *codec) if (codec->caps_internal & FF_CODEC_CAP_NOT_INIT_THREADSAFE && codec->init) ff_mutex_unlock(&codec_mutex); } +#else +#define lock_avcodec(args) +#define unlock_avcodec(args) +#endif static int64_t get_bit_rate(AVCodecContext *ctx) { @@ -297,8 +308,8 @@ FF_ENABLE_DEPRECATION_WARNINGS ret = ff_decode_preinit(avctx); if (ret < 0) goto free_and_end; - - if (HAVE_THREADS && !avci->frame_thread_encoder) { +#if HAVE_THREADS + if (!avci->frame_thread_encoder) { /* Frame-threaded decoders call FFCodec.init for their child contexts. */ lock_avcodec(codec2); ret = ff_thread_init(avctx); @@ -307,8 +318,11 @@ FF_ENABLE_DEPRECATION_WARNINGS goto free_and_end; } } - if (!HAVE_THREADS && !(codec2->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) +#endif +#if !HAVE_THREADS + if (!(codec2->caps_internal & FF_CODEC_CAP_AUTO_THREADS)) avctx->thread_count = 1; +#endif if (!(avctx->active_thread_type & FF_THREAD_FRAME) || avci->frame_thread_encoder) { @@ -403,10 +417,13 @@ 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) - ff_thread_flush(avctx); - else if (ffcodec(avctx->codec)->flush) - ffcodec(avctx->codec)->flush(avctx); + if (!(HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)) { + if (ffcodec(avctx->codec)->flush) + ffcodec(avctx->codec)->flush(avctx); + } +#if HAVE_THREADS + else ff_thread_flush(avctx); +#endif } void avsubtitle_free(AVSubtitle *sub) @@ -440,13 +457,14 @@ 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; diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 6be2d3d6ed..2014c90d06 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -47,7 +47,10 @@ #include "decode.h" #include "hwconfig.h" #include "internal.h" + +#if HAVE_THREADS #include "thread.h" +#endif static int apply_param_change(AVCodecContext *avctx, const AVPacket *avpkt) { @@ -301,9 +304,7 @@ static inline int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame, got_frame = 0; - if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) { - ret = ff_thread_decode_frame(avctx, frame, &got_frame, pkt); - } else { + if (!(HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME)) { ret = codec->cb.decode(avctx, frame, &got_frame, pkt); if (!(codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)) @@ -321,6 +322,9 @@ static inline int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame, } } } +#if HAVE_THREADS + else ret = ff_thread_decode_frame(avctx, frame, &got_frame, pkt); +#endif emms_c(); actual_got_frame = got_frame; diff --git a/libavcodec/encode.c b/libavcodec/encode.c index fbe2c97cd6..35d5bd281c 100644 --- a/libavcodec/encode.c +++ b/libavcodec/encode.c @@ -29,7 +29,11 @@ #include "avcodec.h" #include "codec_internal.h" #include "encode.h" + +#if CONFIG_FRAME_THREAD_ENCODER #include "frame_thread_encoder.h" +#endif + #include "internal.h" int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size) @@ -270,16 +274,19 @@ static int encode_simple_internal(AVCodecContext *avctx, AVPacket *avpkt) av_assert0(codec->cb_type == FF_CODEC_CB_TYPE_ENCODE); - 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 { + if (!(CONFIG_FRAME_THREAD_ENCODER && avci->frame_thread_encoder)) { 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 + else { + /* This will unref frame. */ + ret = ff_thread_video_encode_frame(avctx, avpkt, frame, &got_packet); + } +#endif if (avci->draining && !got_packet) avci->draining_done = 1; @@ -670,11 +677,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; } diff --git a/libavcodec/h264dec.c b/libavcodec/h264dec.c index 6ede4e8c9f..4538974dab 100644 --- a/libavcodec/h264dec.c +++ b/libavcodec/h264dec.c @@ -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;