diff mbox

[FFmpeg-devel] Added support for unequal duration for VOD playlist

Message ID 20180420041750.9245-2-somsaks@gmail.com
State New
Headers show

Commit Message

Somsak Sriprayoonsakul April 20, 2018, 4:17 a.m. UTC
---
 libavformat/hlsenc.c | 30 ++++++++++++++++--------------
 1 file changed, 16 insertions(+), 14 deletions(-)
diff mbox

Patch

diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
index c27a66ea79..b6260b262d 100644
--- a/libavformat/hlsenc.c
+++ b/libavformat/hlsenc.c
@@ -1026,26 +1026,28 @@  static int hls_append_segment(struct AVFormatContext *s, HLSContext *hls,
 
     vs->last_segment = en;
 
-    // EVENT or VOD playlists imply sliding window cannot be used
-    if (hls->pl_type != PLAYLIST_TYPE_NONE)
+    // EVENT playlists imply sliding window cannot be used
+    if ( (hls->pl_type == PLAYLIST_TYPE_EVENT) || (hls->pl_type == PLAYLIST_TYPE_NB) )
         hls->max_nb_segments = 0;
 
     if (hls->max_nb_segments && vs->nb_entries >= hls->max_nb_segments) {
-        en = vs->segments;
-        vs->initial_prog_date_time += en->duration;
-        vs->segments = en->next;
-        if (en && hls->flags & HLS_DELETE_SEGMENTS &&
+        if( hls->pl_type != PLAYLIST_TYPE_VOD ) {
+            en = vs->segments;
+            vs->initial_prog_date_time += en->duration;
+            vs->segments = en->next;
+            if (en && hls->flags & HLS_DELETE_SEGMENTS &&
 #if FF_API_HLS_WRAP
-                !(hls->flags & HLS_SINGLE_FILE || hls->wrap)) {
+                    !(hls->flags & HLS_SINGLE_FILE || hls->wrap)) {
 #else
-                !(hls->flags & HLS_SINGLE_FILE)) {
+                    !(hls->flags & HLS_SINGLE_FILE)) {
 #endif
-            en->next = vs->old_segments;
-            vs->old_segments = en;
-            if ((ret = hls_delete_old_segments(s, hls, vs)) < 0)
-                return ret;
-        } else
-            av_free(en);
+                en->next = vs->old_segments;
+                vs->old_segments = en;
+                if ((ret = hls_delete_old_segments(s, hls, vs)) < 0)
+                    return ret;
+            } else
+                av_free(en);
+        }
     } else
         vs->nb_entries++;