aboutsummaryrefslogtreecommitdiffstats
path: root/meta/recipes-graphics/xorg-driver/xf86-video-omapfb
diff options
context:
space:
mode:
Diffstat (limited to 'meta/recipes-graphics/xorg-driver/xf86-video-omapfb')
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0004-Attempt-to-fix-VRFB.patch325
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-blacklist-tv-out.patch27
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-force-plain-mode.patch25
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-revert-set-CRTC-limit.patch34
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-revert-set-virtual-size.patch25
-rw-r--r--meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omapfb-neon.diff148
6 files changed, 0 insertions, 584 deletions
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0004-Attempt-to-fix-VRFB.patch b/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0004-Attempt-to-fix-VRFB.patch
deleted file mode 100644
index 6b59b9f363..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/0004-Attempt-to-fix-VRFB.patch
+++ /dev/null
@@ -1,325 +0,0 @@
-From 9f034f7a83751e4d1bbff6dd742d54bd96d38230 Mon Sep 17 00:00:00 2001
-From: Eino-Ville Talvala <talvala@stanford.edu>
-Date: Tue, 23 Aug 2011 18:37:01 +0200
-Subject: [PATCH] Attempt to fix VRFB
-
-Upstream-Status: Pending
-
-http://dominion.thruhere.net/git/cgit.cgi/xf86-video-omapfb/commit/?h=koen/fixups&id=6833fc9f795265e4943d248103fbaf3463b515d6
-
-Signed-off-by: Sebastian Krzyszkowiak <dos@dosowisko.net>
-
----
- src/image-format-conversions.c | 4 +-
- src/image-format-conversions.h | 2 +-
- src/omapfb-driver.c | 28 +++++++++++++--
- src/omapfb-xv-blizzard.c | 1 +
- src/omapfb-xv-generic.c | 72 +++++++++++++++++++++++++++++++--------
- src/omapfb-xv.c | 3 ++
- 6 files changed, 88 insertions(+), 22 deletions(-)
-
-diff --git a/src/image-format-conversions.c b/src/image-format-conversions.c
-index dcefa9b..d43427d 100644
---- a/src/image-format-conversions.c
-+++ b/src/image-format-conversions.c
-@@ -38,13 +38,13 @@
- #include "image-format-conversions.h"
-
- /* Basic line-based copy for packed formats */
--void packed_line_copy(int w, int h, int stride, uint8_t *src, uint8_t *dest)
-+void packed_line_copy(int w, int h, int src_stride, int dst_stride, uint8_t *src, uint8_t *dest)
- {
- int i;
- int len = w * 2;
- for (i = 0; i < h; i++)
- {
-- memcpy(dest + i * len, src + i * stride, len);
-+ memcpy(dest + i * dst_stride, src + i * src_stride, len);
- }
- }
-
-diff --git a/src/image-format-conversions.h b/src/image-format-conversions.h
-index 584896a..ba7caf2 100644
---- a/src/image-format-conversions.h
-+++ b/src/image-format-conversions.h
-@@ -27,7 +27,7 @@
- #include <stdint.h>
-
- /* Basic line-based copy for packed formats */
--void packed_line_copy(int w, int h, int stride, uint8_t *src, uint8_t *dest);
-+void packed_line_copy(int w, int h, int src_stride, int dst_stride, uint8_t *src, uint8_t *dest);
-
- /* Basic C implementation of YV12/I420 to UYVY conversion */
- void uv12_to_uyvy(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest);
-diff --git a/src/omapfb-driver.c b/src/omapfb-driver.c
-index 48aa09c..07989f5 100644
---- a/src/omapfb-driver.c
-+++ b/src/omapfb-driver.c
-@@ -66,6 +66,7 @@
- #define OMAPFB_VERSION 1000
- #define OMAPFB_DRIVER_NAME "OMAPFB"
- #define OMAPFB_NAME "omapfb"
-+#define ENFORCE_MODES
-
- static Bool OMAPFBProbe(DriverPtr drv, int flags);
- static Bool OMAPFBPreInit(ScrnInfoPtr pScrn, int flags);
-@@ -105,11 +106,13 @@ static SymTabRec OMAPFBChipsets[] = {
- typedef enum {
- OPTION_ACCELMETHOD,
- OPTION_FB,
-+ OPTION_ROTATE,
- } FBDevOpts;
-
- static const OptionInfoRec OMAPFBOptions[] = {
- { OPTION_ACCELMETHOD, "AccelMethod", OPTV_STRING, {0}, FALSE },
- { OPTION_FB, "fb", OPTV_STRING, {0}, FALSE },
-+ { OPTION_ROTATE, "rotation", OPTV_STRING, {0}, FALSE },
- { -1, NULL, OPTV_NONE, {0}, FALSE }
- };
-
-@@ -286,6 +289,7 @@ OMAPFBPreInit(ScrnInfoPtr pScrn, int flags)
- {
- OMAPFBPtr ofb;
- EntityInfoPtr pEnt;
-+ char *rotate;
- rgb zeros = { 0, 0, 0 };
- struct stat st;
-
-@@ -379,6 +383,8 @@ OMAPFBPreInit(ScrnInfoPtr pScrn, int flags)
- pScrn->progClock = TRUE;
- pScrn->chipset = "omapfb";
-
-+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Rotate test version 0.02\n");
-+
- /* Start with configured virtual size */
- pScrn->virtualX = pScrn->display->virtualX;
- pScrn->virtualY = pScrn->display->virtualY;
-@@ -496,12 +502,21 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
- ofb->CloseScreen = pScreen->CloseScreen;
- pScreen->CloseScreen = OMAPFBCloseScreen;
-
-+ /* Enforce the default mode (this is silly I guess) */
-+#ifdef ENFORCE_MODES
-+ //xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Enforcing modes\n");
-+ //set_mode(ofb, &ofb->default_mode);
-+ //pScrn->displayWidth = ofb->fixed_info.line_length /
-+ // (ofb->state_info.bits_per_pixel>>3); //ofb->state_info.xres;
-+#endif
-+
- /* Map our framebuffer memory */
-+ ofb->mem_info.size = ofb->fixed_info.line_length * ofb->state_info.yres;
- ofb->fb = mmap (NULL, ofb->mem_info.size,
- PROT_READ | PROT_WRITE, MAP_SHARED,
- ofb->fd, 0);
-- if (ofb->fb == NULL) {
-- xf86DrvMsg(scrnIndex, X_ERROR, "Mapping framebuffer memory failed\n");
-+ if (ofb->fb == MAP_FAILED) {
-+ xf86DrvMsg(scrnIndex, X_ERROR, "Mapping framebuffer memory failed, wanted %d bytes.\n", ofb->mem_info.size);
- return FALSE;
- }
-
-@@ -578,8 +593,13 @@ OMAPFBScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
- } else if (!ofb->dss) {
-
- ofb->plane_info.enabled = 1;
-- ofb->plane_info.out_width = ofb->state_info.xres;
-- ofb->plane_info.out_height = ofb->state_info.yres;
-+ if (ofb->state_info.rotate == 0 || ofb->state_info.rotate == 2) {
-+ ofb->plane_info.out_width = ofb->state_info.xres;
-+ ofb->plane_info.out_height = ofb->state_info.yres;
-+ } else {
-+ ofb->plane_info.out_width = ofb->state_info.yres;
-+ ofb->plane_info.out_height = ofb->state_info.xres;
-+ }
-
- if (ioctl (ofb->fd, OMAPFB_SETUP_PLANE, &ofb->plane_info)) {
- xf86DrvMsg(scrnIndex, X_ERROR,
-diff --git a/src/omapfb-xv-blizzard.c b/src/omapfb-xv-blizzard.c
-index 406ffc6..b71d2aa 100644
---- a/src/omapfb-xv-blizzard.c
-+++ b/src/omapfb-xv-blizzard.c
-@@ -220,6 +220,7 @@ int OMAPFBXVPutImageBlizzard (ScrnInfoPtr pScrn,
- packed_line_copy(src_w & ~3,
- src_h & ~3,
- ((src_w + 1) & ~1) * 2,
-+ ofb->port->fixed_info.line_length,
- (uint8_t*)buf,
- (uint8_t*)ofb->port->fb);
- break;
-diff --git a/src/omapfb-xv-generic.c b/src/omapfb-xv-generic.c
-index e6f89fe..b33f344 100644
---- a/src/omapfb-xv-generic.c
-+++ b/src/omapfb-xv-generic.c
-@@ -62,7 +62,7 @@ int OMAPXVAllocPlane(ScrnInfoPtr pScrn)
- {
- OMAPFBPtr ofb = OMAPFB(pScrn);
-
-- /* The memory size is already set in OMAPFBXVQueryImageAttributes */
-+ /* The memory size is already set before we get here */
- if (ioctl(ofb->port->fd, OMAPFB_SETUP_MEM, &ofb->port->mem_info) != 0) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
- "Failed to allocate video plane memory\n");
-@@ -73,19 +73,20 @@ int OMAPXVAllocPlane(ScrnInfoPtr pScrn)
- ofb->port->fb = mmap (NULL, ofb->port->mem_info.size,
- PROT_READ | PROT_WRITE, MAP_SHARED,
- ofb->port->fd, 0);
-- if (ofb->port->fb == NULL) {
-+ if (ofb->port->fb == MAP_FAILED) {
- xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
- "Mapping video memory failed\n");
- return XvBadAlloc;
- }
-
- /* Update the state info */
-+ /* Let's not - it's bad
- if (ioctl (ofb->port->fd, FBIOGET_VSCREENINFO, &ofb->port->state_info))
- {
- xf86Msg(X_ERROR, "%s: Reading state info failed\n", __FUNCTION__);
- return XvBadAlloc;
- }
--
-+ */
- return Success;
- }
-
-@@ -93,6 +94,7 @@ int OMAPXVAllocPlane(ScrnInfoPtr pScrn)
- int OMAPXVSetupVideoPlane(ScrnInfoPtr pScrn)
- {
- OMAPFBPtr ofb = OMAPFB(pScrn);
-+ int ret;
-
- if (ioctl (ofb->port->fd, FBIOPUT_VSCREENINFO, &ofb->port->state_info))
- {
-@@ -104,6 +106,31 @@ int OMAPXVSetupVideoPlane(ScrnInfoPtr pScrn)
- xf86Msg(X_ERROR, "%s: Reading state info failed\n", __FUNCTION__);
- return XvBadAlloc;
- }
-+ /* Changing rotation/nonstd flags can change the fixed info! */
-+ if (ioctl (ofb->port->fd, FBIOGET_FSCREENINFO, &ofb->port->fixed_info))
-+ {
-+ xf86Msg(X_ERROR, "%s: Reading state info failed\n", __FUNCTION__);
-+ return XvBadAlloc;
-+ }
-+ /* Correct fixed info requires recalculation of needed memory */
-+ ofb->port->mem_info.size = ofb->port->fixed_info.line_length * ofb->port->state_info.yres;
-+
-+ /* Allocate buffer memory */
-+ ret = OMAPXVAllocPlane(pScrn);
-+ if (ret != Success)
-+ return ret;
-+
-+ /* Workaround for reset of mode after memory allo */
-+ if (ioctl (ofb->port->fd, FBIOPUT_VSCREENINFO, &ofb->port->state_info))
-+ {
-+ xf86Msg(X_ERROR, "%s: setting state info failed\n", __FUNCTION__);
-+ return XvBadAlloc;
-+ }
-+ if (ioctl (ofb->port->fd, FBIOGET_VSCREENINFO, &ofb->port->state_info))
-+ {
-+ xf86Msg(X_ERROR, "%s: Reading state info failed\n", __FUNCTION__);
-+ return XvBadAlloc;
-+ }
-
- if(ioctl(ofb->port->fd, OMAPFB_SETUP_PLANE,
- &ofb->port->plane_info) != 0) {
-@@ -124,6 +151,8 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn,
- DrawablePtr pDraw)
- {
- OMAPFBPtr ofb = OMAPFB(pScrn);
-+ short drw_temp;
-+ short rot_xres, rot_yres;
-
- if (!ofb->port->plane_info.enabled
- || ofb->port->update_window.x != src_x
-@@ -163,13 +192,6 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn,
- return Success;
- }
-
-- /* If we don't have the plane running, enable it */
-- if (!ofb->port->plane_info.enabled) {
-- ret = OMAPXVAllocPlane(pScrn);
-- if (ret != Success)
-- return ret;
-- }
--
- /* Set up the state info, xres and yres will be used for
- * scaling to the values in the plane info struct
- */
-@@ -179,12 +201,31 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn,
- ofb->port->state_info.yres_virtual = 0;
- ofb->port->state_info.xoffset = 0;
- ofb->port->state_info.yoffset = 0;
-- ofb->port->state_info.rotate = 0;
-+ //ofb->port->state_info.rotate = 0;
- ofb->port->state_info.grayscale = 0;
- ofb->port->state_info.activate = FB_ACTIVATE_NOW;
- ofb->port->state_info.bits_per_pixel = 0;
- ofb->port->state_info.nonstd = xv_to_omapfb_format(image);
-
-+ /* Plane info does not rotate with state_info */
-+ if (ofb->port->state_info.rotate == 1 ||
-+ ofb->port->state_info.rotate == 3) {
-+ drw_temp = drw_x;
-+ drw_x = drw_y;
-+ drw_y = drw_temp;
-+
-+ drw_temp = drw_w;
-+ drw_w = drw_h;
-+ drw_h = drw_temp;
-+
-+ rot_xres = ofb->port->state_info.yres;
-+ rot_yres = ofb->port->state_info.xres;
-+ } else {
-+ rot_xres = ofb->port->state_info.xres;
-+ rot_yres = ofb->port->state_info.yres;
-+ }
-+
-+
- /* Set up the video plane info */
- ofb->port->plane_info.enabled = 1;
- ofb->port->plane_info.pos_x = drw_x;
-@@ -193,13 +234,13 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn,
- ofb->port->plane_info.out_height = drw_h & ~15;
-
- /* Cap output to screen size */
-- if (ofb->port->plane_info.out_width > ofb->state_info.xres) {
-+ if (ofb->port->plane_info.out_width > rot_xres) {
- ofb->port->plane_info.pos_x = 0;
-- ofb->port->plane_info.out_width = ofb->state_info.xres;
-+ ofb->port->plane_info.out_width = rot_xres;
- }
-- if (ofb->port->plane_info.out_height > ofb->state_info.yres) {
-+ if (ofb->port->plane_info.out_height > rot_yres) {
- ofb->port->plane_info.pos_y = 0;
-- ofb->port->plane_info.out_height = ofb->state_info.yres;
-+ ofb->port->plane_info.out_height = rot_yres;
- }
-
- ret = OMAPXVSetupVideoPlane(pScrn);
-@@ -223,6 +264,7 @@ int OMAPFBXVPutImageGeneric (ScrnInfoPtr pScrn,
- packed_line_copy(src_w & ~15,
- src_h & ~15,
- ((src_w + 1) & ~1) * 2,
-+ ofb->port->fixed_info.line_length,
- (uint8_t*)buf,
- (uint8_t*)ofb->port->fb);
- break;
-diff --git a/src/omapfb-xv.c b/src/omapfb-xv.c
-index 1df651e..0fee2c6 100644
---- a/src/omapfb-xv.c
-+++ b/src/omapfb-xv.c
-@@ -169,8 +169,11 @@ static int OMAPFBXVQueryImageAttributes (ScrnInfoPtr pScrn,
- h = *height;
-
- w = (w + 1) & ~1;
-+
-+ /* Can't calculate these here - don't know line length
- ofb->port->mem_info.size = w << 1;
- ofb->port->mem_info.size *= h;
-+ */
-
- return size;
- }
---
-1.7.5.4
-
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-blacklist-tv-out.patch b/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-blacklist-tv-out.patch
deleted file mode 100644
index 9b1ee06ece..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-blacklist-tv-out.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-commit 05efb061f1945425d214ff6b6050883e6d8633bf
-Author: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed Jan 26 13:21:12 2011 +0100
-
- blacklist tv out
-
- The tv-out gets added last and the driver tries to reconfigure dvi to TV resolutions, which fails. so blacklist it
-
- Upstream-Status: Pending
-
- Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
-
-diff --git a/src/omapfb-output-dss.c b/src/omapfb-output-dss.c
-index 6cc52de..83cb711 100644
---- a/src/omapfb-output-dss.c
-+++ b/src/omapfb-output-dss.c
-@@ -205,6 +205,10 @@ OMAPFBDSSOutputDetect (xf86OutputPtr output)
- if(ofb->timings[idx][0] == '\0')
- return XF86OutputStatusDisconnected;
-
-+ // Hack to disable the tv out
-+ if (strncmp(output->name, "tv", 2) == 0)
-+ return XF86OutputStatusDisconnected;
-+
- return XF86OutputStatusConnected;
- }
-
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-force-plain-mode.patch b/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-force-plain-mode.patch
deleted file mode 100644
index bb298b0e6d..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-force-plain-mode.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-commit d28a36bbadc360a9409bf9832f1d4171d7c33dad
-Author: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed Jan 26 13:20:20 2011 +0100
-
- force 'plain' mode
-
- The new DSS mode breaks XV, so force plain mode
-
- Upstream-Status: Pending
-
- Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
-
-diff --git a/src/omapfb-driver.c b/src/omapfb-driver.c
-index 018e040..48aa09c 100644
---- a/src/omapfb-driver.c
-+++ b/src/omapfb-driver.c
-@@ -326,7 +326,7 @@ OMAPFBPreInit(ScrnInfoPtr pScrn, int flags)
- OMAPFBProbeController(ofb->ctrl_name);
-
- /* Do we have the DSS kernel API? */
-- if (stat(SYSFS_DSS_DIR, &st) == 0) {
-+ if (0) { //stat(SYSFS_DSS_DIR, &st) == 0) {
- ofb->dss = TRUE;
- } else {
- ofb->dss = FALSE;
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-revert-set-CRTC-limit.patch b/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-revert-set-CRTC-limit.patch
deleted file mode 100644
index 97bf022ab0..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-revert-set-CRTC-limit.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-commit 031516123d25a12808ab4e56ea8deda74946cdcd
-Author: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed Jan 26 12:04:36 2011 +0100
-
- Revert "Set a large CRTC upper limit to not prune larger resolutions"
-
- Picture is garbled after switching resolutions, so revert it.
-
- Virtual size too big, revert the commit 9c4d7592dcb7dc20a48a6f941d9d94bd73d34153.
-
- Upstream-Status: Pending
-
-diff --git a/src/omapfb-crtc.c b/src/omapfb-crtc.c
-index 9aaa52f..cbeff35 100644
---- a/src/omapfb-crtc.c
-+++ b/src/omapfb-crtc.c
-@@ -190,13 +190,13 @@ OMAPFBCRTCInit(ScrnInfoPtr pScrn)
- * In practise, this doesn't seem to be supported.
- * (no way to setup the overlay offset/base address)
- */
-- /* FIXME: figure out what makes sense here. A known max resolution?
-- * framebuffer size?
-- */
- xf86CrtcSetSizeRange(pScrn,
-- 8, 8, 2048, 2048);
-+ 8, 8,
-+ ofb->state_info.xres_virtual,
-+ ofb->state_info.yres_virtual);
-
- ofb->crtc = xf86CrtcCreate(pScrn, &OMAPFBCrtcFuncs);
-+
- }
-
-
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-revert-set-virtual-size.patch b/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-revert-set-virtual-size.patch
deleted file mode 100644
index 8a6eef5cc2..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omap-revert-set-virtual-size.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-commit cbae688d7df59938ccb4af534ec2ff75cbbe9221
-Author: Koen Kooi <koen@dominion.thruhere.net>
-Date: Wed Jan 26 13:27:20 2011 +0100
-
- Revert "Set virtual size when configuring framebuffer"
-
- Virtual size too big, so revert it.
-
- This reverts commit 2653ef07883fbd1a5e7025f9300cf89b79ba429a.
-
- Upstream-Status: Pending
-
-diff --git a/src/omapfb-crtc.c b/src/omapfb-crtc.c
-index cbeff35..9655db2 100644
---- a/src/omapfb-crtc.c
-+++ b/src/omapfb-crtc.c
-@@ -98,8 +98,6 @@ OMAPFBCrtcCommitChangeMode (xf86CrtcPtr crtc)
- v = ofb->state_info;
- v.xres = mode->HDisplay;
- v.yres = mode->VDisplay;
-- v.xres_virtual = crtc->scrn->virtualX;
-- v.yres_virtual = crtc->scrn->virtualY;
- v.activate = FB_ACTIVATE_NOW;
- v.pixclock = KHZ2PICOS(mode->Clock ? mode->Clock : 56000);
- v.left_margin = mode->HTotal - mode->HSyncEnd;
diff --git a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omapfb-neon.diff b/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omapfb-neon.diff
deleted file mode 100644
index fb3ac8c594..0000000000
--- a/meta/recipes-graphics/xorg-driver/xf86-video-omapfb/omapfb-neon.diff
+++ /dev/null
@@ -1,148 +0,0 @@
-Upstream-Status: Pending
-
---- /tmp/image-format-conversions.h 2009-02-03 10:18:04.000000000 +0100
-+++ git/src/image-format-conversions.h 2009-02-03 10:19:18.000000000 +0100
-@@ -30,6 +30,8 @@
- /* Basic C implementation of YV12/I420 to UYVY conversion */
- void uv12_to_uyvy(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest);
-
-+/* NEON implementation of YV12/I420 to UYVY conversion */
-+void uv12_to_uyvy_neon(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest);
-
- #endif /* __IMAGE_FORMAT_CONVERSIONS_H__ */
-
---- /tmp/image-format-conversions.c 2009-02-03 10:18:04.000000000 +0100
-+++ git/src/image-format-conversions.c 2009-02-03 10:16:47.000000000 +0100
-@@ -2,6 +2,7 @@
- * Copyright 2008 Kalle Vahlman, <zuh@iki.fi>
- * Ilpo Ruotsalainen, <lonewolf@iki.fi>
- * Tuomas Kulve, <tuomas.kulve@movial.com>
-+ * Ian Rickards, <ian.rickards@arm.com>
- *
- *
- * Permission to use, copy, modify, distribute and sell this software and its
-@@ -89,3 +90,104 @@
- }
- }
-
-+void uv12_to_uyvy_neon(int w, int h, int y_pitch, int uv_pitch, uint8_t *y_p, uint8_t *u_p, uint8_t *v_p, uint8_t *dest)
-+{
-+ int x, y;
-+ uint8_t *dest_even = dest;
-+ uint8_t *dest_odd = dest + w * 2;
-+ uint8_t *y_p_even = y_p;
-+ uint8_t *y_p_odd = y_p + y_pitch;
-+
-+ /*ErrorF("in uv12_to_uyvy, w: %d, pitch: %d\n", w, pitch);*/
-+ if (w<16)
-+ {
-+ for (y=0; y<h; y+=2)
-+ {
-+ for (x=0; x<w; x+=2)
-+ {
-+ /* Output two 2x1 macroblocks to form a 2x2 block from input */
-+ uint8_t u_val = *u_p++;
-+ uint8_t v_val = *v_p++;
-+
-+ /* Even row, first pixel */
-+ *dest_even++ = u_val;
-+ *dest_even++ = *y_p_even++;
-+
-+ /* Even row, second pixel */
-+ *dest_even++ = v_val;
-+ *dest_even++ = *y_p_even++;
-+
-+ /* Odd row, first pixel */
-+ *dest_odd++ = u_val;
-+ *dest_odd++ = *y_p_odd++;
-+
-+ /* Odd row, second pixel */
-+ *dest_odd++ = v_val;
-+ *dest_odd++ = *y_p_odd++;
-+ }
-+
-+ dest_even += w * 2;
-+ dest_odd += w * 2;
-+
-+ u_p += ((uv_pitch << 1) - w) >> 1;
-+ v_p += ((uv_pitch << 1) - w) >> 1;
-+
-+ y_p_even += (y_pitch - w) + y_pitch;
-+ y_p_odd += (y_pitch - w) + y_pitch;
-+ }
-+ }
-+ else
-+ {
-+ for (y=0; y<h; y+=2)
-+ {
-+ x=w;
-+ do {
-+ // avoid using d8-d15 (q4-q7) aapcs callee-save registers
-+ asm volatile (
-+ "1:\n\t"
-+ "vld1.u8 {d0}, [%[u_p]]!\n\t"
-+ "sub %[x],%[x],#16\n\t"
-+ "cmp %[x],#16\n\t"
-+ "vld1.u8 {d1}, [%[v_p]]!\n\t"
-+ "vld1.u8 {q1}, [%[y_p_even]]!\n\t"
-+ "vzip.u8 d0, d1\n\t"
-+ "vld1.u8 {q2}, [%[y_p_odd]]!\n\t"
-+ // use 2-element struct stores to zip up y with y&v
-+ "vst2.u8 {q0,q1}, [%[dest_even]]!\n\t"
-+ "vmov.u8 q1, q2\n\t"
-+ "vst2.u8 {q0,q1}, [%[dest_odd]]!\n\t"
-+ "bhs 1b\n\t"
-+ : [u_p] "+r" (u_p), [v_p] "+r" (v_p), [y_p_even] "+r" (y_p_even), [y_p_odd] "+r" (y_p_odd),
-+ [dest_even] "+r" (dest_even), [dest_odd] "+r" (dest_odd),
-+ [x] "+r" (x)
-+ :
-+ : "cc", "memory", "d0","d1","d2","d3","d4","d5"
-+ );
-+ if (x!=0)
-+ {
-+ // overlap final 16-pixel block to process requested width exactly
-+ x = 16-x;
-+ u_p -= x/2;
-+ v_p -= x/2;
-+ y_p_even -= x;
-+ y_p_odd -= x;
-+ dest_even -= x*2;
-+ dest_odd -= x*2;
-+ x = 16;
-+ // do another 16-pixel block
-+ }
-+ }
-+ while (x!=0);
-+
-+ dest_even += w * 2;
-+ dest_odd += w * 2;
-+
-+ u_p += ((uv_pitch << 1) - w) >> 1;
-+ v_p += ((uv_pitch << 1) - w) >> 1;
-+
-+ y_p_even += (y_pitch - w) + y_pitch;
-+ y_p_odd += (y_pitch - w) + y_pitch;
-+ }
-+ }
-+}
-+
---- /tmp/omapfb-xv-generic.c 2009-02-03 10:52:18.000000000 +0100
-+++ git/src/omapfb-xv-generic.c 2009-02-03 10:52:24.000000000 +0100
-@@ -240,7 +240,7 @@
- uint8_t *yb = buf;
- uint8_t *ub = yb + (src_y_pitch * src_h);
- uint8_t *vb = ub + (src_uv_pitch * (src_h / 2));
-- uv12_to_uyvy(src_w & ~15,
-+ uv12_to_uyvy_neon(src_w & ~15,
- src_h & ~15,
- src_y_pitch,
- src_uv_pitch,
-@@ -256,7 +256,7 @@
- uint8_t *yb = buf;
- uint8_t *vb = yb + (src_y_pitch * src_h);
- uint8_t *ub = vb + (src_uv_pitch * (src_h / 2));
-- uv12_to_uyvy(src_w & ~15,
-+ uv12_to_uyvy_neon(src_w & ~15,
- src_h & ~15,
- src_y_pitch,
- src_uv_pitch,