[vlc-commits] [Git][videolan/vlc][master] 2 commits: decoder: use a const fmt
Felix Paul Kühne (@fkuehne)
gitlab at videolan.org
Sun Apr 24 11:50:34 UTC 2022
Felix Paul Kühne pushed to branch master at VideoLAN / VLC
Commits:
2fe09143 by Thomas Guillem at 2022-04-24T11:35:31+00:00
decoder: use a const fmt
- - - - -
2814f8e2 by Thomas Guillem at 2022-04-24T11:35:31+00:00
decoder: use a cfg struct for the input_decoder creation
To avoid modifying 3 functions each time we modify the arguments.
- - - - -
3 changed files:
- src/input/decoder.c
- src/input/decoder.h
- src/input/es_out.c
Changes:
=====================================
src/input/decoder.c
=====================================
@@ -1819,37 +1819,35 @@ static const struct decoder_owner_callbacks dec_spu_cbs =
* \return the decoder object
*/
static vlc_input_decoder_t *
-CreateDecoder( vlc_object_t *p_parent, const es_format_t *fmt,
- const char *psz_id, vlc_clock_t *p_clock,
- input_resource_t *p_resource, sout_stream_t *p_sout,
- enum input_type input_type, const struct vlc_input_decoder_callbacks *cbs,
- void *cbs_userdata )
+CreateDecoder( vlc_object_t *p_parent, const struct vlc_input_decoder_cfg *cfg )
{
decoder_t *p_dec;
vlc_input_decoder_t *p_owner;
static_assert(offsetof(vlc_input_decoder_t, dec) == 0,
"the decoder must be first in the owner structure");
- assert(input_type != INPUT_TYPE_PREPARSING);
+ assert(cfg->input_type != INPUT_TYPE_PREPARSING);
+
+ const es_format_t *fmt = cfg->fmt;
p_owner = vlc_custom_create( p_parent, sizeof( *p_owner ), "decoder" );
if( p_owner == NULL )
return NULL;
p_dec = &p_owner->dec;
- p_owner->psz_id = psz_id;
- p_owner->p_clock = p_clock;
+ p_owner->psz_id = cfg->str_id;
+ p_owner->p_clock = cfg->clock;
p_owner->i_preroll_end = PREROLL_NONE;
- p_owner->p_resource = p_resource;
- p_owner->cbs = cbs;
- p_owner->cbs_userdata = cbs_userdata;
+ p_owner->p_resource = cfg->resource;
+ p_owner->cbs = cfg->cbs;
+ p_owner->cbs_userdata = cfg->cbs_data;
p_owner->p_aout = NULL;
p_owner->p_astream = NULL;
p_owner->p_vout = NULL;
p_owner->vout_started = false;
p_owner->i_spu_channel = VOUT_SPU_CHANNEL_INVALID;
p_owner->i_spu_order = 0;
- p_owner->p_sout = p_sout;
+ p_owner->p_sout = cfg->sout;
p_owner->p_sout_input = NULL;
p_owner->p_packetizer = NULL;
@@ -1894,7 +1892,7 @@ CreateDecoder( vlc_object_t *p_parent, const es_format_t *fmt,
vlc_cond_init( &p_owner->wait_fifo );
/* Load a packetizer module if the input is not already packetized */
- if( p_sout == NULL && !fmt->b_packetized )
+ if( cfg->sout == NULL && !fmt->b_packetized )
{
p_owner->p_packetizer =
vlc_custom_create( p_parent, sizeof( decoder_t ), "packetizer" );
@@ -1916,7 +1914,7 @@ CreateDecoder( vlc_object_t *p_parent, const es_format_t *fmt,
switch( fmt->i_cat )
{
case VIDEO_ES:
- if( input_type == INPUT_TYPE_THUMBNAILING )
+ if( cfg->input_type == INPUT_TYPE_THUMBNAILING )
p_dec->cbs = &dec_thumbnailer_cbs;
else
p_dec->cbs = &dec_video_cbs;
@@ -1933,7 +1931,7 @@ CreateDecoder( vlc_object_t *p_parent, const es_format_t *fmt,
}
/* Find a suitable decoder/packetizer module */
- if( LoadDecoder( p_dec, p_sout != NULL, fmt ) )
+ if( LoadDecoder( p_dec, cfg->sout != NULL, fmt ) )
return p_owner;
assert( p_dec->fmt_in.i_cat == p_dec->fmt_out.i_cat && fmt->i_cat == p_dec->fmt_in.i_cat);
@@ -1957,7 +1955,7 @@ CreateDecoder( vlc_object_t *p_parent, const es_format_t *fmt,
}
/* */
- p_owner->cc.b_supported = ( p_sout == NULL );
+ p_owner->cc.b_supported = ( cfg->sout == NULL );
p_owner->cc.desc.i_608_channels = 0;
p_owner->cc.desc.i_708_channels = 0;
@@ -2081,21 +2079,16 @@ static void DecoderUnsupportedCodec( decoder_t *p_dec, const es_format_t *fmt, b
/* TODO: pass p_sout through p_resource? -- Courmisch */
static vlc_input_decoder_t *
-decoder_New( vlc_object_t *p_parent, const es_format_t *fmt, const char *psz_id,
- vlc_clock_t *p_clock, input_resource_t *p_resource,
- sout_stream_t *p_sout, enum input_type input_type,
- const struct vlc_input_decoder_callbacks *cbs, void *userdata)
+decoder_New( vlc_object_t *p_parent, const struct vlc_input_decoder_cfg *cfg )
{
- const char *psz_type = p_sout ? N_("packetizer") : N_("decoder");
+ const char *psz_type = cfg->sout ? N_("packetizer") : N_("decoder");
int i_priority;
/* Create the decoder configuration structure */
- vlc_input_decoder_t *p_owner =
- CreateDecoder( p_parent, fmt, psz_id, p_clock, p_resource, p_sout,
- input_type, cbs, userdata );
+ vlc_input_decoder_t *p_owner = CreateDecoder( p_parent, cfg );
if( p_owner == NULL )
{
- msg_Err( p_parent, "could not create %s", psz_type );
+ msg_Err( p_parent, "could not create %s", cfg->str_id );
vlc_dialog_display_error( p_parent, _("Streaming / Transcoding failed"),
_("VLC could not open the %s module."), vlc_gettext( psz_type ) );
return NULL;
@@ -2104,10 +2097,10 @@ decoder_New( vlc_object_t *p_parent, const es_format_t *fmt, const char *psz_id,
decoder_t *p_dec = &p_owner->dec;
if( !p_dec->p_module )
{
- DecoderUnsupportedCodec( p_dec, fmt, !p_sout );
+ DecoderUnsupportedCodec( p_dec, cfg->fmt, !cfg->sout );
/* Don't use dec->fmt_in.i_cat since it may not be initialized here. */
- DeleteDecoder( p_owner, fmt->i_cat );
+ DeleteDecoder( p_owner, cfg->fmt->i_cat );
return NULL;
}
@@ -2122,14 +2115,14 @@ decoder_New( vlc_object_t *p_parent, const es_format_t *fmt, const char *psz_id,
#ifdef ENABLE_SOUT
/* Do not delay sout creation for SPU or DATA. */
- if( p_sout && fmt->b_packetized &&
- (fmt->i_cat != VIDEO_ES && fmt->i_cat != AUDIO_ES) )
+ if( cfg->sout && cfg->fmt->b_packetized &&
+ (cfg->fmt->i_cat != VIDEO_ES && cfg->fmt->i_cat != AUDIO_ES) )
{
- p_owner->p_sout_input = sout_InputNew( p_owner->p_sout, fmt );
+ p_owner->p_sout_input = sout_InputNew( p_owner->p_sout, cfg->fmt );
if( p_owner->p_sout_input == NULL )
{
msg_Err( p_dec, "cannot create sout input (%4.4s)",
- (char *)&fmt->i_codec );
+ (char *)&cfg->fmt->i_codec );
p_owner->error = true;
}
}
@@ -2155,15 +2148,9 @@ decoder_New( vlc_object_t *p_parent, const es_format_t *fmt, const char *psz_id,
* \return the spawned decoder object
*/
vlc_input_decoder_t *
-vlc_input_decoder_New( vlc_object_t *parent, es_format_t *fmt,
- const char *psz_id, vlc_clock_t *p_clock,
- input_resource_t *resource,
- sout_stream_t *p_sout, enum input_type input_type,
- const struct vlc_input_decoder_callbacks *cbs,
- void *cbs_userdata)
+vlc_input_decoder_New( vlc_object_t *parent, const struct vlc_input_decoder_cfg *cfg )
{
- return decoder_New( parent, fmt, psz_id, p_clock, resource, p_sout, input_type,
- cbs, cbs_userdata );
+ return decoder_New( parent, cfg );
}
/**
@@ -2171,10 +2158,18 @@ vlc_input_decoder_New( vlc_object_t *parent, es_format_t *fmt,
*/
vlc_input_decoder_t *
vlc_input_decoder_Create( vlc_object_t *p_parent, const es_format_t *fmt,
- input_resource_t *p_resource )
-{
- return decoder_New( p_parent, fmt, NULL, NULL, p_resource, NULL, INPUT_TYPE_NONE,
- NULL, NULL );
+ input_resource_t *p_resource )
+{
+ const struct vlc_input_decoder_cfg cfg = {
+ .fmt = fmt,
+ .str_id = NULL,
+ .clock = NULL,
+ .resource = p_resource,
+ .sout = NULL,
+ .input_type = INPUT_TYPE_NONE,
+ .cbs = NULL, .cbs_data = NULL,
+ };
+ return decoder_New( p_parent, &cfg );
}
@@ -2426,9 +2421,18 @@ int vlc_input_decoder_SetCcState( vlc_input_decoder_t *p_owner, vlc_fourcc_t cod
es_format_Init( &fmt, SPU_ES, codec );
fmt.subs.cc.i_channel = i_channel;
fmt.subs.cc.i_reorder_depth = p_owner->cc.desc.i_reorder_depth;
- p_ccowner = vlc_input_decoder_New( VLC_OBJECT(p_dec), &fmt, p_owner->psz_id,
- p_owner->p_clock, p_owner->p_resource, p_owner->p_sout,
- INPUT_TYPE_NONE, NULL, NULL );
+
+ const struct vlc_input_decoder_cfg cfg = {
+ .fmt = &fmt,
+ .str_id = p_owner->psz_id,
+ .clock = p_owner->p_clock,
+ .resource = p_owner->p_resource,
+ .sout = p_owner->p_sout,
+ .input_type = INPUT_TYPE_NONE,
+ .cbs = NULL, .cbs_data = NULL,
+ };
+
+ p_ccowner = vlc_input_decoder_New( VLC_OBJECT(p_dec), &cfg );
if( !p_ccowner )
{
msg_Err( p_dec, "could not create decoder" );
=====================================
src/input/decoder.h
=====================================
@@ -50,11 +50,21 @@ struct vlc_input_decoder_callbacks {
void *userdata);
};
+struct vlc_input_decoder_cfg
+{
+ const es_format_t *fmt;
+ const char *str_id;
+ vlc_clock_t *clock;
+ input_resource_t *resource;
+ sout_stream_t *sout;
+ enum input_type input_type;
+ const struct vlc_input_decoder_callbacks *cbs;
+ void *cbs_data;
+};
+
vlc_input_decoder_t *
-vlc_input_decoder_New( vlc_object_t *parent, es_format_t *, const char *psz_id, vlc_clock_t *,
- input_resource_t *, sout_stream_t *, enum input_type input_type,
- const struct vlc_input_decoder_callbacks *cbs,
- void *userdata ) VLC_USED;
+vlc_input_decoder_New( vlc_object_t *parent,
+ const struct vlc_input_decoder_cfg *cfg );
/**
* This function changes the pause state.
=====================================
src/input/es_out.c
=====================================
@@ -851,12 +851,18 @@ static int EsOutSetRecord( es_out_t *out, bool b_record )
if( !p_es->p_dec )
continue;
- p_es->p_dec_record =
- vlc_input_decoder_New( VLC_OBJECT(p_input), &p_es->fmt,
- p_es->id.str_id, NULL,
- input_priv(p_input)->p_resource,
- p_sys->p_sout_record, INPUT_TYPE_NONE,
- &decoder_cbs, p_es );
+ const struct vlc_input_decoder_cfg cfg = {
+ .fmt = &p_es->fmt,
+ .str_id = p_es->id.str_id,
+ .clock = NULL,
+ .resource = input_priv(p_input)->p_resource,
+ .sout = p_sys->p_sout_record,
+ .input_type = INPUT_TYPE_NONE,
+ .cbs = &decoder_cbs,
+ .cbs_data = p_es,
+ };
+
+ p_es->p_dec_record = vlc_input_decoder_New( VLC_OBJECT(p_input), &cfg );
if( p_es->p_dec_record && p_sys->b_buffering )
vlc_input_decoder_StartWait( p_es->p_dec_record );
@@ -2340,10 +2346,17 @@ static void EsOutCreateDecoder( es_out_t *out, es_out_id_t *p_es )
}
input_thread_private_t *priv = input_priv(p_input);
- dec = vlc_input_decoder_New( VLC_OBJECT(p_input), &p_es->fmt,
- p_es->id.str_id, p_es->p_clock,
- priv->p_resource, priv->p_sout,
- p_sys->input_type, &decoder_cbs, p_es );
+ const struct vlc_input_decoder_cfg cfg = {
+ .fmt = &p_es->fmt,
+ .str_id = p_es->id.str_id,
+ .clock = p_es->p_clock,
+ .resource = priv->p_resource,
+ .sout = priv->p_sout,
+ .input_type = p_sys->input_type,
+ .cbs = &decoder_cbs,
+ .cbs_data = p_es,
+ };
+ dec = vlc_input_decoder_New( VLC_OBJECT(p_input), &cfg );
if( dec != NULL )
{
vlc_input_decoder_ChangeRate( dec, p_sys->rate );
@@ -2353,11 +2366,18 @@ static void EsOutCreateDecoder( es_out_t *out, es_out_id_t *p_es )
if( !p_es->p_master && p_sys->p_sout_record )
{
- p_es->p_dec_record =
- vlc_input_decoder_New( VLC_OBJECT(p_input), &p_es->fmt,
- p_es->id.str_id, NULL,
- priv->p_resource, p_sys->p_sout_record,
- INPUT_TYPE_NONE, &decoder_cbs, p_es );
+ const struct vlc_input_decoder_cfg rec_cfg = {
+ .fmt = &p_es->fmt,
+ .str_id = p_es->id.str_id,
+ .clock = NULL,
+ .resource = priv->p_resource,
+ .sout = p_sys->p_sout_record,
+ .input_type = INPUT_TYPE_NONE,
+ .cbs = &decoder_cbs,
+ .cbs_data = p_es,
+ };
+ p_es->p_dec_record = vlc_input_decoder_New( VLC_OBJECT(p_input), &rec_cfg );
+
if( p_es->p_dec_record && p_sys->b_buffering )
vlc_input_decoder_StartWait( p_es->p_dec_record );
}
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/cea941e93025b7834011cd5866692b1d07996a18...2814f8e27de87ef1ada81c01cf8957f1620970fc
--
View it on GitLab: https://code.videolan.org/videolan/vlc/-/compare/cea941e93025b7834011cd5866692b1d07996a18...2814f8e27de87ef1ada81c01cf8957f1620970fc
You're receiving this email because of your account on code.videolan.org.
VideoLAN code repository instance
More information about the vlc-commits
mailing list