[FFmpeg-cvslog] avformat/hlsenc: Add hls flag for rounding m3u8 durations to whole numbers , problems with floats on some devices

MrBoogs git at videolan.org
Sun May 17 17:23:39 CEST 2015


ffmpeg | branch: master | MrBoogs <blendz at shaw.ca> | Tue Apr 21 15:46:17 2015 -0600| [8fd01b4a794c1e5fd3888256b816b30023a2d856] | committer: Michael Niedermayer

avformat/hlsenc: Add hls flag for rounding m3u8 durations to whole numbers, problems with floats on some devices

Reviewed-by: Thomas Volkert <silvo at gmx.net>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=8fd01b4a794c1e5fd3888256b816b30023a2d856
---

 libavformat/hlsenc.c |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index 7885351..dcb718a 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -50,6 +50,7 @@ typedef enum HLSFlags {
     // Generate a single media file and use byte ranges in the playlist.
     HLS_SINGLE_FILE = (1 << 0),
     HLS_DELETE_SEGMENTS = (1 << 1),
+    HLS_ROUND_DURATIONS = (1 << 2),
 } HLSFlags;
 
 typedef struct HLSContext {
@@ -274,7 +275,10 @@ static int hls_window(AVFormatContext *s, int last)
            sequence);
 
     for (en = hls->segments; en; en = en->next) {
-        avio_printf(out, "#EXTINF:%f,\n", en->duration);
+        if (hls->flags & HLS_ROUND_DURATIONS)
+            avio_printf(out, "#EXTINF:%d,\n",  (int)round(en->duration));
+        else
+            avio_printf(out, "#EXTINF:%f,\n", en->duration);
         if (hls->flags & HLS_SINGLE_FILE)
              avio_printf(out, "#EXT-X-BYTERANGE:%"PRIi64"@%"PRIi64"\n",
                          en->size, en->pos);
@@ -512,6 +516,8 @@ static const AVOption options[] = {
     {"hls_flags",     "set flags affecting HLS playlist and media file generation", OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0 }, 0, UINT_MAX, E, "flags"},
     {"single_file",   "generate a single media file indexed with byte ranges", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_SINGLE_FILE }, 0, UINT_MAX,   E, "flags"},
     {"delete_segments", "delete segment files that are no longer part of the playlist", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_DELETE_SEGMENTS }, 0, UINT_MAX,   E, "flags"},
+    {"round_durations", "round durations in m3u8 to whole numbers", 0, AV_OPT_TYPE_CONST, {.i64 = HLS_ROUND_DURATIONS }, 0, UINT_MAX,   E, "flags"},
+
 
     { NULL },
 };



More information about the ffmpeg-cvslog mailing list