diff mbox series

[FFmpeg-devel,v3,2/5] avcodec/mpegvideo_enc: return more specific error codes for ff_mpv_encode_init()

Message ID 1588857720-26943-1-git-send-email-lance.lmwang@gmail.com
State Superseded
Headers show
Series None | expand

Commit Message

Lance Wang May 7, 2020, 1:22 p.m. UTC
From: Limin Wang <lance.lmwang@gmail.com>

Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
---
 libavcodec/mpegvideo_enc.c | 85 +++++++++++++++++++++++-----------------------
 1 file changed, 43 insertions(+), 42 deletions(-)

Comments

James Almer May 7, 2020, 1:29 p.m. UTC | #1
On 5/7/2020 10:22 AM, lance.lmwang@gmail.com wrote:
> From: Limin Wang <lance.lmwang@gmail.com>
> 
> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
> ---
>  libavcodec/mpegvideo_enc.c | 85 +++++++++++++++++++++++-----------------------
>  1 file changed, 43 insertions(+), 42 deletions(-)
> 
> diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
> index e1fd92c..bb7ac88 100644
> --- a/libavcodec/mpegvideo_enc.c
> +++ b/libavcodec/mpegvideo_enc.c
> @@ -298,7 +298,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
>              avctx->pix_fmt != AV_PIX_FMT_YUV422P) {
>              av_log(avctx, AV_LOG_ERROR,
>                     "only YUV420 and YUV422 are supported\n");
> -            return -1;
> +            return AVERROR(EINVAL);
>          }
>          break;
>      case AV_CODEC_ID_MJPEG:
> @@ -322,13 +322,13 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
>  
>          if (!format_supported) {
>              av_log(avctx, AV_LOG_ERROR, "colorspace not supported in jpeg\n");
> -            return -1;
> +            return AVERROR(EINVAL);
>          }
>          break;
>      default:
>          if (avctx->pix_fmt != AV_PIX_FMT_YUV420P) {
>              av_log(avctx, AV_LOG_ERROR, "only YUV420 is supported\n");
> -            return -1;
> +            return AVERROR(EINVAL);
>          }
>      }
>  
> @@ -456,7 +456,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>  
>      if ((!avctx->rc_max_rate) != (!avctx->rc_buffer_size)) {
>          av_log(avctx, AV_LOG_ERROR, "Either both buffer size and max rate or neither must be specified\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (avctx->rc_min_rate && avctx->rc_max_rate != avctx->rc_min_rate) {
> @@ -466,12 +466,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
>  
>      if (avctx->rc_min_rate && avctx->rc_min_rate > avctx->bit_rate) {
>          av_log(avctx, AV_LOG_ERROR, "bitrate below min bitrate\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (avctx->rc_max_rate && avctx->rc_max_rate < avctx->bit_rate) {
>          av_log(avctx, AV_LOG_ERROR, "bitrate above max bitrate\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (avctx->rc_max_rate &&
> @@ -485,7 +485,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          avctx->bit_rate * (int64_t)avctx->time_base.num >
>              avctx->rc_buffer_size * (int64_t)avctx->time_base.den) {
>          av_log(avctx, AV_LOG_ERROR, "VBV buffer too small for bitrate\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (!s->fixed_qscale &&
> @@ -511,18 +511,18 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          s->codec_id != AV_CODEC_ID_H263 && s->codec_id != AV_CODEC_ID_H263P &&
>          s->codec_id != AV_CODEC_ID_FLV1) {
>          av_log(avctx, AV_LOG_ERROR, "4MV not supported by codec\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (s->obmc && s->avctx->mb_decision != FF_MB_DECISION_SIMPLE) {
>          av_log(avctx, AV_LOG_ERROR,
>                 "OBMC is only supported with simple mb decision\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (s->quarter_sample && s->codec_id != AV_CODEC_ID_MPEG4) {
>          av_log(avctx, AV_LOG_ERROR, "qpel not supported by codec\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (s->max_b_frames                    &&
> @@ -530,12 +530,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          s->codec_id != AV_CODEC_ID_MPEG1VIDEO &&
>          s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
>          av_log(avctx, AV_LOG_ERROR, "B-frames not supported by codec\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>      if (s->max_b_frames < 0) {
>          av_log(avctx, AV_LOG_ERROR,
>                 "max b frames must be 0 or positive for mpegvideo based encoders\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if ((s->codec_id == AV_CODEC_ID_MPEG4 ||
> @@ -555,28 +555,28 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          (avctx->width  > 2048 ||
>           avctx->height > 1152 )) {
>          av_log(avctx, AV_LOG_ERROR, "H.263 does not support resolutions above 2048x1152\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>      if ((s->codec_id == AV_CODEC_ID_H263  ||
>           s->codec_id == AV_CODEC_ID_H263P) &&
>          ((avctx->width &3) ||
>           (avctx->height&3) )) {
>          av_log(avctx, AV_LOG_ERROR, "w/h must be a multiple of 4\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (s->codec_id == AV_CODEC_ID_MPEG1VIDEO &&
>          (avctx->width  > 4095 ||
>           avctx->height > 4095 )) {
>          av_log(avctx, AV_LOG_ERROR, "MPEG-1 does not support resolutions above 4095x4095\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO &&
>          (avctx->width  > 16383 ||
>           avctx->height > 16383 )) {
>          av_log(avctx, AV_LOG_ERROR, "MPEG-2 does not support resolutions above 16383x16383\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if (s->codec_id == AV_CODEC_ID_RV10 &&
> @@ -597,13 +597,13 @@ FF_ENABLE_DEPRECATION_WARNINGS
>           s->codec_id == AV_CODEC_ID_WMV2) &&
>           avctx->width & 1) {
>          av_log(avctx, AV_LOG_ERROR, "width must be multiple of 2\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if ((s->avctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME)) &&
>          s->codec_id != AV_CODEC_ID_MPEG4 && s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
>          av_log(avctx, AV_LOG_ERROR, "interlacing not supported by codec\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>  #if FF_API_PRIVATE_OPT
> @@ -618,18 +618,18 @@ FF_ENABLE_DEPRECATION_WARNINGS
>                            && s->codec_id != AV_CODEC_ID_MPEG2VIDEO)) {
>          av_log(avctx, AV_LOG_ERROR,
>                 "mpeg2 style quantization not supported by codec\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if ((s->mpv_flags & FF_MPV_FLAG_CBP_RD) && !avctx->trellis) {
>          av_log(avctx, AV_LOG_ERROR, "CBP RD needs trellis quant\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if ((s->mpv_flags & FF_MPV_FLAG_QP_RD) &&
>          s->avctx->mb_decision != FF_MB_DECISION_RD) {
>          av_log(avctx, AV_LOG_ERROR, "QP RD needs mbd=2\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>      if ((s->mpv_flags & FF_MPV_FLAG_QP_RD) &&
> @@ -638,7 +638,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          // Used to produce garbage with MJPEG.
>          av_log(avctx, AV_LOG_ERROR,
>                 "QP RD is no longer compatible with MJPEG or AMV\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>  #if FF_API_PRIVATE_OPT
> @@ -653,7 +653,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          av_log(avctx, AV_LOG_ERROR,
>                 "closed gop with scene change detection are not supported yet, "
>                 "set threshold to 1000000000\n");
> -        return -1;
> +        return AVERROR(ENOTSUP);

I recall someone mentioning that ENOTSUP is not available on all
targets, which is why it's rarely used in our tree.
AVERROR_PATCHWELCOME is the better code for this, and used in pretty
much all places where some feature is missing but can be added.

>      }
>  
>      if (s->avctx->flags & AV_CODEC_FLAG_LOW_DELAY) {
> @@ -662,12 +662,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
>              av_log(avctx, AV_LOG_ERROR,
>                     "low delay forcing is only available for mpeg2, "
>                     "set strict_std_compliance to 'unofficial' or lower in order to allow it\n");
> -            return -1;
> +            return AVERROR(EINVAL);
>          }
>          if (s->max_b_frames != 0) {
>              av_log(avctx, AV_LOG_ERROR,
>                     "B-frames cannot be used with low delay\n");
> -            return -1;
> +            return AVERROR(EINVAL);
>          }
>      }
>  
> @@ -675,7 +675,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          if (avctx->qmax > 28) {
>              av_log(avctx, AV_LOG_ERROR,
>                     "non linear quant only supports qmax <= 28 currently\n");
> -            return -1;
> +            return AVERROR(ENOTSUP);
>          }
>      }
>  
> @@ -693,19 +693,19 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          (s->codec_id != AV_CODEC_ID_H263P)) {
>          av_log(avctx, AV_LOG_ERROR,
>                 "multi threaded encoding not supported by codec\n");
> -        return -1;
> +        return AVERROR(ENOTSUP);
>      }
>  
>      if (s->avctx->thread_count < 1) {
>          av_log(avctx, AV_LOG_ERROR,
>                 "automatic thread number detection not supported by codec, "
>                 "patch welcome\n");
> -        return -1;
> +        return AVERROR_PATCHWELCOME;
>      }
>  
>      if (!avctx->time_base.den || !avctx->time_base.num) {
>          av_log(avctx, AV_LOG_ERROR, "framerate not set\n");
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>  #if FF_API_PRIVATE_OPT
> @@ -755,7 +755,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>                 "the maximum admitted value for the timebase denominator "
>                 "is %d\n", s->avctx->time_base.num, s->avctx->time_base.den,
>                 (1 << 16) - 1);
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>      s->time_increment_bits = av_log2(s->avctx->time_base.den - 1) + 1;
>  
> @@ -775,21 +775,22 @@ FF_ENABLE_DEPRECATION_WARNINGS
>      case AV_CODEC_ID_AMV:
>          s->out_format = FMT_MJPEG;
>          s->intra_only = 1; /* force intra only for jpeg */
> -        if (!CONFIG_MJPEG_ENCODER ||
> -            ff_mjpeg_encode_init(s) < 0)
> -            return -1;
> +        if (!CONFIG_MJPEG_ENCODER)
> +            return AVERROR_ENCODER_NOT_FOUND;
> +        if ((ret = ff_mjpeg_encode_init(s)) < 0)
> +            return ret;
>          avctx->delay = 0;
>          s->low_delay = 1;
>          break;
>      case AV_CODEC_ID_H261:
>          if (!CONFIG_H261_ENCODER)
> -            return -1;
> +            return AVERROR_ENCODER_NOT_FOUND;
>          if (ff_h261_get_picture_format(s->width, s->height) < 0) {
>              av_log(avctx, AV_LOG_ERROR,
>                     "The specified picture size of %dx%d is not valid for the "
>                     "H.261 codec.\nValid sizes are 176x144, 352x288\n",
>                      s->width, s->height);
> -            return -1;
> +            return AVERROR(EINVAL);
>          }
>          s->out_format = FMT_H261;
>          avctx->delay  = 0;
> @@ -798,7 +799,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          break;
>      case AV_CODEC_ID_H263:
>          if (!CONFIG_H263_ENCODER)
> -            return -1;
> +            return AVERROR_ENCODER_NOT_FOUND;
>          if (ff_match_2uint16(ff_h263_format, FF_ARRAY_ELEMS(ff_h263_format),
>                               s->width, s->height) == 8) {
>              av_log(avctx, AV_LOG_ERROR,
> @@ -806,7 +807,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>                     "the H.263 codec.\nValid sizes are 128x96, 176x144, "
>                     "352x288, 704x576, and 1408x1152. "
>                     "Try H.263+.\n", s->width, s->height);
> -            return -1;
> +            return AVERROR(EINVAL);
>          }
>          s->out_format = FMT_H263;
>          avctx->delay  = 0;
> @@ -892,7 +893,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
>          s->low_delay         = 1;
>          break;
>      default:
> -        return -1;
> +        return AVERROR(EINVAL);
>      }
>  
>  #if FF_API_PRIVATE_OPT
> @@ -913,8 +914,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
>  
>      /* init */
>      ff_mpv_idct_init(s);
> -    if (ff_mpv_common_init(s) < 0)
> -        return -1;
> +    if ((ret = ff_mpv_common_init(s)) < 0)
> +        return ret;
>  
>      ff_fdctdsp_init(&s->fdsp, avctx);
>      ff_me_cmp_init(&s->mecc, avctx);
> @@ -1020,8 +1021,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
>                            31, 0);
>      }
>  
> -    if (ff_rate_control_init(s) < 0)
> -        return -1;
> +    if ((ret = ff_rate_control_init(s)) < 0)
> +        return ret;
>  
>  #if FF_API_PRIVATE_OPT
>      FF_DISABLE_DEPRECATION_WARNINGS
>
Lance Wang May 7, 2020, 2:28 p.m. UTC | #2
On Thu, May 07, 2020 at 10:29:50AM -0300, James Almer wrote:
> On 5/7/2020 10:22 AM, lance.lmwang@gmail.com wrote:
> > From: Limin Wang <lance.lmwang@gmail.com>
> > 
> > Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
> > ---
> >  libavcodec/mpegvideo_enc.c | 85 +++++++++++++++++++++++-----------------------
> >  1 file changed, 43 insertions(+), 42 deletions(-)
> > 
> > diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
> > index e1fd92c..bb7ac88 100644
> > --- a/libavcodec/mpegvideo_enc.c
> > +++ b/libavcodec/mpegvideo_enc.c
> > @@ -298,7 +298,7 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
> >              avctx->pix_fmt != AV_PIX_FMT_YUV422P) {
> >              av_log(avctx, AV_LOG_ERROR,
> >                     "only YUV420 and YUV422 are supported\n");
> > -            return -1;
> > +            return AVERROR(EINVAL);
> >          }
> >          break;
> >      case AV_CODEC_ID_MJPEG:
> > @@ -322,13 +322,13 @@ av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
> >  
> >          if (!format_supported) {
> >              av_log(avctx, AV_LOG_ERROR, "colorspace not supported in jpeg\n");
> > -            return -1;
> > +            return AVERROR(EINVAL);
> >          }
> >          break;
> >      default:
> >          if (avctx->pix_fmt != AV_PIX_FMT_YUV420P) {
> >              av_log(avctx, AV_LOG_ERROR, "only YUV420 is supported\n");
> > -            return -1;
> > +            return AVERROR(EINVAL);
> >          }
> >      }
> >  
> > @@ -456,7 +456,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >  
> >      if ((!avctx->rc_max_rate) != (!avctx->rc_buffer_size)) {
> >          av_log(avctx, AV_LOG_ERROR, "Either both buffer size and max rate or neither must be specified\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (avctx->rc_min_rate && avctx->rc_max_rate != avctx->rc_min_rate) {
> > @@ -466,12 +466,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >  
> >      if (avctx->rc_min_rate && avctx->rc_min_rate > avctx->bit_rate) {
> >          av_log(avctx, AV_LOG_ERROR, "bitrate below min bitrate\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (avctx->rc_max_rate && avctx->rc_max_rate < avctx->bit_rate) {
> >          av_log(avctx, AV_LOG_ERROR, "bitrate above max bitrate\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (avctx->rc_max_rate &&
> > @@ -485,7 +485,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          avctx->bit_rate * (int64_t)avctx->time_base.num >
> >              avctx->rc_buffer_size * (int64_t)avctx->time_base.den) {
> >          av_log(avctx, AV_LOG_ERROR, "VBV buffer too small for bitrate\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (!s->fixed_qscale &&
> > @@ -511,18 +511,18 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          s->codec_id != AV_CODEC_ID_H263 && s->codec_id != AV_CODEC_ID_H263P &&
> >          s->codec_id != AV_CODEC_ID_FLV1) {
> >          av_log(avctx, AV_LOG_ERROR, "4MV not supported by codec\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (s->obmc && s->avctx->mb_decision != FF_MB_DECISION_SIMPLE) {
> >          av_log(avctx, AV_LOG_ERROR,
> >                 "OBMC is only supported with simple mb decision\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (s->quarter_sample && s->codec_id != AV_CODEC_ID_MPEG4) {
> >          av_log(avctx, AV_LOG_ERROR, "qpel not supported by codec\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (s->max_b_frames                    &&
> > @@ -530,12 +530,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          s->codec_id != AV_CODEC_ID_MPEG1VIDEO &&
> >          s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
> >          av_log(avctx, AV_LOG_ERROR, "B-frames not supported by codec\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >      if (s->max_b_frames < 0) {
> >          av_log(avctx, AV_LOG_ERROR,
> >                 "max b frames must be 0 or positive for mpegvideo based encoders\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if ((s->codec_id == AV_CODEC_ID_MPEG4 ||
> > @@ -555,28 +555,28 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          (avctx->width  > 2048 ||
> >           avctx->height > 1152 )) {
> >          av_log(avctx, AV_LOG_ERROR, "H.263 does not support resolutions above 2048x1152\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >      if ((s->codec_id == AV_CODEC_ID_H263  ||
> >           s->codec_id == AV_CODEC_ID_H263P) &&
> >          ((avctx->width &3) ||
> >           (avctx->height&3) )) {
> >          av_log(avctx, AV_LOG_ERROR, "w/h must be a multiple of 4\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (s->codec_id == AV_CODEC_ID_MPEG1VIDEO &&
> >          (avctx->width  > 4095 ||
> >           avctx->height > 4095 )) {
> >          av_log(avctx, AV_LOG_ERROR, "MPEG-1 does not support resolutions above 4095x4095\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO &&
> >          (avctx->width  > 16383 ||
> >           avctx->height > 16383 )) {
> >          av_log(avctx, AV_LOG_ERROR, "MPEG-2 does not support resolutions above 16383x16383\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if (s->codec_id == AV_CODEC_ID_RV10 &&
> > @@ -597,13 +597,13 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >           s->codec_id == AV_CODEC_ID_WMV2) &&
> >           avctx->width & 1) {
> >          av_log(avctx, AV_LOG_ERROR, "width must be multiple of 2\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if ((s->avctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME)) &&
> >          s->codec_id != AV_CODEC_ID_MPEG4 && s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
> >          av_log(avctx, AV_LOG_ERROR, "interlacing not supported by codec\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >  #if FF_API_PRIVATE_OPT
> > @@ -618,18 +618,18 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >                            && s->codec_id != AV_CODEC_ID_MPEG2VIDEO)) {
> >          av_log(avctx, AV_LOG_ERROR,
> >                 "mpeg2 style quantization not supported by codec\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if ((s->mpv_flags & FF_MPV_FLAG_CBP_RD) && !avctx->trellis) {
> >          av_log(avctx, AV_LOG_ERROR, "CBP RD needs trellis quant\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if ((s->mpv_flags & FF_MPV_FLAG_QP_RD) &&
> >          s->avctx->mb_decision != FF_MB_DECISION_RD) {
> >          av_log(avctx, AV_LOG_ERROR, "QP RD needs mbd=2\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >      if ((s->mpv_flags & FF_MPV_FLAG_QP_RD) &&
> > @@ -638,7 +638,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          // Used to produce garbage with MJPEG.
> >          av_log(avctx, AV_LOG_ERROR,
> >                 "QP RD is no longer compatible with MJPEG or AMV\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >  #if FF_API_PRIVATE_OPT
> > @@ -653,7 +653,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          av_log(avctx, AV_LOG_ERROR,
> >                 "closed gop with scene change detection are not supported yet, "
> >                 "set threshold to 1000000000\n");
> > -        return -1;
> > +        return AVERROR(ENOTSUP);
> 
> I recall someone mentioning that ENOTSUP is not available on all
> targets, which is why it's rarely used in our tree.
> AVERROR_PATCHWELCOME is the better code for this, and used in pretty
> much all places where some feature is missing but can be added.

Thanks for the comments, have updated to use AVERROR_PATCHWELCOME.


> 
> >      }
> >  
> >      if (s->avctx->flags & AV_CODEC_FLAG_LOW_DELAY) {
> > @@ -662,12 +662,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >              av_log(avctx, AV_LOG_ERROR,
> >                     "low delay forcing is only available for mpeg2, "
> >                     "set strict_std_compliance to 'unofficial' or lower in order to allow it\n");
> > -            return -1;
> > +            return AVERROR(EINVAL);
> >          }
> >          if (s->max_b_frames != 0) {
> >              av_log(avctx, AV_LOG_ERROR,
> >                     "B-frames cannot be used with low delay\n");
> > -            return -1;
> > +            return AVERROR(EINVAL);
> >          }
> >      }
> >  
> > @@ -675,7 +675,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          if (avctx->qmax > 28) {
> >              av_log(avctx, AV_LOG_ERROR,
> >                     "non linear quant only supports qmax <= 28 currently\n");
> > -            return -1;
> > +            return AVERROR(ENOTSUP);
> >          }
> >      }
> >  
> > @@ -693,19 +693,19 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          (s->codec_id != AV_CODEC_ID_H263P)) {
> >          av_log(avctx, AV_LOG_ERROR,
> >                 "multi threaded encoding not supported by codec\n");
> > -        return -1;
> > +        return AVERROR(ENOTSUP);
> >      }
> >  
> >      if (s->avctx->thread_count < 1) {
> >          av_log(avctx, AV_LOG_ERROR,
> >                 "automatic thread number detection not supported by codec, "
> >                 "patch welcome\n");
> > -        return -1;
> > +        return AVERROR_PATCHWELCOME;
> >      }
> >  
> >      if (!avctx->time_base.den || !avctx->time_base.num) {
> >          av_log(avctx, AV_LOG_ERROR, "framerate not set\n");
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >  #if FF_API_PRIVATE_OPT
> > @@ -755,7 +755,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >                 "the maximum admitted value for the timebase denominator "
> >                 "is %d\n", s->avctx->time_base.num, s->avctx->time_base.den,
> >                 (1 << 16) - 1);
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >      s->time_increment_bits = av_log2(s->avctx->time_base.den - 1) + 1;
> >  
> > @@ -775,21 +775,22 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >      case AV_CODEC_ID_AMV:
> >          s->out_format = FMT_MJPEG;
> >          s->intra_only = 1; /* force intra only for jpeg */
> > -        if (!CONFIG_MJPEG_ENCODER ||
> > -            ff_mjpeg_encode_init(s) < 0)
> > -            return -1;
> > +        if (!CONFIG_MJPEG_ENCODER)
> > +            return AVERROR_ENCODER_NOT_FOUND;
> > +        if ((ret = ff_mjpeg_encode_init(s)) < 0)
> > +            return ret;
> >          avctx->delay = 0;
> >          s->low_delay = 1;
> >          break;
> >      case AV_CODEC_ID_H261:
> >          if (!CONFIG_H261_ENCODER)
> > -            return -1;
> > +            return AVERROR_ENCODER_NOT_FOUND;
> >          if (ff_h261_get_picture_format(s->width, s->height) < 0) {
> >              av_log(avctx, AV_LOG_ERROR,
> >                     "The specified picture size of %dx%d is not valid for the "
> >                     "H.261 codec.\nValid sizes are 176x144, 352x288\n",
> >                      s->width, s->height);
> > -            return -1;
> > +            return AVERROR(EINVAL);
> >          }
> >          s->out_format = FMT_H261;
> >          avctx->delay  = 0;
> > @@ -798,7 +799,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          break;
> >      case AV_CODEC_ID_H263:
> >          if (!CONFIG_H263_ENCODER)
> > -            return -1;
> > +            return AVERROR_ENCODER_NOT_FOUND;
> >          if (ff_match_2uint16(ff_h263_format, FF_ARRAY_ELEMS(ff_h263_format),
> >                               s->width, s->height) == 8) {
> >              av_log(avctx, AV_LOG_ERROR,
> > @@ -806,7 +807,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >                     "the H.263 codec.\nValid sizes are 128x96, 176x144, "
> >                     "352x288, 704x576, and 1408x1152. "
> >                     "Try H.263+.\n", s->width, s->height);
> > -            return -1;
> > +            return AVERROR(EINVAL);
> >          }
> >          s->out_format = FMT_H263;
> >          avctx->delay  = 0;
> > @@ -892,7 +893,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >          s->low_delay         = 1;
> >          break;
> >      default:
> > -        return -1;
> > +        return AVERROR(EINVAL);
> >      }
> >  
> >  #if FF_API_PRIVATE_OPT
> > @@ -913,8 +914,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >  
> >      /* init */
> >      ff_mpv_idct_init(s);
> > -    if (ff_mpv_common_init(s) < 0)
> > -        return -1;
> > +    if ((ret = ff_mpv_common_init(s)) < 0)
> > +        return ret;
> >  
> >      ff_fdctdsp_init(&s->fdsp, avctx);
> >      ff_me_cmp_init(&s->mecc, avctx);
> > @@ -1020,8 +1021,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >                            31, 0);
> >      }
> >  
> > -    if (ff_rate_control_init(s) < 0)
> > -        return -1;
> > +    if ((ret = ff_rate_control_init(s)) < 0)
> > +        return ret;
> >  
> >  #if FF_API_PRIVATE_OPT
> >      FF_DISABLE_DEPRECATION_WARNINGS
> > 
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff mbox series

Patch

diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c
index e1fd92c..bb7ac88 100644
--- a/libavcodec/mpegvideo_enc.c
+++ b/libavcodec/mpegvideo_enc.c
@@ -298,7 +298,7 @@  av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
             avctx->pix_fmt != AV_PIX_FMT_YUV422P) {
             av_log(avctx, AV_LOG_ERROR,
                    "only YUV420 and YUV422 are supported\n");
-            return -1;
+            return AVERROR(EINVAL);
         }
         break;
     case AV_CODEC_ID_MJPEG:
@@ -322,13 +322,13 @@  av_cold int ff_mpv_encode_init(AVCodecContext *avctx)
 
         if (!format_supported) {
             av_log(avctx, AV_LOG_ERROR, "colorspace not supported in jpeg\n");
-            return -1;
+            return AVERROR(EINVAL);
         }
         break;
     default:
         if (avctx->pix_fmt != AV_PIX_FMT_YUV420P) {
             av_log(avctx, AV_LOG_ERROR, "only YUV420 is supported\n");
-            return -1;
+            return AVERROR(EINVAL);
         }
     }
 
@@ -456,7 +456,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
 
     if ((!avctx->rc_max_rate) != (!avctx->rc_buffer_size)) {
         av_log(avctx, AV_LOG_ERROR, "Either both buffer size and max rate or neither must be specified\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (avctx->rc_min_rate && avctx->rc_max_rate != avctx->rc_min_rate) {
@@ -466,12 +466,12 @@  FF_ENABLE_DEPRECATION_WARNINGS
 
     if (avctx->rc_min_rate && avctx->rc_min_rate > avctx->bit_rate) {
         av_log(avctx, AV_LOG_ERROR, "bitrate below min bitrate\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (avctx->rc_max_rate && avctx->rc_max_rate < avctx->bit_rate) {
         av_log(avctx, AV_LOG_ERROR, "bitrate above max bitrate\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (avctx->rc_max_rate &&
@@ -485,7 +485,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
         avctx->bit_rate * (int64_t)avctx->time_base.num >
             avctx->rc_buffer_size * (int64_t)avctx->time_base.den) {
         av_log(avctx, AV_LOG_ERROR, "VBV buffer too small for bitrate\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (!s->fixed_qscale &&
@@ -511,18 +511,18 @@  FF_ENABLE_DEPRECATION_WARNINGS
         s->codec_id != AV_CODEC_ID_H263 && s->codec_id != AV_CODEC_ID_H263P &&
         s->codec_id != AV_CODEC_ID_FLV1) {
         av_log(avctx, AV_LOG_ERROR, "4MV not supported by codec\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (s->obmc && s->avctx->mb_decision != FF_MB_DECISION_SIMPLE) {
         av_log(avctx, AV_LOG_ERROR,
                "OBMC is only supported with simple mb decision\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (s->quarter_sample && s->codec_id != AV_CODEC_ID_MPEG4) {
         av_log(avctx, AV_LOG_ERROR, "qpel not supported by codec\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (s->max_b_frames                    &&
@@ -530,12 +530,12 @@  FF_ENABLE_DEPRECATION_WARNINGS
         s->codec_id != AV_CODEC_ID_MPEG1VIDEO &&
         s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
         av_log(avctx, AV_LOG_ERROR, "B-frames not supported by codec\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
     if (s->max_b_frames < 0) {
         av_log(avctx, AV_LOG_ERROR,
                "max b frames must be 0 or positive for mpegvideo based encoders\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if ((s->codec_id == AV_CODEC_ID_MPEG4 ||
@@ -555,28 +555,28 @@  FF_ENABLE_DEPRECATION_WARNINGS
         (avctx->width  > 2048 ||
          avctx->height > 1152 )) {
         av_log(avctx, AV_LOG_ERROR, "H.263 does not support resolutions above 2048x1152\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
     if ((s->codec_id == AV_CODEC_ID_H263  ||
          s->codec_id == AV_CODEC_ID_H263P) &&
         ((avctx->width &3) ||
          (avctx->height&3) )) {
         av_log(avctx, AV_LOG_ERROR, "w/h must be a multiple of 4\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (s->codec_id == AV_CODEC_ID_MPEG1VIDEO &&
         (avctx->width  > 4095 ||
          avctx->height > 4095 )) {
         av_log(avctx, AV_LOG_ERROR, "MPEG-1 does not support resolutions above 4095x4095\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (s->codec_id == AV_CODEC_ID_MPEG2VIDEO &&
         (avctx->width  > 16383 ||
          avctx->height > 16383 )) {
         av_log(avctx, AV_LOG_ERROR, "MPEG-2 does not support resolutions above 16383x16383\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if (s->codec_id == AV_CODEC_ID_RV10 &&
@@ -597,13 +597,13 @@  FF_ENABLE_DEPRECATION_WARNINGS
          s->codec_id == AV_CODEC_ID_WMV2) &&
          avctx->width & 1) {
         av_log(avctx, AV_LOG_ERROR, "width must be multiple of 2\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if ((s->avctx->flags & (AV_CODEC_FLAG_INTERLACED_DCT | AV_CODEC_FLAG_INTERLACED_ME)) &&
         s->codec_id != AV_CODEC_ID_MPEG4 && s->codec_id != AV_CODEC_ID_MPEG2VIDEO) {
         av_log(avctx, AV_LOG_ERROR, "interlacing not supported by codec\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
 #if FF_API_PRIVATE_OPT
@@ -618,18 +618,18 @@  FF_ENABLE_DEPRECATION_WARNINGS
                           && s->codec_id != AV_CODEC_ID_MPEG2VIDEO)) {
         av_log(avctx, AV_LOG_ERROR,
                "mpeg2 style quantization not supported by codec\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if ((s->mpv_flags & FF_MPV_FLAG_CBP_RD) && !avctx->trellis) {
         av_log(avctx, AV_LOG_ERROR, "CBP RD needs trellis quant\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if ((s->mpv_flags & FF_MPV_FLAG_QP_RD) &&
         s->avctx->mb_decision != FF_MB_DECISION_RD) {
         av_log(avctx, AV_LOG_ERROR, "QP RD needs mbd=2\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
     if ((s->mpv_flags & FF_MPV_FLAG_QP_RD) &&
@@ -638,7 +638,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
         // Used to produce garbage with MJPEG.
         av_log(avctx, AV_LOG_ERROR,
                "QP RD is no longer compatible with MJPEG or AMV\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
 #if FF_API_PRIVATE_OPT
@@ -653,7 +653,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
         av_log(avctx, AV_LOG_ERROR,
                "closed gop with scene change detection are not supported yet, "
                "set threshold to 1000000000\n");
-        return -1;
+        return AVERROR(ENOTSUP);
     }
 
     if (s->avctx->flags & AV_CODEC_FLAG_LOW_DELAY) {
@@ -662,12 +662,12 @@  FF_ENABLE_DEPRECATION_WARNINGS
             av_log(avctx, AV_LOG_ERROR,
                    "low delay forcing is only available for mpeg2, "
                    "set strict_std_compliance to 'unofficial' or lower in order to allow it\n");
-            return -1;
+            return AVERROR(EINVAL);
         }
         if (s->max_b_frames != 0) {
             av_log(avctx, AV_LOG_ERROR,
                    "B-frames cannot be used with low delay\n");
-            return -1;
+            return AVERROR(EINVAL);
         }
     }
 
@@ -675,7 +675,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
         if (avctx->qmax > 28) {
             av_log(avctx, AV_LOG_ERROR,
                    "non linear quant only supports qmax <= 28 currently\n");
-            return -1;
+            return AVERROR(ENOTSUP);
         }
     }
 
@@ -693,19 +693,19 @@  FF_ENABLE_DEPRECATION_WARNINGS
         (s->codec_id != AV_CODEC_ID_H263P)) {
         av_log(avctx, AV_LOG_ERROR,
                "multi threaded encoding not supported by codec\n");
-        return -1;
+        return AVERROR(ENOTSUP);
     }
 
     if (s->avctx->thread_count < 1) {
         av_log(avctx, AV_LOG_ERROR,
                "automatic thread number detection not supported by codec, "
                "patch welcome\n");
-        return -1;
+        return AVERROR_PATCHWELCOME;
     }
 
     if (!avctx->time_base.den || !avctx->time_base.num) {
         av_log(avctx, AV_LOG_ERROR, "framerate not set\n");
-        return -1;
+        return AVERROR(EINVAL);
     }
 
 #if FF_API_PRIVATE_OPT
@@ -755,7 +755,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
                "the maximum admitted value for the timebase denominator "
                "is %d\n", s->avctx->time_base.num, s->avctx->time_base.den,
                (1 << 16) - 1);
-        return -1;
+        return AVERROR(EINVAL);
     }
     s->time_increment_bits = av_log2(s->avctx->time_base.den - 1) + 1;
 
@@ -775,21 +775,22 @@  FF_ENABLE_DEPRECATION_WARNINGS
     case AV_CODEC_ID_AMV:
         s->out_format = FMT_MJPEG;
         s->intra_only = 1; /* force intra only for jpeg */
-        if (!CONFIG_MJPEG_ENCODER ||
-            ff_mjpeg_encode_init(s) < 0)
-            return -1;
+        if (!CONFIG_MJPEG_ENCODER)
+            return AVERROR_ENCODER_NOT_FOUND;
+        if ((ret = ff_mjpeg_encode_init(s)) < 0)
+            return ret;
         avctx->delay = 0;
         s->low_delay = 1;
         break;
     case AV_CODEC_ID_H261:
         if (!CONFIG_H261_ENCODER)
-            return -1;
+            return AVERROR_ENCODER_NOT_FOUND;
         if (ff_h261_get_picture_format(s->width, s->height) < 0) {
             av_log(avctx, AV_LOG_ERROR,
                    "The specified picture size of %dx%d is not valid for the "
                    "H.261 codec.\nValid sizes are 176x144, 352x288\n",
                     s->width, s->height);
-            return -1;
+            return AVERROR(EINVAL);
         }
         s->out_format = FMT_H261;
         avctx->delay  = 0;
@@ -798,7 +799,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
         break;
     case AV_CODEC_ID_H263:
         if (!CONFIG_H263_ENCODER)
-            return -1;
+            return AVERROR_ENCODER_NOT_FOUND;
         if (ff_match_2uint16(ff_h263_format, FF_ARRAY_ELEMS(ff_h263_format),
                              s->width, s->height) == 8) {
             av_log(avctx, AV_LOG_ERROR,
@@ -806,7 +807,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
                    "the H.263 codec.\nValid sizes are 128x96, 176x144, "
                    "352x288, 704x576, and 1408x1152. "
                    "Try H.263+.\n", s->width, s->height);
-            return -1;
+            return AVERROR(EINVAL);
         }
         s->out_format = FMT_H263;
         avctx->delay  = 0;
@@ -892,7 +893,7 @@  FF_ENABLE_DEPRECATION_WARNINGS
         s->low_delay         = 1;
         break;
     default:
-        return -1;
+        return AVERROR(EINVAL);
     }
 
 #if FF_API_PRIVATE_OPT
@@ -913,8 +914,8 @@  FF_ENABLE_DEPRECATION_WARNINGS
 
     /* init */
     ff_mpv_idct_init(s);
-    if (ff_mpv_common_init(s) < 0)
-        return -1;
+    if ((ret = ff_mpv_common_init(s)) < 0)
+        return ret;
 
     ff_fdctdsp_init(&s->fdsp, avctx);
     ff_me_cmp_init(&s->mecc, avctx);
@@ -1020,8 +1021,8 @@  FF_ENABLE_DEPRECATION_WARNINGS
                           31, 0);
     }
 
-    if (ff_rate_control_init(s) < 0)
-        return -1;
+    if ((ret = ff_rate_control_init(s)) < 0)
+        return ret;
 
 #if FF_API_PRIVATE_OPT
     FF_DISABLE_DEPRECATION_WARNINGS