From 5cf4aa358d187c7495d81b8212f78b039ae8b69e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Thu, 30 Oct 2014 17:30:33 +0100 Subject: [PATCH] video-converter: add border color --- gst-libs/gst/video/video-converter.c | 36 +++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/gst-libs/gst/video/video-converter.c b/gst-libs/gst/video/video-converter.c index b4f55b6336..03870f1ee3 100644 --- a/gst-libs/gst/video/video-converter.c +++ b/gst-libs/gst/video/video-converter.c @@ -94,7 +94,7 @@ struct _GstVideoConverter guint tmplines_idx; gboolean fill_border; - guint16 *borderline; + gpointer borderline; guint32 border_argb; GstVideoChromaResample *upsample; @@ -552,8 +552,38 @@ gst_video_converter_new (GstVideoInfo * in_info, GstVideoInfo * out_info, if (convert->fill_border && (convert->out_height < convert->out_maxheight || convert->out_width < convert->out_maxwidth)) { - convert->borderline = g_malloc0 (sizeof (guint16) * width * 4); - memset (convert->borderline, convert->border_argb, width * 8); + gint i; + guint8 *b; + guint64 border_val, v; + + b = convert->borderline = g_malloc0 (sizeof (guint16) * width * 4); + + if (GST_VIDEO_INFO_IS_YUV (&convert->out_info)) { + /* FIXME, convert to AYUV, just black for now */ + border_val = 0x00007f7f; + } else { + border_val = convert->border_argb; + } + + if (convert->out_bits == 8) + v = (border_val << 32) | border_val; + else { + guint64 c; + + c = (border_val >> 24) & 0xff; + v = (c << 56) | (c << 48); + c = (border_val >> 16) & 0xff; + v |= (c << 40) | (c << 32); + c = (border_val >> 8) & 0xff; + v |= (c << 24) | (c << 16); + c = (border_val) & 0xff; + v |= (c << 8) | c; + } + v = GINT64_TO_BE (v); + for (i = 0; i < width; i++) { + memcpy (b, &v, 8); + b += 8; + } } else { convert->borderline = NULL; }