Commit 001d668d authored by Anton Khirnov's avatar Anton Khirnov

lavf: factor out conversion of ISO8601 string to unix time

parent b21e6b70
...@@ -343,11 +343,8 @@ static DVMuxContext* dv_init_mux(AVFormatContext* s) ...@@ -343,11 +343,8 @@ static DVMuxContext* dv_init_mux(AVFormatContext* s)
c->start_time = s->timestamp; c->start_time = s->timestamp;
else else
#endif #endif
if (t = av_dict_get(s->metadata, "creation_time", NULL, 0)) { if (t = av_dict_get(s->metadata, "creation_time", NULL, 0))
struct tm time = {0}; c->start_time = ff_iso8601_to_unix_time(t->value);
strptime(t->value, "%Y - %m - %dT%T", &time);
c->start_time = mktime(&time);
}
for (i=0; i < c->n_ast; i++) { for (i=0; i < c->n_ast; i++) {
if (c->ast[i] && !(c->audio_data[i]=av_fifo_alloc(100*AVCODEC_MAX_AUDIO_FRAME_SIZE))) { if (c->ast[i] && !(c->audio_data[i]=av_fifo_alloc(100*AVCODEC_MAX_AUDIO_FRAME_SIZE))) {
......
...@@ -402,12 +402,8 @@ static int gxf_write_umf_material_description(AVFormatContext *s) ...@@ -402,12 +402,8 @@ static int gxf_write_umf_material_description(AVFormatContext *s)
timestamp = s->timestamp; timestamp = s->timestamp;
else else
#endif #endif
if (t = av_dict_get(s->metadata, "creation_time", NULL, 0)) { if (t = av_dict_get(s->metadata, "creation_time", NULL, 0))
struct tm time = {0}; timestamp = ff_iso8601_to_unix_time(t->value);
strptime(t->value, "%Y - %m - %dT%T", &time);
timestamp = mktime(&time);
}
// XXX drop frame // XXX drop frame
uint32_t timecode = uint32_t timecode =
......
...@@ -248,4 +248,9 @@ void ff_make_absolute_url(char *buf, int size, const char *base, ...@@ -248,4 +248,9 @@ void ff_make_absolute_url(char *buf, int size, const char *base,
enum CodecID ff_guess_image2_codec(const char *filename); enum CodecID ff_guess_image2_codec(const char *filename);
/**
* Convert a date string in ISO8601 format to Unix timestamp.
*/
int64_t ff_iso8601_to_unix_time(const char *datestr);
#endif /* AVFORMAT_INTERNAL_H */ #endif /* AVFORMAT_INTERNAL_H */
...@@ -2266,11 +2266,8 @@ static int mov_write_header(AVFormatContext *s) ...@@ -2266,11 +2266,8 @@ static int mov_write_header(AVFormatContext *s)
mov->time = s->timestamp; mov->time = s->timestamp;
else else
#endif #endif
if (t = av_dict_get(s->metadata, "creation_time", NULL, 0)) { if (t = av_dict_get(s->metadata, "creation_time", NULL, 0))
struct tm time = {0}; mov->time = ff_iso8601_to_unix_time(t->value);
strptime(t->value, "%Y - %m - %dT%T", &time);
mov->time = mktime(&time);
}
mov->time += 0x7C25B080; //1970 based -> 1904 based mov->time += 0x7C25B080; //1970 based -> 1904 based
if (mov->chapter_track) if (mov->chapter_track)
......
...@@ -1519,11 +1519,8 @@ static int mxf_write_header(AVFormatContext *s) ...@@ -1519,11 +1519,8 @@ static int mxf_write_header(AVFormatContext *s)
timestamp = s->timestamp; timestamp = s->timestamp;
else else
#endif #endif
if (t = av_dict_get(s->metadata, "creation_time", NULL, 0)) { if (t = av_dict_get(s->metadata, "creation_time", NULL, 0))
struct tm time = {0}; timestamp = ff_iso8601_to_unix_time(t->value);
strptime(t->value, "%Y - %m - %dT%T", &time);
timestamp = mktime(&time);
}
if (timestamp) if (timestamp)
mxf->timestamp = mxf_parse_timestamp(timestamp); mxf->timestamp = mxf_parse_timestamp(timestamp);
mxf->duration = -1; mxf->duration = -1;
......
...@@ -3884,3 +3884,10 @@ void ff_make_absolute_url(char *buf, int size, const char *base, ...@@ -3884,3 +3884,10 @@ void ff_make_absolute_url(char *buf, int size, const char *base,
} }
av_strlcat(buf, rel, size); av_strlcat(buf, rel, size);
} }
int64_t ff_iso8601_to_unix_time(const char *datestr)
{
struct tm time = {0};
strptime(datestr, "%Y - %m - %dT%T", &time);
return mktime(&time);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment