[vlc-devel] [PATCH 22/26] transcode: don't use the generic transcode structure for Audio

Steve Lhomme robux4 at ycbcr.xyz
Mon Jan 18 08:33:01 UTC 2021


There's no need to use an extra layer with extra overhead when we can do the
same calls.
---
 modules/stream_out/transcode/audio.c          | 44 +++++++++++--------
 modules/stream_out/transcode/encoder/audio.c  | 35 +--------------
 .../stream_out/transcode/encoder/encoder.c    |  7 ---
 .../stream_out/transcode/encoder/encoder.h    |  2 +-
 .../transcode/encoder/encoder_priv.h          |  4 --
 modules/stream_out/transcode/transcode.h      |  1 +
 6 files changed, 30 insertions(+), 63 deletions(-)

diff --git a/modules/stream_out/transcode/audio.c b/modules/stream_out/transcode/audio.c
index ba481a2cf97..03da49bf0d0 100644
--- a/modules/stream_out/transcode/audio.c
+++ b/modules/stream_out/transcode/audio.c
@@ -183,10 +183,9 @@ int transcode_audio_init( sout_stream_t *p_stream, const es_format_t *p_fmt,
 
     vlc_mutex_unlock(&id->fifo.lock);
 
-    id->encoder = transcode_encoder_new( sout_EncoderCreate(p_stream, sizeof(encoder_t),
-                                                            &encoder_tested_fmt_in),
-                                         &encoder_tested_fmt_in );
-    if( !id->encoder )
+    id->audio_encoder = sout_EncoderCreate(p_stream, sizeof(encoder_t),
+                                           &encoder_tested_fmt_in);
+    if( !id->audio_encoder )
     {
         module_unneed( id->p_decoder, id->p_decoder->p_module );
         id->p_decoder->p_module = NULL;
@@ -203,8 +202,7 @@ int transcode_audio_init( sout_stream_t *p_stream, const es_format_t *p_fmt,
 void transcode_audio_clean( sout_stream_t *p_stream, sout_stream_id_sys_t *id )
 {
     /* Close encoder */
-    transcode_encoder_close( id->encoder );
-    transcode_encoder_delete( id->encoder );
+    sout_EncoderDelete( id->audio_encoder );
 
     es_format_Clean( &id->decoder_out );
 
@@ -249,13 +247,13 @@ int transcode_audio_process( sout_stream_t *p_stream,
 
         vlc_mutex_lock(&id->fifo.lock);
 
-        if( p_audio_buf && ( unlikely(!transcode_encoder_opened( id->encoder )) ||
+        if( p_audio_buf && ( unlikely(!id->audio_encoder->p_module) ||
             !transcode_audio_format_IsSimilar( &id->fmt_input_audio, &id->decoder_out.audio ) ) )
         {
-            if( !transcode_encoder_opened( id->encoder ) )
+            if( !id->audio_encoder->p_module )
             {
                 transcode_encoder_audio_configure( id->p_enccfg,
-                                                   &id->decoder_out.audio, id->encoder, true );
+                                                   &id->decoder_out.audio, id->audio_encoder, true );
                 id->fmt_input_audio = id->decoder_out.audio;
             }
             else
@@ -274,7 +272,7 @@ int transcode_audio_process( sout_stream_t *p_stream,
                 transcode_audio_filters_init( p_stream,
                                               id->p_filterscfg,
                                               &id->decoder_out.audio,
-                                              &transcode_encoder_format_in( id->encoder )->audio,
+                                              &id->audio_encoder->fmt_in.audio,
                                               &id->p_af_chain ) )
             {
                 vlc_mutex_unlock(&id->fifo.lock);
@@ -284,18 +282,23 @@ int transcode_audio_process( sout_stream_t *p_stream,
             date_Init( &id->next_input_pts, id->decoder_out.audio.i_rate, 1 );
             date_Set( &id->next_input_pts, p_audio_buf->i_pts );
 
-            if( !transcode_encoder_opened( id->encoder ) &&
-                transcode_encoder_open( id->encoder, id->p_enccfg ) )
+            if( !id->audio_encoder->p_module )
             {
-                vlc_mutex_unlock(&id->fifo.lock);
-                goto error;
+                id->audio_encoder->fmt_out.i_codec = id->p_enccfg->i_codec;
+
+                if ( sout_EncoderOpen(id->audio_encoder, id->p_enccfg->psz_name,
+                                      true, id->p_enccfg->p_config_chain) != VLC_SUCCESS )
+                {
+                    vlc_mutex_unlock(&id->fifo.lock);
+                    goto error;
+                }
             }
 
             if( !id->downstream_id )
                 id->downstream_id =
                     id->pf_transcode_downstream_add( p_stream,
                                                      &id->p_decoder->fmt_in,
-                                                     transcode_encoder_format_out( id->encoder ) );
+                                                     &id->audio_encoder->fmt_out );
             if( !id->downstream_id )
             {
                 msg_Err( p_stream, "cannot output transcoded stream %4.4s",
@@ -334,7 +337,7 @@ int transcode_audio_process( sout_stream_t *p_stream,
         {
             p_audio_buf->i_dts = p_audio_buf->i_pts;
 
-            block_t *p_block = transcode_encoder_encode( id->encoder, p_audio_buf );
+            block_t *p_block = id->audio_encoder->pf_encode_audio( id->audio_encoder, p_audio_buf );
             block_ChainAppend( out, p_block );
             block_Release( p_audio_buf );
         }
@@ -346,9 +349,14 @@ error:
     } while( p_audio_bufs );
 
     /* Drain encoder */
-    if( unlikely( !id->b_error && in == NULL ) && transcode_encoder_opened( id->encoder ) )
+    if( unlikely( !id->b_error && in == NULL ) && id->audio_encoder->p_module )
     {
-        transcode_encoder_drain( id->encoder, out );
+        for(;;) {
+            block_t *p_block = id->audio_encoder->pf_encode_audio( id->audio_encoder, NULL );
+            if (p_block == NULL)
+                break;
+            block_ChainAppend( out, p_block );
+        }
     }
 
     return id->b_error ? VLC_EGENERIC : VLC_SUCCESS;
diff --git a/modules/stream_out/transcode/encoder/audio.c b/modules/stream_out/transcode/encoder/audio.c
index e56806da723..e8d19a021f6 100644
--- a/modules/stream_out/transcode/encoder/audio.c
+++ b/modules/stream_out/transcode/encoder/audio.c
@@ -56,15 +56,7 @@ static const int pi_channels_maps[9] =
      | AOUT_CHAN_LFE,
 };
 
-int transcode_encoder_audio_open( transcode_encoder_t *p_enc,
-                                  const transcode_encoder_config_t *p_cfg )
-{
-    p_enc->p_encoder->fmt_out.i_codec = p_cfg->i_codec;
-
-    return sout_EncoderOpen(p_enc->p_encoder, p_cfg->psz_name, true, p_cfg->p_config_chain);
-}
-
-static int encoder_audio_configure( const transcode_encoder_config_t *p_cfg,
+int transcode_encoder_audio_configure( const transcode_encoder_config_t *p_cfg,
                                     const audio_format_t *p_dec_out,
                                     encoder_t *p_enc, bool b_keep_fmtin )
 {
@@ -121,14 +113,6 @@ static int encoder_audio_configure( const transcode_encoder_config_t *p_cfg,
     return VLC_SUCCESS;
 }
 
-int transcode_encoder_audio_configure( const transcode_encoder_config_t *p_cfg,
-                                       const audio_format_t *p_dec_out,
-                                       transcode_encoder_t *p_enc,
-                                       bool b_keep_fmtin )
-{
-    return encoder_audio_configure( p_cfg, p_dec_out, p_enc->p_encoder, b_keep_fmtin );
-}
-
 int transcode_encoder_audio_test( encoder_t *p_encoder,
                                   const transcode_encoder_config_t *p_cfg,
                                   vlc_fourcc_t i_codec_in,
@@ -139,7 +123,7 @@ int transcode_encoder_audio_test( encoder_t *p_encoder,
 
     audio_format_t *p_afmt_out = &p_encoder->fmt_out.audio;
 
-    if( encoder_audio_configure( p_cfg, &p_encoder->fmt_in.audio, p_encoder, false ) )
+    if( transcode_encoder_audio_configure( p_cfg, &p_encoder->fmt_in.audio, p_encoder, false ) )
     {
         sout_EncoderDelete( p_encoder );
         return VLC_EGENERIC;
@@ -172,18 +156,3 @@ int transcode_encoder_audio_test( encoder_t *p_encoder,
 
     return ret;
 }
-
-block_t * transcode_encoder_audio_encode( transcode_encoder_t *p_enc, block_t *p_block )
-{
-    return p_enc->p_encoder->pf_encode_audio( p_enc->p_encoder, p_block );
-}
-
-int transcode_encoder_audio_drain( transcode_encoder_t *p_enc, block_t **out )
-{
-    block_t *p_block;
-    do {
-        p_block = transcode_encoder_audio_encode( p_enc, NULL );
-        block_ChainAppend( out, p_block );
-    } while( p_block );
-    return VLC_SUCCESS;
-}
diff --git a/modules/stream_out/transcode/encoder/encoder.c b/modules/stream_out/transcode/encoder/encoder.c
index 84a30b5b454..1d6d36f0377 100644
--- a/modules/stream_out/transcode/encoder/encoder.c
+++ b/modules/stream_out/transcode/encoder/encoder.c
@@ -65,7 +65,6 @@ transcode_encoder_t * transcode_encoder_new( encoder_t *p_encoder,
     switch( p_fmt->i_cat )
     {
         case VIDEO_ES:
-        case AUDIO_ES:
             break;
         default:
             return NULL;
@@ -142,8 +141,6 @@ block_t * transcode_encoder_encode( transcode_encoder_t *p_enc, void *in )
     {
         case VIDEO_ES:
             return transcode_encoder_video_encode( p_enc, in );
-        case AUDIO_ES:
-            return transcode_encoder_audio_encode( p_enc, in );
         default:
             vlc_assert_unreachable();
             return NULL;
@@ -183,8 +180,6 @@ int transcode_encoder_open( transcode_encoder_t *p_enc,
 {
     switch( p_enc->p_encoder->fmt_in.i_cat )
     {
-        case AUDIO_ES:
-            return transcode_encoder_audio_open( p_enc, p_cfg );
         case VIDEO_ES:
             return transcode_encoder_video_open( p_enc, p_cfg );
         default:
@@ -201,8 +196,6 @@ int transcode_encoder_drain( transcode_encoder_t *p_enc, block_t **out )
     {
         case VIDEO_ES:
             return transcode_encoder_video_drain( p_enc, out );
-        case AUDIO_ES:
-            return transcode_encoder_audio_drain( p_enc, out );
         default:
             return VLC_EGENERIC;
     }
diff --git a/modules/stream_out/transcode/encoder/encoder.h b/modules/stream_out/transcode/encoder/encoder.h
index 40265eae24f..0fea22e2456 100644
--- a/modules/stream_out/transcode/encoder/encoder.h
+++ b/modules/stream_out/transcode/encoder/encoder.h
@@ -106,5 +106,5 @@ int transcode_encoder_audio_test( encoder_t *p_encoder,
 
 int transcode_encoder_audio_configure( const transcode_encoder_config_t *p_cfg,
                                        const audio_format_t *p_dec_out,
-                                       transcode_encoder_t *p_enc, bool );
+                                       encoder_t *p_enc, bool );
 
diff --git a/modules/stream_out/transcode/encoder/encoder_priv.h b/modules/stream_out/transcode/encoder/encoder_priv.h
index ccbd405d90c..adab51b59c8 100644
--- a/modules/stream_out/transcode/encoder/encoder_priv.h
+++ b/modules/stream_out/transcode/encoder/encoder_priv.h
@@ -33,14 +33,10 @@ struct transcode_encoder_t
     bool b_threaded;
 };
 
-int transcode_encoder_audio_open( transcode_encoder_t *p_enc,
-                                  const transcode_encoder_config_t *p_cfg );
 int transcode_encoder_video_open( transcode_encoder_t *p_enc,
                                    const transcode_encoder_config_t *p_cfg );
 void transcode_encoder_video_close( transcode_encoder_t *p_enc );
 
 block_t * transcode_encoder_video_encode( transcode_encoder_t *p_enc, picture_t *p_pic );
-block_t * transcode_encoder_audio_encode( transcode_encoder_t *p_enc, block_t *p_block );
 
-int transcode_encoder_audio_drain( transcode_encoder_t *p_enc, block_t **out );
 int transcode_encoder_video_drain( transcode_encoder_t *p_enc, block_t **out );
diff --git a/modules/stream_out/transcode/transcode.h b/modules/stream_out/transcode/transcode.h
index d10b4ace1ee..c5cb6a3cea0 100644
--- a/modules/stream_out/transcode/transcode.h
+++ b/modules/stream_out/transcode/transcode.h
@@ -142,6 +142,7 @@ struct sout_stream_id_sys_t
     const transcode_encoder_config_t *p_enccfg;
     union {
         transcode_encoder_t *encoder;
+        encoder_t           *audio_encoder;
         encoder_t           *spu_encoder;
     };
 
-- 
2.29.2



More information about the vlc-devel mailing list