xf86-video-omapfb: drop

This driver has been superceeded by a dri omap driver. This driver
no longer builds against current versions of the xserver. If someone
wants to do the work to resurect it, that is fine but until that happens
there is no point in keeping broken code in the tree which won't even
compile. It can be easily brought back from git history.

(From OE-Core rev: 75858ad8cb19ee24f2c418515cb9d2b649a4de46)

Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Richard Purdie 2012-11-22 07:26:35 +00:00
parent 8043f458f5
commit a01737e4b2
7 changed files with 0 additions and 616 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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);
+
}

View File

@ -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;

View File

@ -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,

View File

@ -1,32 +0,0 @@
require xorg-driver-video.inc
SUMMARY = "X.Org X server -- Texas Instruments OMAP framebuffer driver"
DESCRIPTION = "omapfb driver supports the basic Texas Instruments OMAP \
framebuffer."
LICENSE = "MIT-X & GPLv2+"
LIC_FILES_CHKSUM = "file://COPYING;md5=63e2cbac53863f60e2f43343fb34367f"
DEPENDS += "virtual/libx11"
SRCREV = "28c006c94e57ea71df11ec4fff79d7ffcfc4860f"
PR = "${INC_PR}.6"
PV = "0.1.1+gitr${SRCPV}"
SRC_URI = "git://git.pingu.fi/xf86-video-omapfb;protocol=http \
file://omap-revert-set-CRTC-limit.patch \
file://omap-revert-set-virtual-size.patch \
file://omap-force-plain-mode.patch \
file://omap-blacklist-tv-out.patch \
file://0004-Attempt-to-fix-VRFB.patch \
"
S = "${WORKDIR}/git"
EXTRA_OECONF_armv7a = " --enable-neon "
CFLAGS += " -I${STAGING_INCDIR}/xorg "
# Use overlay 2 on omap3 to enable other apps to use overlay 1 (e.g. dmai or omapfbplay)
do_compile_prepend_armv7a () {
sed -i -e s:fb1:fb2:g ${S}/src/omapfb-xv.c
}