Index: v4l2enum.cpp
===================================================================
--- v4l2enum.cpp	(révision 13)
+++ v4l2enum.cpp	(copie de travail)
@@ -43,6 +43,8 @@
 
 static V4L2CaptureFormat CaptureFormats[] = {
     {640, 480, V4L2_PIX_FMT_SBGGR8, "640x480 BAYER"},
+    {1280, 960, V4L2_PIX_FMT_SBGGR8, "1280x960 BAYER"},
+    {1280, 1024, V4L2_PIX_FMT_SBGGR8, "1280x1024 BAYER"},
     {1024, 768, V4L2_PIX_FMT_RGB32, "1024x768 RGB32"},
     {1024, 768, V4L2_PIX_FMT_RGB24, "1024x768 RGB24"},
     {1024, 768, V4L2_PIX_FMT_YUV420, "1024x768 YUV420"},
Index: v4l2widget.cpp
===================================================================
--- v4l2widget.cpp	(révision 13)
+++ v4l2widget.cpp	(copie de travail)
@@ -54,16 +54,28 @@
 extern "C" void DecodeBayerFrame(unsigned char* pSource, unsigned char* pDestination, int width, int height, int pitch)
 {
     int i, j;
-    int height2 = (width * height) / pitch;
-    unsigned int *pDest = (unsigned int*)pDestination;
-    
-    for (j = 0; j < height2; j++) {
-        for (i = 0; i < width; i++) {
-            unsigned char color = *pSource++;
-            *pDest++ = color | (color << 8) | (color << 16);
+    int *pDest = (int*)pDestination;
+    for (j = 2; j < height-2; j+=2) {
+        for (i = 2; i < width-2; i+=2) {
+		unsigned int r1 = pSource[j*width + i];
+		unsigned int r2 = (r1+pSource[j*width + i + 2])/2;
+		unsigned int r3 = (r1+pSource[(j+2)*width + i])/2;
+		unsigned int r4 = (r1+pSource[j*width + i + 2]+pSource[(j+2)*width + i]+pSource[(j+2)*width + i + 2])/4;
+		unsigned int g2 = pSource[j*width + i + 1];
+		unsigned int g3 = pSource[(j+1)*width + i];
+		unsigned int g1 = (g2+g3+pSource[j*width + i - 1]+pSource[(j-1)*width + i])/4;
+		unsigned int g4 = (g2+g3+pSource[(j+1)*width + i + 2]+pSource[(j+2)*width + i + 1])/4;
+		unsigned int b4 = pSource[(j+1)*width + i + 1];
+		unsigned int b1 = (b4+ pSource[(j-1)*width + i - 1] + pSource[(j-1)*width + i + 1] + pSource[(j+1)*width + i - 1])/4;
+		unsigned int b2 = (b4+ pSource[(j-1)*width + i + 1])/2;
+		unsigned int b3 = (b4+ pSource[(j+1)*width + i - 1])/2;
+		pDest[j*width + i] = r1 | (g1 << 8) | (b1 << 16);
+		pDest[j*width + i + 1] = r2 | (g2 << 8) | (b2 << 16);
+		pDest[(j+1)*width + i] = r3 | (g3 << 8) | (b3 << 16);
+		pDest[(j+1)*width + i + 1] = r4 | (g4 << 8) | (b4 << 16);
         }
-        pSource += (pitch - width);
     }
+
 }
 
 /* This routine is only valid for little-endian machines. */
