Black isn't always just memset(ptr, 0, size). Limited YUV in particular requires relatively non-obvious values, and filling a frame with repeating 0 bytes is disallowed in some contexts. With component sizes larger than 8 or packed YUV, this can become relatively complicated. So having a generic function for this seems helpful.
In order to handle the complex cases in a generic way without destroying performance, this code attempts to compute a black pixel, and then uses that value to clear the image data quickly by using a function like memset.
Common cases like yuv410p10 or rgba can't be handled with a simple memset, so there is some code to fill memory with 2/4/8 byte patterns. For the remaining cases, a generic slow fallback is used.
45df7ad imgutils: add function to clear an image to black
doc/APIchanges | 3 +
libavutil/imgutils.c | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++
libavutil/imgutils.h | 27 +++++++++
libavutil/version.h | 2 +-
4 files changed, 198 insertions(+), 1 deletion(-)