2016.12.31. 14:19 keltezéssel, Steven Liu írta:
2016-12-31 19:16 GMT+08:00 Bodecs Bela <bode...@vivanet.hu>:
2016.12.31. 11:48 keltezéssel, Steven Liu írta:
2016-12-31 1:24 GMT+08:00 Bodecs Bela <bode...@vivanet.hu>:
2016.12.30. 18:11 keltezéssel, Moritz Barsnick írta:
On Fri, Dec 30, 2016 at 15:38:25 +0100, Bodecs Bela wrote:
is not available on all system/environment. This patch checks %s
availabilty at runtine and alter the default format string if
necessary.
You forgot to add the patch.
please, forgive me. I attached it now.
Moritz
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Bela
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
Signed-off-by: Bela Bodecs <bode...@vivanet.hu>
---
libavformat/hlsenc.c | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index c9d8e3c..76b85e8 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -829,13 +829,22 @@ fail:
return err;
}
+static const char * get_default_pattern_localtime_fmt(void)
+{
+ char b[21];
+ time_t t = time(NULL);
+ struct tm *p, tmbuf;
+ p = localtime_r(&t, &tmbuf);
+ return (strftime(b, sizeof(b), "%s", p) > 2) ? "-%s.ts" :
"-%Y%m%d%H%I%S.ts";
Why check strftime result bigger than 2,not 1 not 3?
I have faced different strftime behaviours on two different environments
where unknown specifier was in format string.
On one of them strftime returned 0, this was the expected return value by
me.
But on the other one, strftime returned 2 and put unknown specifier (%s)
as is into the result buffer.
So >2 will handle each cases. In normal behaviour, nowadays, length of
seconds string will be always longer than 2.
Should I put a comment about it into the code?
Maybe add a comment for the value 2 is better.
you are right. I have changed the testing line to be more self-explanatory.
I have attached the new patch.
+}
+
static int hls_write_header(AVFormatContext *s)
{
HLSContext *hls = s->priv_data;
int ret, i;
char *p;
const char *pattern = "%d.ts";
- const char *pattern_localtime_fmt = "-%s.ts";
+ const char *pattern_localtime_fmt =
get_default_pattern_localtime_fmt();
const char *vtt_pattern = "%d.vtt";
AVDictionary *options = NULL;
int basename_size;
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>From 5f1b673d9ee48139ebe5f3d26bae9c2195e92678 Mon Sep 17 00:00:00 2001
From: Bela Bodecs <bode...@vivanet.hu>
Date: Fri, 31 Dec 2016 17:54:39 +0100
Subject: [PATCH] libavformat/hlsenc: default segment name and
use_localtime
in hlcenc.c, in the hls_write_header() function the default format
string for strftime() function contains %s specifier when use_localtime
is true. This %s specifier will insert the seconds since EPOCH. But %s
is not available on all system/environment. This patch check %s
availabilty at runtine and alter the default format string if necessary.
Signed-off-by: Bela Bodecs <bode...@vivanet.hu>
---
libavformat/hlsenc.c | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index c9d8e3c..57fc9c1 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -829,13 +829,23 @@ fail:
return err;
}
+static const char * get_default_pattern_localtime_fmt(void)
+{
+ char b[21];
+ time_t t = time(NULL);
+ struct tm *p, tmbuf;
+ p = localtime_r(&t, &tmbuf);
+ // no %s support when strftime returned error or left format string unchanged
+ return (!strftime(b, sizeof(b), "%s", p) || !strcmp(b, "%s")) ? "-%Y%m%d%H%I%S.ts" : "-%s.ts";
+}
+
static int hls_write_header(AVFormatContext *s)
{
HLSContext *hls = s->priv_data;
int ret, i;
char *p;
const char *pattern = "%d.ts";
- const char *pattern_localtime_fmt = "-%s.ts";
+ const char *pattern_localtime_fmt = get_default_pattern_localtime_fmt();
const char *vtt_pattern = "%d.vtt";
AVDictionary *options = NULL;
int basename_size;
--
2.5.3.windows.1
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel