On 26/07/06, anthony prieur <[EMAIL PROTECTED]> wrote:
It seems the CN700 has no video1 overlay unit and all overlay output
has to go through video3.
Hmm that's a shame!
DirectFB Unichrome driver seems to use the v1 for its playback.
What would be needed to change to activate the overlay ?
Not a huge amount; the configuration of v3 is similar to v1 but
unfortunately v3 doesn't support YV12/I420 format video.
I've attached a quick and dirty patch to use v3 instead of v1. I've
tested it quickly on my CLE266 and it basically works. I haven't
tested the LAYERS and ALPHACHANNEL functions with it though.
Really, we should support both layers in the driver and enable
whichever exists. Perhaps you could help implement a better solution?
Regards,
Mark
diff -ru unichrome-dfb/uc_overlay.c unichrome-v3/uc_overlay.c
--- unichrome-dfb/uc_overlay.c 2005-11-15 15:25:58.000000000 +0000
+++ unichrome-v3/uc_overlay.c 2006-07-26 14:04:07.000000000 +0100
@@ -59,7 +59,7 @@
description->caps = UC_OVL_CAPS;
description->type = DLTF_GRAPHICS | DLTF_VIDEO | DLTF_STILL_PICTURE;
snprintf(description->name,
- DFB_DISPLAY_LAYER_DESC_NAME_LENGTH, "VIA Unichrome Video");
+ DFB_DISPLAY_LAYER_DESC_NAME_LENGTH, "VIA Unichrome Video 3");
adjustment->flags = DCAF_NONE;
@@ -68,15 +68,15 @@
config->flags = DLCONF_WIDTH | DLCONF_HEIGHT |
DLCONF_PIXELFORMAT | DLCONF_BUFFERMODE | DLCONF_OPTIONS;
- ucovl->v1.win.w = 720;
- ucovl->v1.win.h = 576;
- ucovl->v1.win.x = 0;
- ucovl->v1.win.y = 0;
+ ucovl->v3.win.w = 720;
+ ucovl->v3.win.h = 576;
+ ucovl->v3.win.x = 0;
+ ucovl->v3.win.y = 0;
config->width = 720;
config->height = 576;
- config->pixelformat = DSPF_YV12;
+ config->pixelformat = DSPF_YUY2;
config->buffermode = DLBM_FRONTONLY;
config->options = DLOP_NONE;
@@ -84,19 +84,19 @@
ucovl->extfifo_on = false;
ucovl->hwrev = ucdrv->hwrev;
- ucovl->scrwidth = ucovl->v1.win.w;
+ ucovl->scrwidth = ucovl->v3.win.w;
- ucovl->v1.isenabled = false;
- ucovl->v1.cfg = *config;
- ucovl->v1.ox = 0;
- ucovl->v1.oy = 0;
- ucovl->v1.dst_key.a = 0;
- ucovl->v1.dst_key.r = 0;
- ucovl->v1.dst_key.g = 0;
- ucovl->v1.dst_key.b = 0;
- ucovl->v1.dstkey_enabled = false;
- ucovl->v1.opacity = 0xff;
- ucovl->v1.level = 1;
+ ucovl->v3.isenabled = false;
+ ucovl->v3.cfg = *config;
+ ucovl->v3.ox = 0;
+ ucovl->v3.oy = 0;
+ ucovl->v3.dst_key.a = 0;
+ ucovl->v3.dst_key.r = 0;
+ ucovl->v3.dst_key.g = 0;
+ ucovl->v3.dst_key.b = 0;
+ ucovl->v3.dstkey_enabled = false;
+ ucovl->v3.opacity = 0xff;
+ ucovl->v3.level = 1;
// adjustment->flags = DCAF_BRIGHTNESS | DCAF_CONTRAST |
// DCAF_HUE | DCAF_SATURATION;
@@ -104,7 +104,7 @@
adjustment->contrast = 0x8000;
adjustment->saturation = 0x8000;
adjustment->hue = 0x8000;
- ucovl->v1.adj = *adjustment;
+ ucovl->v3.adj = *adjustment;
uc_ovl_remove(layer, driver_data, layer_data, NULL);
@@ -141,18 +141,18 @@
return DFB_INVAREA;
}
- ucovl->v1.isenabled = true;
- ucovl->v1.win = win;
- ucovl->v1.dst_key = config->dst_key;
- ucovl->v1.dstkey_enabled = config->options & DLOP_DST_COLORKEY;
+ ucovl->v3.isenabled = true;
+ ucovl->v3.win = win;
+ ucovl->v3.dst_key = config->dst_key;
+ ucovl->v3.dstkey_enabled = config->options & DLOP_DST_COLORKEY;
if (config->options & DLOP_OPACITY)
- ucovl->v1.opacity = config->opacity;
+ ucovl->v3.opacity = config->opacity;
else
- ucovl->v1.opacity = 0xff;
+ ucovl->v3.opacity = 0xff;
// printf("uc_overlay: color-keying is %s\n",
- // ucovl->v1.dstkey_enabled ? "enabled" : "disabled");
+ // ucovl->v3.dstkey_enabled ? "enabled" : "disabled");
ucovl->deinterlace = config->options & DLOP_DEINTERLACING;
ucovl->surface = surface;
@@ -171,28 +171,28 @@
UcOverlayData* ucovl = (UcOverlayData*) layer_data;
volatile __u8* vio = ucdrv->hwregs;
- ucovl->v1.isenabled = false;
+ ucovl->v3.isenabled = false;
uc_ovl_vcmd_wait(vio);
- VIDEO_OUT(vio, V_FIFO_CONTROL, UC_MAP_V1_FIFO_CONTROL(16,12,8));
+// VIDEO_OUT(vio, V_FIFO_CONTROL, UC_MAP_V3_FIFO_CONTROL(16,12,8));
// VIDEO_OUT(vio, ALPHA_V3_FIFO_CONTROL, 0x0407181f);
if (ucovl->hwrev >= 0x10) {
- VIDEO_OUT(vio, V1_ColorSpaceReg_1, ColorSpaceValue_1_3123C0);
- VIDEO_OUT(vio, V1_ColorSpaceReg_2, ColorSpaceValue_2_3123C0);
+ VIDEO_OUT(vio, V3_ColorSpaceReg_1, ColorSpaceValue_1_3123C0);
+ VIDEO_OUT(vio, V3_ColorSpaceReg_2, ColorSpaceValue_2_3123C0);
}
else {
- VIDEO_OUT(vio, V1_ColorSpaceReg_1, ColorSpaceValue_1);
- VIDEO_OUT(vio, V1_ColorSpaceReg_2, ColorSpaceValue_2);
+ VIDEO_OUT(vio, V3_ColorSpaceReg_1, ColorSpaceValue_1);
+ VIDEO_OUT(vio, V3_ColorSpaceReg_2, ColorSpaceValue_2);
}
VIDEO_OUT(vio, HQV_CONTROL, VIDEO_IN(vio, HQV_CONTROL) & ~HQV_ENABLE);
- VIDEO_OUT(vio, V1_CONTROL, VIDEO_IN(vio, V1_CONTROL) & ~V1_ENABLE);
- // VIDEO_OUT(vio, V3_CONTROL, VIDEO_IN(vio, V3_CONTROL) & ~V3_ENABLE);
+ // VIDEO_OUT(vio, V1_CONTROL, VIDEO_IN(vio, V1_CONTROL) & ~V1_ENABLE);
+ VIDEO_OUT(vio, V3_CONTROL, VIDEO_IN(vio, V3_CONTROL) & ~V3_ENABLE);
VIDEO_OUT(vio, V_COMPOSE_MODE,
- (VIDEO_IN(vio, V_COMPOSE_MODE) & ~ENABLE_COLOR_KEYING) |
V1_COMMAND_FIRE);
+ (VIDEO_IN(vio, V_COMPOSE_MODE) & ~ENABLE_COLOR_KEYING) |
V3_COMMAND_FIRE);
ucovl->surface = NULL;
@@ -222,8 +222,8 @@
case DSPF_UYVY:
fail |= CLRCF_FORMAT; // Nope... doesn't work.
break;
- case DSPF_I420:
- case DSPF_YV12:
+// case DSPF_I420:
+// case DSPF_YV12:
case DSPF_ARGB1555:
case DSPF_RGB16:
case DSPF_RGB32:
@@ -299,7 +299,7 @@
int *level)
{
UcOverlayData* ucovl = (UcOverlayData*) layer_data;
- *level = ucovl->v1.level;
+ *level = ucovl->v3.level;
return DFB_OK;
}
@@ -322,12 +322,12 @@
else {
// Enable overlay mode (default)
VIDEO_OUT(ucdrv->hwregs, V_ALPHA_CONTROL,
- uc_ovl_map_alpha(ucovl->v1.opacity));
+ uc_ovl_map_alpha(ucovl->v3.opacity));
}
- VIDEO_OUT(ucdrv->hwregs, V_COMPOSE_MODE, V1_COMMAND_FIRE |
- (ucovl->v1.dstkey_enabled ? ENABLE_COLOR_KEYING : 0));
+ VIDEO_OUT(ucdrv->hwregs, V_COMPOSE_MODE, V3_COMMAND_FIRE |
+ (ucovl->v3.dstkey_enabled ? ENABLE_COLOR_KEYING : 0));
- ucovl->v1.level = level;
+ ucovl->v3.level = level;
return DFB_OK;
}
diff -ru unichrome-dfb/uc_overlay.h unichrome-v3/uc_overlay.h
--- unichrome-dfb/uc_overlay.h 2005-11-15 15:27:44.000000000 +0000
+++ unichrome-v3/uc_overlay.h 2006-07-26 14:08:16.000000000 +0100
@@ -11,8 +11,8 @@
| DLOP_FIELD_PARITY | DLOP_OPACITY )
#define ALIGN_TO(v, n) (((v) + (n-1)) & ~(n-1))
-#define UC_MAP_V1_FIFO_CONTROL(depth, pre_thr, thr) \
- (((depth)-1) | ((thr) << 8) | ((pre_thr) << 24))
+// #define UC_MAP_V1_FIFO_CONTROL(depth, pre_thr, thr) \
+// (((depth)-1) | ((thr) << 8) | ((pre_thr) << 24))
// Actions for uc_ovl_update()
@@ -45,7 +45,7 @@
bool extfifo_on; // True when we're using the extended
fifo.
__u8 mclk_save[3];
- struct uc_ovl_vinfo v1; // Video overlay V1
+ struct uc_ovl_vinfo v3; // Video overlay V3
CoreLayerRegionConfig config;
@@ -73,10 +73,10 @@
int x, int y, int w, int h, int pitch, int field,
__u32* y_start, __u32* u_start, __u32* v_start);
__u32 uc_ovl_map_alpha(int opacity);
-void uc_ovl_map_v1_control(DFBSurfacePixelFormat format, int sw,
+void uc_ovl_map_V3_control(DFBSurfacePixelFormat format, int sw,
int hwrev, bool extfifo_on,
- __u32* control, __u32* fifo);
-__u32 uc_ovl_map_fifo(__u8 depth, __u8 pre_thr, __u8 thr);
+ __u32* control, __u32* fifo, __u32* prefifo);
+// __u32 uc_ovl_map_fifo(__u8 depth, __u8 pre_thr, __u8 thr);
void uc_ovl_map_adjustment(DFBColorAdjustment* adj, __u32* a1, __u32* a2);
__u32 uc_ovl_map_colorkey(DFBColor* c);
diff -ru unichrome-dfb/uc_ovl_hwmap.c unichrome-v3/uc_ovl_hwmap.c
--- unichrome-dfb/uc_ovl_hwmap.c 2005-11-08 19:29:11.000000000 +0000
+++ unichrome-v3/uc_ovl_hwmap.c 2006-07-26 14:06:52.000000000 +0100
@@ -44,8 +44,8 @@
tmp = (sh * 0x0400) / dh;
zoom_ok = !(tmp > 0x3ff);
- *zoom |= (tmp & 0x3ff) | V1_Y_ZOOM_ENABLE;
- *mini |= V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY;
+ *zoom |= (tmp & 0x3ff) | V3_Y_ZOOM_ENABLE;
+ *mini |= V3_Y_INTERPOLY | V3_YCBCR_INTERPOLY;
}
else { // sw > dh - Zoom out
@@ -67,8 +67,8 @@
if (sh1 < dh) {
tmp = (sh1 * 0x400) / dh;
- *zoom |= ((tmp & 0x3ff) | V1_Y_ZOOM_ENABLE);
- *mini |= V1_Y_INTERPOLY | V1_YCBCR_INTERPOLY;
+ *zoom |= ((tmp & 0x3ff) | V3_Y_ZOOM_ENABLE);
+ *mini |= V3_Y_INTERPOLY | V3_YCBCR_INTERPOLY;
}
}
@@ -111,8 +111,8 @@
tmp = (sw * 0x0800) / dw;
zoom_ok = !(tmp > 0x7ff);
- *zoom |= ((tmp & 0x7ff) << 16) | V1_X_ZOOM_ENABLE;
- *mini |= V1_X_INTERPOLY;
+ *zoom |= ((tmp & 0x7ff) << 16) | V3_X_ZOOM_ENABLE;
+ *mini |= V3_X_INTERPOLY;
}
else { // sw > dw - Zoom out
@@ -130,7 +130,7 @@
md = 1 << d; // <= {2,4,8,16}
*falign = ((md<<1)-1) & 0xf; // <= {3,7,15,15}
- *mini |= V1_X_INTERPOLY;
+ *mini |= V3_X_INTERPOLY;
*mini |= ((d<<1)-1) << 24; // <= {1,3,5,7} << 24
// Add scaling
@@ -139,7 +139,7 @@
//CLE bug
//tmp = sw1*0x0800 / dw;
tmp = (sw1 - 2) * 0x0800 / dw;
- *zoom |= ((tmp & 0x7ff) << 16) | V1_X_ZOOM_ENABLE;
+ *zoom |= ((tmp & 0x7ff) << 16) | V3_X_ZOOM_ENABLE;
}
}
@@ -164,12 +164,12 @@
int fetch = 0;
switch (format) {
- case DSPF_YV12:
- fetch = ALIGN_TO(sw, 32) >> 4;
- break;
- case DSPF_I420:
- fetch = (ALIGN_TO(sw, 16) >> 4) + 1;
- break;
+// case DSPF_YV12:
+// fetch = ALIGN_TO(sw, 32) >> 4;
+// break;
+// case DSPF_I420:
+// fetch = (ALIGN_TO(sw, 16) >> 4) + 1;
+// break;
case DSPF_UYVY:
case DSPF_YUY2:
fetch = (ALIGN_TO(sw << 1, 16) >> 4) + 1;
@@ -203,22 +203,22 @@
__u32 uc_ovl_map_format(DFBSurfacePixelFormat format)
{
switch (format) {
- case DSPF_YV12:
- case DSPF_I420:
- return V1_COLORSPACE_SIGN | V1_YUV420;
+// case DSPF_YV12:
+// case DSPF_I420:
+// return V3_COLORSPACE_SIGN | V3_YUV420;
case DSPF_UYVY:
case DSPF_YUY2:
- return V1_COLORSPACE_SIGN | V1_YUV422;
+ return V3_COLORSPACE_SIGN | V3_YUV422;
case DSPF_ARGB1555:
- return V1_RGB15;
+ return V3_RGB15;
case DSPF_RGB16:
- return V1_RGB16;
+ return V3_RGB16;
case DSPF_RGB32:
case DSPF_ARGB:
- return V1_RGB32;
+ return V3_RGB32;
default :
D_BUG("Unexpected pixelformat!");
- return V1_YUV422;
+ return V3_YUV422;
}
}
@@ -354,15 +354,15 @@
y_offset = ((oy * sp) + ((ox << 1) & ~15));
break;
- case DSPF_YV12:
- swap_cb_cr = 1;
- case DSPF_I420:
- y_offset = ((((oy & ~3) * sp) + ox + 16) & ~31) ;
- if (oy > 0)
- uv_offset = (((((oy & ~3) >> 1) * sp) + ox + 16) & ~31) >> 1;
- else
- uv_offset = y_offset >> 1;
- break;
+// case DSPF_YV12:
+// swap_cb_cr = 1;
+// case DSPF_I420:
+// y_offset = ((((oy & ~3) * sp) + ox + 16) & ~31) ;
+// if (oy > 0)
+// uv_offset = (((((oy & ~3) >> 1) * sp) + ox + 16) & ~31) >> 1;
+// else
+// uv_offset = y_offset >> 1;
+// break;
case DSPF_ARGB1555:
case DSPF_RGB16:
@@ -437,55 +437,57 @@
}
/**
- * Calculate V1 control and fifo-control register values
+ * Calculate V3 control and fifo-control register values
* @param format pixel format
* @param sw source width
* @param hwrev Unichrome hardware revision
* @param extfifo_on set this true if the extended FIFO is enabled
- * @param control will hold value for V1_CONTROL
- * @param fifo will hold value for V1_FIFO_CONTROL
+ * @param control will hold value for V3_CONTROL
+ * @param fifo will hold value for V3_FIFO_CONTROL
*/
-void uc_ovl_map_v1_control(DFBSurfacePixelFormat format, int sw,
+void uc_ovl_map_V3_control(DFBSurfacePixelFormat format, int sw,
int hwrev, bool extfifo_on,
- __u32* control, __u32* fifo)
+ __u32* control, __u32* fifo, __u32* prefifo)
{
- *control = V1_BOB_ENABLE | V1_ENABLE | uc_ovl_map_format(format);
+ *control = V3_BOB_ENABLE | V3_ENABLE | uc_ovl_map_format(format);
if (hwrev >= 0x10) {
- *control |= V1_EXPIRE_NUM_F;
- }
- else {
- if (extfifo_on) {
- *control |= V1_EXPIRE_NUM_A | V1_FIFO_EXTENDED;
- }
- else {
- *control |= V1_EXPIRE_NUM;
- }
- }
-
- if ((format == DSPF_YV12) || (format == DSPF_I420)) {
- //Minified video will be skewed without this workaround.
- if (sw <= 80) { //Fetch count <= 5
- *fifo = UC_MAP_V1_FIFO_CONTROL(16,0,0);
- }
- else {
- if (hwrev == 0x10)
- *fifo = UC_MAP_V1_FIFO_CONTROL(64,56,56);
- else
- *fifo = UC_MAP_V1_FIFO_CONTROL(16,12,8);
- }
+ *control |= V3_EXPIRE_NUM_F;
}
else {
+// if (extfifo_on) {
+// *control |= V3_EXPIRE_NUM_A | V3_FIFO_EXTENDED;
+// }
+// else {
+ *control |= V3_EXPIRE_NUM;
+// }
+ }
+
+// if ((format == DSPF_YV12) || (format == DSPF_I420)) {
+// //Minified video will be skewed without this workaround.
+// if (sw <= 80) { //Fetch count <= 5
+// *fifo = UC_MAP_V3_FIFO_CONTROL(16,0,0);
+// }
+// else {
+// if (hwrev == 0x10)
+// *fifo = UC_MAP_V3_FIFO_CONTROL(64,56,56);
+// else
+// *fifo = UC_MAP_V3_FIFO_CONTROL(16,12,8);
+// }
+// }
+// else {
if (hwrev >= 0x10) {
- *fifo = UC_MAP_V1_FIFO_CONTROL(64,56,56); // Default rev 0x10
+ *fifo = V3_FIFO_DEPTH64 | (V3_FIFO_PRETHRESHOLD56<<8);
+ *prefifo = V3_FIFO_PRETHRESHOLD56;
}
else {
- if (extfifo_on)
- *fifo = UC_MAP_V1_FIFO_CONTROL(48,40,40);
- else
- *fifo = UC_MAP_V1_FIFO_CONTROL(32,29,16); // Default
+// if (extfifo_on)
+// *fifo = UC_MAP_V3_FIFO_CONTROL(48,40,40);
+// else
+ *fifo = V3_FIFO_DEPTH32 | V3_FIFO_THRESHOLD16;
+ *prefifo = V3_FIFO_THRESHOLD16>>8;
}
- }
+// }
}
/** uc_ovl_map_adjustment() helper - clamp x to [lo, hi] */
@@ -516,8 +518,8 @@
* Map color adjustment to Unichrome hardware.
*
* @param adj DirectFB color adjustment. All fields are assumed valid.
- * @param a1 Will hold value for V1_ColorSpaceReg_1
- * @param a2 Will hold value for V1_ColorSpaceReg_2
+ * @param a1 Will hold value for V3_ColorSpaceReg_1
+ * @param a2 Will hold value for V3_ColorSpaceReg_2
*/
void uc_ovl_map_adjustment(DFBColorAdjustment* adj, __u32* a1, __u32* a2)
{
diff -ru unichrome-dfb/uc_ovl_hwset.c unichrome-v3/uc_ovl_hwset.c
--- unichrome-dfb/uc_ovl_hwset.c 2005-11-15 16:11:53.000000000 +0000
+++ unichrome-v3/uc_ovl_hwset.c 2006-07-26 14:04:40.000000000 +0100
@@ -65,7 +65,7 @@
void uc_ovl_vcmd_wait(volatile __u8* vio)
{
while ((VIDEO_IN(vio, V_COMPOSE_MODE)
- & (V1_COMMAND_FIRE | V3_COMMAND_FIRE)));
+ & (V3_COMMAND_FIRE | V3_COMMAND_FIRE)));
}
/**
@@ -99,12 +99,12 @@
__u32 zoom, mini;
__u32 dcount, falign, qwpitch;
__u32 y_start, u_start, v_start;
- __u32 v_ctrl, fifo_ctrl;
+ __u32 v_ctrl, fifo_ctrl, prefifo_ctrl;
__u32 alpha = 0;
int offset = surface->front_buffer->video.offset;
- if (!ucovl->v1.isenabled) return DFB_OK;
+ if (!ucovl->v3.isenabled) return DFB_OK;
qwpitch = 0;
@@ -144,25 +144,25 @@
return DFB_INVAREA;
}
- dx = ucovl->v1.win.x;
- dy = ucovl->v1.win.y;
- dw = ucovl->v1.win.w;
- dh = ucovl->v1.win.h;
+ dx = ucovl->v3.win.x;
+ dy = ucovl->v3.win.y;
+ dw = ucovl->v3.win.w;
+ dh = ucovl->v3.win.h;
// Get image format, FIFO size, etc.
- uc_ovl_map_v1_control(sfmt, sw, ucovl->hwrev, ucovl->extfifo_on,
- &v_ctrl, &fifo_ctrl);
+ uc_ovl_map_V3_control(sfmt, sw, ucovl->hwrev, ucovl->extfifo_on,
+ &v_ctrl, &fifo_ctrl, &prefifo_ctrl);
if (ucovl->deinterlace) {
- v_ctrl |= /*V1_BOB_ENABLE |*/ V1_FRAME_BASE;
+ v_ctrl |= /*V3_BOB_ENABLE |*/ V3_FRAME_BASE;
}
// Get layer window.
// The parts that fall outside the screen are clipped.
- uc_ovl_map_window(scr.w, scr.h, &(ucovl->v1.win), sw, sh,
- &win_start, &win_end, &ucovl->v1.ox,
&ucovl->v1.oy);
+ uc_ovl_map_window(scr.w, scr.h, &(ucovl->v3.win), sw, sh,
+ &win_start, &win_end, &ucovl->v3.ox,
&ucovl->v3.oy);
// Get scaling and data-fetch parameters
@@ -178,11 +178,11 @@
qwpitch = uc_ovl_map_qwpitch(falign, sfmt, sw);
// Prepare destination color key
- dst_key = uc_ovl_map_colorkey(&(ucovl->v1.dst_key));
+ dst_key = uc_ovl_map_colorkey(&(ucovl->v3.dst_key));
// prepare opacity
- if (ucovl->v1.level > 0) // overlay
- alpha = uc_ovl_map_alpha(ucovl->v1.opacity);
+ if (ucovl->v3.level > 0) // overlay
+ alpha = uc_ovl_map_alpha(ucovl->v3.opacity);
else
alpha = uc_ovl_map_alpha(ucovl->opacity_primary);
@@ -198,7 +198,7 @@
}
uc_ovl_map_buffer(sfmt, offset,
- ucovl->v1.ox, ucovl->v1.oy, sw, surface->height,
sp, 0/*field*/, &y_start,
+ ucovl->v3.ox, ucovl->v3.oy, sw, surface->height,
sp, 0/*field*/, &y_start,
&u_start, &v_start);
if (field) {
@@ -215,18 +215,22 @@
if (write_settings) {
- VIDEO_OUT(vio, V1_CONTROL, v_ctrl);
- VIDEO_OUT(vio, V_FIFO_CONTROL, fifo_ctrl);
+ VIDEO_OUT(vio, V3_CONTROL, v_ctrl);
+ VIDEO_OUT(vio, ALPHA_V3_FIFO_CONTROL, fifo_ctrl |
+ (VIDEO_IN(vio, ALPHA_V3_FIFO_CONTROL)&ALPHA_FIFO_MASK));
+ VIDEO_OUT(vio, ALPHA_V3_PREFIFO_CONTROL, prefifo_ctrl |
+ (VIDEO_IN(vio, ALPHA_V3_PREFIFO_CONTROL)&(~V3_FIFO_MASK)));
+
+ VIDEO_OUT(vio, V3_WIN_START_Y, win_start);
+ VIDEO_OUT(vio, V3_WIN_END_Y, win_end);
+
+// VIDEO_OUT(vio, V3_SOURCE_HEIGHT, (sh << 16) | dcount);
+ VIDEO_OUT(vio, V3_ALPHA_QWORD_PER_LINE, qwpitch |
+ (VIDEO_IN(vio, V3_ALPHA_QWORD_PER_LINE)&(~V3_FETCH_COUNT)));
+ VIDEO_OUT(vio, V3_STRIDE, sp | ((sp >> 1) << 16));
- VIDEO_OUT(vio, V1_WIN_START_Y, win_start);
- VIDEO_OUT(vio, V1_WIN_END_Y, win_end);
-
- VIDEO_OUT(vio, V1_SOURCE_HEIGHT, (sh << 16) | dcount);
- VIDEO_OUT(vio, V12_QWORD_PER_LINE, qwpitch);
- VIDEO_OUT(vio, V1_STRIDE, sp | ((sp >> 1) << 16));
-
- VIDEO_OUT(vio, V1_MINI_CONTROL, mini);
- VIDEO_OUT(vio, V1_ZOOM_CONTROL, zoom);
+ VIDEO_OUT(vio, V3_MINI_CONTROL, mini);
+ VIDEO_OUT(vio, V3_ZOOM_CONTROL, zoom);
VIDEO_OUT(vio, V_COLOR_KEY, dst_key);
@@ -235,14 +239,14 @@
if (write_buffers) {
- VIDEO_OUT(vio, V1_STARTADDR_0, y_start);
- VIDEO_OUT(vio, V1_STARTADDR_CB0, u_start);
- VIDEO_OUT(vio, V1_STARTADDR_CR0, v_start);
+ VIDEO_OUT(vio, V3_STARTADDR_0, y_start);
+// VIDEO_OUT(vio, V3_STARTADDR_CB0, u_start);
+// VIDEO_OUT(vio, V3_STARTADDR_CR0, v_start);
}
if (write_settings || write_buffers) {
- VIDEO_OUT(vio, V_COMPOSE_MODE, V1_COMMAND_FIRE |
- (ucovl->v1.dstkey_enabled ? ENABLE_COLOR_KEYING : 0));
+ VIDEO_OUT(vio, V_COMPOSE_MODE, V3_COMMAND_FIRE |
+ (ucovl->v3.dstkey_enabled ? ENABLE_COLOR_KEYING : 0));
}
return DFB_OK;
@@ -258,7 +262,7 @@
DFBColorAdjustment* ucadj;
__u32 a1, a2;
- ucadj = &ucovl->v1.adj;
+ ucadj = &ucovl->v3.adj;
if (adj->flags & DCAF_BRIGHTNESS)
ucadj->brightness = adj->brightness;
@@ -271,8 +275,8 @@
uc_ovl_map_adjustment(ucadj, &a1, &a2);
- VIDEO_OUT(ucdrv->hwregs, V1_ColorSpaceReg_1, a1);
- VIDEO_OUT(ucdrv->hwregs, V1_ColorSpaceReg_2, a2);
+ VIDEO_OUT(ucdrv->hwregs, V3_ColorSpaceReg_1, a1);
+ VIDEO_OUT(ucdrv->hwregs, V3_ColorSpaceReg_2, a2);
return DFB_OK;
}
diff -ru unichrome-dfb/uc_primary.c unichrome-v3/uc_primary.c
--- unichrome-dfb/uc_primary.c 2005-11-15 15:30:25.000000000 +0000
+++ unichrome-v3/uc_primary.c 2006-07-26 14:05:10.000000000 +0100
@@ -156,7 +156,7 @@
else
ucdrv->ovl->opacity_primary = 0x00; // primary opaque == overlay
transparent
- if (ucdrv->ovl->v1.level < 0) // primary on top?
+ if (ucdrv->ovl->v3.level < 0) // primary on top?
{
VIDEO_OUT(ucdrv->hwregs, V_ALPHA_CONTROL,
uc_ovl_map_alpha(ucdrv->ovl->opacity_primary));
_______________________________________________
directfb-users mailing list
[email protected]
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users