On Fri, 14 May 2021, Anton Khirnov wrote:
Quoting Marton Balint (2021-05-12 20:55:45)
Take into account timezone. Use millisecond precision. Maybe we could also use
nanosecond, but there were some float rounding concerns.
Signed-off-by: Marton Balint <c...@passwd.hu>
---
libavformat/flvdec.c | 13 ++-----------
tests/ref/fate/flv-demux | 2 +-
2 files changed, 3 insertions(+), 12 deletions(-)
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index ddaceaafe4..3791687072 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -28,6 +28,7 @@
#include "libavutil/channel_layout.h"
#include "libavutil/dict.h"
#include "libavutil/opt.h"
+#include "libavutil/internal.h"
#include "libavutil/intfloat.h"
#include "libavutil/mathematics.h"
#include "libavutil/time_internal.h"
@@ -682,17 +683,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream
*astream,
} else if (amf_type == AMF_DATA_TYPE_STRING) {
av_dict_set(&s->metadata, key, str_val, 0);
} else if (amf_type == AMF_DATA_TYPE_DATE) {
- time_t time;
- struct tm t;
- char datestr[128];
- time = date.milliseconds / 1000; // to seconds
- gmtime_r(&time, &t);
-
- // timezone is ignored, since there is no easy way to offset the
UTC
- // timestamp into the specified timezone
- strftime(datestr, sizeof(datestr), "%Y-%m-%dT%H:%M:%SZ", &t);
-
- av_dict_set(&s->metadata, key, datestr, 0);
+ avpriv_dict_set_timestamp(&s->metadata, key, -date.timezone *
60000000LL + 1000 * (int64_t)date.milliseconds);
This is wrong -- date.milliseconds is in UTC, if you add the timezone
offset it will no longer be in UTC.
Indeed, I misunderstood the specs... MediaInfo also ignores the time zone.
Will send a v2.
Thanks,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".