[vlc-commits] [Git][videolan/vlc][3.0.x] 3 commits: bluray: use common MPEG timestamps macros

Steve Lhomme (@robUx4) gitlab at videolan.org
Thu Aug 21 10:19:26 UTC 2025



Steve Lhomme pushed to branch 3.0.x at VideoLAN / VLC


Commits:
aa5acb36 by Steve Lhomme at 2025-08-21T09:49:16+00:00
bluray: use common MPEG timestamps macros

(cherry picked from commit 8da763f888b3b17b2f3dd596b5fbae3bae3ed3a0) (edited)
edited:
- timestamps.h was already included in f97c70a9b38c0dae8803b16381b236330cdb2ab6

- - - - -
4294c905 by Steve Lhomme at 2025-08-21T09:49:16+00:00
demux:mpeg: make sure FROM_SCALE_NZ() returns a vlc_tick_t

(cherry picked from commit c58f46eec96045389f20e4b9bea79d47974b9cc3)

- - - - -
32028657 by Steve Lhomme at 2025-08-21T09:49:16+00:00
demux: mpeg: cast to vlc_tick_t early

So we can pass smaller type and not overflow.

(cherry picked from commit 031b57d6ad2275f8fa2e35d3fbbed918745830c3)

- - - - -


3 changed files:

- modules/access/Makefile.am
- modules/access/bluray.c
- modules/demux/mpeg/timestamps.h


Changes:

=====================================
modules/access/Makefile.am
=====================================
@@ -252,7 +252,7 @@ endif
 access_LTLIBRARIES += $(LTLIBdvdread)
 EXTRA_LTLIBRARIES += libdvdread_plugin.la
 
-liblibbluray_plugin_la_SOURCES = access/bluray.c
+liblibbluray_plugin_la_SOURCES = access/bluray.c demux/mpeg/timestamps.h
 liblibbluray_plugin_la_CFLAGS = $(AM_CFLAGS) $(BLURAY_CFLAGS)
 liblibbluray_plugin_la_LIBADD = $(BLURAY_LIBS)
 liblibbluray_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(accessdir)'


=====================================
modules/access/bluray.c
=====================================
@@ -391,8 +391,6 @@ static int   onIntfEvent(vlc_object_t *, char const *,
 static void  blurayRestartParser(demux_t *p_demux, bool, bool);
 static void  notifyDiscontinuityToParser( demux_sys_t *p_sys );
 
-#define FROM_TICKS(a) ((a)*CLOCK_FREQ / INT64_C(90000))
-#define TO_TICKS(a)   ((a)*INT64_C(90000)/CLOCK_FREQ)
 
 #define STILL_IMAGE_NOT_SET    0
 #define STILL_IMAGE_INFINITE  -1
@@ -2067,7 +2065,7 @@ static bool blurayTitleIsRepeating(BLURAY_TITLE_INFO *title_info,
 
 static void blurayUpdateTitleInfo(input_title_t *t, BLURAY_TITLE_INFO *title_info)
 {
-    t->i_length = FROM_TICKS(title_info->duration);
+    t->i_length = FROM_SCALE_NZ(title_info->duration);
 
     for (int i = 0; i < t->i_seekpoint; i++)
         vlc_seekpoint_Delete( t->seekpoint[i] );
@@ -2082,7 +2080,7 @@ static void blurayUpdateTitleInfo(input_title_t *t, BLURAY_TITLE_INFO *title_inf
         if (!s) {
             break;
         }
-        s->i_time_offset = FROM_TICKS(title_info->chapters[j].start);
+        s->i_time_offset = FROM_SCALE_NZ(title_info->chapters[j].start);
 
         TAB_APPEND(t->i_seekpoint, t->seekpoint, s);
     }
@@ -2371,7 +2369,7 @@ static int blurayControl(demux_t *p_demux, int query, va_list args)
     case DEMUX_SET_TIME:
     {
         int64_t i_time = va_arg(args, int64_t);
-        bd_seek_time(p_sys->bluray, TO_TICKS(i_time));
+        bd_seek_time(p_sys->bluray, TO_SCALE_NZ(i_time));
         blurayRestartParser(p_demux, true, true);
         notifyDiscontinuityToParser(p_sys);
         p_sys->b_draining = false;
@@ -2384,7 +2382,7 @@ static int blurayControl(demux_t *p_demux, int query, va_list args)
         if( p_demux->info.i_title < (int) p_sys->i_title &&
            (CURRENT_TITLE->i_flags & INPUT_TITLE_INTERACTIVE))
                 return VLC_EGENERIC;
-        *pi_time = (int64_t)FROM_TICKS(bd_tell_time(p_sys->bluray));
+        *pi_time = FROM_SCALE_NZ(bd_tell_time(p_sys->bluray));
         return VLC_SUCCESS;
     }
 
@@ -2395,13 +2393,13 @@ static int blurayControl(demux_t *p_demux, int query, va_list args)
            (CURRENT_TITLE->i_flags & INPUT_TITLE_INTERACTIVE))
                 return VLC_EGENERIC;
         *pf_position = p_demux->info.i_title < (int) p_sys->i_title && CUR_LENGTH > 0 ?
-                      (double)FROM_TICKS(bd_tell_time(p_sys->bluray))/CUR_LENGTH : 0.0;
+                      (double)FROM_SCALE_NZ(bd_tell_time(p_sys->bluray))/CUR_LENGTH : 0.0;
         return VLC_SUCCESS;
     }
     case DEMUX_SET_POSITION:
     {
         double f_position = va_arg(args, double);
-        bd_seek_time(p_sys->bluray, TO_TICKS(f_position*CUR_LENGTH));
+        bd_seek_time(p_sys->bluray, TO_SCALE_NZ(f_position*CUR_LENGTH));
         blurayRestartParser(p_demux, true, true);
         notifyDiscontinuityToParser(p_sys);
         p_sys->b_draining = false;


=====================================
modules/demux/mpeg/timestamps.h
=====================================
@@ -19,7 +19,7 @@
 #ifndef VLC_MPEG_TIMESTAMPS_H
 #define VLC_MPEG_TIMESTAMPS_H
 
-#define FROM_SCALE_NZ(x) ((x) * 100 / 9)
+#define FROM_SCALE_NZ(x) (((vlc_tick_t)(x) * 100 / 9))
 #define TO_SCALE_NZ(x)   ((x) * 9 / 100)
 
 #define FROM_SCALE(x) (VLC_TICK_0 + FROM_SCALE_NZ(x))



View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/285ab70a5aba325f39f0adf4c8272a7fac7e98ca...32028657178123df1f148b9c508499adf066ab08

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/285ab70a5aba325f39f0adf4c8272a7fac7e98ca...32028657178123df1f148b9c508499adf066ab08
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list