imgutils: add function to clear an image to black

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.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
wm4
2017-07-22 23:05:14 +02:00
committed by Anton Khirnov
parent 47399ccdfd
commit 45df7adc1d
4 changed files with 198 additions and 1 deletions

View File

@@ -13,6 +13,9 @@ libavutil: 2017-03-23
API changes, most recent first:
2017-xx-xx - xxxxxxx - lavu 56.4.0 - imgutils.h
Add av_image_fill_black().
2017-xx-xx - xxxxxxx - lavu 56.3.0 - frame.h
Add av_frame_apply_cropping().