[vlc-devel] [PATCH 05/11] mosaic: store the picture chain using vlc_picture_chain_t

Steve Lhomme robux4 at ycbcr.xyz
Thu Sep 24 16:49:13 CEST 2020


---
 modules/spu/mosaic.c               | 12 ++++++------
 modules/spu/mosaic.h               |  3 +--
 modules/stream_out/mosaic_bridge.c |  9 ++++-----
 3 files changed, 11 insertions(+), 13 deletions(-)

diff --git a/modules/spu/mosaic.c b/modules/spu/mosaic.c
index bd9a0791555..c1c19653052 100644
--- a/modules/spu/mosaic.c
+++ b/modules/spu/mosaic.c
@@ -529,16 +529,16 @@ static subpicture_t *Filter( filter_t *p_filter, vlc_tick_t date )
         if ( p_es->b_empty )
             continue;
 
-        while ( p_es->p_picture != NULL )
+        while ( !vlc_picture_chain_IsEmpty( &p_es->pictures ) )
         {
-            picture_t *front = vlc_picture_chain_PeekFront( &p_es->p_picture );
+            picture_t *front = vlc_picture_chain_PeekFront( &p_es->pictures.front );
             if ( front->date + p_sys->i_delay >= date )
                 break; // front picture not late
 
             if ( picture_HasChainedPics( front ) )
             {
                 // front picture is late and has more pictures chained, skip it
-                front = vlc_picture_chain_PopFront( &p_es->p_picture );
+                front = vlc_picture_chain_PopFront( &p_es->pictures.front );
                 picture_Release( front );
                 continue;
             }
@@ -546,7 +546,7 @@ static subpicture_t *Filter( filter_t *p_filter, vlc_tick_t date )
             if ( front->date + p_sys->i_delay + BLANK_DELAY < date )
             {
                 // front picture is late and too old, don't display it
-                front = vlc_picture_chain_PopFront( &p_es->p_picture );
+                front = vlc_picture_chain_PopFront( &p_es->pictures.front );
                 // the picture chain is empty as the front didn't have chained pics
                 picture_Release( front );
                 break;
@@ -561,7 +561,7 @@ static subpicture_t *Filter( filter_t *p_filter, vlc_tick_t date )
             }
         }
 
-        if ( p_es->p_picture == NULL )
+        if ( vlc_picture_chain_IsEmpty( &p_es->pictures ) )
             continue;
 
         if ( p_sys->i_order_length == 0 )
@@ -589,7 +589,7 @@ static subpicture_t *Filter( filter_t *p_filter, vlc_tick_t date )
         video_format_Init( &fmt_in, 0 );
         video_format_Init( &fmt_out, 0 );
 
-        p_converted = vlc_picture_chain_PeekFront( &p_es->p_picture );
+        p_converted = vlc_picture_chain_PeekFront( &p_es->pictures.front );
         if ( !p_sys->b_keep )
         {
             /* Convert the images */
diff --git a/modules/spu/mosaic.h b/modules/spu/mosaic.h
index cebd24c83a8..04bbc6215bd 100644
--- a/modules/spu/mosaic.h
+++ b/modules/spu/mosaic.h
@@ -24,8 +24,7 @@
 typedef struct bridged_es_t
 {
     es_format_t fmt;
-    picture_t *p_picture;
-    picture_t *tail;
+    vlc_picture_chain_t pictures;
     bool b_empty;
     char *psz_id;
 
diff --git a/modules/stream_out/mosaic_bridge.c b/modules/stream_out/mosaic_bridge.c
index eda165b00c2..38d32a311be 100644
--- a/modules/stream_out/mosaic_bridge.c
+++ b/modules/stream_out/mosaic_bridge.c
@@ -416,8 +416,7 @@ static void *Add( sout_stream_t *p_stream, const es_format_t *p_fmt )
 
     //p_es->fmt = *p_fmt;
     p_es->psz_id = p_sys->psz_id;
-    p_es->p_picture = NULL;
-    p_es->tail = NULL;
+    vlc_picture_chain_Reset( &p_es->pictures );
     p_es->b_empty = false;
 
     vlc_global_unlock( VLC_MOSAIC_MUTEX );
@@ -460,9 +459,9 @@ static void Del( sout_stream_t *p_stream, void *id )
     p_es = p_sys->p_es;
 
     p_es->b_empty = true;
-    while ( p_es->p_picture )
+    while ( !vlc_picture_chain_IsEmpty( &p_es->pictures ) )
     {
-        picture_t *es_picture = vlc_picture_chain_PopFront( &p_es->p_picture );
+        picture_t *es_picture = vlc_picture_chain_PopFront( &p_es->pictures.front );
         picture_Release( es_picture );
     }
 
@@ -570,7 +569,7 @@ static void decoder_queue_video( decoder_t *p_dec, picture_t *p_pic )
     /* push the picture in the mosaic-struct structure */
     bridged_es_t *p_es = p_sys->p_es;
     vlc_global_lock( VLC_MOSAIC_MUTEX );
-    p_es->tail = vlc_picture_chain_Append( &p_es->p_picture, p_es->tail, p_new_pic );
+    p_es->pictures.tail = vlc_picture_chain_Append( &p_es->pictures.front, p_es->pictures.tail, p_new_pic );
     vlc_global_unlock( VLC_MOSAIC_MUTEX );
 }
 
-- 
2.26.2



More information about the vlc-devel mailing list