From 8dc90371b1d0dac0a9417890d1a3dfcd9f31559b Mon Sep 17 00:00:00 2001 From: Stefano Sabatini Date: Mon, 24 Oct 2011 19:58:48 +0200 Subject: [PATCH] lavfi: add internal function ff_fill_rgba_map() --- libavfilter/drawutils.c | 27 ++++++++++++++++----------- libavfilter/drawutils.h | 2 ++ 2 files changed, 18 insertions(+), 11 deletions(-) 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],