[vlc-devel] [PATCH 05/18] vout: rework spu_Render()

Thomas Guillem thomas at gllm.fr
Thu Mar 7 15:25:27 CET 2019


Add rate (unused for now) and specify that render_osd_date is actually
vlc_tick_now().
---
 include/vlc_spu.h                    |  2 +-
 modules/stream_out/transcode/video.c |  4 ++--
 src/video_output/video_output.c      |  8 ++++----
 src/video_output/vout_subpictures.c  | 25 +++++++++++++------------
 4 files changed, 20 insertions(+), 19 deletions(-)

diff --git a/include/vlc_spu.h b/include/vlc_spu.h
index fef3d78799..3f5ef1ca48 100644
--- a/include/vlc_spu.h
+++ b/include/vlc_spu.h
@@ -74,7 +74,7 @@ VLC_API void spu_PutSubpicture( spu_t *, subpicture_t * );
  */
 VLC_API subpicture_t * spu_Render( spu_t *, const vlc_fourcc_t *p_chroma_list,
                                    const video_format_t *p_fmt_dst, const video_format_t *p_fmt_src,
-                                   vlc_tick_t render_subtitle_date, vlc_tick_t render_osd_date,
+                                   vlc_tick_t system_now, vlc_tick_t pts, float rate,
                                    bool ignore_osd, bool external_scale );
 
 /**
diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c
index 1a81722027..24556e1b2d 100644
--- a/modules/stream_out/transcode/video.c
+++ b/modules/stream_out/transcode/video.c
@@ -384,8 +384,8 @@ static picture_t * RenderSubpictures( sout_stream_t *p_stream, sout_stream_id_sy
     }
 
     subpicture_t *p_subpic = spu_Render( id->p_spu, NULL, &fmt,
-                                         &outfmt,
-                                         p_pic->date, p_pic->date, false, false );
+                                         &outfmt, vlc_tick_now(), p_pic->date, 1.f,
+                                         false, false );
 
     /* Overlay subpicture */
     if( p_subpic )
diff --git a/src/video_output/video_output.c b/src/video_output/video_output.c
index fa708955aa..7aac04be46 100644
--- a/src/video_output/video_output.c
+++ b/src/video_output/video_output.c
@@ -963,7 +963,7 @@ static int ThreadDisplayRenderPicture(vout_thread_t *vout, bool is_forced)
         render_subtitle_date = sys->pause.date;
     else
         render_subtitle_date = filtered->date > 1 ? filtered->date : vlc_tick_now();
-    vlc_tick_t render_osd_date = vlc_tick_now(); /* FIXME wrong */
+    vlc_tick_t system_now = vlc_tick_now();
 
     /*
      * Get the subpicture to be displayed
@@ -1024,9 +1024,9 @@ static int ThreadDisplayRenderPicture(vout_thread_t *vout, bool is_forced)
     video_format_ApplyRotation(&fmt_spu_rot, &fmt_spu);
     subpicture_t *subpic = spu_Render(sys->spu,
                                       subpicture_chromas, &fmt_spu_rot,
-                                      &vd->source,
-                                      render_subtitle_date, render_osd_date,
-                                      do_snapshot,
+                                      &vd->source, system_now,
+                                      render_subtitle_date,
+                                      1.f, do_snapshot,
                                       vd->info.can_scale_spu);
     /*
      * Perform rendering
diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index 7494423a3a..6d77d94f27 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -531,8 +531,8 @@ static int SubpictureCmp(const void *s0, const void *s1)
 static void SpuSelectSubpictures(spu_t *spu,
                                  size_t *subpicture_count,
                                  subpicture_t **subpicture_array,
+                                 vlc_tick_t system_now,
                                  vlc_tick_t render_subtitle_date,
-                                 vlc_tick_t render_osd_date,
                                  bool ignore_osd)
 {
     spu_private_t *sys = spu->p;
@@ -591,7 +591,7 @@ static void SpuSelectSubpictures(spu_t *spu,
                (ignore_osd && !current->b_subtitle))
                 continue;
 
-            const vlc_tick_t render_date = current->b_subtitle ? render_subtitle_date : render_osd_date;
+            const vlc_tick_t render_date = current->b_subtitle ? render_subtitle_date : system_now;
             if (render_date &&
                 render_date < current->i_start) {
                 /* Too early, come back next monday */
