From d8bba5d8c2063a5cef827dbb3f4cd5dc75cd3000 Mon Sep 17 00:00:00 2001 From: Stefan Kost Date: Mon, 18 Sep 2006 14:42:03 +0000 Subject: [PATCH] sys/xvimage/xvimagesink.c: xvimage assumed that XV_COLORKEY can be set in RGB888 format (fixes #354773), use gst_util... Original commit message from CVS: * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support), (gst_xvimagesink_get_times): xvimage assumed that XV_COLORKEY can be set in RGB888 format (fixes #354773), use gst_util_uint64_scale_int in _get_times() --- ChangeLog | 7 +++++++ sys/xvimage/xvimagesink.c | 30 +++++++++++++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0687061..e6b6e95 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2006-09-18 Stefan Kost + + * sys/xvimage/xvimagesink.c: (gst_xvimagesink_get_xv_support), + (gst_xvimagesink_get_times): + xvimage assumed that XV_COLORKEY can be set in RGB888 format (fixes + #354773), use gst_util_uint64_scale_int in _get_times() + 2006-09-18 Michael Smith * ext/ogg/gstoggmux.c: (gst_ogg_mux_push_buffer): diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index e2567ca..30f8064 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -1191,9 +1191,31 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink, for (i = 0; i < count; i++) if (!strcmp (attr[i].name, colorkey)) { const Atom atom = XInternAtom (xcontext->disp, colorkey, False); + int ckey = 0; + + /* set a colorkey in the right format RGB555/RGB565/RGB888 */ + switch (xcontext->depth) { + case 15: + ckey = (1 << 10) | (2 << 5) | 3; + break; + case 16: + ckey = (1 << 11) | (2 << 5) | 3; + break; + case 24: + case 32: + ckey = (1 << 16) | (2 << 8) | 3; + break; + default: + GST_WARNING ("unsupported color depth"); + break; + } + ckey = CLAMP (ckey, attr[i].min_value, attr[i].max_value); + + GST_LOG_OBJECT (xvimagesink, + "Setting color key for display depth %d to 0x%x", + xcontext->depth, ckey); - XvSetPortAttribute (xcontext->disp, xcontext->xv_port_id, atom, - 0x010203); + XvSetPortAttribute (xcontext->disp, xcontext->xv_port_id, atom, ckey); break; } @@ -1953,7 +1975,9 @@ gst_xvimagesink_get_times (GstBaseSink * bsink, GstBuffer * buf, *end = *start + GST_BUFFER_DURATION (buf); } else { if (xvimagesink->fps_n > 0) { - *end = *start + (GST_SECOND * xvimagesink->fps_d) / xvimagesink->fps_n; + *end = *start + + gst_util_uint64_scale_int (GST_SECOND, xvimagesink->fps_d, + xvimagesink->fps_n); } } } -- 2.7.4