Message ID | 20240109221741.60485-1-jamrial@gmail.com |
---|---|
State | New |
Headers | show |
Series | [FFmpeg-devel] avcodec/av1dec: attempt to set SAR even if no hardware decoding is available | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | fail | Make fate failed |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | fail | Make fate failed |
On 1/9/2024 11:30 PM, Andreas Rheinhardt wrote: > James Almer: >> Should fix fate failures in avif tests when no external decoder is >> available. >> >> Signed-off-by: James Almer <jamrial@gmail.com> >> --- >> libavcodec/av1dec.c | 12 +++++++++++- >> 1 file changed, 11 insertions(+), 1 deletion(-) >> >> diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c >> index da05a0f039..43b5aef687 100644 >> --- a/libavcodec/av1dec.c >> +++ b/libavcodec/av1dec.c >> @@ -1227,7 +1227,7 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) >> av_log(avctx, AV_LOG_ERROR, >> "Failed to get pixel format.\n"); >> s->raw_seq = NULL; >> - goto end; >> + continue; >> } >> } >> >> @@ -1248,6 +1248,16 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) >> case AV1_OBU_FRAME: >> case AV1_OBU_FRAME_HEADER: >> if (!s->raw_seq) { >> + // Attempt to set dimensions in all cases >> + if (s->pix_fmt == AV_PIX_FMT_NONE) { >> + ret = update_context_with_frame_header(avctx, &obu->obu.frame.header); >> + if (ret < 0) { >> + av_log(avctx, AV_LOG_ERROR, "Failed to update context with frame header\n"); >> + return ret; >> + } >> + ret = AVERROR(ENOSYS); >> + goto end; >> + } >> av_log(avctx, AV_LOG_ERROR, "Missing Sequence Header.\n"); >> ret = AVERROR_INVALIDDATA; >> goto end; > > You should instead implement FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM for this > decoder so that one does not get a wall of error logs when probing > without proper hardware. > > - Andreas I fixed the problem in a different way already, so this patch can be dropped. I might look at FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM later.
James Almer: > Should fix fate failures in avif tests when no external decoder is > available. > > Signed-off-by: James Almer <jamrial@gmail.com> > --- > libavcodec/av1dec.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c > index da05a0f039..43b5aef687 100644 > --- a/libavcodec/av1dec.c > +++ b/libavcodec/av1dec.c > @@ -1227,7 +1227,7 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) > av_log(avctx, AV_LOG_ERROR, > "Failed to get pixel format.\n"); > s->raw_seq = NULL; > - goto end; > + continue; > } > } > > @@ -1248,6 +1248,16 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) > case AV1_OBU_FRAME: > case AV1_OBU_FRAME_HEADER: > if (!s->raw_seq) { > + // Attempt to set dimensions in all cases > + if (s->pix_fmt == AV_PIX_FMT_NONE) { > + ret = update_context_with_frame_header(avctx, &obu->obu.frame.header); > + if (ret < 0) { > + av_log(avctx, AV_LOG_ERROR, "Failed to update context with frame header\n"); > + return ret; > + } > + ret = AVERROR(ENOSYS); > + goto end; > + } > av_log(avctx, AV_LOG_ERROR, "Missing Sequence Header.\n"); > ret = AVERROR_INVALIDDATA; > goto end; You should instead implement FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM for this decoder so that one does not get a wall of error logs when probing without proper hardware. - Andreas
diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index da05a0f039..43b5aef687 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -1227,7 +1227,7 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) av_log(avctx, AV_LOG_ERROR, "Failed to get pixel format.\n"); s->raw_seq = NULL; - goto end; + continue; } } @@ -1248,6 +1248,16 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) case AV1_OBU_FRAME: case AV1_OBU_FRAME_HEADER: if (!s->raw_seq) { + // Attempt to set dimensions in all cases + if (s->pix_fmt == AV_PIX_FMT_NONE) { + ret = update_context_with_frame_header(avctx, &obu->obu.frame.header); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "Failed to update context with frame header\n"); + return ret; + } + ret = AVERROR(ENOSYS); + goto end; + } av_log(avctx, AV_LOG_ERROR, "Missing Sequence Header.\n"); ret = AVERROR_INVALIDDATA; goto end;
Should fix fate failures in avif tests when no external decoder is available. Signed-off-by: James Almer <jamrial@gmail.com> --- libavcodec/av1dec.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)