[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