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.
Unified · Split
| @@ -125,8 +125,8 @@ fail: · 124 unmodified lines | ||
| 125 | 125 | return ret; |
| 126 | 126 | } |
| 127 | 127 | |
| 128 | −static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamDefinition *param, | |
| 129 | − const IAMFAudioElement *audio_element, void *log_ctx) | |
| 128 | +static int add_param_definition(IAMFContext *iamf, AVIAMFParamDefinition *param, | |
| 129 | + const IAMFAudioElement *audio_element, void *log_ctx) | |
| 130 | 130 | { |
| 131 | 131 | IAMFParamDefinition **tmp, *param_definition; |
| 132 | 132 | IAMFCodecConfig *codec_config = NULL; |
| @@ -134,7 +134,7 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD · 1 unmodified line | ||
| 134 | 134 | tmp = av_realloc_array(iamf->param_definitions, iamf->nb_param_definitions + 1, |
| 135 | 135 | sizeof(*iamf->param_definitions)); |
| 136 | 136 | if (!tmp) |
| 137 | − return NULL; | |
| 137 | + return AVERROR(ENOMEM); | |
| 138 | 138 | |
| 139 | 139 | iamf->param_definitions = tmp; |
| 140 | 140 | |
| @@ -145,7 +145,7 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD · 4 unmodified lines | ||
| 145 | 145 | if (!codec_config) { |
| 146 | 146 | av_log(log_ctx, AV_LOG_ERROR, "parameter_rate needed but not set for parameter_id %u\n", |
| 147 | 147 | param->parameter_id); |
| 148 | − return NULL; | |
| 148 | + return AVERROR(EINVAL); | |
| 149 | 149 | } |
| 150 | 150 | param->parameter_rate = codec_config->sample_rate; |
| 151 | 151 | } |
| @@ -158,14 +158,14 @@ static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamD · 6 unmodified lines | ||
| 158 | 158 | |
| 159 | 159 | param_definition = av_mallocz(sizeof(*param_definition)); |
| 160 | 160 | if (!param_definition) |
| 161 | − return NULL; | |
| 161 | + return AVERROR(ENOMEM); | |
| 162 | 162 | |
| 163 | 163 | param_definition->mode = !!param->duration; |
| 164 | 164 | param_definition->param = param; |
| 165 | 165 | param_definition->audio_element = audio_element; |
| 166 | 166 | iamf->param_definitions[iamf->nb_param_definitions++] = param_definition; |
| 167 | 167 | |
| 168 | − return param_definition; | |
| 168 | + return 0; | |
| 169 | 169 | } |
| 170 | 170 | |
| 171 | 171 | 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 · 108 unmodified lines | ||
| 280 | 280 | } |
| 281 | 281 | |
| 282 | 282 | if (!param_definition) { |
| 283 | − param_definition = add_param_definition(iamf, param, audio_element, log_ctx); | |
| 284 | − if (!param_definition) | |
| 285 | − return AVERROR(ENOMEM); | |
| 283 | + ret = add_param_definition(iamf, param, audio_element, log_ctx); | |
| 284 | + if (ret < 0) | |
| 285 | + return ret; | |
| 286 | 286 | } |
| 287 | 287 | } |
| 288 | 288 | if (iamf_audio_element->recon_gain_info) { |
| @@ -295,9 +295,9 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void · 6 unmodified lines | ||
| 295 | 295 | } |
| 296 | 296 | |
| 297 | 297 | if (!param_definition) { |
| 298 | − param_definition = add_param_definition(iamf, param, audio_element, log_ctx); | |
| 299 | − if (!param_definition) | |
| 300 | − return AVERROR(ENOMEM); | |
| 298 | + ret = add_param_definition(iamf, param, audio_element, log_ctx); | |
| 299 | + if (ret < 0) | |
| 300 | + return ret; | |
| 301 | 301 | } |
| 302 | 302 | } |
| 303 | 303 | |
| @@ -314,6 +314,7 @@ int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void · 10 unmodified lines | ||
| 314 | 314 | int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx) |
| 315 | 315 | { |
| 316 | 316 | IAMFMixPresentation **tmp, *mix_presentation; |
| 317 | + int ret; | |
| 317 | 318 | |
| 318 | 319 | if (stg->type != AV_STREAM_GROUP_PARAMS_IAMF_MIX_PRESENTATION) |
| 319 | 320 | return AVERROR(EINVAL); |
| @@ -345,9 +346,9 @@ int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, vo · 25 unmodified lines | ||
| 345 | 346 | |
| 346 | 347 | param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id); |
| 347 | 348 | if (!param_definition) { |
| 348 | − param_definition = add_param_definition(iamf, param, NULL, log_ctx); | |
| 349 | − if (!param_definition) | |
| 350 | − return AVERROR(ENOMEM); | |
| 349 | + ret = add_param_definition(iamf, param, NULL, log_ctx); | |
| 350 | + if (ret < 0) | |
| 351 | + return ret; | |
| 351 | 352 | } |
| 352 | 353 | |
| 353 | 354 | 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 · 7 unmodified lines | ||
| 361 | 362 | } |
| 362 | 363 | param_definition = ff_iamf_get_param_definition(iamf, param->parameter_id); |
| 363 | 364 | if (!param_definition) { |
| 364 | − param_definition = add_param_definition(iamf, param, NULL, log_ctx); | |
| 365 | − if (!param_definition) | |
| 366 | − return AVERROR(ENOMEM); | |
| 365 | + ret = add_param_definition(iamf, param, NULL, log_ctx); | |
| 366 | + if (ret < 0) | |
| 367 | + return ret; | |
| 367 | 368 | } |
| 368 | 369 | } |
| 369 | 370 | } |