diff mbox series

[FFmpeg-devel] Use existing function to parse time

Message ID 20231107003135.15169-1-davejohansen@gmail.com
State New
Headers show
Series [FFmpeg-devel] Use existing function to parse time | expand

Checks

Context Check Description
andriy/configure_x86 warning Failed to apply patch
yinshiyou/configure_loongarch64 warning Failed to apply patch

Commit Message

David Johansen Nov. 7, 2023, 12:31 a.m. UTC
---
 libavformat/hlsenc.c | 32 +++++++-------------------------
 1 file changed, 7 insertions(+), 25 deletions(-)
diff mbox series

Patch

diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index e1714d4eed..1baefe852f 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -35,6 +35,7 @@ 
 #include "libavutil/intreadwrite.h"
 #include "libavutil/opt.h"
 #include "libavutil/log.h"
+#include "libavutil/parseutils.h"
 #include "libavutil/random_seed.h"
 #include "libavutil/time.h"
 #include "libavutil/time_internal.h"
@@ -1251,27 +1252,6 @@  static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls,
     return 0;
 }
 
-static double parse_iso8601(const char *ptr) {
-    struct tm program_date_time;
-    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;
-    }
-
-    program_date_time.tm_year = y - 1900;
-    program_date_time.tm_mon = M - 1;
-    program_date_time.tm_mday = d;
-    program_date_time.tm_hour = h;
-    program_date_time.tm_min = m;
-    program_date_time.tm_sec = 0;
-    program_date_time.tm_isdst = -1;
-
-    return mktime(&program_date_time) + s;
-}
-
 static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs)
 {
     HLSContext *hls = s->priv_data;
@@ -1281,6 +1261,7 @@  static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs
     char line[MAX_URL_SIZE];
     const char *ptr;
     const char *end;
+    int64_t parsed_time;
     double discont_program_date_time = 0;
 
     if ((ret = ffio_open_whitelist(&in, url, AVIO_FLAG_READ,
@@ -1337,11 +1318,11 @@  static int parse_playlist(AVFormatContext *s, const char *url, VariantStream *vs
                 }
             }
         } else if (av_strstart(line, "#EXT-X-PROGRAM-DATE-TIME:", &ptr)) {
-            discont_program_date_time = parse_iso8601(ptr);
-            if (discont_program_date_time < 0) {
+            if (av_parse_time(&parsed_time, ptr, 0)) {
                 ret = AVERROR_INVALIDDATA;
                 goto fail;
             }
+            discont_program_date_time = parsed_time / 1000000.0;
         } else if (av_strstart(line, "#", NULL)) {
             continue;
         } else if (line[0]) {
@@ -2933,6 +2914,7 @@  static int hls_init(AVFormatContext *s)
     int i = 0;
     int j = 0;
     HLSContext *hls = s->priv_data;
+    int64_t parsed_time;
     const char *pattern;
     VariantStream *vs = NULL;
     const char *vtt_pattern = hls->flags & HLS_SINGLE_FILE ? ".vtt" : "%d.vtt";
@@ -2942,11 +2924,11 @@  static int hls_init(AVFormatContext *s)
     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) {
+        if (av_parse_time(&parsed_time, hls->init_program_date_time, 0)) {
             av_log(s, AV_LOG_ERROR, "Invalid init_program_date_time\n");
             return AVERROR(EINVAL);
         }
+        initial_program_date_time = parsed_time / 1000000.0;
     } else {
         initial_program_date_time = av_gettime() / 1000000.0;
     }