Browse Source

core: add decoder_LoadModule()

Common helper to load decoder by type or packetizer.
Will be extended to also load packetizers by type.
pull/183/head
Thomas Guillem 1 year ago
parent
commit
b429869db7
  1. 12
      include/vlc_codec.h
  2. 32
      src/input/decoder_helpers.c
  3. 1
      src/libvlccore.sym

12
include/vlc_codec.h

@ -401,6 +401,18 @@ VLC_API picture_t *decoder_NewPicture( decoder_t *dec );
*/
VLC_API void decoder_Init( decoder_t *dec, es_format_t *fmt_in, const es_format_t *fmt );
/**
* Load a decoder or packetizer module
*
* To be used by decoder owners.
* @param dec a valid and initialized decoder
* @packetizer true if the decoder_t is a packetizer
* @use_varoption if true, will try to load the decoder from the corresponding
* option (if set by the user)
*/
VLC_API int decoder_LoadModule(decoder_t *dec, bool packetizer,
bool use_varoption);
/**
* Destroy a decoder and reset the structure.
*

32
src/input/decoder_helpers.c

@ -51,6 +51,38 @@ void decoder_Init( decoder_t *p_dec, es_format_t *restrict fmt_in, const es_form
es_format_Init( &p_dec->fmt_out, p_fmt->i_cat, 0 );
}
int decoder_LoadModule(decoder_t *dec, bool packetizer,
bool use_varoption)
{
assert(dec->fmt_in->i_cat != UNKNOWN_ES);
assert(dec->p_module == NULL);
static const char dec_caps[ES_CATEGORY_COUNT][16] = {
[VIDEO_ES] = "video decoder",
[AUDIO_ES] = "audio decoder",
[SPU_ES] = "spu decoder",
};
const char *type, *option;
if (packetizer)
{
type = "packetizer";
option = use_varoption ? "packetizer" : NULL;
}
else
{
type = dec_caps[dec->fmt_in->i_cat];
option = use_varoption ? "codec" : NULL;
}
if (option != NULL)
dec->p_module = module_need_var(dec, type, option);
else
dec->p_module = module_need(dec, type, NULL, false);
return dec->p_module == NULL ? VLC_ENOENT : VLC_SUCCESS;
}
void decoder_Clean( decoder_t *p_dec )
{
if ( p_dec->p_module != NULL )

1
src/libvlccore.sym

@ -93,6 +93,7 @@ date_Increment
date_Init
decoder_NewPicture
decoder_Init
decoder_LoadModule
decoder_Clean
decoder_Destroy
decoder_NewAudioBuffer

Loading…
Cancel
Save