summaryrefslogtreecommitdiffstats
path: root/zarb-ml/mageia-dev/2012-May/015236.html
diff options
context:
space:
mode:
Diffstat (limited to 'zarb-ml/mageia-dev/2012-May/015236.html')
-rw-r--r--zarb-ml/mageia-dev/2012-May/015236.html394
1 files changed, 394 insertions, 0 deletions
diff --git a/zarb-ml/mageia-dev/2012-May/015236.html b/zarb-ml/mageia-dev/2012-May/015236.html
new file mode 100644
index 000000000..eeccc9e4d
--- /dev/null
+++ b/zarb-ml/mageia-dev/2012-May/015236.html
@@ -0,0 +1,394 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+<HTML>
+ <HEAD>
+ <TITLE> [Mageia-dev] Fwd: [VDPAU] [PATCH] Implement workarounds for Adobe Flash bugs
+ </TITLE>
+ <LINK REL="Index" HREF="index.html" >
+ <LINK REL="made" HREF="mailto:mageia-dev%40mageia.org?Subject=Re%3A%20%5BMageia-dev%5D%20Fwd%3A%20%5BVDPAU%5D%20%5BPATCH%5D%20Implement%20workarounds%20for%20Adobe%0A%09Flash%20bugs&In-Reply-To=%3C4FA29830.6040609%40mageia.org%3E">
+ <META NAME="robots" CONTENT="index,nofollow">
+ <META http-equiv="Content-Type" content="text/html; charset=us-ascii">
+ <LINK REL="Previous" HREF="015265.html">
+ <LINK REL="Next" HREF="015237.html">
+ </HEAD>
+ <BODY BGCOLOR="#ffffff">
+ <H1>[Mageia-dev] Fwd: [VDPAU] [PATCH] Implement workarounds for Adobe Flash bugs</H1>
+ <B>Anssi Hannula</B>
+ <A HREF="mailto:mageia-dev%40mageia.org?Subject=Re%3A%20%5BMageia-dev%5D%20Fwd%3A%20%5BVDPAU%5D%20%5BPATCH%5D%20Implement%20workarounds%20for%20Adobe%0A%09Flash%20bugs&In-Reply-To=%3C4FA29830.6040609%40mageia.org%3E"
+ TITLE="[Mageia-dev] Fwd: [VDPAU] [PATCH] Implement workarounds for Adobe Flash bugs">anssi at mageia.org
+ </A><BR>
+ <I>Thu May 3 16:37:36 CEST 2012</I>
+ <P><UL>
+ <LI>Previous message: <A HREF="015265.html">[Mageia-dev] Freeze push request : bluedevil
+</A></li>
+ <LI>Next message: <A HREF="015237.html">[Mageia-dev] Fwd: [VDPAU] [PATCH] Implement workarounds for Adobe Flash bugs
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#15236">[ date ]</a>
+ <a href="thread.html#15236">[ thread ]</a>
+ <a href="subject.html#15236">[ subject ]</a>
+ <a href="author.html#15236">[ author ]</a>
+ </LI>
+ </UL>
+ <HR>
+<!--beginarticle-->
+<PRE>Hi all!
+
+I think we should probably apply the below libvdpau workaround for Adobe
+Flash issues, for both mga2 and mga1, WDYT?
+
+(Note: I haven't yet tested it)
+
+--
+Anssi Hannula
+
+
+-------- Alkuper&#228;inen viesti / Orig.Msg. --------
+Aihe: [VDPAU] [PATCH] Implement workarounds for Adobe Flash bugs
+P&#228;iv&#228;ys: Tue, 1 May 2012 21:27:24 -0600
+L&#228;hett&#228;j&#228;: Stephen Warren &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-dev">swarren at wwwdotorg.org</A>&gt;
+Vastaanottaja: Aaron Plattner &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-dev">aplattner at nvidia.com</A>&gt;
+CC: <A HREF="https://www.mageia.org/mailman/listinfo/mageia-dev">vdpau at lists.freedesktop.org</A>, Stephen Warren &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-dev">swarren at wwwdotorg.org</A>&gt;
+
+Implement two workarounds:
+
+1) Swap U and V planes to VdpVideoSurfacePutBitsYCbCr to fix blue-tinged
+ videos.
+
+2) Disable VdpPresentationQueueSetBackgroundColor, so that Flash doesn't
+ set the background to pure black or pure white, which would cause the
+ VDPAU image to bleed through to other parts of the desktop with those
+ very common colors.
+
+These workarounds are only enabled when running under Flash player, and
+may be individually controlled via /etc/vdpau_wrapper.cfg, should they
+ever need to be disabled.
+
+Note that this code stores the VDPAU backend function pointers as global
+variables, which is technically incorrect. However, the likelihood of
+any known VDPAU implementation ever returning different values for these
+pointers within a single process is zero. If this becomes a problem, a
+has table of VdpDevice to the stored pointers should be implemented.
+
+Signed-off-by: Stephen Warren &lt;<A HREF="https://www.mageia.org/mailman/listinfo/mageia-dev">swarren at wwwdotorg.org</A>&gt;
+---
+ src/Makefile.am | 4 +
+ src/vdpau_wrapper.c | 170
+++++++++++++++++++++++++++++++++++++++++++++++++-
+ src/vdpau_wrapper.cfg | 2 +
+ 3 files changed, 174 insertions(+), 2 deletions(-)
+ create mode 100644 src/vdpau_wrapper.cfg
+
+diff --git a/src/Makefile.am b/src/Makefile.am
+index 48e69a7..9162ffb 100644
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -1,6 +1,7 @@
+ AM_CFLAGS = \
+ -I$(top_srcdir)/include \
+ -DVDPAU_MODULEDIR=&quot;\&quot;$(moduledir)\&quot;&quot; \
++ -DVDPAU_SYSCONFDIR=&quot;\&quot;$(sysconfdir)\&quot;&quot; \
+ $(X11_CFLAGS) \
+ $(XEXT_CFLAGS)
+
+@@ -26,3 +27,6 @@ libvdpauincludedir = $(includedir)/vdpau
+ libvdpauinclude_HEADERS = \
+ $(top_srcdir)/include/vdpau/vdpau.h \
+ $(top_srcdir)/include/vdpau/vdpau_x11.h
++
++libvdpausysconfdir=$(sysconfdir)
++libvdpausysconf_DATA = vdpau_wrapper.cfg
+diff --git a/src/vdpau_wrapper.c b/src/vdpau_wrapper.c
+index 23de3d4..c955745 100644
+--- a/src/vdpau_wrapper.c
++++ b/src/vdpau_wrapper.c
+@@ -210,6 +210,163 @@ static void _vdp_close_driver(void)
+ _vdp_imp_device_create_x11_proc = NULL;
+ }
+
++static VdpGetProcAddress * _imp_get_proc_address;
++static VdpVideoSurfacePutBitsYCbCr * _imp_vid_put_bits_y_cb_cr;
++static VdpPresentationQueueSetBackgroundColor * _imp_pq_set_bg_color;
++static int _inited_fixes;
++static int _running_under_flash;
++static int _enable_flash_uv_swap = 1;
++static int _disable_flash_pq_bg_color = 1;
++
++static VdpStatus vid_put_bits_y_cb_cr_swapped(
++ VdpVideoSurface surface,
++ VdpYCbCrFormat source_ycbcr_format,
++ void const * const * source_data,
++ uint32_t const * source_pitches
++)
++{
++ void const * data_reordered[3];
++ void const * const * data;
++
++ if (source_ycbcr_format == VDP_YCBCR_FORMAT_YV12) {
++ data_reordered[0] = source_data[0];
++ data_reordered[1] = source_data[2];
++ data_reordered[2] = source_data[1];
++ /*
++ * source_pitches[1] and source_pitches[2] should be equal,
++ * so no need to re-order.
++ */
++ data = data_reordered;
++ }
++ else {
++ data = source_data;
++ }
++
++ return _imp_vid_put_bits_y_cb_cr(
++ surface,
++ source_ycbcr_format,
++ data,
++ source_pitches
++ );
++}
++
++static VdpStatus pq_set_bg_color_noop(
++ VdpPresentationQueue presentation_queue,
++ VdpColor * const background_color
++)
++{
++ return VDP_STATUS_OK;
++}
++
++static VdpStatus vdp_wrapper_get_proc_address(
++ VdpDevice device,
++ VdpFuncId function_id,
++ /* output parameters follow */
++ void * * function_pointer
++)
++{
++ VdpStatus status;
++
++ status = _imp_get_proc_address(device, function_id, function_pointer);
++ if (status != VDP_STATUS_OK) {
++ return status;
++ }
++
++ if (_running_under_flash) {
++ switch (function_id) {
++ case VDP_FUNC_ID_VIDEO_SURFACE_PUT_BITS_Y_CB_CR:
++ if (_enable_flash_uv_swap) {
++ _imp_vid_put_bits_y_cb_cr = *function_pointer;
++ *function_pointer = vid_put_bits_y_cb_cr_swapped;
++ }
++ break;
++ case VDP_FUNC_ID_PRESENTATION_QUEUE_SET_BACKGROUND_COLOR:
++ if (_disable_flash_pq_bg_color) {
++ _imp_pq_set_bg_color = *function_pointer;
++ *function_pointer = pq_set_bg_color_noop;
++ }
++ break;
++ default:
++ break;
++ }
++ }
++
++ return VDP_STATUS_OK;
++}
++
++static void init_running_under_flash(void)
++{
++ FILE *fp;
++ char buffer[1024];
++ int ret, i;
++
++ fp = fopen(&quot;/proc/self/cmdline&quot;, &quot;r&quot;);
++ if (!fp) {
++ return;
++ }
++ ret = fread(buffer, 1, sizeof(buffer) - 1, fp);
++ fclose(fp);
++ if (ret &lt; 0) {
++ return;
++ }
++ /*
++ * Sometimes the file contains null between arguments. Wipe these
+out so
++ * strstr doesn't stop early.
++ */
++ for (i = 0; i &lt; ret; i++) {
++ if (buffer[i] == '\0') {
++ buffer[i] = 'x';
++ }
++ }
++ buffer[ret] = '\0';
++
++ if (strstr(buffer, &quot;libflashplayer&quot;) != NULL) {
++ _running_under_flash = 1;
++ }
++}
++
++void init_config(void)
++{
++ FILE *fp;
++ char buffer[1024];
++ int ret;
++
++ fp = fopen(VDPAU_SYSCONFDIR &quot;/vdpau_wrapper.cfg&quot;, &quot;r&quot;);
++ if (!fp) {
++ return;
++ }
++
++ while (fgets(buffer, sizeof(buffer), fp) != NULL) {
++ char * equals = strchr(buffer, '=');
++ char * param;
++
++ if (equals == NULL) {
++ continue;
++ }
++
++ *equals = '\0';
++ param = equals + 1;
++
++ if (!strcmp(buffer, &quot;enable_flash_uv_swap&quot;)) {
++ _enable_flash_uv_swap = atoi(param);
++ }
++ else if (!strcmp(buffer, &quot;disable_flash_pq_bg_color&quot;)) {
++ _disable_flash_pq_bg_color = atoi(param);
++ }
++ }
++}
++
++void init_fixes(void)
++{
++ if (_inited_fixes) {
++ return;
++ }
++ _inited_fixes = 1;
++
++ init_running_under_flash();
++ init_config();
++}
++
+ VdpStatus vdp_device_create_x11(
+ Display * display,
+ int screen,
+@@ -220,6 +377,8 @@ VdpStatus vdp_device_create_x11(
+ {
+ VdpStatus status;
+
++ init_fixes();
++
+ if (!_vdp_imp_device_create_x11_proc) {
+ status = _vdp_open_driver(display, screen);
+ if (status != VDP_STATUS_OK) {
+@@ -228,10 +387,17 @@ VdpStatus vdp_device_create_x11(
+ }
+ }
+
+- return _vdp_imp_device_create_x11_proc(
++ status = _vdp_imp_device_create_x11_proc(
+ display,
+ screen,
+ device,
+- get_proc_address
++ &amp;_imp_get_proc_address
+ );
++ if (status != VDP_STATUS_OK) {
++ return status;
++ }
++
++ *get_proc_address = vdp_wrapper_get_proc_address;
++
++ return VDP_STATUS_OK;
+ }
+diff --git a/src/vdpau_wrapper.cfg b/src/vdpau_wrapper.cfg
+new file mode 100644
+index 0000000..21d5b8c
+--- /dev/null
++++ b/src/vdpau_wrapper.cfg
+@@ -0,0 +1,2 @@
++enable_flash_uv_swap=1
++disable_flash_pq_bg_color=1
+--
+Anssi Hannula
+</PRE>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<!--endarticle-->
+ <HR>
+ <P><UL>
+ <!--threads-->
+ <LI>Previous message: <A HREF="015265.html">[Mageia-dev] Freeze push request : bluedevil
+</A></li>
+ <LI>Next message: <A HREF="015237.html">[Mageia-dev] Fwd: [VDPAU] [PATCH] Implement workarounds for Adobe Flash bugs
+</A></li>
+ <LI> <B>Messages sorted by:</B>
+ <a href="date.html#15236">[ date ]</a>
+ <a href="thread.html#15236">[ thread ]</a>
+ <a href="subject.html#15236">[ subject ]</a>
+ <a href="author.html#15236">[ author ]</a>
+ </LI>
+ </UL>
+
+<hr>
+<a href="https://www.mageia.org/mailman/listinfo/mageia-dev">More information about the Mageia-dev
+mailing list</a><br>
+</body></html>