diff --git a/libavfilter/drawutils.c b/libavfilter/drawutils.c index dd9ceff117..bf308a1c5c 100644 --- a/libavfilter/drawutils.c +++ b/libavfilter/drawutils.c @@ -23,6 +23,21 @@ enum { RED = 0, GREEN, BLUE, ALPHA }; +int ff_fill_rgba_map(uint8_t *rgba_map, enum PixelFormat pix_fmt) +{ + switch (pix_fmt) { + case PIX_FMT_ARGB: rgba_map[ALPHA] = 0; rgba_map[RED ] = 1; rgba_map[GREEN] = 2; rgba_map[BLUE ] = 3; break; + case PIX_FMT_ABGR: rgba_map[ALPHA] = 0; rgba_map[BLUE ] = 1; rgba_map[GREEN] = 2; rgba_map[RED ] = 3; break; + case PIX_FMT_RGBA: + case PIX_FMT_RGB24: rgba_map[RED ] = 0; rgba_map[GREEN] = 1; rgba_map[BLUE ] = 2; rgba_map[ALPHA] = 3; break; + case PIX_FMT_BGRA: + case PIX_FMT_BGR24: rgba_map[BLUE ] = 0; rgba_map[GREEN] = 1; rgba_map[RED ] = 2; rgba_map[ALPHA] = 3; break; + default: /* unsupported */ + return AVERROR(EINVAL); + } + return 0; +} + int ff_fill_line_with_color(uint8_t *line[4], int pixel_step[4], int w, uint8_t dst_color[4], enum PixelFormat pix_fmt, uint8_t rgba_color[4], int *is_packed_rgba, uint8_t rgba_map_ptr[4]) @@ -32,17 +47,7 @@ int ff_fill_line_with_color(uint8_t *line[4], int pixel_step[4], int w, uint8_t const AVPixFmtDescriptor *pix_desc = &av_pix_fmt_descriptors[pix_fmt]; int hsub = pix_desc->log2_chroma_w; - *is_packed_rgba = 1; - switch (pix_fmt) { - case PIX_FMT_ARGB: rgba_map[ALPHA] = 0; rgba_map[RED ] = 1; rgba_map[GREEN] = 2; rgba_map[BLUE ] = 3; break; - case PIX_FMT_ABGR: rgba_map[ALPHA] = 0; rgba_map[BLUE ] = 1; rgba_map[GREEN] = 2; rgba_map[RED ] = 3; break; - case PIX_FMT_RGBA: - case PIX_FMT_RGB24: rgba_map[RED ] = 0; rgba_map[GREEN] = 1; rgba_map[BLUE ] = 2; rgba_map[ALPHA] = 3; break; - case PIX_FMT_BGRA: - case PIX_FMT_BGR24: rgba_map[BLUE ] = 0; rgba_map[GREEN] = 1; rgba_map[RED ] = 2; rgba_map[ALPHA] = 3; break; - default: - *is_packed_rgba = 0; - } + *is_packed_rgba = ff_fill_rgba_map(rgba_map, pix_fmt) >= 0; if (*is_packed_rgba) { pixel_step[0] = (av_get_bits_per_pixel(pix_desc))>>3; diff --git a/libavfilter/drawutils.h b/libavfilter/drawutils.h index e838660579..330b1cb0aa 100644 --- a/libavfilter/drawutils.h +++ b/libavfilter/drawutils.h @@ -27,6 +27,8 @@ #include #include "libavutil/pixfmt.h" +int ff_fill_rgba_map(uint8_t *rgba_map, enum PixelFormat pix_fmt); + int ff_fill_line_with_color(uint8_t *line[4], int pixel_step[4], int w, uint8_t dst_color[4], enum PixelFormat pix_fmt, uint8_t rgba_color[4],