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

Reply via email to