[FFmpeg-devel] [PATCH 1/2] lavf/dvenc: improve error messaging

Anton Khirnov anton at khirnov.net
Sun Jan 21 08:36:48 EET 2024


Quoting Stefano Sabatini (2024-01-20 16:24:07)
>      if ((c->sys->time_base.den != 25 && c->sys->time_base.den != 50) || c->sys->time_base.num != 1) {
> -        if (c->ast[0] && c->ast[0]->codecpar->sample_rate != 48000)
> -            goto bail_out;
> -        if (c->ast[1] && c->ast[1]->codecpar->sample_rate != 48000)
> -            goto bail_out;
> +        int j;

No need to declare a loop variable outside of the loop. Also, there's
already i.

> -    if (((c->n_ast > 1) && (c->sys->n_difchan < 2)) ||
> -        ((c->n_ast > 2) && (c->sys->n_difchan < 4))) {
> -        /* only 2 stereo pairs allowed in 50Mbps mode */
> -        goto bail_out;
> +    if ((c->n_ast > 1) && (c->sys->n_difchan < 2)) {
> +        av_log(s, AV_LOG_ERROR,
> +               "Invalid number of channels %d, only 1 stereo pairs is allowed in 25Mps mode.\n",
> +               c->n_ast);
> +        return AVERROR_INVALIDDATA;
> +    }
> +    if ((c->n_ast > 2) && (c->sys->n_difchan < 4)) {
> +        av_log(s, AV_LOG_ERROR,
> +               "Invalid number of channels %d, only 2 stereo pairs are allowed in 50Mps mode.\n",
> +               c->n_ast);
> +        return AVERROR_INVALIDDATA;

Surely this can be done in one log statement.

>      }
>  
>      /* Ok, everything seems to be in working order */
> @@ -376,14 +427,14 @@ static DVMuxContext* dv_init_mux(AVFormatContext* s)
>          if (!c->ast[i])
>             continue;
>          c->audio_data[i] = av_fifo_alloc2(100 * MAX_AUDIO_FRAME_SIZE, 1, 0);
> -        if (!c->audio_data[i])
> -            goto bail_out;
> +        if (!c->audio_data[i]) {
> +            av_log(s, AV_LOG_ERROR,
> +                   "Failed to allocate internal buffer.\n");

Dedicated log messages for small malloc failures are useless bloat.

> +            return AVERROR(ENOMEM);
> +        }
>      }
>  
> -    return c;
> -
> -bail_out:
> -    return NULL;
> +    return 0;
>  }
>  
>  static int dv_write_header(AVFormatContext *s)
> @@ -392,10 +443,10 @@ static int dv_write_header(AVFormatContext *s)
>      DVMuxContext *dvc = s->priv_data;
>      AVDictionaryEntry *tcr = av_dict_get(s->metadata, "timecode", NULL, 0);
>  
> -    if (!dv_init_mux(s)) {
> +    if (dv_init_mux(s) < 0) {
>          av_log(s, AV_LOG_ERROR, "Can't initialize DV format!\n"
>                      "Make sure that you supply exactly two streams:\n"

This seems inconsistent with the other checks.

> -                    "     video: 25fps or 29.97fps, audio: 2ch/48|44|32kHz/PCM\n"
> +                    "     video: 25fps or 29.97fps, audio: 2ch/48000|44100|32000Hz/PCM\n"

This does not seem like an improvement.

-- 
Anton Khirnov


More information about the ffmpeg-devel mailing list