summaryrefslogtreecommitdiff
path: root/libavformat/mxfenc.c
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2018-12-22 20:02:09 +0100
committerMarton Balint <cus@passwd.hu>2018-12-25 20:16:29 +0100
commit70c86deb8efe0749ba2b2ddfb709ba1409195cb4 (patch)
tree98092a164b45657f4b71b040a5e12674d4a88412 /libavformat/mxfenc.c
parent02935c2c93e8e1691c1d903ef96b00b3facb454a (diff)
avformat/mxfenc: support writing subsecond precision timestamps
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavformat/mxfenc.c')
-rw-r--r--libavformat/mxfenc.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index 5e7bd212dc..032ee3bf3d 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -2332,8 +2332,9 @@ static int mxf_parse_mpeg2_frame(AVFormatContext *s, AVStream *st,
return !!sc->codec_ul;
}
-static uint64_t mxf_parse_timestamp(time_t timestamp)
+static uint64_t mxf_parse_timestamp(int64_t timestamp64)
{
+ time_t timestamp = timestamp64 / 1000000;
struct tm tmbuf;
struct tm *time = gmtime_r(&timestamp, &tmbuf);
if (!time)
@@ -2343,7 +2344,8 @@ static uint64_t mxf_parse_timestamp(time_t timestamp)
(uint64_t) time->tm_mday << 32 |
time->tm_hour << 24 |
time->tm_min << 16 |
- time->tm_sec << 8;
+ time->tm_sec << 8 |
+ (timestamp64 % 1000000) / 4000;
}
static void mxf_gen_umid(AVFormatContext *s)
@@ -2580,7 +2582,7 @@ static int mxf_write_header(AVFormatContext *s)
sc->order = AV_RB32(sc->track_essence_element_key+12);
}
- if (ff_parse_creation_time_metadata(s, &timestamp, 1) > 0)
+ if (ff_parse_creation_time_metadata(s, &timestamp, 0) > 0)
mxf->timestamp = mxf_parse_timestamp(timestamp);
mxf->duration = -1;