mirror of https://git.ffmpeg.org/ffmpeg.git
avformat/hlsenc: Emulate strftime("%z") using other functions if it does not work
This should fix the code on windows Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
76c28360b5
commit
6f062eb8d0
|
@ -537,7 +537,7 @@ static int hls_window(AVFormatContext *s, int last)
|
|||
avio_printf(out, "#EXT-X-BYTERANGE:%"PRIi64"@%"PRIi64"\n",
|
||||
en->size, en->pos);
|
||||
if (hls->flags & HLS_PROGRAM_DATE_TIME) {
|
||||
time_t tt;
|
||||
time_t tt, wrongsecs;
|
||||
int milli;
|
||||
struct tm *tm, tmpbuf;
|
||||
char buf0[128], buf1[128];
|
||||
|
@ -545,8 +545,18 @@ static int hls_window(AVFormatContext *s, int last)
|
|||
milli = av_clip(lrint(1000*(prog_date_time - tt)), 0, 999);
|
||||
tm = localtime_r(&tt, &tmpbuf);
|
||||
strftime(buf0, sizeof(buf0), "%Y-%m-%dT%H:%M:%S", tm);
|
||||
if (!strftime(buf1, sizeof(buf1), "%z", tm))
|
||||
av_strlcpy(buf1, "Z", sizeof(buf1));
|
||||
if (!strftime(buf1, sizeof(buf1), "%z", tm) || buf1[1]<'0' ||buf1[1]>'2') {
|
||||
int tz_min, dst = tm->tm_isdst;
|
||||
tm = gmtime_r(&tt, &tmpbuf);
|
||||
tm->tm_isdst = dst;
|
||||
wrongsecs = mktime(tm);
|
||||
tz_min = (abs(wrongsecs - tt) + 30) / 60;
|
||||
snprintf(buf1, sizeof(buf1),
|
||||
"%c%02d%02d",
|
||||
wrongsecs <= tt ? '+' : '-',
|
||||
tz_min / 60,
|
||||
tz_min % 60);
|
||||
}
|
||||
avio_printf(out, "#EXT-X-PROGRAM-DATE-TIME:%s.%03d%s\n", buf0, milli, buf1);
|
||||
prog_date_time += en->duration;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue