From patchwork Sat Dec 23 23:51:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: wm4 X-Patchwork-Id: 6943 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.79.195 with SMTP id r64csp4096705jad; Sat, 23 Dec 2017 15:51:56 -0800 (PST) X-Google-Smtp-Source: ACJfBovsJx1Ke1ypiEu0SmZ59n4yB/TPSt6hua56koGWGmdxL+tkaAiXLBELtqCUA57JzMqhS8Ei X-Received: by 10.28.92.4 with SMTP id q4mr14814728wmb.42.1514073116817; Sat, 23 Dec 2017 15:51:56 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1514073116; cv=none; d=google.com; s=arc-20160816; b=wTgiTrHwXcMpc++UkIuxNSWwLFjhhh1cXqSt/K5wYz3CvTItj9B5TpxJ/RvgWsbvoX MGdmTx0ro1zFLUIAmbZZ73KUXUYlL1XprkhfnLrBSfRFQzVser6vFSPfq/QKGRl7hwxW Wm904RkTDD+fiFxZXxEQ4VrM8c99wlInDHcgXR5b3ZweDOL45zzXe65VLkRn4NzvUw78 uzsApFELuNyQSCMWBYB4UK5c+B1+ikC0jsvXnprUbYsHssM/FmyOFqxyPtvLRsGvZjhC Iv2ieAcnjp0YZWq2TilULYHUurDn3O1o+aF4vQ9dB/+Ig+WM/iKy9mujDHq1Ymy6Kwqp 6iOQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=clcA1DhDHJ7DXHE1amN1qd6Sg/0ltnji3FaO3AROqC8=; b=gLZGit8036/sEe8v67j0eg26jRGYciSkGclV8zeZO1ZOMwgOe7GdUovILuRvJs0bcE 8flHJZQhN0L0gGpzVlCpdOjBKn+bWlVwoGSeDoHUYlOxWhg3tC2jESfl9oV0jPPHmf15 qS+PRzzIqO1CD9VwbG9Bpl1ixRfrNNwI4A67U+Wa9vQAhZOTl/9GVOA2NTHcRBs40b0P w4akovkounZOxoO1Fjvndwre2Yhtbi/txsJzsukCnpNqBelW8AnQG7JREvFnKlJWAsbg JW34N9zy6wPuPMuxg4MKyvS6bMFCJsuNe9wE46NlegBZ3DG4+GXF7W8DhCCXZqAwETsT agvg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@googlemail.com header.s=20161025 header.b=bRiGKEel; 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; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id c41si14100846wrg.554.2017.12.23.15.51.56; Sat, 23 Dec 2017 15:51:56 -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=@googlemail.com header.s=20161025 header.b=bRiGKEel; 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; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 091776883C7; Sun, 24 Dec 2017 01:51:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f52.google.com (mail-wm0-f52.google.com [74.125.82.52]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E4094688342 for ; Sun, 24 Dec 2017 01:51:12 +0200 (EET) Received: by mail-wm0-f52.google.com with SMTP id i11so27354341wmf.4 for ; Sat, 23 Dec 2017 15:51:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=55Hsq25pi8PBfXVruTO99T8ZlHz3QJD3O09jM1NGpQk=; b=bRiGKEely+pjnV4USK96/eQ0T1hQs9wupsTZik8+bnPbGkUEFpH76HWshr0SSk8ClT OSKzCxJv7NVgB77aBLqAiM1c0roXle0dCNbkSBiRXSVN9+qExmwWoI+/Ol4TrqcU6imk 3AIUPI7lUpzwziSGP+9gUqor1/DZ9MVyJ3IGfRkRHY5wsxnUoV1Zr5xt724wZouQE69J QSLydDBjizrR8SakOTq/xqFLqbWyjjlCxSkYrprObfm3JNYGY2eMuoSM3lZcou3otVsd bAQEP4SWP0K9LgUMpvysxrzFHxb61ipndlpCgxa0aFSGAcdTtfpp4080CRq2BzhiIkD+ 8FOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=55Hsq25pi8PBfXVruTO99T8ZlHz3QJD3O09jM1NGpQk=; b=irNPoriMht6SIQeO0BgGDpQFzk7gQs2rUWrK+5gnLPRayIHeI+sbjFmZ6eEC3xRMuH 4Hg2TnBbpwNJbViYay0ZWPE5Hh5heMp6wMdiTpZzN2POtxLNNgZDG8qWC+HPbEM4o3+o B9bCs5tBpw2eJhcdBdphnnDeN38g43H7MNV1CyQlUQkZBZn5ZS3i0AruwXOfq5Bcm2xO a+1ziO1s2xB30QxPZIJz/Hpigj3fWTHJdun9qwZ3H5eH3BMurGF6rjRbwnCmBX7xAqnf Hk6JarOh0n9Rl6aVOVpsYjiC3sAZU3DrxPf6e8rQiQdkwL+qh5I25Q/ZmOWu5Gz+5Vt5 iPSw== X-Gm-Message-State: AKGB3mJcprmFEGzhfJ+vDMax4ml/aqToSIJQ4f1FSAkpCtHeTxBmFdKB AcD2txOObMB35rerG6IH2wKFsA== X-Received: by 10.28.46.136 with SMTP id u130mr17357904wmu.127.1514073084631; Sat, 23 Dec 2017 15:51:24 -0800 (PST) Received: from debian.speedport.ip (p2003006CCD4EDC353C06725800124D49.dip0.t-ipconnect.de. [2003:6c:cd4e:dc35:3c06:7258:12:4d49]) by smtp.googlemail.com with ESMTPSA id i66sm7743406wmf.3.2017.12.23.15.51.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 23 Dec 2017 15:51:24 -0800 (PST) From: wm4 To: ffmpeg-devel@ffmpeg.org Date: Sun, 24 Dec 2017 00:51:19 +0100 Message-Id: <20171223235120.31578-4-nfxjfg@googlemail.com> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171223235120.31578-1-nfxjfg@googlemail.com> References: <20171221222224.18577-1-nfxjfg@googlemail.com> <20171223235120.31578-1-nfxjfg@googlemail.com> Subject: [FFmpeg-devel] [PATCH v3 4/5] lavc, lavf: move avformat static mutex from avcodec to avformat 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: wm4 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" It's completely absurd that libavcodec would care about libavformat locking, but it was there because the lock manager was in libavcodec. This is more stright forward. Changes ABI, but we don't require ABI compatibility currently. --- libavcodec/internal.h | 3 --- libavcodec/utils.c | 11 ----------- libavformat/avisynth.c | 10 +++++----- libavformat/chromaprint.c | 9 +++++---- libavformat/internal.h | 4 ++++ libavformat/tls_gnutls.c | 8 ++++---- libavformat/tls_openssl.c | 10 +++++----- libavformat/utils.c | 13 +++++++++++++ 8 files changed, 36 insertions(+), 32 deletions(-) diff --git a/libavcodec/internal.h b/libavcodec/internal.h index 30cb9a0de1..bf58f36ad3 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -245,9 +245,6 @@ extern volatile int ff_avcodec_locked; int ff_lock_avcodec(AVCodecContext *log_ctx, const AVCodec *codec); int ff_unlock_avcodec(const AVCodec *codec); -int avpriv_lock_avformat(void); -int avpriv_unlock_avformat(void); - /** * Maximum size in bytes of extradata. * This value was chosen such that every bit of the buffer is diff --git a/libavcodec/utils.c b/libavcodec/utils.c index eec4437693..9c631c4fb0 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -70,7 +70,6 @@ const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION; volatile int ff_avcodec_locked; static atomic_int entangled_thread_counter = ATOMIC_VAR_INIT(0); static AVMutex codec_mutex = AV_MUTEX_INITIALIZER; -static AVMutex avformat_mutex = AV_MUTEX_INITIALIZER; void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size) { @@ -1904,16 +1903,6 @@ int ff_unlock_avcodec(const AVCodec *codec) return 0; } -int avpriv_lock_avformat(void) -{ - return ff_mutex_lock(&avformat_mutex) ? -1 : 0; -} - -int avpriv_unlock_avformat(void) -{ - return ff_mutex_unlock(&avformat_mutex) ? -1 : 0; -} - unsigned int avpriv_toupper4(unsigned int x) { return av_toupper(x & 0xFF) + diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index 56700288f7..250a489321 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -774,15 +774,15 @@ static av_cold int avisynth_read_header(AVFormatContext *s) int ret; // Calling library must implement a lock for thread-safe opens. - if (ret = avpriv_lock_avformat()) + if (ret = ff_lock_avformat()) return ret; if (ret = avisynth_open_file(s)) { - avpriv_unlock_avformat(); + ff_unlock_avformat(); return ret; } - avpriv_unlock_avformat(); + ff_unlock_avformat(); return 0; } @@ -818,11 +818,11 @@ static int avisynth_read_packet(AVFormatContext *s, AVPacket *pkt) static av_cold int avisynth_read_close(AVFormatContext *s) { - if (avpriv_lock_avformat()) + if (ff_lock_avformat()) return AVERROR_UNKNOWN; avisynth_context_destroy(s->priv_data); - avpriv_unlock_avformat(); + ff_unlock_avformat(); return 0; } diff --git a/libavformat/chromaprint.c b/libavformat/chromaprint.c index 4da02bef76..f39c09ddb9 100644 --- a/libavformat/chromaprint.c +++ b/libavformat/chromaprint.c @@ -20,6 +20,7 @@ */ #include "avformat.h" +#include "internal.h" #include "libavutil/opt.h" #include "libavcodec/internal.h" #include @@ -49,9 +50,9 @@ typedef struct ChromaprintMuxContext { static void cleanup(ChromaprintMuxContext *cpr) { if (cpr->ctx) { - avpriv_lock_avformat(); + ff_lock_avformat(); chromaprint_free(cpr->ctx); - avpriv_unlock_avformat(); + ff_unlock_avformat(); } } @@ -60,9 +61,9 @@ static int write_header(AVFormatContext *s) ChromaprintMuxContext *cpr = s->priv_data; AVStream *st; - avpriv_lock_avformat(); + ff_lock_avformat(); cpr->ctx = chromaprint_new(cpr->algorithm); - avpriv_unlock_avformat(); + ff_unlock_avformat(); if (!cpr->ctx) { av_log(s, AV_LOG_ERROR, "Failed to create chromaprint context.\n"); diff --git a/libavformat/internal.h b/libavformat/internal.h index de4b784634..745d3ebea6 100644 --- a/libavformat/internal.h +++ b/libavformat/internal.h @@ -681,4 +681,8 @@ int ff_bprint_to_codecpar_extradata(AVCodecParameters *par, struct AVBPrint *buf int ff_interleaved_peek(AVFormatContext *s, int stream, AVPacket *pkt, int add_offset); + +int ff_lock_avformat(void); +int ff_unlock_avformat(void); + #endif /* AVFORMAT_INTERNAL_H */ diff --git a/libavformat/tls_gnutls.c b/libavformat/tls_gnutls.c index 0cef9575ec..e3c43683be 100644 --- a/libavformat/tls_gnutls.c +++ b/libavformat/tls_gnutls.c @@ -55,20 +55,20 @@ typedef struct TLSContext { void ff_gnutls_init(void) { - avpriv_lock_avformat(); + ff_lock_avformat(); #if HAVE_THREADS && GNUTLS_VERSION_NUMBER < 0x020b00 if (gcry_control(GCRYCTL_ANY_INITIALIZATION_P) == 0) gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread); #endif gnutls_global_init(); - avpriv_unlock_avformat(); + ff_unlock_avformat(); } void ff_gnutls_deinit(void) { - avpriv_lock_avformat(); + ff_lock_avformat(); gnutls_global_deinit(); - avpriv_unlock_avformat(); + ff_unlock_avformat(); } static int print_tls_error(URLContext *h, int ret) diff --git a/libavformat/tls_openssl.c b/libavformat/tls_openssl.c index 1443e9025a..59a86150a7 100644 --- a/libavformat/tls_openssl.c +++ b/libavformat/tls_openssl.c @@ -68,7 +68,7 @@ static unsigned long openssl_thread_id(void) int ff_openssl_init(void) { - avpriv_lock_avformat(); + ff_lock_avformat(); if (!openssl_init) { SSL_library_init(); SSL_load_error_strings(); @@ -77,7 +77,7 @@ int ff_openssl_init(void) int i; openssl_mutexes = av_malloc_array(sizeof(pthread_mutex_t), CRYPTO_num_locks()); if (!openssl_mutexes) { - avpriv_unlock_avformat(); + ff_unlock_avformat(); return AVERROR(ENOMEM); } @@ -91,14 +91,14 @@ int ff_openssl_init(void) #endif } openssl_init++; - avpriv_unlock_avformat(); + ff_unlock_avformat(); return 0; } void ff_openssl_deinit(void) { - avpriv_lock_avformat(); + ff_lock_avformat(); openssl_init--; if (!openssl_init) { #if HAVE_THREADS @@ -111,7 +111,7 @@ void ff_openssl_deinit(void) } #endif } - avpriv_unlock_avformat(); + ff_unlock_avformat(); } static int print_tls_error(URLContext *h, int ret) diff --git a/libavformat/utils.c b/libavformat/utils.c index 84e49208b8..9b46bd6737 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -32,6 +32,7 @@ #include "libavutil/opt.h" #include "libavutil/parseutils.h" #include "libavutil/pixdesc.h" +#include "libavutil/thread.h" #include "libavutil/time.h" #include "libavutil/time_internal.h" #include "libavutil/timestamp.h" @@ -55,6 +56,8 @@ #include "libavutil/ffversion.h" const char av_format_ffversion[] = "FFmpeg version " FFMPEG_VERSION; +static AVMutex avformat_mutex = AV_MUTEX_INITIALIZER; + /** * @file * various utility functions for use within FFmpeg @@ -77,6 +80,16 @@ const char *avformat_license(void) return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; } +int ff_lock_avformat(void) +{ + return ff_mutex_lock(&avformat_mutex) ? -1 : 0; +} + +int ff_unlock_avformat(void) +{ + return ff_mutex_unlock(&avformat_mutex) ? -1 : 0; +} + #define RELATIVE_TS_BASE (INT64_MAX - (1LL<<48)) static int is_relative(int64_t ts) {