[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