From 6bc20e84d84f5d8d6941fc364dc3bf53662ea222 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Wed, 24 Feb 2016 23:11:54 +0100 Subject: [PATCH] avfilter/drawutils: Fix ff_fill_rectangle() on big endian Signed-off-by: Michael Niedermayer --- libavfilter/drawutils.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libavfilter/drawutils.c b/libavfilter/drawutils.c index 7edaa4ac6c6..876a859e1fc 100644 --- a/libavfilter/drawutils.c +++ b/libavfilter/drawutils.c @@ -298,6 +298,7 @@ void ff_fill_rectangle(FFDrawContext *draw, FFDrawColor *color, { int plane, x, y, wp, hp; uint8_t *p0, *p; + FFDrawColor color_tmp = *color; for (plane = 0; plane < draw->nb_planes; plane++) { p0 = pointer_at(draw, dst, dst_linesize, plane, dst_x, dst_y); @@ -306,9 +307,15 @@ void ff_fill_rectangle(FFDrawContext *draw, FFDrawColor *color, if (!hp) return; p = p0; + + if (HAVE_BIGENDIAN && draw->desc->comp[0].depth > 8) { + for (x = 0; 2*x < draw->pixelstep[plane]; x++) + color_tmp.comp[plane].u16[x] = av_bswap16(color_tmp.comp[plane].u16[x]); + } + /* copy first line from color */ for (x = 0; x < wp; x++) { - memcpy(p, color->comp[plane].u8, draw->pixelstep[plane]); + memcpy(p, color_tmp.comp[plane].u8, draw->pixelstep[plane]); p += draw->pixelstep[plane]; } wp *= draw->pixelstep[plane]; -- 2.39.2