@@ -633,7 +633,7 @@ static void SpuSelectSubpictures(spu_t *spu,
             subpicture_t *current = available_subpic[index];
             bool is_late = is_available_late[index];
 
-            const vlc_tick_t stop_date = current->b_subtitle ? __MAX(start_date, sys->last_sort_date) : render_osd_date;
+            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;
 
@@ -1008,8 +1008,8 @@ static subpicture_t *SpuRenderSubpictures(spu_t *spu,
                                           const vlc_fourcc_t *chroma_list,
                                           const video_format_t *fmt_dst,
                                           const video_format_t *fmt_src,
+                                          vlc_tick_t system_now,
                                           vlc_tick_t render_subtitle_date,
-                                          vlc_tick_t render_osd_date,
                                           bool external_scale)
 {
     spu_private_t *sys = spu->p;
@@ -1122,7 +1122,7 @@ static subpicture_t *SpuRenderSubpictures(spu_t *spu,
                             subpic, region, virtual_scale,
                             chroma_list, fmt_dst,
                             subtitle_area, subtitle_area_count,
-                            subpic->b_subtitle ? render_subtitle_date : render_osd_date);
+                            subpic->b_subtitle ? render_subtitle_date : system_now);
             if (*output_last_ptr)
             {
                 if (do_external_scale)
@@ -1527,8 +1527,8 @@ subpicture_t *spu_Render(spu_t *spu,
                          const vlc_fourcc_t *chroma_list,
                          const video_format_t *fmt_dst,
                          const video_format_t *fmt_src,
-                         vlc_tick_t render_subtitle_date,
-                         vlc_tick_t render_osd_date,
+                         vlc_tick_t system_now,
+                         vlc_tick_t render_subtitle_date, float rate,
                          bool ignore_osd,
                          bool external_scale)
 {
@@ -1558,7 +1558,7 @@ subpicture_t *spu_Render(spu_t *spu,
         free(chain_update);
     }
     /* Run subpicture sources */
-    filter_chain_SubSource(sys->source_chain, spu, render_osd_date);
+    filter_chain_SubSource(sys->source_chain, spu, system_now);
     vlc_mutex_unlock(&sys->source_chain_lock);
 
     static const vlc_fourcc_t chroma_list_default_yuv[] = {
@@ -1588,8 +1588,8 @@ subpicture_t *spu_Render(spu_t *spu,
     subpicture_t *subpicture_array[VOUT_MAX_SUBPICTURES];
 
     /* Get an array of subpictures to render */
-    SpuSelectSubpictures(spu, &subpicture_count, subpicture_array,
-                         render_subtitle_date, render_osd_date, ignore_osd);
+    SpuSelectSubpictures(spu, &subpicture_count, subpicture_array, system_now,
+                         render_subtitle_date, ignore_osd);
     if (subpicture_count == 0) {
         vlc_mutex_unlock(&sys->lock);
         return NULL;
@@ -1600,7 +1600,7 @@ subpicture_t *spu_Render(spu_t *spu,
         subpicture_t *subpic = subpicture_array[i];
         subpicture_Update(subpic,
                           fmt_src, fmt_dst,
-                          subpic->b_subtitle ? render_subtitle_date : render_osd_date);
+                          subpic->b_subtitle ? render_subtitle_date : system_now);
     }
 
     /* Now order the subpicture array
@@ -1613,12 +1613,13 @@ subpicture_t *spu_Render(spu_t *spu,
                                                 chroma_list,
                                                 fmt_dst,
                                                 fmt_src,
+                                                system_now,
                                                 render_subtitle_date,
-                                                render_osd_date,
                                                 external_scale);
     vlc_mutex_unlock(&sys->lock);
 
     return render;
+    (void) rate;
 }
 
 void spu_OffsetSubtitleDate(spu_t *spu, vlc_tick_t duration)
-- 
2.20.1



More information about the vlc-devel mailing list