[vlc-commits] access: bluray: enforce seamless timestamps between clips

Francois Cartegnie git at videolan.org
Tue Oct 30 18:12:42 CET 2018


vlc/vlc-3.0 | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Tue May  8 15:24:46 2018 +0200| [f97c70a9b38c0dae8803b16381b236330cdb2ab6] | committer: Francois Cartegnie

access: bluray: enforce seamless timestamps between clips

(cherry picked from commit 61a6647c1155a5ca2d1f4f47dddb1c32a693655e)

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=f97c70a9b38c0dae8803b16381b236330cdb2ab6
---

 modules/access/Makefile.am |  3 ++-
 modules/access/bluray.c    | 20 ++++++++++++++++++--
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/modules/access/Makefile.am b/modules/access/Makefile.am
index 507a8d9292..765ceec45f 100644
--- a/modules/access/Makefile.am
+++ b/modules/access/Makefile.am
@@ -233,7 +233,8 @@ endif
 access_LTLIBRARIES += $(LTLIBdvdnav)
 EXTRA_LTLIBRARIES += libdvdnav_plugin.la
 
-libdvdread_plugin_la_SOURCES = access/dvdread.c demux/mpeg/ps.h demux/mpeg/pes.h
+libdvdread_plugin_la_SOURCES = access/dvdread.c demux/mpeg/ps.h demux/mpeg/pes.h \
+                               demux/moving_avg.h demux/timestamps_filter.h
 libdvdread_plugin_la_CFLAGS = $(AM_CFLAGS) $(DVDREAD_CFLAGS)
 libdvdread_plugin_la_LIBADD = $(DVDREAD_LIBS)
 libdvdread_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(accessdir)'
diff --git a/modules/access/bluray.c b/modules/access/bluray.c
index 237e8f86eb..ab609d07dc 100644
--- a/modules/access/bluray.c
+++ b/modules/access/bluray.c
@@ -51,6 +51,9 @@
 #include <vlc_iso_lang.h>
 #include <vlc_fs.h>
 
+#include "../demux/mpeg/timestamps.h"
+#include "../demux/timestamps_filter.h"
+
 /* FIXME we should find a better way than including that */
 #include "../../src/text/iso-639_def.h"
 
@@ -182,6 +185,7 @@ struct  demux_sys_t
     es_out_id_t         *p_dummy_video;
 
     /* TS stream */
+    es_out_t            *p_tf_out;
     es_out_t            *p_out;
     bool                b_spu_enable;       /* enabled / disabled */
     vlc_demux_chained_t *p_parser;
@@ -908,7 +912,11 @@ static int blurayOpen(vlc_object_t *object)
         }
     }
 
-    p_sys->p_out = esOutNew(VLC_OBJECT(p_demux), p_demux->out, p_demux);
+    p_sys->p_tf_out = timestamps_filter_es_out_New(p_demux->out);
+    if(unlikely(!p_sys->p_tf_out))
+        goto error;
+
+    p_sys->p_out = esOutNew(VLC_OBJECT(p_demux), p_sys->p_tf_out, p_demux);
     if (unlikely(p_sys->p_out == NULL))
         goto error;
 
@@ -966,7 +974,11 @@ static void blurayClose(vlc_object_t *object)
 
     if (p_sys->p_parser)
         vlc_demux_chained_Delete(p_sys->p_parser);
-    es_out_Delete(p_sys->p_out);
+
+    if (p_sys->p_out != NULL)
+        es_out_Delete(p_sys->p_out);
+    if(p_sys->p_tf_out)
+        timestamps_filter_es_out_Delete(p_sys->p_tf_out);
 
     /* Titles */
     for (unsigned int i = 0; i < p_sys->i_title; i++)
@@ -1930,6 +1942,9 @@ static void blurayRestartParser(demux_t *p_demux, bool b_flush)
     if (p_sys->p_parser)
         vlc_demux_chained_Delete(p_sys->p_parser);
 
+    if(b_flush)
+        es_out_Control(p_sys->p_tf_out, ES_OUT_TF_FILTER_RESET);
+
     p_sys->p_parser = vlc_demux_chained_New(VLC_OBJECT(p_demux), "ts", p_sys->p_out);
     if (!p_sys->p_parser)
         msg_Err(p_demux, "Failed to create TS demuxer");
@@ -2513,6 +2528,7 @@ static void blurayHandleEvent(demux_t *p_demux, const BD_EVENT *e)
         p_sys->b_pl_playing = true;
         break;
     case BD_EVENT_PLAYITEM:
+        notifyDiscontinuityToParser(p_sys);
         blurayUpdateCurrentClip(p_demux, e->param);
         break;
     case BD_EVENT_CHAPTER:



More information about the vlc-commits mailing list