From patchwork Wed Apr 8 13:35:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 18781 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 6F655449D17 for ; Wed, 8 Apr 2020 16:36:21 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 587D068B7D7; Wed, 8 Apr 2020 16:36:21 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f65.google.com (mail-wr1-f65.google.com [209.85.221.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id E33A668B7D9 for ; Wed, 8 Apr 2020 16:36:13 +0300 (EEST) Received: by mail-wr1-f65.google.com with SMTP id 31so7875102wre.5 for ; Wed, 08 Apr 2020 06:36:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Asc1XDJbCbpH+ToKPrVnobKEmEFddknHefdCZxTR9fE=; b=C0/NqSIHZyUSIsRR81bFnbW97cNgMNz0NC+IZPJHL6nHHJKvMjNlAHYkWgAjrFnfkA hOXYihDRrpYunL99Ahb7X6pmGpfTHyAziQiA72Din75uiPpRD+IaeBMAIbewUq0xiIp6 rQL5XcBFsFIMH/ooLrflbLAJ2X2szNhXI97owa4xpq/XSxoU5qx7MfgkQM4MM5136VX0 gPWajtJQFMHKQ3m7bA4KffDcFlE/DW4sbrxA2R+fI/TjbYz+VLo500cO2AKlAqwda+Kn whm1HACdBKk7q+gtpOmBiIr4AxWcAsvkxZ0kgToF3ZPOIFhgAWYKbLYVeFZnm0SeeWIJ zJLA== 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:mime-version:content-transfer-encoding; bh=Asc1XDJbCbpH+ToKPrVnobKEmEFddknHefdCZxTR9fE=; b=H3ZJYvohdskxl7LlfQMFnlNIulTzFvHXMGXPD2nvDaIOSYeyoLMwEfPTLR9wbmZUXn yA6/i5a67N6tU9TZU3B7eEe5vbrCT4bIAIhproXc8Em4GNIiV2Khh2kEMbYGn3hpmkeT uqpJ4dTbDtmcXYXWsRzNoBsa3HyvshCuxhW0sYTdO8J5ISt463sLISMGbUga/O6Q5a2O p6Cc1ZsfD54cl7mFjftIBuBW/R5QuqscV1oCUq6DPb1D2Ckha3pDJ9uVsMPO34zG6/hZ BE3nMGSjm2jp1Il0561KNn6FjvXbqPCn7QWh2pAH2gS+IFk3UDiy/0IMbvQPJm3VMbkB k7zg== X-Gm-Message-State: AGi0PubF/1UawiivGXb3HgAPPts7yac7/zPSMEzA4bbm1a4FasDlr7xQ rCCWavxuP9g1cpPrv2DwwgUAiD0S X-Google-Smtp-Source: APiQypJpWrpIkpsLCJW0bggRw+hSTI+6ZZyobEDOupSdYreVMcwZa6Q7wRppOIwMnYlN6sjZ8lsFvA== X-Received: by 2002:adf:f78a:: with SMTP id q10mr9004829wrp.132.1586352973021; Wed, 08 Apr 2020 06:36:13 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id 106sm26290270wrc.46.2020.04.08.06.36.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Apr 2020 06:36:12 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 8 Apr 2020 15:35:44 +0200 Message-Id: <20200408133544.18933-3-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200408133544.18933-1-andreas.rheinhardt@gmail.com> References: <20200408133544.18933-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/3] avformat/hlsenc: Factor out deleting files from deleting segments 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: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Removes code duplication. Signed-off-by: Andreas Rheinhardt --- This will make hls_delete_old_segments() return 1 when io_open fails and IO errors are ignored, but the only caller of hls_delete_old_segments() (namely hls_append_segment()) doesn't care. libavformat/hlsenc.c | 52 ++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 28 deletions(-) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index d7562ad20c..79d1559699 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -483,6 +483,26 @@ static void reflush_dynbuf(VariantStream *vs, int *range_length) #define SEPARATOR '/' #endif +static int hls_delete_file(HLSContext *hls, AVFormatContext *avf, + const char *path, const char *proto) +{ + if (hls->method || (proto && !av_strcasecmp(proto, "http"))) { + AVDictionary *opt = NULL; + AVIOContext *out = NULL; + int ret; + av_dict_set(&opt, "method", "DELETE", 0); + ret = avf->io_open(avf, &out, path, AVIO_FLAG_WRITE, &opt); + av_dict_free(&opt); + if (ret < 0) + return hls->ignore_io_errors ? 1 : ret; + ff_format_io_close(avf, &out); + } else if (unlink(path) < 0) { + av_log(hls, AV_LOG_ERROR, "failed to delete old segment %s: %s\n", + path, strerror(errno)); + } + return 0; +} + static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls, VariantStream *vs) { @@ -497,8 +517,6 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls, char *dirname_repl = NULL; char *vtt_dirname = NULL; char *vtt_dirname_r = NULL; - AVDictionary *options = NULL; - AVIOContext *out = NULL; const char *proto = NULL; av_bprint_init(&path, 0, AV_BPRINT_SIZE_UNLIMITED); @@ -562,19 +580,8 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls, } proto = avio_find_protocol_name(s->url); - if (hls->method || (proto && !av_strcasecmp(proto, "http"))) { - av_dict_set(&options, "method", "DELETE", 0); - if ((ret = vs->avf->io_open(vs->avf, &out, path.str, - AVIO_FLAG_WRITE, &options)) < 0) { - if (hls->ignore_io_errors) - ret = 0; - goto fail; - } - ff_format_io_close(vs->avf, &out); - } else if (unlink(path.str) < 0) { - av_log(hls, AV_LOG_ERROR, "failed to delete old segment %s: %s\n", - path.str, strerror(errno)); - } + if (ret = hls_delete_file(hls, vs->avf, path.str, proto)) + goto fail; if ((segment->sub_filename[0] != '\0')) { vtt_dirname_r = av_strdup(vs->vtt_avf->url); @@ -590,19 +597,8 @@ static int hls_delete_old_segments(AVFormatContext *s, HLSContext *hls, goto fail; } - if (hls->method || (proto && !av_strcasecmp(proto, "http"))) { - av_dict_set(&options, "method", "DELETE", 0); - if ((ret = vs->vtt_avf->io_open(vs->vtt_avf, &out, path.str, - AVIO_FLAG_WRITE, &options)) < 0) { - if (hls->ignore_io_errors) - ret = 0; - goto fail; - } - ff_format_io_close(vs->vtt_avf, &out); - } else if (unlink(path.str) < 0) { - av_log(hls, AV_LOG_ERROR, "failed to delete old segment %s: %s\n", - path.str, strerror(errno)); - } + if (ret = hls_delete_file(hls, vs->vtt_avf, path.str, proto)) + goto fail; } av_bprint_clear(&path); previous_segment = segment;