[vlc-devel] [PATCH] schroedinger: use timestamp FIFO
RĂ©mi Denis-Courmont
remi at remlab.net
Tue Apr 23 19:08:07 CEST 2019
---
modules/codec/schroedinger.c | 25 +++++++------------------
1 file changed, 7 insertions(+), 18 deletions(-)
diff --git a/modules/codec/schroedinger.c b/modules/codec/schroedinger.c
index 522946199e..989dc7a6d3 100644
--- a/modules/codec/schroedinger.c
+++ b/modules/codec/schroedinger.c
@@ -37,6 +37,7 @@
#include <vlc_common.h>
#include <vlc_plugin.h>
#include <vlc_codec.h>
+#include <vlc_timestamp_helper.h>
#include <schroedinger/schro.h>
@@ -902,7 +903,7 @@ typedef struct
bool b_auto_field_coding;
uint32_t i_input_picnum;
- block_fifo_t *p_dts_fifo;
+ timestamp_fifo_t *p_dts_fifo;
block_t *p_chain;
@@ -1096,7 +1097,7 @@ static int OpenEncoder( vlc_object_t *p_this )
p_enc->fmt_out.i_codec = VLC_CODEC_DIRAC;
p_enc->fmt_out.i_cat = VIDEO_ES;
- if( ( p_sys->p_dts_fifo = block_FifoNew() ) == NULL )
+ if( ( p_sys->p_dts_fifo = timestamp_FifoNew(32) ) == NULL )
{
CloseEncoder( p_this );
return VLC_ENOMEM;
@@ -1493,12 +1494,7 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic )
/* store dts in a queue, so that they appear in order in
* coded order */
- p_block = block_Alloc( 1 );
- if( !p_block )
- return NULL;
- p_block->i_dts = p_pic->date - p_sys->i_pts_offset;
- block_FifoPut( p_sys->p_dts_fifo, p_block );
- p_block = NULL;
+ timestamp_FifoPut( p_sys->p_dts_fifo, p_pic->date - p_sys->i_pts_offset );
/* for field coding mode, insert an extra value into both the
* pts lookaside buffer and dts queue, offset to correspond
@@ -1507,12 +1503,7 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic )
StorePicturePTS( p_enc, p_sys->i_input_picnum, p_pic->date + p_sys->i_field_duration );
p_sys->i_input_picnum++;
- p_block = block_Alloc( 1 );
- if( !p_block )
- return NULL;
- p_block->i_dts = p_pic->date - p_sys->i_pts_offset + p_sys->i_field_duration;
- block_FifoPut( p_sys->p_dts_fifo, p_block );
- p_block = NULL;
+ timestamp_FifoPut( p_sys->p_dts_fifo, p_pic->date - p_sys->i_pts_offset + p_sys->i_field_duration );
}
}
@@ -1573,10 +1564,8 @@ static block_t *Encode( encoder_t *p_enc, picture_t *p_pic )
}
if( ReadDiracPictureNumber( &u_pic_num, p_block ) ) {
- block_t *p_dts_block = block_FifoGet( p_sys->p_dts_fifo );
- p_block->i_dts = p_dts_block->i_dts;
+ p_block->i_dts = timestamp_FifoGet( p_sys->p_dts_fifo );
p_block->i_pts = GetPicturePTS( p_enc, u_pic_num );
- block_Release( p_dts_block );
block_ChainAppend( &p_output_chain, p_block );
} else {
/* End of sequence */
@@ -1607,7 +1596,7 @@ static void CloseEncoder( vlc_object_t *p_this )
free( p_sys->p_format );
if( p_sys->p_dts_fifo )
- block_FifoRelease( p_sys->p_dts_fifo );
+ timestamp_FifoRelease( p_sys->p_dts_fifo );
block_ChainRelease( p_sys->p_chain );
--
2.20.1
More information about the vlc-devel
mailing list