diff --git a/src/audio/codec_adapter/codec/cadence.c b/src/audio/codec_adapter/codec/cadence.c index 05e75f6b9..c4f00f52b 100644 --- a/src/audio/codec_adapter/codec/cadence.c +++ b/src/audio/codec_adapter/codec/cadence.c @@ -94,13 +94,59 @@ static struct cadence_api cadence_api_table[] = { #endif }; +static int cadence_codec_post_init(struct processing_module *mod) +{ + int ret; + struct comp_dev *dev = mod->dev; + struct module_data *codec = comp_get_module_data(dev); + struct cadence_codec_data *cd = codec->private; + uint32_t obj_size; + + comp_dbg(dev, "cadence_codec_post_init() start"); + + /* Obtain codec name */ + API_CALL(cd, XA_API_CMD_GET_LIB_ID_STRINGS, + XA_CMD_TYPE_LIB_NAME, cd->name, ret); + if (ret != LIB_NO_ERROR) { + comp_err(dev, "cadence_codec_init() error %x: failed to get lib name", + ret); + return ret; + } + /* Get codec object size */ + API_CALL(cd, XA_API_CMD_GET_API_SIZE, 0, &obj_size, ret); + if (ret != LIB_NO_ERROR) { + comp_err(dev, "cadence_codec_init() error %x: failed to get lib object size", + ret); + return ret; + } + /* Allocate space for codec object */ + cd->self = rballoc(0, SOF_MEM_CAPS_RAM, obj_size); + if (!cd->self) { + comp_err(dev, "cadence_codec_init(): failed to allocate space for lib object"); + return -ENOMEM; + } + + comp_dbg(dev, "cadence_codec_post_init(): allocated %d bytes for lib object", obj_size); + + /* Set all params to their default values */ + API_CALL(cd, XA_API_CMD_INIT, XA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS, + NULL, ret); + if (ret != LIB_NO_ERROR) { + rfree(cd->self); + return ret; + } + + comp_dbg(dev, "cadence_codec_post_init() done"); + + return 0; +} + static int cadence_codec_init(struct processing_module *mod) { int ret; struct comp_dev *dev = mod->dev; struct module_data *codec = comp_get_module_data(dev); struct cadence_codec_data *cd = NULL; - uint32_t obj_size; uint32_t no_of_api = ARRAY_SIZE(cadence_api_table); uint32_t api_id = CODEC_GET_API_ID(DEFAULT_CODEC_ID); uint32_t i; @@ -160,38 +206,9 @@ static int cadence_codec_init(struct processing_module *mod) setup_cfg->avail = true; } - /* Obtain codec name */ - API_CALL(cd, XA_API_CMD_GET_LIB_ID_STRINGS, - XA_CMD_TYPE_LIB_NAME, cd->name, ret); - if (ret != LIB_NO_ERROR) { - comp_err(dev, "cadence_codec_init() error %x: failed to get lib name", - ret); - goto free; - } - /* Get codec object size */ - API_CALL(cd, XA_API_CMD_GET_API_SIZE, 0, &obj_size, ret); - if (ret != LIB_NO_ERROR) { - comp_err(dev, "cadence_codec_init() error %x: failed to get lib object size", - ret); - goto free; - } - /* Allocate space for codec object */ - cd->self = rballoc(0, SOF_MEM_CAPS_RAM, obj_size); - if (!cd->self) { - comp_err(dev, "cadence_codec_init(): failed to allocate space for lib object"); - ret = -ENOMEM; - goto free; - } - - comp_dbg(dev, "cadence_codec_init(): allocated %d bytes for lib object", obj_size); - - /* Set all params to their default values */ - API_CALL(cd, XA_API_CMD_INIT, XA_CMD_TYPE_INIT_API_PRE_CONFIG_PARAMS, - NULL, ret); - if (ret != LIB_NO_ERROR) { - rfree(cd->self); - goto free; - } + ret = cadence_codec_post_init(mod); + if (ret) + return ret; comp_dbg(dev, "cadence_codec_init() done");