[vlc-commits] transcode: video: handle eos
Francois Cartegnie
git at videolan.org
Wed Aug 29 17:11:54 CEST 2018
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Wed Aug 29 15:58:23 2018 +0200| [424be6811ddfc4f9051750f6e7cd5abe0ea97627] | committer: Francois Cartegnie
transcode: video: handle eos
Allows final or temp still frames to be output.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=424be6811ddfc4f9051750f6e7cd5abe0ea97627
---
modules/stream_out/transcode/video.c | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c
index 24303dcb81..a209482123 100644
--- a/modules/stream_out/transcode/video.c
+++ b/modules/stream_out/transcode/video.c
@@ -435,11 +435,24 @@ static picture_t * RenderSubpictures( sout_stream_t *p_stream, sout_stream_id_sy
return p_pic;
}
+static void tag_last_block_with_flag( block_t **out, int i_flag )
+{
+ block_t *p_last = *out;
+ if( p_last )
+ {
+ while( p_last->p_next )
+ p_last = p_last->p_next;
+ p_last->i_flags |= i_flag;
+ }
+}
+
int transcode_video_process( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
block_t *in, block_t **out )
{
*out = NULL;
+ const bool b_eos = in && (in->i_flags & BLOCK_FLAG_END_OF_SEQUENCE);
+
int ret = id->p_decoder->pf_decode( id->p_decoder, in );
if( ret != VLCDEC_SUCCESS )
return VLC_EGENERIC;
@@ -566,6 +579,17 @@ int transcode_video_process( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
}
}
}
+
+ if( b_eos )
+ {
+ msg_Info( p_stream, "Drain/restart on EOS" );
+ if( transcode_encoder_drain( id->encoder, out ) != VLC_SUCCESS )
+ goto error;
+ transcode_encoder_close( id->encoder );
+ if( b_eos )
+ tag_last_block_with_flag( out, BLOCK_FLAG_END_OF_SEQUENCE );
+ }
+
continue;
error:
if( p_pic )
@@ -589,5 +613,8 @@ error:
msg_Warn( p_stream, "Flushing failed");
}
+ if( b_eos )
+ tag_last_block_with_flag( out, BLOCK_FLAG_END_OF_SEQUENCE );
+
return id->b_error ? VLC_EGENERIC : VLC_SUCCESS;
}
More information about the vlc-commits
mailing list