Browse Source

decoder: pass the selected CC decoder

For now, it is only used for optimizations: avoid to allocate blocks for
unselected decoders.
pull/162/head
Thomas Guillem 3 years ago
committed by Steve Lhomme
parent
commit
b6fdb4a1c7
  1. 10
      src/input/decoder.c
  2. 1
      src/input/decoder.h
  3. 3
      src/input/es_out.c

10
src/input/decoder.c

@ -216,6 +216,7 @@ struct vlc_input_decoder_t
#define MAX_CC_DECODERS 64 /* The es_out only creates one type of es */
struct
{
vlc_fourcc_t selected_codec;
vlc_mutex_t lock;
bool b_supported;
decoder_cc_desc_t desc;
@ -1183,10 +1184,9 @@ static void DecoderPlayCcLocked( vlc_input_decoder_t *p_owner, vlc_frame_t *p_cc
vlc_mutex_lock(&p_owner->cc.lock);
p_owner->cc.desc = *p_desc;
/* Fanout data to all decoders. We do not know if es_out
selected 608 or 708. */
uint64_t i_bitmap = p_owner->cc.desc.i_608_channels |
p_owner->cc.desc.i_708_channels;
uint64_t i_bitmap = p_owner->cc.selected_codec == VLC_CODEC_CEA708 ?
p_owner->cc.desc.i_708_channels :
p_owner->cc.desc.i_608_channels;
for( int i=0; i_bitmap > 0; i_bitmap >>= 1, i++ )
{
@ -2011,6 +2011,8 @@ CreateDecoder( vlc_object_t *p_parent, const struct vlc_input_decoder_cfg *cfg )
/* */
vlc_mutex_init(&p_owner->cc.lock);
p_owner->cc.selected_codec = cfg->cc_decoder == 708 ?
VLC_CODEC_CEA708 : VLC_CODEC_CEA608;
p_owner->cc.b_supported = ( cfg->sout == NULL );
p_owner->cc.desc.i_608_channels = 0;

1
src/input/decoder.h

@ -58,6 +58,7 @@ struct vlc_input_decoder_cfg
input_resource_t *resource;
sout_stream_t *sout;
enum input_type input_type;
unsigned cc_decoder;
const struct vlc_input_decoder_callbacks *cbs;
void *cbs_data;
};

3
src/input/es_out.c

@ -822,6 +822,7 @@ static int EsOutSetRecord( es_out_t *out, bool b_record, const char *dir_path )
.resource = input_priv(p_input)->p_resource,
.sout = p_sys->p_sout_record,
.input_type = INPUT_TYPE_NONE,
.cc_decoder = p_sys->cc_decoder,
.cbs = &decoder_cbs,
.cbs_data = p_es,
};
@ -2277,6 +2278,7 @@ static void EsOutCreateDecoder( es_out_t *out, es_out_id_t *p_es )
.resource = priv->p_resource,
.sout = priv->p_sout,
.input_type = p_sys->input_type,
.cc_decoder = p_sys->cc_decoder,
.cbs = &decoder_cbs,
.cbs_data = p_es,
};
@ -2300,6 +2302,7 @@ static void EsOutCreateDecoder( es_out_t *out, es_out_id_t *p_es )
.resource = priv->p_resource,
.sout = p_sys->p_sout_record,
.input_type = INPUT_TYPE_NONE,
.cc_decoder = p_sys->cc_decoder,
.cbs = &decoder_cbs,
.cbs_data = p_es,
};

Loading…
Cancel
Save