vlc | branch: master | Steve Lhomme <[email protected]> | Wed Jan 13 14:45:23 2021 +0100| [9de28aa252d920dcd889215b398f4879ef1575f8] | committer: Steve Lhomme
transcode: update the encoder input format after we know the last filter output This is done before the actual encoder that will be used is created. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9de28aa252d920dcd889215b398f4879ef1575f8 --- modules/stream_out/transcode/encoder/encoder.c | 11 ++++++++++- modules/stream_out/transcode/encoder/encoder.h | 6 +++++- modules/stream_out/transcode/encoder/video.c | 15 +++++++++++++++ modules/stream_out/transcode/video.c | 4 ++-- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/modules/stream_out/transcode/encoder/encoder.c b/modules/stream_out/transcode/encoder/encoder.c index 2c89332663..6958a8dc72 100644 --- a/modules/stream_out/transcode/encoder/encoder.c +++ b/modules/stream_out/transcode/encoder/encoder.c @@ -124,10 +124,19 @@ const es_format_t *transcode_encoder_format_out( const transcode_encoder_t *p_en return &p_enc->p_encoder->fmt_out; } -void transcode_encoder_update_format_in( transcode_encoder_t *p_enc, const es_format_t *fmt ) +void transcode_encoder_update_format_in( transcode_encoder_t *p_enc, const es_format_t *fmt, + const transcode_encoder_config_t *p_cfg ) { es_format_Clean( &p_enc->p_encoder->fmt_in ); es_format_Copy( &p_enc->p_encoder->fmt_in, fmt ); + switch (fmt->i_cat) + { + case VIDEO_ES: + transcode_encoder_video_set_src(p_enc->p_encoder, &fmt->video, p_cfg); + break; + default: + break; + } } void transcode_encoder_update_format_out( transcode_encoder_t *p_enc, const es_format_t *fmt ) diff --git a/modules/stream_out/transcode/encoder/encoder.h b/modules/stream_out/transcode/encoder/encoder.h index 30a8354770..22b1d7d1b2 100644 --- a/modules/stream_out/transcode/encoder/encoder.h +++ b/modules/stream_out/transcode/encoder/encoder.h @@ -65,7 +65,8 @@ void transcode_encoder_config_clean( transcode_encoder_config_t * ); const es_format_t *transcode_encoder_format_in( const transcode_encoder_t * ); const es_format_t *transcode_encoder_format_out( const transcode_encoder_t * ); -void transcode_encoder_update_format_in( transcode_encoder_t *, const es_format_t * ); +void transcode_encoder_update_format_in( transcode_encoder_t *, const es_format_t *, + const transcode_encoder_config_t * ); void transcode_encoder_update_format_out( transcode_encoder_t *, const es_format_t * ); block_t * transcode_encoder_encode( transcode_encoder_t *, void * ); @@ -91,6 +92,9 @@ void transcode_encoder_video_configure( vlc_object_t *p_obj, vlc_video_context *vctx_in, transcode_encoder_t *p_enc ); +void transcode_encoder_video_set_src( encoder_t *, const video_format_t *, + const transcode_encoder_config_t * ); + void transcode_video_framerate_apply( const video_format_t *p_src, video_format_t *p_dst ); void transcode_video_sar_apply( const video_format_t *p_src, diff --git a/modules/stream_out/transcode/encoder/video.c b/modules/stream_out/transcode/encoder/video.c index 2ba109a1af..683d9031af 100644 --- a/modules/stream_out/transcode/encoder/video.c +++ b/modules/stream_out/transcode/encoder/video.c @@ -209,6 +209,21 @@ static void transcode_video_size_config_apply( vlc_object_t *p_obj, } } +void transcode_encoder_video_set_src(encoder_t *p_encoder, const video_format_t *p_src, + const transcode_encoder_config_t *p_cfg) +{ + video_format_t *p_enc_in = &p_encoder->fmt_in.video; + if( p_cfg->video.fps.num ) + { + p_enc_in->i_frame_rate = p_cfg->video.fps.num; + p_enc_in->i_frame_rate_base = __MAX(p_cfg->video.fps.den, 1); + } + p_enc_in->orientation = ORIENT_NORMAL; + + /* Modify to requested sizes/scale */ + transcode_video_size_config_apply( VLC_OBJECT(p_encoder), p_src, p_cfg, p_enc_in ); +} + void transcode_encoder_video_configure( vlc_object_t *p_obj, const video_format_t *p_dec_out, const transcode_encoder_config_t *p_cfg, diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c index 1eb26cc292..079ab4ada6 100644 --- a/modules/stream_out/transcode/video.c +++ b/modules/stream_out/transcode/video.c @@ -316,10 +316,10 @@ static int transcode_video_filters_init( sout_stream_t *p_stream, filter_chain_AppendFromString( id->p_uf_chain, p_cfg->psz_filters ); p_src = filter_chain_GetFmtOut( id->p_uf_chain ); debug_format( p_stream, p_src ); - } + } /* Update encoder so it matches filters output */ - transcode_encoder_update_format_in( id->encoder, p_src ); + transcode_encoder_update_format_in( id->encoder, p_src, id->p_enccfg ); /* SPU Sources */ if( p_cfg->video.psz_spu_sources ) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
