[FFmpeg-devel] [PATCH 1/3] avformat/utils: function to get the formatted ntp time

vdixit at akamai.com vdixit at akamai.com
Tue Apr 24 12:16:56 EEST 2018


From: Vishwanath Dixit <vdixit at akamai.com>

This utility function creates 64-bit NTP time format as per the RFC
5905.
A simple explaination of 64-bit NTP time format is here
http://www.beaglesoft.com/Manual/page53.htm
---
 libavformat/internal.h |  8 ++++++++
 libavformat/utils.c    | 20 ++++++++++++++++++++
 2 files changed, 28 insertions(+)

diff --git a/libavformat/internal.h b/libavformat/internal.h
index 3582682..e9f758f 100644
--- a/libavformat/internal.h
+++ b/libavformat/internal.h
@@ -240,6 +240,14 @@ void ff_read_frame_flush(AVFormatContext *s);
 uint64_t ff_ntp_time(void);
 
 /**
+ * Get the NTP time stamp formatted as per the RFC-5905.
+ *
+ * @param ntp_time NTP time in micro seconds (since NTP epoch)
+ * @return the formatted NTP time stamp
+ */
+uint64_t ff_time_ntp_format(uint64_t ntp_time);
+
+/**
  * Append the media-specific SDP fragment for the media stream c
  * to the buffer buff.
  *
diff --git a/libavformat/utils.c b/libavformat/utils.c
index c25eab4..b59d426 100644
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -4637,6 +4637,26 @@ uint64_t ff_ntp_time(void)
     return (av_gettime() / 1000) * 1000 + NTP_OFFSET_US;
 }
 
+uint64_t ff_time_ntp_format(uint64_t ntp_time)
+{
+    uint64_t ntp_ts, frac_part;
+    uint32_t sec, usec;
+
+    //current ntp time in seconds and micro seconds
+    sec = ntp_time / 1000000;
+    usec = ntp_time % 1000000;
+
+    //encoding in ntp timestamp format
+    frac_part = usec * 0xFFFFFFFFULL;
+    frac_part /= 1000000;
+
+    ntp_ts = (uint64_t) sec;
+    ntp_ts <<= 32;
+    ntp_ts |= frac_part;
+
+    return ntp_ts;
+}
+
 int av_get_frame_filename2(char *buf, int buf_size, const char *path, int number, int flags)
 {
     const char *p;
-- 
1.9.1



More information about the ffmpeg-devel mailing list