From patchwork Thu Dec 26 10:53:39 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 16977 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 49FDD44A9C8 for ; Thu, 26 Dec 2019 13:01:28 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2D17068AC23; Thu, 26 Dec 2019 13:01:28 +0200 (EET) 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 13D7768A248 for ; Thu, 26 Dec 2019 13:01:22 +0200 (EET) Received: by mail-wr1-f65.google.com with SMTP id c14so23358931wrn.7 for ; Thu, 26 Dec 2019 03:01:22 -0800 (PST) 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=ZFZC84Bb9Mc6YEpJQE7Mh0JGs70Ul2F/L6yw5m4iLZc=; b=Jouwxq7ONR21FXzJQCRB0g5IbWyGSSTBHeDEk+Cr2WpnaY0JXaGb7NC1on4/DTC3KW 3NR1iSuER5eCb0k96Qjtt7TUZIlQxpO0wTN0Lpj7d+cWmcyM+HNgmmppsBzHq0K6Jsjp EhA1dQ0E1jAybPqDbZJSvF2vTrf+txS3q5nosWA6nbtxswOKlTtJYyxUORX+mzx+vTxA 79pm0E1ILEsdRdM4n4leDANPcINNTnSGzTq6p21jbs4XyWe623bL0XE98Ck9GEm1/wsM sOFPOJIiabItXYPmfR7rdr3h5NmDmJ/Zj3VwYcLclj8tMm/ojT9a+abHwItds5+qhTT/ DBLg== 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=ZFZC84Bb9Mc6YEpJQE7Mh0JGs70Ul2F/L6yw5m4iLZc=; b=QMoc/dF+rG2uwDlnIPObjxqKOImBQGUZbKi819bahQ/njJtOTajnJESJsxcletDOZc S/FCIcsjEIMIJAPAJY+NsD20ukYRVYagSvh3CIHMTqMdkkhWe3yc2psT+SJWZXjul8sG og0lITAQXrwCO2BQlPNq94KNYnzXJck9mSFh5wsY2dczYMCDSHuF/4VeTJwx4Dzp5/gD 3mj0d2ic0LmJ5370FEQPCgE+zICxOCuVjchG3UmvtcuxxrdL58y0Kvomc4H+7iYBL0FB dmYjHYHYzdKXfKO4Wwfdz5qdcht8xnhO7SBiKpGydeysThCiWeKCthIrYFsJUdVGn5lh 0J4Q== X-Gm-Message-State: APjAAAV9zF1wiHEug2siCIwCRynKnXsi4nZAdtc1RqmKd6YrMooUK65r qvcOuT0EmUU8ZpS4XyBh/pFM+POF X-Google-Smtp-Source: APXvYqySYs4cjqdSRUpm5JODmDYKHEDi9z1ELSqX240dARN+pQDjBRikE9ENz06JNJmCYr61nwK4Eg== X-Received: by 2002:a5d:6390:: with SMTP id p16mr4925865wru.170.1577357663055; Thu, 26 Dec 2019 02:54:23 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc10203.dynamic.kabel-deutschland.de. [188.193.2.3]) by smtp.gmail.com with ESMTPSA id c68sm7997618wme.13.2019.12.26.02.54.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 26 Dec 2019 02:54:22 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Thu, 26 Dec 2019 11:53:39 +0100 Message-Id: <20191226105342.11175-14-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191226105342.11175-1-andreas.rheinhardt@gmail.com> References: <20191226105342.11175-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 14/17] avformat/hdsenc: Add explicit deinit function 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" hdsenc already had an explicit function to free all allocations in case of an error, but it was not marked as deinit function, so that it was not called automatically when the AVFormatContext for muxing gets freed. Using an explicit deinit function also makes the code cleaner by allowing to return immediately without "goto fail". Signed-off-by: Andreas Rheinhardt --- Unchanged since last time. libavformat/hdsenc.c | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/libavformat/hdsenc.c b/libavformat/hdsenc.c index 46f0026bce..353a45f6df 100644 --- a/libavformat/hdsenc.c +++ b/libavformat/hdsenc.c @@ -317,21 +317,18 @@ static int hds_write_header(AVFormatContext *s) ff_const59 AVOutputFormat *oformat; if (mkdir(s->url, 0777) == -1 && errno != EEXIST) { - ret = AVERROR(errno); av_log(s, AV_LOG_ERROR , "Failed to create directory %s\n", s->url); - goto fail; + return AVERROR(errno); } oformat = av_guess_format("flv", NULL, NULL); if (!oformat) { - ret = AVERROR_MUXER_NOT_FOUND; - goto fail; + return AVERROR_MUXER_NOT_FOUND; } c->streams = av_mallocz_array(s->nb_streams, sizeof(*c->streams)); if (!c->streams) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } for (i = 0; i < s->nb_streams; i++) { @@ -341,8 +338,7 @@ static int hds_write_header(AVFormatContext *s) if (!st->codecpar->bit_rate) { av_log(s, AV_LOG_ERROR, "No bit rate set for stream %d\n", i); - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { if (os->has_video) { @@ -358,8 +354,7 @@ static int hds_write_header(AVFormatContext *s) os->has_audio = 1; } else { av_log(s, AV_LOG_ERROR, "Unsupported stream type in stream %d\n", i); - ret = AVERROR(EINVAL); - goto fail; + return AVERROR(EINVAL); } os->bitrate += s->streams[i]->codecpar->bit_rate; @@ -367,8 +362,7 @@ static int hds_write_header(AVFormatContext *s) os->first_stream = i; ctx = avformat_alloc_context(); if (!ctx) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } os->ctx = ctx; ctx->oformat = oformat; @@ -379,8 +373,7 @@ static int hds_write_header(AVFormatContext *s) AVIO_FLAG_WRITE, os, NULL, hds_write, NULL); if (!ctx->pb) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } } else { ctx = os->ctx; @@ -388,8 +381,7 @@ static int hds_write_header(AVFormatContext *s) s->streams[i]->id = c->nb_streams; if (!(st = avformat_new_stream(ctx, NULL))) { - ret = AVERROR(ENOMEM); - goto fail; + return AVERROR(ENOMEM); } avcodec_parameters_copy(st->codecpar, s->streams[i]->codecpar); st->codecpar->codec_tag = 0; @@ -403,7 +395,7 @@ static int hds_write_header(AVFormatContext *s) OutputStream *os = &c->streams[i]; int j; if ((ret = avformat_write_header(os->ctx, NULL)) < 0) { - goto fail; + return ret; } os->ctx_inited = 1; avio_flush(os->ctx->pb); @@ -414,7 +406,7 @@ static int hds_write_header(AVFormatContext *s) "%s/stream%d_temp", s->url, i); ret = init_file(s, os, 0); if (ret < 0) - goto fail; + return ret; if (!os->has_video && c->min_frag_duration <= 0) { av_log(s, AV_LOG_WARNING, @@ -425,9 +417,6 @@ static int hds_write_header(AVFormatContext *s) } ret = write_manifest(s, 0); -fail: - if (ret) - hds_free(s); return ret; } @@ -557,7 +546,6 @@ static int hds_write_trailer(AVFormatContext *s) rmdir(s->url); } - hds_free(s); return 0; } @@ -588,5 +576,6 @@ AVOutputFormat ff_hds_muxer = { .write_header = hds_write_header, .write_packet = hds_write_packet, .write_trailer = hds_write_trailer, + .deinit = hds_free, .priv_class = &hds_class, };