summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--sys/xvimage/xvimagesink.c30
2 files changed, 34 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 0687061c..e6b6e95c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-09-18 Stefan Kost <ensonic@users.sf.net>
+
+ * 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 <msmith@fluendo.com>
* ext/ogg/gstoggmux.c: (gst_ogg_mux_push_buffer):
diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c
index e2567cac..30f80647 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);
}
}
}