From patchwork Mon Jul 29 04:43:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hutchinson X-Patchwork-Id: 50809 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:16f:b0:489:2eb3:e4c4 with SMTP id h47csp917742vqi; Sun, 28 Jul 2024 21:51:55 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUTGhKpzts2u5gx8DisxAxRxP/+zaR3hnQ/H0ZMxE4wguZ816WU5FaTEVd0L8ckbef9OaU0uqLwUJ0LnipmiLmDVaFDqPxXhAdYnA== X-Google-Smtp-Source: AGHT+IFhYjMgJ9WdJz7sfb+OChMgl+xX3D5bvyfHmBTYsR1XQmlRxIaNycI68NNy5QzPE38HX5Zy X-Received: by 2002:a05:6512:3d1e:b0:52f:244:206f with SMTP id 2adb3069b0e04-5309b2e0603mr4643952e87.53.1722228714848; Sun, 28 Jul 2024 21:51:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1722228714; cv=none; d=google.com; s=arc-20160816; b=vJqojtzGlrMMRixYkogW7CoucQmNlxvM0ImxxfaFV7XybdVvHM60vKgLMDalf2DlVT db5wIWg+1z4s+WCgccdHllop4PAVLCUoVmZXI+ZjmrUAugipxI7umf6iL9nqLNjh/jf5 cKX4mlJljrBsdQr99dd2ePKLpbN4reEKrnwGWeC1w1CaUk5micexcC+TH3srmeAr2N2I Ko7oVSdpMxCU+uS7QzUUbXHXUfmz0VFylAxq1m/Rz81rPzr2pMk9fVuKbODRGuwLzpn+ uThMA/BbmGxKCs6hTLn6M/S//BJt03ELyq0iF62TauOe9UXVdDrG3qg3BK2qQEcySkj8 wVjg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=u5/UDJEI0yY15eKJuk76Rgzf1p80PcnNG3+VqMxd2Gw=; fh=dF+SszRLFyubUCP/LDvIY2NwiNB1Gp0Txz6w70WKHpo=; b=RA0iu0xO18XrwLpeFE3XTUJGy3YVh66x9UWAi0oUyX7oy9tL3ByDvXaI4yeJ+m4YT4 I6EHWPlNw2CgHBFZaYvmDrzpi5YhYaVh+t3DWtCQtyYZGIWcyZW8EcLQMY3PxXxuWKZ+ ZYu1KlpIDlC855y6d9wty5Xwve6JmQ41A+TJaMlTtFN03DAQ0ZR2wI6Krc370hSCK+j6 Lh0abYwTUR0N9qnmmiNJhFfurFdyFVR8Rz4oHU15qZTISkaj4ShmzIT7MEE6EV43YWT+ 4jZ3sOb/i9D0qqID92pdNBAqkFqT1i3KdEWdaBj9fboTxk0d0ho+2Ayzrz/hkIpYU/MJ XEZg==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=E7vfQNSN; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 2adb3069b0e04-52fd5bee774si2638353e87.283.2024.07.28.21.51.54; Sun, 28 Jul 2024 21:51:54 -0700 (PDT) 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=@gmail.com header.s=20230601 header.b=E7vfQNSN; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2C95568D45D; Mon, 29 Jul 2024 07:43:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-vs1-f44.google.com (mail-vs1-f44.google.com [209.85.217.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 950C368D34E for ; Mon, 29 Jul 2024 07:43:35 +0300 (EEST) Received: by mail-vs1-f44.google.com with SMTP id ada2fe7eead31-49290ce47c4so1020068137.0 for ; Sun, 28 Jul 2024 21:43:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1722228213; x=1722833013; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VZHFFYOux4soK5q+U6MVLr8C5v7c4YU9UAgZkDvxe3U=; b=E7vfQNSN8uC/qMSM7MsWBnio6E7pqvcpRHiyfBBWA8WUCC46d4pYCYvzfiXFYJK7Us a8M1c4OYdhJNL7sQ2G0OKraj+4xgZ2URd5HVMyCmKbXmcNZoFkFOr5X0WhytLPLmQHS/ sJnSh4ke4NXLgqBeqP2zV8QaCWtzI5jdZP5SlyGny7c7kX1fcFjxgygHc6ckLz1ZRMk3 Is6VC00ioAW/pdt9TXcRqhd9dPM5ASR9IMLBI6ZMX55dEgI1TYD4cInrg4zuIKWVdSLy q+v0h7jDDq8El62F4w5Lyzr4oS5VZujTIPTTVKTvX4FfaUshDG2Zm6aGqSA4V2rf+SRm 51Fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722228213; x=1722833013; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VZHFFYOux4soK5q+U6MVLr8C5v7c4YU9UAgZkDvxe3U=; b=O8NcPZqJoarM+juaWASzmY+3ZK6gECsz+4A49QW6t2Q4O+Gd0vli76bNYpIA3JM1gX oJhLOih1j5NnDp6rvqSUUhBvaZCvsXEZSvvRreoOLiztic7Cb3iP1eQlzHVLX/V5a7sG IaL/Rzi5/lNWZQNS7dQ+jrScmFqU6W7CFLR1NO8LdamyRvpmM89XARvdrhxzsEvlFOg+ XDoqKyue7/hiaNBuLpg7llh/Z3+amTBSct8PeyiLK93uXPnkHlcttsFxHzPSoDhso+zc fp+KhKN7toFZAm6jYwluWBxKtXHGq+W1l1tfplFy3QhoYfS4yfz4EQf6gWskVUsTe5xu EOHg== X-Gm-Message-State: AOJu0Yx9LRrRXpYgmPVxPoLl+mWuUtNSGY/N0uHy61BuwQ1ZGxiRpdAa uP2kjOJZ0m9RZG+IdDhavs2EydLS4mNRt6YxhBlnlCcvCb/ANMrvpYV4fA== X-Received: by 2002:a05:6102:cd1:b0:492:84ac:2eb7 with SMTP id ada2fe7eead31-493fb0c98acmr2584102137.11.1722228212824; Sun, 28 Jul 2024 21:43:32 -0700 (PDT) Received: from cappuccino.. (syn-173-170-140-230.res.spectrum.com. [173.170.140.230]) by smtp.gmail.com with ESMTPSA id ada2fe7eead31-493d98b0834sm1493338137.24.2024.07.28.21.43.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jul 2024 21:43:32 -0700 (PDT) From: Stephen Hutchinson To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Jul 2024 00:43:26 -0400 Message-ID: <20240729044326.17443-1-qyot27@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/4] avformat/avisynth: remove library allocation from global state 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 Cc: Stephen Hutchinson Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 6t5n9aoiaNrY As part of this, the mutexes are no longer necessary, and avisynth_read_close needs to check that avs->avs_library.library still exists before it attempts to call avisynth_context_destroy and dlclose. Signed-off-by: Stephen Hutchinson --- libavformat/avisynth.c | 133 ++++++++++++++++++++--------------------- 1 file changed, 64 insertions(+), 69 deletions(-) diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index b01263e010..b91d77b8d8 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -115,6 +115,7 @@ typedef struct AviSynthContext { int error; uint32_t flags; + struct AviSynthLibrary avs_library; } AviSynthContext; static const int avs_planes_packed[1] = { 0 }; @@ -128,20 +129,16 @@ static const int avs_planes_yuva[4] = { AVS_PLANAR_Y, AVS_PLANAR_U, static const int avs_planes_rgba[4] = { AVS_PLANAR_G, AVS_PLANAR_B, AVS_PLANAR_R, AVS_PLANAR_A }; -static AVMutex avisynth_mutex = AV_MUTEX_INITIALIZER; - -static AviSynthLibrary avs_library; - -static av_cold int avisynth_load_library(void) +static av_cold int avisynth_load_library(AviSynthContext *avs) { - avs_library.library = dlopen(AVISYNTH_LIB, RTLD_NOW | RTLD_LOCAL); - if (!avs_library.library) + avs->avs_library.library = dlopen(AVISYNTH_LIB, RTLD_NOW | RTLD_LOCAL); + if (!avs->avs_library.library) return AVERROR_UNKNOWN; #define LOAD_AVS_FUNC(name, continue_on_fail) \ - avs_library.name = (name ## _func) \ - dlsym(avs_library.library, #name); \ - if (!continue_on_fail && !avs_library.name) \ + avs->avs_library.name = (name ## _func) \ + dlsym(avs->avs_library.library, #name); \ + if (!continue_on_fail && !avs->avs_library.name) \ goto fail; LOAD_AVS_FUNC(avs_bit_blt, 0); @@ -177,7 +174,7 @@ static av_cold int avisynth_load_library(void) return 0; fail: - dlclose(avs_library.library); + dlclose(avs->avs_library.library); return AVERROR_UNKNOWN; } @@ -189,13 +186,13 @@ static av_cold int avisynth_context_create(AVFormatContext *s) AviSynthContext *avs = s->priv_data; int ret; - if (!avs_library.library) - if (ret = avisynth_load_library()) + if (!avs->avs_library.library) + if (ret = avisynth_load_library(avs)) return ret; - avs->env = avs_library.avs_create_script_environment(3); - if (avs_library.avs_get_error) { - const char *error = avs_library.avs_get_error(avs->env); + avs->env = avs->avs_library.avs_create_script_environment(3); + if (avs->avs_library.avs_get_error) { + const char *error = avs->avs_library.avs_get_error(avs->env); if (error) { av_log(s, AV_LOG_ERROR, "%s\n", error); return AVERROR_UNKNOWN; @@ -208,11 +205,11 @@ static av_cold int avisynth_context_create(AVFormatContext *s) static av_cold void avisynth_context_destroy(AviSynthContext *avs) { if (avs->clip) { - avs_library.avs_release_clip(avs->clip); + avs->avs_library.avs_release_clip(avs->clip); avs->clip = NULL; } if (avs->env) { - avs_library.avs_delete_script_environment(avs->env); + avs->avs_library.avs_delete_script_environment(avs->env); avs->env = NULL; } } @@ -486,17 +483,17 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) * version 9 at the minimum. Technically, 8.1 works, but the time * distance between 8.1 and 9 is very small, so just restrict it to 9. */ - if (avs_library.avs_get_version(avs->clip) >= 9) { + if (avs->avs_library.avs_get_version(avs->clip) >= 9) { - frame = avs_library.avs_get_frame(avs->clip, 0); - avsmap = avs_library.avs_get_frame_props_ro(avs->env, frame); + frame = avs->avs_library.avs_get_frame(avs->clip, 0); + avsmap = avs->avs_library.avs_get_frame_props_ro(avs->env, frame); /* Field order */ if(avs->flags & AVISYNTH_FRAMEPROP_FIELD_ORDER) { - if(avs_library.avs_prop_get_type(avs->env, avsmap, "_FieldBased") == AVS_PROPTYPE_UNSET) { + if(avs->avs_library.avs_prop_get_type(avs->env, avsmap, "_FieldBased") == AVS_PROPTYPE_UNSET) { st->codecpar->field_order = AV_FIELD_UNKNOWN; } else { - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_FieldBased", 0, &error)) { + switch (avs->avs_library.avs_prop_get_int(avs->env, avsmap, "_FieldBased", 0, &error)) { case 0: st->codecpar->field_order = AV_FIELD_PROGRESSIVE; break; @@ -514,10 +511,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) /* Color Range */ if(avs->flags & AVISYNTH_FRAMEPROP_RANGE) { - if(avs_library.avs_prop_get_type(avs->env, avsmap, "_ColorRange") == AVS_PROPTYPE_UNSET) { + if(avs->avs_library.avs_prop_get_type(avs->env, avsmap, "_ColorRange") == AVS_PROPTYPE_UNSET) { st->codecpar->color_range = AVCOL_RANGE_UNSPECIFIED; } else { - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_ColorRange", 0, &error)) { + switch (avs->avs_library.avs_prop_get_int(avs->env, avsmap, "_ColorRange", 0, &error)) { case 0: st->codecpar->color_range = AVCOL_RANGE_JPEG; break; @@ -532,7 +529,7 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) /* Color Primaries */ if(avs->flags & AVISYNTH_FRAMEPROP_PRIMARIES) { - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_Primaries", 0, &error)) { + switch (avs->avs_library.avs_prop_get_int(avs->env, avsmap, "_Primaries", 0, &error)) { case 1: st->codecpar->color_primaries = AVCOL_PRI_BT709; break; @@ -576,7 +573,7 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) /* Color Transfer Characteristics */ if(avs->flags & AVISYNTH_FRAMEPROP_TRANSFER) { - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_Transfer", 0, &error)) { + switch (avs->avs_library.avs_prop_get_int(avs->env, avsmap, "_Transfer", 0, &error)) { case 1: st->codecpar->color_trc = AVCOL_TRC_BT709; break; @@ -635,10 +632,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) /* Matrix coefficients */ if(avs->flags & AVISYNTH_FRAMEPROP_MATRIX) { - if(avs_library.avs_prop_get_type(avs->env, avsmap, "_Matrix") == AVS_PROPTYPE_UNSET) { + if(avs->avs_library.avs_prop_get_type(avs->env, avsmap, "_Matrix") == AVS_PROPTYPE_UNSET) { st->codecpar->color_space = AVCOL_SPC_UNSPECIFIED; } else { - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_Matrix", 0, &error)) { + switch (avs->avs_library.avs_prop_get_int(avs->env, avsmap, "_Matrix", 0, &error)) { case 0: st->codecpar->color_space = AVCOL_SPC_RGB; break; @@ -689,10 +686,10 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) /* Chroma Location */ if(avs->flags & AVISYNTH_FRAMEPROP_CHROMA_LOCATION) { - if(avs_library.avs_prop_get_type(avs->env, avsmap, "_ChromaLocation") == AVS_PROPTYPE_UNSET) { + if(avs->avs_library.avs_prop_get_type(avs->env, avsmap, "_ChromaLocation") == AVS_PROPTYPE_UNSET) { st->codecpar->chroma_location = AVCHROMA_LOC_UNSPECIFIED; } else { - switch (avs_library.avs_prop_get_int(avs->env, avsmap, "_ChromaLocation", 0, &error)) { + switch (avs->avs_library.avs_prop_get_int(avs->env, avsmap, "_ChromaLocation", 0, &error)) { case 0: st->codecpar->chroma_location = AVCHROMA_LOC_LEFT; break; @@ -719,12 +716,12 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) /* Sample aspect ratio */ if(avs->flags & AVISYNTH_FRAMEPROP_SAR) { - sar_num = avs_library.avs_prop_get_int(avs->env, avsmap, "_SARNum", 0, &error); - sar_den = avs_library.avs_prop_get_int(avs->env, avsmap, "_SARDen", 0, &error); + sar_num = avs->avs_library.avs_prop_get_int(avs->env, avsmap, "_SARNum", 0, &error); + sar_den = avs->avs_library.avs_prop_get_int(avs->env, avsmap, "_SARDen", 0, &error); st->sample_aspect_ratio = (AVRational){ sar_num, sar_den }; } - avs_library.avs_release_video_frame(frame); + avs->avs_library.avs_release_video_frame(frame); } else { st->codecpar->field_order = AV_FIELD_UNKNOWN; /* AviSynth works with frame-based video, detecting field order can @@ -753,9 +750,9 @@ static int avisynth_create_stream_audio(AVFormatContext *s, AVStream *st) st->duration = avs->vi->num_audio_samples; avpriv_set_pts_info(st, 64, 1, avs->vi->audio_samples_per_second); - if (avs_library.avs_get_version(avs->clip) >= 10) + if (avs->avs_library.avs_get_version(avs->clip) >= 10) av_channel_layout_from_mask(&st->codecpar->ch_layout, - avs_library.avs_get_channel_mask(avs->vi)); + avs->avs_library.avs_get_channel_mask(avs->vi)); switch (avs->vi->sample_type) { case AVS_SAMPLE_INT8: @@ -817,13 +814,13 @@ static int avisynth_open_file(AVFormatContext *s) if (ret = avisynth_context_create(s)) return ret; - if (!avs_library.avs_check_version(avs->env, 7)) { + if (!avs->avs_library.avs_check_version(avs->env, 7)) { AVS_Value args[] = { avs_new_value_string(s->url), avs_new_value_bool(1) // filename is in UTF-8 }; - val = avs_library.avs_invoke(avs->env, "Import", - avs_new_value_array(args, 2), 0); + val = avs->avs_library.avs_invoke(avs->env, "Import", + avs_new_value_array(args, 2), 0); } else { AVS_Value arg; #ifdef _WIN32 @@ -837,7 +834,7 @@ static int avisynth_open_file(AVFormatContext *s) #else arg = avs_new_value_string(s->url); #endif - val = avs_library.avs_invoke(avs->env, "Import", arg, 0); + val = avs->avs_library.avs_invoke(avs->env, "Import", arg, 0); #ifdef _WIN32 av_free(filename_ansi); #endif @@ -854,14 +851,14 @@ static int avisynth_open_file(AVFormatContext *s) goto fail; } - avs->clip = avs_library.avs_take_clip(val, avs->env); - avs->vi = avs_library.avs_get_video_info(avs->clip); + avs->clip = avs->avs_library.avs_take_clip(val, avs->env); + avs->vi = avs->avs_library.avs_get_video_info(avs->clip); /* On Windows, FFmpeg supports AviSynth interface version 6 or higher. * This includes AviSynth 2.6 RC1 or higher, and AviSynth+ r1718 or higher, * and excludes 2.5 and the 2.6 alphas. */ - if (avs_library.avs_get_version(avs->clip) < 6) { + if (avs->avs_library.avs_get_version(avs->clip) < 6) { av_log(s, AV_LOG_ERROR, "AviSynth version is too old. Please upgrade to either AviSynth 2.6 >= RC1 or AviSynth+ >= r1718.\n"); ret = AVERROR_UNKNOWN; @@ -869,7 +866,7 @@ static int avisynth_open_file(AVFormatContext *s) } /* Release the AVS_Value as it will go out of scope. */ - avs_library.avs_release_value(val); + avs->avs_library.avs_release_value(val); if (ret = avisynth_create_stream(s)) goto fail; @@ -917,7 +914,7 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, if (discard) return 0; - bits = avs_library.avs_bits_per_pixel(avs->vi); + bits = avs->avs_library.avs_bits_per_pixel(avs->vi); /* Without the cast to int64_t, calculation overflows at about 9k x 9k * resolution. */ @@ -934,8 +931,8 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, pkt->duration = 1; pkt->stream_index = avs->curr_stream; - frame = avs_library.avs_get_frame(avs->clip, n); - error = avs_library.avs_clip_get_error(avs->clip); + frame = avs->avs_library.avs_get_frame(avs->clip, n); + error = avs->avs_library.avs_clip_get_error(avs->clip); if (error) { av_log(s, AV_LOG_ERROR, "%s\n", error); avs->error = 1; @@ -946,26 +943,26 @@ static int avisynth_read_packet_video(AVFormatContext *s, AVPacket *pkt, dst_p = pkt->data; for (i = 0; i < avs->n_planes; i++) { plane = avs->planes[i]; - src_p = avs_library.avs_get_read_ptr_p(frame, plane); - pitch = avs_library.avs_get_pitch_p(frame, plane); + src_p = avs->avs_library.avs_get_read_ptr_p(frame, plane); + pitch = avs->avs_library.avs_get_pitch_p(frame, plane); - rowsize = avs_library.avs_get_row_size_p(frame, plane); - planeheight = avs_library.avs_get_height_p(frame, plane); + rowsize = avs->avs_library.avs_get_row_size_p(frame, plane); + planeheight = avs->avs_library.avs_get_height_p(frame, plane); /* Flip RGB video. */ - if (avs_library.avs_is_color_space(avs->vi, AVS_CS_BGR) || - avs_library.avs_is_color_space(avs->vi, AVS_CS_BGR48) || - avs_library.avs_is_color_space(avs->vi, AVS_CS_BGR64)) { + if (avs->avs_library.avs_is_color_space(avs->vi, AVS_CS_BGR) || + avs->avs_library.avs_is_color_space(avs->vi, AVS_CS_BGR48) || + avs->avs_library.avs_is_color_space(avs->vi, AVS_CS_BGR64)) { src_p = src_p + (planeheight - 1) * pitch; pitch = -pitch; } - avs_library.avs_bit_blt(avs->env, dst_p, rowsize, src_p, pitch, - rowsize, planeheight); + avs->avs_library.avs_bit_blt(avs->env, dst_p, rowsize, src_p, pitch, + rowsize, planeheight); dst_p += rowsize * planeheight; } - avs_library.avs_release_video_frame(frame); + avs->avs_library.avs_release_video_frame(frame); return 0; } @@ -1025,8 +1022,8 @@ static int avisynth_read_packet_audio(AVFormatContext *s, AVPacket *pkt, pkt->duration = samples; pkt->stream_index = avs->curr_stream; - avs_library.avs_get_audio(avs->clip, pkt->data, n, samples); - error = avs_library.avs_clip_get_error(avs->clip); + avs->avs_library.avs_get_audio(avs->clip, pkt->data, n, samples); + error = avs->avs_library.avs_clip_get_error(avs->clip); if (error) { av_log(s, AV_LOG_ERROR, "%s\n", error); avs->error = 1; @@ -1040,16 +1037,9 @@ static av_cold int avisynth_read_header(AVFormatContext *s) { int ret; - // Calling library must implement a lock for thread-safe opens. - if (ff_mutex_lock(&avisynth_mutex)) - return AVERROR_UNKNOWN; - - if (ret = avisynth_open_file(s)) { - ff_mutex_unlock(&avisynth_mutex); + if (ret = avisynth_open_file(s)) return ret; - } - ff_mutex_unlock(&avisynth_mutex); return 0; } @@ -1085,8 +1075,13 @@ static int avisynth_read_packet(AVFormatContext *s, AVPacket *pkt) static av_cold int avisynth_read_close(AVFormatContext *s) { - avisynth_context_destroy(s->priv_data); - dlclose(avs_library.library); + AviSynthContext *avs = s->priv_data; + + if (avs->avs_library.library) { + avisynth_context_destroy(s->priv_data); + dlclose(avs->avs_library.library); + } + return 0; } From patchwork Mon Jul 29 04:43:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Hutchinson X-Patchwork-Id: 50810 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:612c:16f:b0:489:2eb3:e4c4 with SMTP id h47csp920452vqi; Sun, 28 Jul 2024 22:01:56 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCVzjuTeH5f04vTaq4g+hkJDgthordofFIMzD6J755qJV6jNO+UmPan0DUzkwl3Lvw2k6dLyz+YMXkvHxEoh2TtyYsd1TX8aEAnSeg== X-Google-Smtp-Source: AGHT+IEdcD670A/PffYhFWNCKviTNKPKBNTIY9mtPLPSaC03td2zLjo272eobsggSf8Dt+BhFtFP X-Received: by 2002:a17:907:7b8b:b0:a7a:afe8:1013 with SMTP id a640c23a62f3a-a7d3f81db08mr741310366b.1.1722229315563; Sun, 28 Jul 2024 22:01:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1722229315; cv=none; d=google.com; s=arc-20160816; b=qncmOjNpheBkRW2PdtDn4zUiU9O3g7Zm4S6Ow/PbVaITvVTnaJ2kxprYZk9GdcGT4F 20jqgIJU26uYq2YrQ2pyAuU2fWSKpIpW3zeLohJAK9+f8Ng8BWBzhytYPT0H0tX4SamY KyRAuGv6csgk395dV0LHWoo1CrsRZxilqkjG9mDTqcnzYHBbuj5aN4fljX/2br1wxgZS 8zO11W+ngb1KX71uc3MZbCbPbHCX1GwXQIz9fqlrfy7GT4pVVs3+mMfh/L9oipY2DtWi Bs6YZZ6YA1KcypUZqfd9hCkXeMDuBiEtblsIpkEZaFLHXF4GexIzAQEKsaOyyVPZP5My hzEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=PsGuvOk+TvG/sRQzhZAlMszXO17SBc4m0jzPrydsOMQ=; fh=dF+SszRLFyubUCP/LDvIY2NwiNB1Gp0Txz6w70WKHpo=; b=hRpOU70FUg1iDOv4LdiToWknWNGq0p7KzdWfarQbRUAouRTVIYXiWgSFBMGfK49J5x f/2xvIKRJ+eeB31M+VKeInVC9dl6DzVDQz1J97fNz/BExKMLPxcVtU1G8o5XxTEend64 IeqFigEHK9zZ8xKzlaqbRzxSHW8l1mteSYX5q3ENM0FXmq1lVPVu7f6FJV2LGRfAhUku /UHo+jo9K7wS3VKBLnqdoJEahxRUlG6g+kCf4hqTd1gUj9568NSLqsMTQn9Ot7ppsV1P rbBLsA9C/Y12h+8YvvIbt/TMLNG2MADSoHnlh7eu/LF6FTr4e3TdhDYULrKJtH/mtJJ2 BU7A==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20230601 header.b=FVGhbW5m; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a640c23a62f3a-a7acac63775si561470766b.627.2024.07.28.22.01.54; Sun, 28 Jul 2024 22:01:55 -0700 (PDT) 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=@gmail.com header.s=20230601 header.b=FVGhbW5m; 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=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com; dara=fail header.i=@gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7C3DC68D5A6; Mon, 29 Jul 2024 07:43:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-vk1-f174.google.com (mail-vk1-f174.google.com [209.85.221.174]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4145568D4AF for ; Mon, 29 Jul 2024 07:43:45 +0300 (EEST) Received: by mail-vk1-f174.google.com with SMTP id 71dfb90a1353d-4f6bc491759so880895e0c.0 for ; Sun, 28 Jul 2024 21:43:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1722228223; x=1722833023; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5MxBBHidEsjbCOYcDVBkTp/J6BvX5qBaNOwG77LOhQs=; b=FVGhbW5msCZMNvxcY6AJYSNnf4Og4CiF49zLJMQQVd8owEO+UZWIb8gX4Zu4mSxW1J VzXyGULiU3++FWw91Zt8chx9wTcSTwgq97PuxpyfEFuuahjQcixfingdBihXa4WHrDDv YIf3ZuR14+jkCr0DYKczaf5TdG3UyPXQwNcaujAnFEgFbodzUDhOGyRT2l/5hOGImqG3 1j97atD/LqeVrRc2zfYQBEwpn5fT1x48/CscVzhI4Or5Rl+1WHYFMPzW71f3LvJxUFk1 Q00Nd6DkxBo3absByrVI5X9AICn0m317NtidUhzH4QTHoDCrvE2lFlryk5e6swKHMbvy 2SHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722228223; x=1722833023; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5MxBBHidEsjbCOYcDVBkTp/J6BvX5qBaNOwG77LOhQs=; b=Gvql820ndpfoZ1vlhLeMDFT2wnVYpqbOOMnVs+SFlt5EUFsoxHSMKzcIEpj9c2QxCD 8mmXORnhU5jRorhti0GHJ+aMJxZsS08Np9Z5W9qwvKau/nFuM3UaOiOMrVruIhWIHJBK IDakPVsaFZGgWKdst5jyC81NhHRvj8oLrfw1GSorbQjUhVxpo3oqNNZlxgwriIfJ1EZU faSmYgaAvNhwdS/LHIA+5H+x/YqOdL6er0Vqe2HLeucLE2NNfcrdWyFcH/3HmhBesxML bY8MbJY6Zjgba0q0xJr6OrX/zr7EOPr6D5u7bKpyh6AjQpEj/ysCgz6/uRN4K7H3Tyuc H6Mw== X-Gm-Message-State: AOJu0Yzb5pKugjfsoKgjNW+Fy0cToDxncU5Ghzamq+mSfCY9+YONFrKY 1jzo8xTUGDJFwT/Q6NXP6woJMn5/tTFVA+CGkkZnVPsN0gy8NLFvt2iiiQ== X-Received: by 2002:a05:6122:4693:b0:4f5:2276:1366 with SMTP id 71dfb90a1353d-4f6e68b1738mr2823441e0c.3.1722228222911; Sun, 28 Jul 2024 21:43:42 -0700 (PDT) Received: from cappuccino.. (syn-173-170-140-230.res.spectrum.com. [173.170.140.230]) by smtp.gmail.com with ESMTPSA id 71dfb90a1353d-4f6c86c8cecsm1023913e0c.32.2024.07.28.21.43.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 28 Jul 2024 21:43:42 -0700 (PDT) From: Stephen Hutchinson To: ffmpeg-devel@ffmpeg.org Date: Mon, 29 Jul 2024 00:43:40 -0400 Message-ID: <20240729044340.17459-1-qyot27@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: References: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/4] avformat/avisynth: move avs_planes* consts into relevant function 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 Cc: Stephen Hutchinson Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 76zzDe50i0Gw These consts are only used in the switch(planar) case located in avisynth_create_stream_video and nowhere else in the demuxer, so move them into that function directly. Signed-off-by: Stephen Hutchinson --- libavformat/avisynth.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/libavformat/avisynth.c b/libavformat/avisynth.c index b91d77b8d8..cb2be10925 100644 --- a/libavformat/avisynth.c +++ b/libavformat/avisynth.c @@ -118,17 +118,6 @@ typedef struct AviSynthContext { struct AviSynthLibrary avs_library; } AviSynthContext; -static const int avs_planes_packed[1] = { 0 }; -static const int avs_planes_grey[1] = { AVS_PLANAR_Y }; -static const int avs_planes_yuv[3] = { AVS_PLANAR_Y, AVS_PLANAR_U, - AVS_PLANAR_V }; -static const int avs_planes_rgb[3] = { AVS_PLANAR_G, AVS_PLANAR_B, - AVS_PLANAR_R }; -static const int avs_planes_yuva[4] = { AVS_PLANAR_Y, AVS_PLANAR_U, - AVS_PLANAR_V, AVS_PLANAR_A }; -static const int avs_planes_rgba[4] = { AVS_PLANAR_G, AVS_PLANAR_B, - AVS_PLANAR_R, AVS_PLANAR_A }; - static av_cold int avisynth_load_library(AviSynthContext *avs) { avs->avs_library.library = dlopen(AVISYNTH_LIB, RTLD_NOW | RTLD_LOCAL); @@ -225,6 +214,17 @@ static int avisynth_create_stream_video(AVFormatContext *s, AVStream *st) int sar_num = 1; int sar_den = 1; + static const int avs_planes_packed[1] = { 0 }; + static const int avs_planes_grey[1] = { AVS_PLANAR_Y }; + static const int avs_planes_yuv[3] = { AVS_PLANAR_Y, AVS_PLANAR_U, + AVS_PLANAR_V }; + static const int avs_planes_rgb[3] = { AVS_PLANAR_G, AVS_PLANAR_B, + AVS_PLANAR_R }; + static const int avs_planes_yuva[4] = { AVS_PLANAR_Y, AVS_PLANAR_U, + AVS_PLANAR_V, AVS_PLANAR_A }; + static const int avs_planes_rgba[4] = { AVS_PLANAR_G, AVS_PLANAR_B, + AVS_PLANAR_R, AVS_PLANAR_A }; + st->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; st->codecpar->codec_id = AV_CODEC_ID_RAWVIDEO; st->codecpar->width = avs->vi->width;