From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id DBDCF47E31 for ; Fri, 27 Oct 2023 21:29:10 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1C57B68CBB3; Sat, 28 Oct 2023 00:29:07 +0300 (EEST) Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 6B6B668CBA6 for ; Sat, 28 Oct 2023 00:29:01 +0300 (EEST) Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-1c434c33ec0so22052065ad.3 for ; Fri, 27 Oct 2023 14:29:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698442139; x=1699046939; 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=EaGko5udDqaNNfg8FV/Sq1G+h4mNy4hOJVRVd0nb11k=; b=asfacjT48fIh2+spQvupP0pe+3GhCPYs1F3Lx2iLBiCMO9YYnt3dp8mnFyOb8ZKL7x X6mBrnyl2/EQlnKpGVoy4m6pXSZPbHk8Fvt+l0Nyqz5A5x/nQb01QOGZak8jAVMzD5fY Qtp4FuhZSZSY5L7YR16XJ7k0sqAAgkq2Ro5gUAw8f5MkTKnGwc4tccGeHZmU4+CoF6rB R6C26QG+KbFN3BE5gYQodpmvFh9MHXA8ZqsHjbLeGJLjT71LUmDV1sTgctzyrPnMWOzO F6dBKUnJ03ZXCfi2b57ZEmblsRCs6uQnr8yv3TaszmQW0okB+W5CZeiB/7p3ROpQl/03 n4uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698442139; x=1699046939; 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=EaGko5udDqaNNfg8FV/Sq1G+h4mNy4hOJVRVd0nb11k=; b=ScYvxJnY0MJu009M4HrUaDm/u5fiU3AVFcgSOrqTzzEVhjk3Ajdzp/k/nwERqZLE+B LajgTDGjJtODxz1MJa0zIvWWXBAWapAQtfbGm/bDKYAcsOriyJw0UaIfNeObhorZDLST 0mKslUF4yLrE3AeyWQoMhocUk0mvxm3lPvbqtflow3RhXJc321Fk4ddd2wAtg5mytn/A GHrXzmmBW7HreW3Y/+NlpJOaynor/yqP9l7WU4jZ3UOmLdzhKd2PjV++kHU/om8MKKM7 6CApLaIIgKr3KLx5VOugynYAk1S7ssGcbHOsEP+Y9ZDBs7v38YmkQNV84v4z/FYRocD6 n07A== X-Gm-Message-State: AOJu0YwpiFoAQr18fR5SQPY/pb804bUzGlKy/O5sg+kQd+lcJlY8Iv3N 9CX8ffAQrPAcgZ7QBogv/5wUN41hCBjcdg== X-Google-Smtp-Source: AGHT+IGa43UwQ3zzPQnTRojqiHkjA2u/7VtcAndOPXkq0TBw4Lle8PONmv2MkKO56TzHa6/sKg6w6g== X-Received: by 2002:a17:902:e848:b0:1cc:fd9:428c with SMTP id t8-20020a170902e84800b001cc0fd9428cmr4398327plg.6.1698442138831; Fri, 27 Oct 2023 14:28:58 -0700 (PDT) Received: from localhost.localdomain ([2605:a601:a98f:6200:38e9:cf78:99f0:f758]) by smtp.gmail.com with ESMTPSA id y19-20020a170902ed5300b001c74876f032sm1328481plb.162.2023.10.27.14.28.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Oct 2023 14:28:57 -0700 (PDT) From: Dave Johansen To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Oct 2023 15:28:53 -0600 Message-Id: <20231027212853.47999-1-davejohansen@gmail.com> X-Mailer: git-send-email 2.39.2 (Apple Git-143) In-Reply-To: References: MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat/hlsenc: Handle when fractional seconds not set and error out when init_program_date_time can't be parsed 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: Dave Johansen Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: --- libavformat/hlsenc.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index f613e35984..e1714d4eed 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -1253,9 +1253,11 @@ static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls, static double parse_iso8601(const char *ptr) { struct tm program_date_time; - int y,M,d,h,m,s; - double ms; - if (sscanf(ptr, "%d-%d-%dT%d:%d:%d.%lf", &y, &M, &d, &h, &m, &s, &ms) != 7) { + int y,M,d,h,m; + double s; + int num_scanned = sscanf(ptr, "%d-%d-%dT%d:%d:%lf", &y, &M, &d, &h, &m, &s); + + if (num_scanned < 6) { return -1; } @@ -1264,10 +1266,10 @@ static double parse_iso8601(const char *ptr) { program_date_time.tm_mday = d; program_date_time.tm_hour = h; program_date_time.tm_min = m; - program_date_time.tm_sec = s; + program_date_time.tm_sec = 0; program_date_time.tm_isdst = -1; - return mktime(&program_date_time) + (double)(ms / 1000); + return mktime(&program_date_time) + s; } static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs) @@ -2937,7 +2939,17 @@ static int hls_init(AVFormatContext *s) char *p = NULL; int http_base_proto = ff_is_http_proto(s->url); int fmp4_init_filename_len = strlen(hls->fmp4_init_filename) + 1; - double initial_program_date_time = hls->init_program_date_time ? parse_iso8601(hls->init_program_date_time) : av_gettime() / 1000000.0; + double initial_program_date_time; + + if (hls->init_program_date_time) { + initial_program_date_time = parse_iso8601(hls->init_program_date_time); + if (initial_program_date_time < 0) { + av_log(s, AV_LOG_ERROR, "Invalid init_program_date_time\n"); + return AVERROR(EINVAL); + } + } else { + initial_program_date_time = av_gettime() / 1000000.0; + } if (hls->use_localtime) { pattern = get_default_pattern_localtime_fmt(s); @@ -3216,7 +3228,7 @@ static const AVOption options[] = { {"split_by_time", "split the hls segment by time which user set by hls_time", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SPLIT_BY_TIME }, 0, UINT_MAX, E, "flags"}, {"append_list", "append the new segments into old hls segment list", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_APPEND_LIST }, 0, UINT_MAX, E, "flags"}, {"program_date_time", "add EXT-X-PROGRAM-DATE-TIME", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_PROGRAM_DATE_TIME }, 0, UINT_MAX, E, "flags"}, - {"init_program_date_time", "Time to start program date time at", OFFSET(init_program_date_time), AV_OPT_TYPE_STRING, .flags = E}, + {"init_program_date_time", "Time to start program date time at (must be %Y-%m-%dT%H:%M:%S and timezone is ignored)", OFFSET(init_program_date_time), AV_OPT_TYPE_STRING, .flags = E}, {"second_level_segment_index", "include segment index in segment filenames when use_localtime", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SECOND_LEVEL_SEGMENT_INDEX }, 0, UINT_MAX, E, "flags"}, {"second_level_segment_duration", "include segment duration in segment filenames when use_localtime", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SECOND_LEVEL_SEGMENT_DURATION }, 0, UINT_MAX, E, "flags"}, {"second_level_segment_size", "include segment size in segment filenames when use_localtime", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SECOND_LEVEL_SEGMENT_SIZE }, 0, UINT_MAX, E, "flags"}, -- 2.39.2 (Apple Git-143) _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".