[vlc-devel] [PATCH 4/5] vout_subpictures: compare against single order

Francois Cartegnie fcvlcdev at free.fr
Fri Jan 3 15:15:52 CET 2020


only ephemer spu needs to be cleared by higher order spu.
stop values (non ephemer) must also be used to clear ephemers
from the same channel
---
 src/video_output/vout_subpictures.c | 11 ++++-------
 1 file changed, 4 insertions(+), 7 deletions(-)

diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index 1092b17593..71dc5e6648 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -677,8 +677,7 @@ spu_SelectSubpictures(spu_t *spu, vlc_tick_t system_now,
         vlc_tick_t   start_date = render_subtitle_date;
         vlc_tick_t   ephemer_subtitle_date = 0;
         vlc_tick_t   ephemer_osd_date = 0;
-        int64_t      ephemer_subtitle_order = INT64_MIN;
-        int64_t      ephemer_system_order = INT64_MIN;
+        int64_t      selected_max_order = INT64_MIN;
 
         if (spu_channel_UpdateDates(channel, system_now) == 0)
             continue;
@@ -696,11 +695,10 @@ spu_SelectSubpictures(spu_t *spu, vlc_tick_t system_now,
             const vlc_tick_t render_date = current->b_subtitle ? render_subtitle_date : system_now;
 
             vlc_tick_t *date_ptr  = current->b_subtitle ? &ephemer_subtitle_date  : &ephemer_osd_date;
-            int64_t *ephemer_order_ptr = current->b_subtitle ? &ephemer_subtitle_order : &ephemer_system_order;
             if (current->i_start >= *date_ptr) {
                 *date_ptr = render_entry->start;
-                if (current->i_order > *ephemer_order_ptr)
-                    *ephemer_order_ptr = current->i_order;
+                if (current->i_order > selected_max_order)
+                    selected_max_order = current->i_order;
             }
 
             /* If the spu is ephemer, the stop time is invalid, but it has been converted to
@@ -737,7 +735,6 @@ spu_SelectSubpictures(spu_t *spu, vlc_tick_t system_now,
 
             const vlc_tick_t stop_date = current->b_subtitle ? __MAX(start_date, sys->last_sort_date) : system_now;
             const vlc_tick_t ephemer_date  = current->b_subtitle ? ephemer_subtitle_date  : ephemer_osd_date;
-            const int64_t ephemer_order = current->b_subtitle ? ephemer_subtitle_order : ephemer_system_order;
 
             /* Destroy late and obsolete ephemer subpictures */
             bool is_rejeted = is_late && render_entry->stop  <= stop_date;
@@ -745,7 +742,7 @@ spu_SelectSubpictures(spu_t *spu, vlc_tick_t system_now,
                 if (render_entry->start < ephemer_date)
                     is_rejeted = true;
                 else if (render_entry->start == ephemer_date &&
-                         current->i_order < ephemer_order)
+                         current->i_order < selected_max_order)
                     is_rejeted = true;
             }
 
-- 
2.21.0



More information about the vlc-devel mailing list