[vlc-commits] picture_chain: modify the append to take care of the chain init
Steve Lhomme
git at videolan.org
Wed Sep 23 16:18:11 CEST 2020
vlc | branch: master | Steve Lhomme <robux4 at ycbcr.xyz> | Fri Sep 18 10:40:13 2020 +0200| [752075f33abba6973aa81f1bc485fffe4dc8c812] | committer: Steve Lhomme
picture_chain: modify the append to take care of the chain init
By default p_next is always set to NULL in a picture. We can always use it as
a proper picture chain.
When a chain becomes empty p_next goes back to zero and the "known tail" is
invalid. But we only use the tail when the front is not empty, so there is no
problem.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=752075f33abba6973aa81f1bc485fffe4dc8c812
---
include/vlc_picture.h | 9 +++++++--
modules/hw/mmal/converter.c | 11 +----------
modules/hw/mmal/deinterlace.c | 8 +-------
modules/stream_out/mosaic_bridge.c | 9 +--------
modules/stream_out/transcode/video.c | 8 +-------
modules/video_filter/fps.c | 2 +-
src/misc/picture_fifo.c | 10 +---------
src/video_output/snapshot.c | 10 +---------
8 files changed, 14 insertions(+), 53 deletions(-)
diff --git a/include/vlc_picture.h b/include/vlc_picture.h
index ef86ed41ea..dc9e12e81c 100644
--- a/include/vlc_picture.h
+++ b/include/vlc_picture.h
@@ -194,14 +194,19 @@ static inline picture_t * vlc_picture_chain_PopFront(picture_t **chain)
* Append a picture to a picture chain.
*
* \param chain the picture chain pointer
+ * \param tail the known tail of the picture chain
* \param pic the picture to append to the chain
*
* \return the new tail of the picture chain
*/
VLC_USED
-static inline picture_t * vlc_picture_chain_Append(picture_t *chain, picture_t *pic)
+static inline picture_t * vlc_picture_chain_Append(picture_t **chain, picture_t *tail,
+ picture_t *pic)
{
- chain->p_next = pic;
+ if (*chain == NULL)
+ *chain = pic;
+ else
+ tail->p_next = pic;
pic->p_next = NULL; // we're appending a picture, not a chain
return pic;
}
diff --git a/modules/hw/mmal/converter.c b/modules/hw/mmal/converter.c
index 974840f4bb..f62f21e087 100644
--- a/modules/hw/mmal/converter.c
+++ b/modules/hw/mmal/converter.c
@@ -142,16 +142,7 @@ static void pic_fifo_init(pic_fifo_t * const pf)
static void pic_fifo_put(pic_fifo_t * const pf, picture_t * pic)
{
- if (pf->head == NULL)
- {
- pic->p_next = NULL;
- pf->head = pic;
- pf->tail = pic;
- }
- else
- {
- pf->tail = vlc_picture_chain_Append( pf->tail, pic );
- }
+ pf->tail = vlc_picture_chain_Append( &pf->head, pf->tail, pic );
}
#define SUBS_MAX 3
diff --git a/modules/hw/mmal/deinterlace.c b/modules/hw/mmal/deinterlace.c
index d3cc0cc603..2709a1f173 100644
--- a/modules/hw/mmal/deinterlace.c
+++ b/modules/hw/mmal/deinterlace.c
@@ -284,13 +284,7 @@ static picture_t *deinterlace(filter_t * p_filter, picture_t * p_pic)
}
out_buf = NULL; // Now attached to pic or recycled
- if (ret_pics == NULL)
- {
- ret_pics = out_pic;
- chain_tail = out_pic;
- }
- else
- chain_tail = vlc_picture_chain_Append( chain_tail, out_pic );
+ chain_tail = vlc_picture_chain_Append( &ret_pics, chain_tail, out_pic );
// Ignore 0 seqs
// Don't think these should actually happen
diff --git a/modules/stream_out/mosaic_bridge.c b/modules/stream_out/mosaic_bridge.c
index daa7ee4ddf..eda165b00c 100644
--- a/modules/stream_out/mosaic_bridge.c
+++ b/modules/stream_out/mosaic_bridge.c
@@ -570,14 +570,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 );
- if (p_es->p_picture == NULL)
- {
- p_es->p_picture = p_new_pic;
- p_es->tail = p_new_pic;
- p_new_pic->p_next = NULL;
- }
- else
- p_es->tail = vlc_picture_chain_Append( p_es->tail, p_new_pic );
+ p_es->tail = vlc_picture_chain_Append( &p_es->p_picture, p_es->tail, p_new_pic );
vlc_global_unlock( VLC_MOSAIC_MUTEX );
}
diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c
index d1ffb567b3..dc07278e11 100644
--- a/modules/stream_out/transcode/video.c
+++ b/modules/stream_out/transcode/video.c
@@ -151,13 +151,7 @@ static void decoder_queue_video( decoder_t *p_dec, picture_t *p_pic )
assert(!picture_HasChainedPics(p_pic));
vlc_mutex_lock(&id->fifo.lock);
- if (id->fifo.pic.first == NULL)
- {
- id->fifo.pic.first = p_pic;
- id->fifo.pic.tail = p_pic;
- }
- else
- id->fifo.pic.tail = vlc_picture_chain_Append( id->fifo.pic.tail, p_pic );
+ id->fifo.pic.tail = vlc_picture_chain_Append( &id->fifo.pic.first, id->fifo.pic.tail, p_pic );
vlc_mutex_unlock(&id->fifo.lock);
}
diff --git a/modules/video_filter/fps.c b/modules/video_filter/fps.c
index ab78610a99..4e6a59dfd6 100644
--- a/modules/video_filter/fps.c
+++ b/modules/video_filter/fps.c
@@ -122,7 +122,7 @@ static picture_t *Filter( filter_t *p_filter, picture_t *p_picture)
picture_Copy( p_tmp, p_sys->p_previous_pic);
p_tmp->date = date_Get( &p_sys->next_output_pts );
- last_pic = vlc_picture_chain_Append( last_pic, p_tmp );
+ last_pic = vlc_picture_chain_Append( &p_sys->p_previous_pic, last_pic, p_tmp );
date_Increment( &p_sys->next_output_pts, 1 );
}
diff --git a/src/misc/picture_fifo.c b/src/misc/picture_fifo.c
index 2e6c227e79..c2f2df8734 100644
--- a/src/misc/picture_fifo.c
+++ b/src/misc/picture_fifo.c
@@ -50,15 +50,7 @@ static void PictureFifoReset(picture_fifo_t *fifo)
static void PictureFifoPush(picture_fifo_t *fifo, picture_t *picture)
{
assert(!picture_HasChainedPics(picture));
- if (fifo->first == NULL)
- {
- fifo->first = picture;
- fifo->tail = picture;
- }
- else
- {
- fifo->tail = vlc_picture_chain_Append( fifo->tail, picture );
- }
+ fifo->tail = vlc_picture_chain_Append( &fifo->first, fifo->tail, picture );
}
static picture_t *PictureFifoPop(picture_fifo_t *fifo)
{
diff --git a/src/video_output/snapshot.c b/src/video_output/snapshot.c
index 01eed7e275..aaa658c851 100644
--- a/src/video_output/snapshot.c
+++ b/src/video_output/snapshot.c
@@ -151,15 +151,7 @@ void vout_snapshot_Set(vout_snapshot_t *snap,
video_format_CopyCrop( &dup->format, fmt );
- if (snap->picture == NULL)
- {
- snap->picture = dup;
- snap->tail = dup;
- }
- else
- {
- snap->tail = vlc_picture_chain_Append( snap->tail, dup );
- }
+ snap->tail = vlc_picture_chain_Append( &snap->picture, snap->tail, dup );
snap->request_count--;
}
vlc_cond_broadcast(&snap->wait);
More information about the vlc-commits
mailing list