From patchwork Mon Feb 19 21:00:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bodecs Bela X-Patchwork-Id: 7664 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.150.33 with SMTP id c30csp1955821jai; Mon, 19 Feb 2018 13:00:35 -0800 (PST) X-Google-Smtp-Source: AH8x2252vQKe5nAOtpgjhiICPtkByMGnt3FadtCSyMnj4WyR68eSD/swnwGsUKTQz43vLvbOyCHQ X-Received: by 10.28.108.6 with SMTP id h6mr3558140wmc.6.1519074035585; Mon, 19 Feb 2018 13:00:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519074035; cv=none; d=google.com; s=arc-20160816; b=Pfqq+he79zRboI2talIsJ+D9N5ihIeuhm5Tf1b7asdp/HOgU0qMHHBVcR418vakR+O XpaQnwtEzRPN+zksGmHMrKQ7n8N6M1tiX+IdKCvToYCag28cIvOqcvVE90rnNCRcPg6C jRcIHBxPEaD1qKn6sJhlYXV502r2T+lyy6JFFmpXY+ASoe/nFz9OKZz3+guLl3hbcTbi bZJf5B4TIlZDMceAIyMrkmwN2Cw9TLfUocaYVwqqVcbyT94TJqRXj4NlzYnmyuNeCz++ RqcyOnvLRTwEkSg39WGLv+wyRDDz/n+w9t3v2wxpNs6tNPSZMiqW9azyV5o8Y5/8YPvj guJw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence:subject :content-language:mime-version:user-agent:date:message-id:from:to :delivered-to:arc-authentication-results; bh=Xio9qPzKiP6LfUwcq8hvqyeY+jcnFSZro62ucVaNYps=; b=l3S1IPbHNzphWw3go0DrXNR41tZkp4VOK8yJX19wAoTyhAUHIKdZF2QdPxUR4U/Et4 ntrpWeFcMc+Kdi/gkqEYcojSiZIj6X04EEB5pATryDc0/28/wTwN0mqVzzte57USO/Pv B8uBruKc7coWoVcD5H3GBqMsUEvMLsrA4xktZDo1Li86srrfKsBiGRVVn9bT/fMW0nqJ TqAW/EihpvO0KmjoKP/f31awkv+KuEPSoGa1cpBr4dcW6a1ZpWzr37/jHo1PgHoO1fT5 wm8FIP1w8wxjTsWctOTaI15UWcwSC3KLHxNgBjBKsH/N1e71PW+KKDbzIEs5v86HwyJ/ zoqw== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s12si10935442wrg.395.2018.02.19.13.00.33; Mon, 19 Feb 2018 13:00:35 -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; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E1EE2689C4C; Mon, 19 Feb 2018 23:00:30 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-xsmtp1.externet.hu (mail-xsmtp4.externet.hu [212.40.96.155]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 81B366898CE for ; Mon, 19 Feb 2018 23:00:24 +0200 (EET) Received: (qmail 27564 invoked from network); 19 Feb 2018 21:00:24 -0000 Received: from pool-013a6.externet.hu (HELO ?192.168.0.18?) (bodecsb@vivanet.hu@212.40.115.165) by 0 with ESMTPA; 19 Feb 2018 21:00:24 -0000 To: FFmpeg development discussions and patches From: Bodecs Bela Message-ID: Date: Mon, 19 Feb 2018 22:00:26 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 Content-Language: hu Subject: [FFmpeg-devel] [PATCH] hlsenc: Fixing HLS_TEMP_FILE usage with, HLS_SECOND_LEVEL_SEGMENT_... flags 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Dear All, Currently using HLS_TEMP together with HLS_SECOND_LEVEL_SEGMENT_DURATION and/or HLS_SECOND_LEVEL_SEGMENT_SIZE gives error at end of each segment writing and the final segment file names do not contain the desired data. This patch fixes this bug by delaying the initilization of original segment filename until end of actual temp file renaming. This will skip the interfering. Please review this bug fix. Thank you in advance. best regards, Bela Bodecs From 10c4e5f193a6f9b35d50f1af5a6e8ae7ea114eca Mon Sep 17 00:00:00 2001 From: Bela Bodecs Date: Mon, 19 Feb 2018 21:36:25 +0100 Subject: [PATCH] hlsenc: Fixing HLS_TEMP_FILE usage with HLS_SECOND_LEVEL_SEGMENT_... Currently using HLS_TEMP together with HLS_SECOND_LEVEL_SEGMENT_DURATION or HLS_SECOND_LEVEL_SEGMENT_SIZE gives error at end of each segment writing and the final segment file names do not contain the desired data. This patch fixes this bug by delaying the initilization of original segment filename after actual temp file renaming will skip the interfering. Signed-off-by: Bela Bodecs --- libavformat/hlsenc.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index cc13c94..ff06473 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -2168,13 +2168,9 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) if (vs->packets_written && can_split && av_compare_ts(pkt->pts - vs->start_pts, st->time_base, end_pts, AV_TIME_BASE_Q) >= 0) { int64_t new_start_pos; - char *old_filename = av_strdup(vs->avf->url); + char *old_filename = NULL; int byterange_mode = (hls->flags & HLS_SINGLE_FILE) || (hls->max_seg_size > 0); - if (!old_filename) { - return AVERROR(ENOMEM); - } - av_write_frame(vs->avf, NULL); /* Flush any buffered data */ new_start_pos = avio_tell(vs->avf->pb); @@ -2215,17 +2211,21 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) if (ret < 0) { av_log(NULL, AV_LOG_ERROR, "Failed to open file '%s'\n", vs->avf->url); - av_free(old_filename); return ret; } write_styp(vs->out); ret = flush_dynbuf(vs, &range_length); if (ret < 0) { - av_free(old_filename); return ret; } ff_format_io_close(s, &vs->out); } + + old_filename = av_strdup(vs->avf->url); + if (!old_filename) { + return AVERROR(ENOMEM); + } + ret = hls_append_segment(s, hls, vs, vs->duration, vs->start_pos, vs->size); vs->start_pos = new_start_pos; if (ret < 0) { @@ -2316,6 +2316,12 @@ failed: if ((hls->flags & HLS_TEMP_FILE) && oc->url[0]) { hls_rename_temp_file(s, oc); + av_free(old_filename); + old_filename = av_strdup(vs->avf->url); + + if (!old_filename) { + return AVERROR(ENOMEM); + } } /* after av_write_trailer, then duration + 1 duration per packet */