[FFmpeg-devel] [PATCH v2 7/7] avcodec: add AV_CODEC_FLAG_CLEAR
Anton Khirnov
anton at khirnov.net
Tue Dec 12 13:23:38 EET 2023
Quoting Marton Balint (2023-12-08 00:11:21)
> Wipe reminds me of the wipe effect. How about 'predecode_clear'?
Fine with me I guess.
> >
> >> + */
> >> +#define AV_CODEC_FLAG_CLEAR (1 << 12)
> >> /**
> >> * Only decode/encode grayscale.
> >> */
> >> diff --git a/libavcodec/decode.c b/libavcodec/decode.c
> >> index 2cfb3fcf97..f9b18a2c35 100644
> >> --- a/libavcodec/decode.c
> >> +++ b/libavcodec/decode.c
> >> @@ -1675,6 +1675,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
> >>
> >> validate_avframe_allocation(avctx, frame);
> >>
> >> + if (avctx->flags & AV_CODEC_FLAG_CLEAR && avctx->codec_type == AVMEDIA_TYPE_VIDEO) {
> >> + uint32_t color[4] = {0};
> >> + ptrdiff_t linesize[4] = {frame->linesize[0], frame->linesize[1], frame->linesize[2], frame->linesize[3]};
> >> + av_image_fill_color(frame->data, linesize, frame->format, color, frame->width, frame->height);
> >
> > Should this check for errors?
>
> Lack of error checking is intentional. av_image_fill_color might not
> support all pixel formats, definitely not support hwaccel formats. It
> might make sense to warn the user once, but I don't think propagating the
> error back is needed here.
>
> I primarily thought of this as a QC feature (even thought about making the
> color fill green by default to make it more noticeable (YUV green happens
> to be 0,0,0), but for that I'd need similar checks for colorspaces to
> what I have for fill_black())...
As Mark said, I expect people to want to use it as a security feature.
So either it should work reliably, or it should be made very clear that
it's for debugging only.
For non-hwaccel pixel formats, you can fall back on memsetting the
buffer to 0.
--
Anton Khirnov
More information about the ffmpeg-devel
mailing list