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