summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2024-02-19 23:08:05 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2024-02-19 23:30:06 +0100
commitc5845afd095393a48967df97adf192cf155acc82 (patch)
tree72c9638064e333c85af12a8e85e1788b716d7bde
parent18af922c536ad7c89e74a3326c58b6c93254a50f (diff)
avformat/iamf_writer: Return proper error codes
Surprisingly the return value of add_param_definition() (a pointer) has only been used to check for success and not to actually access the pointee; nonsuccess was equated with ENOMEM, although there is a non-enomem error path in this function. Change this by returning an int. Reviewed-by: James Almer <jamrial@gmail.com> Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
-rw-r--r--libavformat/iamf_writer.c37
1 files changed, 19 insertions, 18 deletions
diff --git a/libavformat/iamf_writer.c b/libavformat/iamf_writer.c
index e8a88b44c3..b12c7e77f9 100644
--- a/libavformat/iamf_writer.c
+++ b/libavformat/iamf_writer.c
@@ -125,8 +125,8 @@ fail:
return ret;
}
-static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamDefinition *param,
- const IAMFAudioElement *audio_element, void *log_ctx)
+static int add_param_definition(IAMFContext *iamf, AVIAMFParamDefinition *param,
+ const IAMFAudioElement *audio_element, void *log_ctx)
{
IAMFParamDefinition **tmp, *param_definition;
IAMFCodecConfig *codec_config = NULL;
@@ -134,7 +134,7 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD
tmp = av_realloc_array(iamf->param_definitions, iamf->nb_param_definitions + 1,
sizeof(*iamf->param_definitions));
if (!tmp)
- return NULL;
+ return AVERROR(ENOMEM);
iamf->param_definitions = tmp;
@@ -145,7 +145,7 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD
if (!codec_config) {
av_log(log_ctx, AV_LOG_ERROR, "parameter_rate needed but not set for parameter_id %u\n",
param->parameter_id);
- return NULL;
+ return AVERROR(EINVAL);
}
param->parameter_rate = codec_config->sample_rate;
}
@@ -158,14 +158,14 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD
param_definition = av_mallocz(sizeof(*param_definition));
if (!param_definition)
- return NULL;
+ return AVERROR(ENOMEM);
param_definition->mode = !!param->duration;
param_definition->param = param;
param_definition->audio_element = audio_element;
iamf->param_definitions[iamf->nb_param_definitions++] = param_definition;
- return param_definition;
+ return 0;
}
int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx)
@@ -280,9 +280,9 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void
}
if (!param_definition) {
- param_definition = add_param_definition(iamf, param, audio_element, log_ctx);
- if (!param_definition)
- return AVERROR(ENOMEM);
+ ret = add_param_definition(iamf, param, audio_element, log_ctx);
+ if (ret < 0)
+ return ret;
}
}
if (iamf_audio_element->recon_gain_info) {
@@ -295,9 +295,9 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void
}
if (!param_definition) {
- param_definition = add_param_definition(iamf, param, audio_element, log_ctx);
- if (!param_definition)
- return AVERROR(ENOMEM);
+ ret = add_param_definition(iamf, param, audio_element, log_ctx);
+ if (ret < 0)
+ return ret;
}
}
@@ -314,6 +314,7 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void
int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx)
{
IAMFMixPresentation **tmp, *mix_presentation;
+ int ret;
if (stg->type != AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION)
return AVERROR(EINVAL);
@@ -345,9 +346,9 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo
param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id);
if (!param_definition) {
- param_definition = add_param_definition(iamf, param, NULL, log_ctx);
- if (!param_definition)
- return AVERROR(ENOMEM);
+ ret = add_param_definition(iamf, param, NULL, log_ctx);
+ if (ret < 0)
+ return ret;
}
for (int j = 0; j < submix->nb_elements; j++) {
@@ -361,9 +362,9 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo
}
param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id);
if (!param_definition) {
- param_definition = add_param_definition(iamf, param, NULL, log_ctx);
- if (!param_definition)
- return AVERROR(ENOMEM);
+ ret = add_param_definition(iamf, param, NULL, log_ctx);
+ if (ret < 0)
+ return ret;
}
}
}