Revert "codec_adapter: cadece: remove unnecessary goto's and fix memory leaks"

This reverts commit 07f84ee0bf.
This commit is contained in:
Liam Girdwood 2022-01-21 12:01:42 +00:00
parent f28ec17402
commit 1635fa4723
1 changed files with 37 additions and 28 deletions

View File

@ -133,7 +133,7 @@ static int cadence_codec_init(struct comp_dev *dev)
comp_err(dev, "cadence_codec_init(): could not find API function for id %x",
api_id);
ret = -EINVAL;
goto free;
goto out;
}
/* Obtain codec name */
@ -142,36 +142,38 @@ static int cadence_codec_init(struct comp_dev *dev)
if (ret != LIB_NO_ERROR) {
comp_err(dev, "cadence_codec_init() error %x: failed to get lib name",
ret);
goto free;
module_free_memory(dev, cd);
goto out;
}
/* 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;
module_free_memory(dev, cd);
goto out;
}
/* Allocate space for codec object */
cd->self = module_allocate_memory(dev, obj_size, 0);
if (!cd->self) {
comp_err(dev, "cadence_codec_init(): failed to allocate space for lib object");
ret = -ENOMEM;
goto free;
module_free_memory(dev, cd);
goto out;
} else {
comp_dbg(dev, "cadence_codec_init(): allocated %d bytes for lib object",
obj_size);
}
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)
goto free;
if (ret != LIB_NO_ERROR) {
comp_err(dev, "cadence_codec_init(): error %x: failed to set default config",
ret);
goto out;
}
comp_dbg(dev, "cadence_codec_init() done");
return 0;
free:
module_free_memory(dev, cd);
out:
return ret;
}
@ -195,7 +197,8 @@ static int apply_config(struct comp_dev *dev, enum module_cfg_type type)
if (!cfg->avail || !size) {
comp_err(dev, "apply_config() error: no config available, requested conf. type %d",
type);
return -EIO;
ret = -EIO;
goto ret;
}
/* Read parameters stored in `data` - it may keep plenty of
@ -213,7 +216,7 @@ static int apply_config(struct comp_dev *dev, enum module_cfg_type type)
comp_err(dev, "apply_config() error %x: failed to apply parameter %d value %d",
ret, param->id, *(int32_t *)param->data);
if (LIB_IS_FATAL_ERROR(ret))
return ret;
goto ret;
}
/* Obtain next parameter, it starts right after the preceding one */
data = (char *)data + param->size;
@ -221,8 +224,9 @@ static int apply_config(struct comp_dev *dev, enum module_cfg_type type)
}
comp_dbg(dev, "apply_config() done");
return 0;
ret = 0;
ret:
return ret;
}
static int init_memory_tables(struct comp_dev *dev)
@ -241,7 +245,7 @@ static int init_memory_tables(struct comp_dev *dev)
if (ret != LIB_NO_ERROR) {
comp_err(dev, "init_memory_tables() error %x: failed to calculate memory blocks size",
ret);
return ret;
goto err;
}
/* Get number of memory tables */
@ -249,7 +253,7 @@ static int init_memory_tables(struct comp_dev *dev)
if (ret != LIB_NO_ERROR) {
comp_err(dev, "init_memory_tables() error %x: failed to get number of memory tables",
ret);
return ret;
goto err;
}
/* Initialize each memory table */
@ -435,17 +439,19 @@ static int cadence_codec_prepare(struct comp_dev *dev)
if (ret != LIB_NO_ERROR) {
comp_err(dev, "cadence_codec_prepare() error %x: failed to get memtabs size",
ret);
return ret;
goto err;
}
cd->mem_tabs = module_allocate_memory(dev, mem_tabs_size, 4);
if (!cd->mem_tabs) {
comp_err(dev, "cadence_codec_prepare() error: failed to allocate space for memtabs");
return -ENOMEM;
ret = -ENOMEM;
goto err;
} else {
comp_dbg(dev, "cadence_codec_prepare(): allocated %d bytes for memtabs",
mem_tabs_size);
}
comp_dbg(dev, "cadence_codec_prepare(): allocated %d bytes for memtabs", mem_tabs_size);
API_CALL(cd, XA_API_CMD_SET_MEMTABS_PTR, 0, cd->mem_tabs, ret);
if (ret != LIB_NO_ERROR) {
comp_err(dev, "cadence_codec_prepare() error %x: failed to set memtabs",
@ -483,6 +489,7 @@ static int cadence_codec_prepare(struct comp_dev *dev)
return 0;
free:
module_free_memory(dev, cd->mem_tabs);
err:
return ret;
}
@ -512,33 +519,35 @@ static int cadence_codec_process(struct comp_dev *dev)
if (ret != LIB_NO_ERROR) {
comp_err(dev, "cadence_codec_process() error %x: failed to set size of input data",
ret);
return ret;
goto err;
}
API_CALL(cd, XA_API_CMD_EXECUTE, XA_CMD_TYPE_DO_EXECUTE, NULL, ret);
if (ret != LIB_NO_ERROR) {
comp_err(dev, "cadence_codec_process() error %x: processing failed",
ret);
return ret;
goto err;
}
API_CALL(cd, XA_API_CMD_GET_OUTPUT_BYTES, 0, &codec->mpd.produced, ret);
if (ret != LIB_NO_ERROR) {
comp_err(dev, "cadence_codec_process() error %x: could not get produced bytes",
ret);
return ret;
goto err;
}
API_CALL(cd, XA_API_CMD_GET_CURIDX_INPUT_BUF, 0, &codec->mpd.consumed, ret);
if (ret != LIB_NO_ERROR) {
comp_err(dev, "cadence_codec_process() error %x: could not get consumed bytes",
ret);
return ret;
goto err;
}
comp_dbg(dev, "cadence_codec_process() done");
return 0;
err:
return ret;
}
static int cadence_codec_apply_config(struct comp_dev *dev)