From patchwork Wed Dec 30 06:26:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Guo, Yejun" X-Patchwork-Id: 24685 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 35CD744BD1E for ; Wed, 30 Dec 2020 08:28:07 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0EE9468A5BA; Wed, 30 Dec 2020 08:28:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B0C5168A55B for ; Wed, 30 Dec 2020 08:27:59 +0200 (EET) IronPort-SDR: s/2Q/k2nxot1pC0r7mTbX7VA/chdGKQcaYNhZOXigvfXICf+YuRrjmdTAbXp5VsI+xoE+afyUE PczPskrK12IA== X-IronPort-AV: E=McAfee;i="6000,8403,9849"; a="176672910" X-IronPort-AV: E=Sophos;i="5.78,460,1599548400"; d="scan'208";a="176672910" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Dec 2020 22:27:58 -0800 IronPort-SDR: vqAg90bYWlrizQGRbeVHkMBitEjpQEiXTYRrUxkf9FNPtuY5jR6j3VXlV9IX5styRlzC4p11gr 5U7lhoLIJnIg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.78,460,1599548400"; d="scan'208";a="419434989" Received: from yguo18-skl-u1604.sh.intel.com ([10.239.159.53]) by orsmga001.jf.intel.com with ESMTP; 29 Dec 2020 22:27:57 -0800 From: "Guo, Yejun" To: ffmpeg-devel@ffmpeg.org Date: Wed, 30 Dec 2020 14:26:43 +0800 Message-Id: <20201230062643.29564-1-yejun.guo@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH 2/3] dnn: fix issue when pthread is not supported X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 Cc: yejun.guo@intel.com MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Guo, Yejun --- libavfilter/dnn/safe_queue.c | 50 ++++++++++++++++++++++----------- libavfilter/vf_dnn_processing.c | 7 +++++ 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/libavfilter/dnn/safe_queue.c b/libavfilter/dnn/safe_queue.c index 4298048454..4f47e68fb3 100644 --- a/libavfilter/dnn/safe_queue.c +++ b/libavfilter/dnn/safe_queue.c @@ -25,10 +25,28 @@ #include "libavutil/avassert.h" #include "libavutil/thread.h" +#if HAVE_PTHREAD_CANCEL +#define DNNCond pthread_cond_t +#define dnn_cond_init pthread_cond_init +#define dnn_cond_destroy pthread_cond_destroy +#define dnn_cond_signal pthread_cond_signal +#define dnn_cond_wait pthread_cond_wait +#else +#define DNNCond char +static inline int dnn_cond_init(DNNCond *cond, const void *attr) { return 0; } +static inline int dnn_cond_destroy(DNNCond *cond) { return 0; } +static inline int dnn_cond_signal(DNNCond *cond) { return 0; } +static inline int dnn_cond_wait(DNNCond *cond, AVMutex *mutex) +{ + av_assert0(!"should not reach here"); + return 0; +} +#endif + struct _safe_queue { queue *q; - pthread_mutex_t mutex; - pthread_cond_t cond; + AVMutex mutex; + DNNCond cond; }; safe_queue *safe_queue_create(void) @@ -41,8 +59,8 @@ safe_queue *safe_queue_create(void) if (!sq->q) return NULL; - pthread_mutex_init(&sq->mutex, NULL); - pthread_cond_init(&sq->cond, NULL); + ff_mutex_init(&sq->mutex, NULL); + dnn_cond_init(&sq->cond, NULL); return sq; } @@ -52,8 +70,8 @@ void safe_queue_destroy(safe_queue *sq) return; queue_destroy(sq->q); - pthread_mutex_destroy(&sq->mutex); - pthread_cond_destroy(&sq->cond); + ff_mutex_destroy(&sq->mutex); + dnn_cond_destroy(&sq->cond); av_freep(&sq); } @@ -64,29 +82,29 @@ size_t safe_queue_size(safe_queue *sq) void safe_queue_push_front(safe_queue *sq, void *v) { - pthread_mutex_lock(&sq->mutex); + ff_mutex_lock(&sq->mutex); queue_push_front(sq->q, v); - pthread_cond_signal(&sq->cond); - pthread_mutex_unlock(&sq->mutex); + dnn_cond_signal(&sq->cond); + ff_mutex_unlock(&sq->mutex); } void safe_queue_push_back(safe_queue *sq, void *v) { - pthread_mutex_lock(&sq->mutex); + ff_mutex_lock(&sq->mutex); queue_push_back(sq->q, v); - pthread_cond_signal(&sq->cond); - pthread_mutex_unlock(&sq->mutex); + dnn_cond_signal(&sq->cond); + ff_mutex_unlock(&sq->mutex); } void *safe_queue_pop_front(safe_queue *sq) { void *value; - pthread_mutex_lock(&sq->mutex); + ff_mutex_lock(&sq->mutex); while (queue_size(sq->q) == 0) { - pthread_cond_wait(&sq->cond, &sq->mutex); + dnn_cond_wait(&sq->cond, &sq->mutex); } value = queue_pop_front(sq->q); - pthread_cond_signal(&sq->cond); - pthread_mutex_unlock(&sq->mutex); + dnn_cond_signal(&sq->cond); + ff_mutex_unlock(&sq->mutex); return value; } diff --git a/libavfilter/vf_dnn_processing.c b/libavfilter/vf_dnn_processing.c index da4508b50e..fff5696a31 100644 --- a/libavfilter/vf_dnn_processing.c +++ b/libavfilter/vf_dnn_processing.c @@ -110,6 +110,13 @@ static av_cold int init(AVFilterContext *context) av_log(ctx, AV_LOG_WARNING, "this backend does not support async execution, roll back to sync.\n"); } +#if !HAVE_PTHREAD_CANCEL + if (ctx->async) { + ctx->async = 0; + av_log(ctx, AV_LOG_WARNING, "pthread is not supported, roll back to sync.\n"); + } +#endif + return 0; }