History

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.

Andreas Rheinhardt committed 2 years ago

Commit c5845af1 parent 18af9221 file · +19 −18Browse files

Unified · Split

libavformat/iamf_writer.c+19−18
@@ -125,8 +125,8 @@ fail: · 124 unmodified lines
125 return ret;125 return ret;
126}126}
127 127
128static IAMFParamDefinition *add_param_definition(IAMFContext *iamf, AVIAMFParamDefinition *param,128static 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
171int ff_iamf_add_audio_element(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx)171int 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
314int ff_iamf_add_mix_presentation(IAMFContext *iamf, const AVStreamGroup *stg, void *log_ctx)314int 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 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t