[vlc-devel] [PATCH 4/5] sout: transcode: remove static chain
Francois Cartegnie
fcvlcdev at free.fr
Tue Sep 10 16:11:34 CEST 2019
now the converter does proper transform, there's no
longer need to force transform last
---
modules/stream_out/transcode/encoder/video.c | 2 +-
modules/stream_out/transcode/transcode.h | 1 -
modules/stream_out/transcode/video.c | 73 ++++++++------------
3 files changed, 30 insertions(+), 46 deletions(-)
diff --git a/modules/stream_out/transcode/encoder/video.c b/modules/stream_out/transcode/encoder/video.c
index 670f5b819c..b4baddf95b 100644
--- a/modules/stream_out/transcode/encoder/video.c
+++ b/modules/stream_out/transcode/encoder/video.c
@@ -233,7 +233,7 @@ void transcode_encoder_video_configure( vlc_object_t *p_obj,
}
/* Complete source format */
- p_enc_in->orientation = ORIENT_NORMAL;
+ p_enc_in->orientation = p_dec_out->orientation;
p_enc_out->orientation = p_enc_in->orientation;
p_enc_in->i_chroma = p_enc->p_encoder->fmt_in.i_codec;
diff --git a/modules/stream_out/transcode/transcode.h b/modules/stream_out/transcode/transcode.h
index f38e4892ad..b981860513 100644
--- a/modules/stream_out/transcode/transcode.h
+++ b/modules/stream_out/transcode/transcode.h
@@ -123,7 +123,6 @@ struct sout_stream_id_sys_t
{
filter_chain_t *p_f_chain; /**< Video filters */
filter_chain_t *p_conv_nonstatic;
- filter_chain_t *p_conv_static;
filter_chain_t *p_uf_chain; /**< User-specified video filters */
filter_chain_t *p_final_conv_static;
filter_t *p_spu_blender;
diff --git a/modules/stream_out/transcode/video.c b/modules/stream_out/transcode/video.c
index ac9c9c2bcd..772a2e069c 100644
--- a/modules/stream_out/transcode/video.c
+++ b/modules/stream_out/transcode/video.c
@@ -48,7 +48,6 @@ static const video_format_t* filtered_video_format( sout_stream_id_sys_t *id,
{
id->p_final_conv_static,
id->p_uf_chain,
- id->p_conv_static,
id->p_conv_nonstatic,
id->p_f_chain,
};
@@ -252,52 +251,38 @@ static int transcode_video_set_conversions( sout_stream_t *p_stream,
.sys = id,
};
- enum
- {
- STEP_NONSTATIC = 0,
- STEP_STATIC,
- };
- for( int step = STEP_NONSTATIC; step <= STEP_STATIC; step++ )
- {
- const bool b_do_scale = (*pp_src)->video.i_width != p_dst->video.i_width ||
- (*pp_src)->video.i_height != p_dst->video.i_height;
- const bool b_do_chroma = (*pp_src)->video.i_chroma != p_dst->video.i_chroma;
- const bool b_do_orient = ((*pp_src)->video.orientation != ORIENT_NORMAL) && b_reorient;
-
- if( step == STEP_STATIC && b_do_orient )
- return VLC_EGENERIC;
-
- const es_format_t *p_tmpdst = p_dst;
+ const bool b_do_scale = (*pp_src)->video.i_width != p_dst->video.i_width ||
+ (*pp_src)->video.i_height != p_dst->video.i_height;
+ const bool b_do_chroma = (*pp_src)->video.i_chroma != p_dst->video.i_chroma;
+ const bool b_do_orient = ((*pp_src)->video.orientation != ORIENT_NORMAL) && b_reorient;
- if( ! (b_do_scale || b_do_chroma || b_do_orient) )
- return VLC_SUCCESS;
+ const es_format_t *p_tmpdst = p_dst;
- es_format_t tmpdst;
- if( b_do_orient )
- {
- es_format_Init( &tmpdst, VIDEO_ES, p_dst->video.i_chroma );
- video_format_ApplyRotation( &tmpdst.video, &p_dst->video );
- p_tmpdst = &tmpdst;
- }
+ if( ! (b_do_scale || b_do_chroma || b_do_orient) )
+ return VLC_SUCCESS;
- msg_Dbg( p_stream, "adding (scale %d,chroma %d, orient %d) converters",
- b_do_scale, b_do_chroma, b_do_orient );
+ es_format_t tmpdst;
+ if( b_do_orient )
+ {
+ es_format_Init( &tmpdst, VIDEO_ES, p_dst->video.i_chroma );
+ video_format_ApplyRotation( &tmpdst.video, &p_dst->video );
+ p_tmpdst = &tmpdst;
+ }
- filter_chain_t **pp_chain = (step == STEP_NONSTATIC)
- ? &id->p_conv_nonstatic
- : &id->p_conv_static;
+ msg_Dbg( p_stream, "adding (scale %d,chroma %d, orient %d) converters",
+ b_do_scale, b_do_chroma, b_do_orient );
- *pp_chain = filter_chain_NewVideo( p_stream, step == STEP_NONSTATIC, &owner );
- if( !*pp_chain )
- return VLC_EGENERIC;
- filter_chain_Reset( *pp_chain, *pp_src, p_tmpdst );
+ id->p_conv_nonstatic = filter_chain_NewVideo( p_stream, true, &owner );
+ if( !id->p_conv_nonstatic )
+ return VLC_EGENERIC;
+ filter_chain_Reset( id->p_conv_nonstatic, *pp_src, p_tmpdst );
- if( filter_chain_AppendConverter( *pp_chain, *pp_src, p_tmpdst ) != VLC_SUCCESS )
- return VLC_EGENERIC;
+ if( filter_chain_AppendConverter( id->p_conv_nonstatic,
+ *pp_src, p_tmpdst ) != VLC_SUCCESS )
+ return VLC_EGENERIC;
- *pp_src = filter_chain_GetFmtOut( *pp_chain );
- debug_format( p_stream, *pp_src );
- }
+ *pp_src = filter_chain_GetFmtOut( id->p_conv_nonstatic );
+ debug_format( p_stream, *pp_src );
return VLC_SUCCESS;
}
@@ -360,6 +345,9 @@ static int transcode_video_filters_init( sout_stream_t *p_stream,
/* Update encoder so it matches filters output */
transcode_encoder_update_format_in( id->encoder, p_src );
+ es_format_t tmp = *transcode_encoder_format_out(id->encoder);
+ tmp.video.orientation = p_src->video.orientation;
+ transcode_encoder_update_format_out( id->encoder, &tmp );
/* SPU Sources */
if( p_cfg->video.psz_spu_sources )
@@ -386,7 +374,6 @@ void transcode_video_clean( sout_stream_t *p_stream,
/* Close filters */
transcode_remove_filters( &id->p_f_chain );
transcode_remove_filters( &id->p_conv_nonstatic );
- transcode_remove_filters( &id->p_conv_static );
transcode_remove_filters( &id->p_uf_chain );
transcode_remove_filters( &id->p_final_conv_static );
if( id->p_spu_blender )
@@ -540,7 +527,6 @@ int transcode_video_process( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
/* Close filters, encoder format input can't change */
transcode_remove_filters( &id->p_f_chain );
transcode_remove_filters( &id->p_conv_nonstatic );
- transcode_remove_filters( &id->p_conv_static );
transcode_remove_filters( &id->p_uf_chain );
transcode_remove_filters( &id->p_final_conv_static );
if( id->p_spu_blender )
@@ -602,8 +588,7 @@ int transcode_video_process( sout_stream_t *p_stream, sout_stream_id_sys_t *id,
{
/* Run filter chain */
filter_chain_t * primary_chains[] = { id->p_f_chain,
- id->p_conv_nonstatic,
- id->p_conv_static };
+ id->p_conv_nonstatic };
for( size_t i=0; p_in && i<ARRAY_SIZE(primary_chains); i++ )
{
if( !primary_chains[i] )
--
2.21.0
More information about the vlc-devel
mailing list