Quoting wm4 (2017-02-17 07:33:14) > On Thu, 16 Feb 2017 17:34:30 +0100 > Anton Khirnov <an...@khirnov.net> wrote: > > > This error is treated specially by the API. > > > > CC: libav-sta...@libav.org > > --- > > libavcodec/aacdec.c | 6 +++--- > > libavcodec/nvenc.c | 8 +++++--- > > libavcodec/qsv.c | 8 +++++--- > > 3 files changed, 13 insertions(+), 9 deletions(-) > > > > diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c > > index 22ebcdc..76c1b16 100644 > > --- a/libavcodec/aacdec.c > > +++ b/libavcodec/aacdec.c > > @@ -3228,7 +3228,7 @@ static int read_audio_mux_element(struct LATMContext > > *latmctx, > > } else if (!latmctx->aac_ctx.avctx->extradata) { > > av_log(latmctx->aac_ctx.avctx, AV_LOG_DEBUG, > > "no decoder config found\n"); > > - return AVERROR(EAGAIN); > > + return 1; > > The 1 looks odd here, why not 0? Though it seems the return value is > discarded if it's not negative anyway.
To distinguish it from 0, which is the "parsing successful" return value. > > > } > > if (latmctx->audio_mux_version_A == 0) { > > int mux_slot_length_bytes = read_payload_length_info(latmctx, gb); > > @@ -3265,8 +3265,8 @@ static int latm_decode_frame(AVCodecContext *avctx, > > void *out, > > if (muxlength > avpkt->size) > > return AVERROR_INVALIDDATA; > > > > - if ((err = read_audio_mux_element(latmctx, &gb)) < 0) > > - return err; > > + if ((err = read_audio_mux_element(latmctx, &gb))) > > + return (err < 0) ? err : avpkt->data; > > Wait a moment, you return a pointer as an int? Yes, I'm dumb. Changed to avpkt->size locally. > > > > > if (!latmctx->initialized) { > > if (!avctx->extradata) { > > diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c > > index 90b9d1a..e8cf4b4 100644 > > --- a/libavcodec/nvenc.c > > +++ b/libavcodec/nvenc.c > > @@ -123,12 +123,14 @@ static const struct { > > { NV_ENC_ERR_OUT_OF_MEMORY, AVERROR(ENOMEM), "out of > > memory" }, > > { NV_ENC_ERR_ENCODER_NOT_INITIALIZED, AVERROR(EINVAL), "encoder not > > initialized" }, > > { NV_ENC_ERR_UNSUPPORTED_PARAM, AVERROR(ENOSYS), "unsupported > > param" }, > > - { NV_ENC_ERR_LOCK_BUSY, AVERROR(EAGAIN), "lock busy" > > }, > > + { NV_ENC_ERR_LOCK_BUSY, AVERROR(EBUSY), "lock busy" > > }, > > { NV_ENC_ERR_NOT_ENOUGH_BUFFER, AVERROR(ENOBUFS), "not enough > > buffer" }, > > { NV_ENC_ERR_INVALID_VERSION, AVERROR(EINVAL), "invalid > > version" }, > > { NV_ENC_ERR_MAP_FAILED, AVERROR(EIO), "map failed" > > }, > > - { NV_ENC_ERR_NEED_MORE_INPUT, AVERROR(EAGAIN), "need more > > input" }, > > - { NV_ENC_ERR_ENCODER_BUSY, AVERROR(EAGAIN), "encoder > > busy" }, > > + /* this is error should always be treated specially, so this "mapping" > > + * is for completeness only */ > > + { NV_ENC_ERR_NEED_MORE_INPUT, AVERROR_UNKNOWN, "need more > > input" }, > > + { NV_ENC_ERR_ENCODER_BUSY, AVERROR(EBUSY), "encoder > > busy" }, > > { NV_ENC_ERR_EVENT_NOT_REGISTERD, AVERROR(EBADF), "event not > > registered" }, > > { NV_ENC_ERR_GENERIC, AVERROR_UNKNOWN, "generic > > error" }, > > { NV_ENC_ERR_INCOMPATIBLE_CLIENT_KEY, AVERROR(EINVAL), "incompatible > > client key" }, > > diff --git a/libavcodec/qsv.c b/libavcodec/qsv.c > > index ab48bb0..735e153 100644 > > --- a/libavcodec/qsv.c > > +++ b/libavcodec/qsv.c > > @@ -94,15 +94,17 @@ static const struct { > > { MFX_ERR_LOCK_MEMORY, AVERROR(EIO), "failed to lock > > the memory block" }, > > { MFX_ERR_NOT_INITIALIZED, AVERROR_BUG, "not initialized" > > }, > > { MFX_ERR_NOT_FOUND, AVERROR(ENOSYS), "specified object > > was not found" }, > > - { MFX_ERR_MORE_DATA, AVERROR(EAGAIN), "expect more data > > at input" }, > > - { MFX_ERR_MORE_SURFACE, AVERROR(EAGAIN), "expect more > > surface at output" }, > > + /* the following 3 errors should always be handled explicitly, so > > those "mappings" > > + * are for completeness only */ > > + { MFX_ERR_MORE_DATA, AVERROR_UNKNOWN, "expect more data > > at input" }, > > + { MFX_ERR_MORE_SURFACE, AVERROR_UNKNOWN, "expect more > > surface at output" }, > > + { MFX_ERR_MORE_BITSTREAM, AVERROR_UNKNOWN, "expect more > > bitstream at output" }, > > { MFX_ERR_ABORTED, AVERROR_UNKNOWN, "operation > > aborted" }, > > Why not AVERROR_EXTERNAL? Because it doesn't exist and as the above comment says, the value doesn't matter anyway. -- Anton Khirnov _______________________________________________ libav-devel mailing list libav-devel@libav.org https://lists.libav.org/mailman/listinfo/libav-devel