[SCM] openni-sensor-primesense/master: Revert "Updated patches to new upstream version"

jspricke-guest at users.alioth.debian.org jspricke-guest at users.alioth.debian.org
Thu Jun 13 09:31:28 UTC 2013


The following commit has been merged in the master branch:
commit b6b32f3ce78b6a32b40edbef9b7b66bdf04e36bc
Author: Jochen Sprickerhof <jochen at sprickerhof.de>
Date:   Thu Jun 13 10:43:32 2013 +0200

    Revert "Updated patches to new upstream version"
    
    This reverts commit 8232d6a34363b3901b8d1b4f716052586294152e.

diff --git a/debian/patches/0001-Fix-types.patch b/debian/patches/0001-Fix-types.patch
index 55ac12b..a43033d 100644
--- a/debian/patches/0001-Fix-types.patch
+++ b/debian/patches/0001-Fix-types.patch
@@ -9,20 +9,20 @@ taken from https://github.com/avin2/SensorKinect
  2 files changed, 3 insertions(+), 2 deletions(-)
 
 diff --git a/Source/XnDeviceSensorV2/XnDataProcessor.h b/Source/XnDeviceSensorV2/XnDataProcessor.h
-index 5ecc8db..391a7cb 100644
+index 7132346..6f6cbb4 100644
 --- a/Source/XnDeviceSensorV2/XnDataProcessor.h
 +++ b/Source/XnDeviceSensorV2/XnDataProcessor.h
-@@ -90,7 +90,7 @@ protected:
+@@ -86,7 +86,7 @@ protected:
  	/* The number of bytes received so far (since last time this member was reset). */
  	XnUInt32 m_nBytesReceived;
  	/* Stores last packet ID */
 -	XnUInt16 m_nLastPacketID;
-+	XnUInt8 m_nLastPacketID;
++  XnUInt8  m_nLastPacketID;
  	/* The name of the stream. */
  	const XnChar* m_csName;
  
 diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorProtocol.h b/Source/XnDeviceSensorV2/XnDeviceSensorProtocol.h
-index 057d925..3d160bd 100644
+index 057d925..661d83a 100644
 --- a/Source/XnDeviceSensorV2/XnDeviceSensorProtocol.h
 +++ b/Source/XnDeviceSensorV2/XnDeviceSensorProtocol.h
 @@ -82,7 +82,8 @@ typedef struct XnSensorProtocolResponseHeader
@@ -30,8 +30,8 @@ index 057d925..3d160bd 100644
  	XnUInt16 nMagic;
  	XnUInt16 nType;
 -	XnUInt16 nPacketID;
-+	XnUInt8 nPacketID;
-+	XnUInt8 nUnknown;
++  XnUInt8  nPacketID;
++  XnUInt8  nUnknown;
  	XnUInt16 nBufSize;
  	XnUInt32 nTimeStamp;
  } XnSensorProtocolResponseHeader;
diff --git a/debian/patches/0002-Add-support-for-vendor-id-in-Enumerate-USB-devices.patch b/debian/patches/0002-Add-support-for-vendor-id-in-Enumerate-USB-devices.patch
deleted file mode 100644
index 8e881b9..0000000
--- a/debian/patches/0002-Add-support-for-vendor-id-in-Enumerate-USB-devices.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From: Jochen Sprickerhof <jochen at sprickerhof.de>
-Date: Tue, 6 Nov 2012 20:38:26 +0100
-Subject: Add support for vendor id in Enumerate() USB devices
-
-taken from https://kforge.ros.org/openni/drivers
----
- Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp |    8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
-
-diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-index eacf514..7ceab5d 100644
---- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-+++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-@@ -368,14 +368,14 @@ XnStatus XnSensorIO::CloseDevice()
- 	return (XN_STATUS_OK);
- }
- 
--XnStatus Enumerate(XnUInt16 nProduct, XnStringsSet& devicesSet)
-+XnStatus Enumerate(XnUInt16 nVendor, XnUInt16 nProduct, XnStringsSet& devicesSet)
- {
- 	XnStatus nRetVal = XN_STATUS_OK;
- 	
- 	const XnUSBConnectionString* astrDevicePaths;
- 	XnUInt32 nCount;
- 
--	nRetVal = xnUSBEnumerateDevices(XN_SENSOR_VENDOR_ID, nProduct, &astrDevicePaths, &nCount);
-+	nRetVal = xnUSBEnumerateDevices(nVendor, nProduct, &astrDevicePaths, &nCount);
- 	XN_IS_STATUS_OK(nRetVal);
- 
- 	for (XnUInt32 i = 0; i < nCount; ++i)
-@@ -406,7 +406,7 @@ XnStatus XnSensorIO::EnumerateSensors(XnConnectionString* aConnectionStrings, Xn
- 		// search for supported devices
- 		for (XnUInt32 i = 0; i < ms_supportedProductsCount; ++i)
- 		{
--			nRetVal = Enumerate(ms_supportedProducts[i], devicesSet);
-+			nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, ms_supportedProducts[i], devicesSet);
- 			XN_IS_STATUS_OK(nRetVal);
- 		}
- 	}
-@@ -416,7 +416,7 @@ XnStatus XnSensorIO::EnumerateSensors(XnConnectionString* aConnectionStrings, Xn
- 	// search for supported devices
- 	for (XnUInt32 i = 0; i < ms_supportedProductsCount; ++i)
- 	{
--		nRetVal = Enumerate(ms_supportedProducts[i], devicesSet);
-+		nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, ms_supportedProducts[i], devicesSet);
- 		XN_IS_STATUS_OK(nRetVal);
- 	}
- #endif
diff --git a/debian/patches/0002-Changed-25Hz-support-to-5_1-since-5_1_6-works-good.patch b/debian/patches/0002-Changed-25Hz-support-to-5_1-since-5_1_6-works-good.patch
new file mode 100644
index 0000000..5b484e0
--- /dev/null
+++ b/debian/patches/0002-Changed-25Hz-support-to-5_1-since-5_1_6-works-good.patch
@@ -0,0 +1,24 @@
+From: Jochen Sprickerhof <jochen at sprickerhof.de>
+Date: Tue, 6 Nov 2012 20:36:59 +0100
+Subject: Changed 25Hz support to 5_1 since 5_1_6 works good
+
+taken from https://kforge.ros.org/openni/drivers
+---
+ Source/XnDeviceSensorV2/XnSensorImageStream.cpp |    4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Source/XnDeviceSensorV2/XnSensorImageStream.cpp b/Source/XnDeviceSensorV2/XnSensorImageStream.cpp
+index be42cc7..23f25a5 100644
+--- a/Source/XnDeviceSensorV2/XnSensorImageStream.cpp
++++ b/Source/XnDeviceSensorV2/XnSensorImageStream.cpp
+@@ -225,8 +225,8 @@ XnStatus XnSensorImageStream::Init()
+ 			XN_IS_STATUS_OK(nRetVal);
+ 		}
+ 
+-		// starting with FW 5.2, 25 FPS is also supported
+-		if (m_Helper.GetFirmwareVersion() >= XN_SENSOR_FW_VER_5_2)
++		// starting with FW 5.1, 25 FPS is also supported
++		if (m_Helper.GetFirmwareVersion() >= XN_SENSOR_FW_VER_5_1)
+ 		{
+ 			nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_YUV422, XN_RESOLUTION_QVGA, 25);
+ 			XN_IS_STATUS_OK(nRetVal);
diff --git a/debian/patches/0003-Add-support-for-XN-sensor-version-2.patch b/debian/patches/0003-Add-support-for-XN-sensor-version-2.patch
deleted file mode 100644
index a67c06e..0000000
--- a/debian/patches/0003-Add-support-for-XN-sensor-version-2.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-From: Jochen Sprickerhof <jochen at sprickerhof.de>
-Date: Tue, 6 Nov 2012 20:38:48 +0100
-Subject: Add support for XN sensor version 2
-
-taken from https://kforge.ros.org/openni/drivers
----
- Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp |    1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-index 7ceab5d..2c5f208 100644
---- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-+++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-@@ -45,6 +45,7 @@ typedef enum
- //---------------------------------------------------------------------------
- XnUInt16 XnSensorIO::ms_supportedProducts[] = 
- {
-+	0x0200,
- 	0x0500,
- 	0x0600,
- 	0x0601,
diff --git a/debian/patches/0003-Don-t-try-to-register-callback-for-a-5.0-device.patch b/debian/patches/0003-Don-t-try-to-register-callback-for-a-5.0-device.patch
new file mode 100644
index 0000000..614eb1f
--- /dev/null
+++ b/debian/patches/0003-Don-t-try-to-register-callback-for-a-5.0-device.patch
@@ -0,0 +1,23 @@
+From: Jochen Sprickerhof <jochen at sprickerhof.de>
+Date: Tue, 6 Nov 2012 20:37:41 +0100
+Subject: Don't try to register callback for a 5.0 device
+
+taken from https://github.com/avin2/SensorKinect
+---
+ Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp |    3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+index 8fd955c..50f23d5 100644
+--- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
++++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+@@ -469,9 +469,6 @@ XnStatus XnSensorIO::SetCallback(XnUSBEventCallbackFunctionPtr pCallbackPtr, voi
+ 	//TODO: Support multiple sensors - this won't work for more than one.
+ 	XnStatus nRetVal = XN_STATUS_OK;
+ 	
+-	// try to register callback to a 5.0 device
+-	nRetVal = xnUSBSetCallbackHandler(XN_SENSOR_VENDOR_ID, XN_SENSOR_5_0_PRODUCT_ID, NULL, pCallbackPtr, pCallbackData);
+-
+ 	return nRetVal;
+ }
+ 
diff --git a/debian/patches/0004-Add-support-for-Kinect-product-id.patch b/debian/patches/0004-Add-support-for-Kinect-product-id.patch
deleted file mode 100644
index a3eb189..0000000
--- a/debian/patches/0004-Add-support-for-Kinect-product-id.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-From: Jochen Sprickerhof <jochen at sprickerhof.de>
-Date: Tue, 6 Nov 2012 20:39:14 +0100
-Subject: Add support for Kinect product id
-
-taken from https://kforge.ros.org/openni/drivers
----
- Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp |    7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-index 2c5f208..a3a7a35 100644
---- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-+++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-@@ -30,6 +30,7 @@
- // Defines
- //---------------------------------------------------------------------------
- #define XN_SENSOR_VENDOR_ID			0x1D27
-+#define XN_SENSOR_MSK_VENDOR_ID 0x045E
- 
- //---------------------------------------------------------------------------
- // Enums
-@@ -49,6 +50,8 @@ XnUInt16 XnSensorIO::ms_supportedProducts[] =
- 	0x0500,
- 	0x0600,
- 	0x0601,
-+	0x02AE,
-+	0x02BF,
- };
- 
- XnUInt32 XnSensorIO::ms_supportedProductsCount = sizeof(XnSensorIO::ms_supportedProducts) / sizeof(XnSensorIO::ms_supportedProducts[0]);
-@@ -409,6 +412,8 @@ XnStatus XnSensorIO::EnumerateSensors(XnConnectionString* aConnectionStrings, Xn
- 		{
- 			nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, ms_supportedProducts[i], devicesSet);
- 			XN_IS_STATUS_OK(nRetVal);
-+			nRetVal = Enumerate(XN_SENSOR_MSK_VENDOR_ID, ms_supportedProducts[i], devicesSet);
-+			XN_IS_STATUS_OK(nRetVal);
- 		}
- 	}
- #else
-@@ -419,6 +424,8 @@ XnStatus XnSensorIO::EnumerateSensors(XnConnectionString* aConnectionStrings, Xn
- 	{
- 		nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, ms_supportedProducts[i], devicesSet);
- 		XN_IS_STATUS_OK(nRetVal);
-+		nRetVal = Enumerate(XN_SENSOR_MSK_VENDOR_ID, ms_supportedProducts[i], devicesSet);
-+		XN_IS_STATUS_OK(nRetVal);
- 	}
- #endif
- 	
diff --git a/debian/patches/0004-Disable-setting-USB-interface.patch b/debian/patches/0004-Disable-setting-USB-interface.patch
new file mode 100644
index 0000000..caf08f6
--- /dev/null
+++ b/debian/patches/0004-Disable-setting-USB-interface.patch
@@ -0,0 +1,23 @@
+From: Jochen Sprickerhof <jochen at sprickerhof.de>
+Date: Tue, 6 Nov 2012 20:38:08 +0100
+Subject: Disable setting USB interface
+
+taken from https://kforge.ros.org/openni/drivers
+---
+ Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp |    3 ---
+ 1 file changed, 3 deletions(-)
+
+diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+index 50f23d5..4d9b0b4 100644
+--- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
++++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+@@ -147,9 +147,6 @@ XnStatus XnSensorIO::OpenDataEndPoints(XnSensorUsbInterface nInterface, const Xn
+ 			XN_LOG_WARNING_RETURN(XN_STATUS_USB_INTERFACE_NOT_SUPPORTED, XN_MASK_DEVICE_IO, "Unknown interface type: %d", nInterface);
+ 		}
+ 
+-		xnLogVerbose(XN_MASK_DEVICE_IO, "Setting USB alternative interface to %d...", nAlternativeInterface);
+-		nRetVal = xnUSBSetInterface(m_pSensorHandle->USBDevice, 0, nAlternativeInterface);
+-		XN_IS_STATUS_OK(nRetVal);
+ 	}
+ 
+ 	xnLogVerbose(XN_MASK_DEVICE_IO, "Opening endpoints...");
diff --git a/debian/patches/0005-Add-support-for-different-frame-rates-and-high-resol.patch b/debian/patches/0005-Add-support-for-different-frame-rates-and-high-resol.patch
deleted file mode 100644
index c123036..0000000
--- a/debian/patches/0005-Add-support-for-different-frame-rates-and-high-resol.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From: Jochen Sprickerhof <jochen at sprickerhof.de>
-Date: Tue, 6 Nov 2012 20:42:17 +0100
-Subject: Add support for different frame rates and high resolution
-
-taken from https://github.com/avin2/SensorKinect
----
- Source/XnDeviceSensorV2/XnFirmwareStreams.cpp |   12 ------------
- Source/XnDeviceSensorV2/XnHostProtocol.cpp    |    5 +----
- 2 files changed, 1 insertion(+), 16 deletions(-)
-
-diff --git a/Source/XnDeviceSensorV2/XnFirmwareStreams.cpp b/Source/XnDeviceSensorV2/XnFirmwareStreams.cpp
-index e70270d..40467e6 100644
---- a/Source/XnDeviceSensorV2/XnFirmwareStreams.cpp
-+++ b/Source/XnDeviceSensorV2/XnFirmwareStreams.cpp
-@@ -110,12 +110,6 @@ XnStatus XnFirmwareStreams::CheckClaimStream(const XnChar* strType, XnResolution
- 			{
- 				XN_LOG_WARNING_RETURN(XN_STATUS_DEVICE_BAD_PARAM, XN_MASK_DEVICE_SENSOR, "Cannot set depth stream to resolution %d when IR is set to resolution %d!", nRes, pIRStreamData->nRes);
- 			}
--
--			// check FPS
--			if (pIRStreamData->nFPS != nFPS)
--			{
--				XN_LOG_WARNING_RETURN(XN_STATUS_DEVICE_BAD_PARAM, XN_MASK_DEVICE_SENSOR, "Depth and IR streams must have the same FPS!");
--			}
- 		}
- 	}
- 	else if (strcmp(strType, XN_STREAM_TYPE_IR) == 0)
-@@ -145,12 +139,6 @@ XnStatus XnFirmwareStreams::CheckClaimStream(const XnChar* strType, XnResolution
- 					XN_LOG_WARNING_RETURN(XN_STATUS_DEVICE_BAD_PARAM, XN_MASK_DEVICE_SENSOR, "Cannot set IR stream to resolution %d when Depth is set to resolution %d!", nRes, pDepthStreamData->nRes);
- 				}
- 			}
--
--			// check FPS
--			if (pDepthStreamData->nFPS != nFPS)
--			{
--				XN_LOG_WARNING_RETURN(XN_STATUS_DEVICE_BAD_PARAM, XN_MASK_DEVICE_SENSOR, "Depth and IR streams must have the same FPS!");
--			}
- 		}
- 	}
- 	else if (strcmp(strType, XN_STREAM_TYPE_IMAGE) == 0)
-diff --git a/Source/XnDeviceSensorV2/XnHostProtocol.cpp b/Source/XnDeviceSensorV2/XnHostProtocol.cpp
-index 158d1b6..dadaf16 100644
---- a/Source/XnDeviceSensorV2/XnHostProtocol.cpp
-+++ b/Source/XnDeviceSensorV2/XnHostProtocol.cpp
-@@ -224,6 +224,7 @@ XnStatus XnHostProtocolInitFWParams(XnDevicePrivateData* pDevicePrivateData, XnU
- 		{ 0, XN_RESOLUTION_QVGA, 60 },
- 		{ 0, XN_RESOLUTION_VGA, 30 },
- 		{ 0, XN_RESOLUTION_SXGA, 30 },
-+		{ 0, XN_RESOLUTION_SXGA, 15 },
- 	};
- 	nRetVal = pDevicePrivateData->FWInfo.irModes.AddLast(irModes, sizeof(irModes)/sizeof(irModes[0]));
- 	XN_IS_STATUS_OK(nRetVal);
-@@ -1944,10 +1945,6 @@ XnStatus XnHostProtocolSetCmosBlanking(XnDevicePrivateData* pDevicePrivateData,
- 		pRequest->nNumberOfFrames = XN_PREPARE_VAR16_IN_BUFFER(nNumberOfFrames);
- 		nRequestSize = sizeof(XnVSyncRequest);
- 	}
--	else
--	{
--		XN_LOG_WARNING_RETURN(XN_STATUS_IO_DEVICE_FUNCTION_NOT_SUPPORTED, XN_MASK_SENSOR_PROTOCOL, "Set Blanking is not supported by this firmware!");
--	}
- 
- 	xnLogVerbose(XN_MASK_SENSOR_PROTOCOL, "Chaning CMOS %d Blanking to %hd (NumberOfFrames=%hu)...", nCMOSID, nUnits, nNumberOfFrames);
- 
diff --git a/debian/patches/0005-Add-support-for-vendor-id-in-Enumerate-USB-devices.patch b/debian/patches/0005-Add-support-for-vendor-id-in-Enumerate-USB-devices.patch
new file mode 100644
index 0000000..5e3c6ab
--- /dev/null
+++ b/debian/patches/0005-Add-support-for-vendor-id-in-Enumerate-USB-devices.patch
@@ -0,0 +1,62 @@
+From: Jochen Sprickerhof <jochen at sprickerhof.de>
+Date: Tue, 6 Nov 2012 20:38:26 +0100
+Subject: Add support for vendor id in Enumerate() USB devices
+
+taken from https://kforge.ros.org/openni/drivers
+---
+ Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp |   14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+index 4d9b0b4..87097a1 100644
+--- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
++++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+@@ -353,14 +353,14 @@ XnStatus XnSensorIO::CloseDevice()
+ 	return (XN_STATUS_OK);
+ }
+ 
+-XnStatus Enumerate(XnUInt16 nProduct, XnStringsHash& devicesSet)
++XnStatus Enumerate(XnUInt16 nVendor, XnUInt16 nProduct, XnStringsHash& devicesSet)
+ {
+ 	XnStatus nRetVal = XN_STATUS_OK;
+ 	
+ 	const XnUSBConnectionString* astrDevicePaths;
+ 	XnUInt32 nCount;
+ 
+-	nRetVal = xnUSBEnumerateDevices(XN_SENSOR_VENDOR_ID, nProduct, &astrDevicePaths, &nCount);
++	nRetVal = xnUSBEnumerateDevices(nVendor, nProduct, &astrDevicePaths, &nCount);
+ 	XN_IS_STATUS_OK(nRetVal);
+ 
+ 	for (XnUInt32 i = 0; i < nCount; ++i)
+@@ -389,26 +389,26 @@ XnStatus XnSensorIO::EnumerateSensors(XnConnectionString* aConnectionStrings, Xn
+ 	if (devicesSet.Size() == 0)
+ 	{
+ 		// search for a v6.0.1 device
+-		nRetVal = Enumerate(XN_SENSOR_6_0_1_PRODUCT_ID, devicesSet);
++		nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, XN_SENSOR_6_0_1_PRODUCT_ID, devicesSet);
+ 		XN_IS_STATUS_OK(nRetVal);
+ 
+ 		// search for a v6.0 device
+-		nRetVal = Enumerate(XN_SENSOR_6_0_PRODUCT_ID, devicesSet);
++		nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, XN_SENSOR_6_0_PRODUCT_ID, devicesSet);
+ 		XN_IS_STATUS_OK(nRetVal);	
+ 	}
+ #else
+ 	XnStringsHash devicesSet;
+ 
+ 	// search for a v6.0.1 device
+-	nRetVal = Enumerate(XN_SENSOR_6_0_1_PRODUCT_ID, devicesSet);
++	nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, XN_SENSOR_6_0_1_PRODUCT_ID, devicesSet);
+ 	XN_IS_STATUS_OK(nRetVal);
+ 
+ 	// search for a v6.0 device
+-	nRetVal = Enumerate(XN_SENSOR_6_0_PRODUCT_ID, devicesSet);
++	nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, XN_SENSOR_6_0_PRODUCT_ID, devicesSet);
+ 	XN_IS_STATUS_OK(nRetVal);
+ 
+ 	// search for a v5.0 device
+-	nRetVal = Enumerate(XN_SENSOR_5_0_PRODUCT_ID, devicesSet);
++	nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, XN_SENSOR_5_0_PRODUCT_ID, devicesSet);
+ 	XN_IS_STATUS_OK(nRetVal);
+ #endif
+ 	
diff --git a/debian/patches/0006-Add-support-for-XN-sensor-version-2.patch b/debian/patches/0006-Add-support-for-XN-sensor-version-2.patch
new file mode 100644
index 0000000..4739f6f
--- /dev/null
+++ b/debian/patches/0006-Add-support-for-XN-sensor-version-2.patch
@@ -0,0 +1,33 @@
+From: Jochen Sprickerhof <jochen at sprickerhof.de>
+Date: Tue, 6 Nov 2012 20:38:48 +0100
+Subject: Add support for XN sensor version 2
+
+taken from https://kforge.ros.org/openni/drivers
+---
+ Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+index 87097a1..f358f6a 100644
+--- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
++++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+@@ -30,6 +30,7 @@
+ // Defines
+ //---------------------------------------------------------------------------
+ #define XN_SENSOR_VENDOR_ID			0x1D27
++#define XN_SENSOR_2_0_PRODUCT_ID	0x0200
+ #define XN_SENSOR_5_0_PRODUCT_ID	0x0500
+ #define XN_SENSOR_6_0_PRODUCT_ID	0x0600
+ #define XN_SENSOR_6_0_1_PRODUCT_ID	0x0601
+@@ -410,6 +411,11 @@ XnStatus XnSensorIO::EnumerateSensors(XnConnectionString* aConnectionStrings, Xn
+ 	// search for a v5.0 device
+ 	nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, XN_SENSOR_5_0_PRODUCT_ID, devicesSet);
+ 	XN_IS_STATUS_OK(nRetVal);
++
++	// try searching for an older device
++	nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, XN_SENSOR_2_0_PRODUCT_ID, devicesSet);
++	XN_IS_STATUS_OK(nRetVal);
++
+ #endif
+ 	
+ 	// now copy back
diff --git a/debian/patches/0007-Add-support-for-Kinect-product-id.patch b/debian/patches/0007-Add-support-for-Kinect-product-id.patch
new file mode 100644
index 0000000..4671b60
--- /dev/null
+++ b/debian/patches/0007-Add-support-for-Kinect-product-id.patch
@@ -0,0 +1,33 @@
+From: Jochen Sprickerhof <jochen at sprickerhof.de>
+Date: Tue, 6 Nov 2012 20:39:14 +0100
+Subject: Add support for Kinect product id
+
+taken from https://kforge.ros.org/openni/drivers
+---
+ Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp |    6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+index f358f6a..b86283e 100644
+--- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
++++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
+@@ -34,6 +34,8 @@
+ #define XN_SENSOR_5_0_PRODUCT_ID	0x0500
+ #define XN_SENSOR_6_0_PRODUCT_ID	0x0600
+ #define XN_SENSOR_6_0_1_PRODUCT_ID	0x0601
++#define XN_SENSOR_MSK_VENDOR_ID   0x045E
++#define XN_SENSOR_MSK_PRODUCT_ID  0x02AE
+ 
+ //---------------------------------------------------------------------------
+ // Enums
+@@ -399,6 +401,10 @@ XnStatus XnSensorIO::EnumerateSensors(XnConnectionString* aConnectionStrings, Xn
+ 	}
+ #else
+ 	XnStringsHash devicesSet;
++	
++	// search for a MSK device
++  nRetVal = Enumerate(XN_SENSOR_MSK_VENDOR_ID, XN_SENSOR_MSK_PRODUCT_ID, devicesSet);
++  XN_IS_STATUS_OK(nRetVal);
+ 
+ 	// search for a v6.0.1 device
+ 	nRetVal = Enumerate(XN_SENSOR_VENDOR_ID, XN_SENSOR_6_0_1_PRODUCT_ID, devicesSet);
diff --git a/debian/patches/0008-Add-and-enable-uncompressed-Bayer-modes.patch b/debian/patches/0008-Add-and-enable-uncompressed-Bayer-modes.patch
deleted file mode 100644
index be0aea4..0000000
--- a/debian/patches/0008-Add-and-enable-uncompressed-Bayer-modes.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-From: Jochen Sprickerhof <jochen at sprickerhof.de>
-Date: Tue, 6 Nov 2012 20:43:44 +0100
-Subject: Add and enable (uncompressed) Bayer modes
-
-taken from https://kforge.ros.org/openni/drivers
----
- Source/XnDeviceSensorV2/XnHostProtocol.cpp         |   12 ++++++++++++
- Source/XnDeviceSensorV2/XnHostProtocol.h           |    4 ++--
- Source/XnDeviceSensorV2/XnSensorDepthStream.h      |    6 +++---
- Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp |    2 --
- Source/XnDeviceSensorV2/XnSensorImageStream.h      |    6 +++---
- 5 files changed, 20 insertions(+), 10 deletions(-)
-
-diff --git a/Source/XnDeviceSensorV2/XnHostProtocol.cpp b/Source/XnDeviceSensorV2/XnHostProtocol.cpp
-index dadaf16..18e3c37 100644
---- a/Source/XnDeviceSensorV2/XnHostProtocol.cpp
-+++ b/Source/XnDeviceSensorV2/XnHostProtocol.cpp
-@@ -201,6 +201,10 @@ XnStatus XnHostProtocolInitFWParams(XnDevicePrivateData* pDevicePrivateData, XnU
- 		{ XN_IO_IMAGE_FORMAT_YUV422, XN_RESOLUTION_QVGA, 30 },
- 		{ XN_IO_IMAGE_FORMAT_YUV422, XN_RESOLUTION_QVGA, 60 },
- 		{ XN_IO_IMAGE_FORMAT_YUV422, XN_RESOLUTION_VGA, 30 },
-+		{ XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_SXGA, 15 },
-+		{ XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_QVGA, 30 },
-+		{ XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_QVGA, 60 },
-+		{ XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_VGA, 30 },
- 	};
- 	nRetVal = pDevicePrivateData->FWInfo.imageBulkModes.AddLast(imageCommonModes, sizeof(imageCommonModes)/sizeof(imageCommonModes[0]));
- 	XN_IS_STATUS_OK(nRetVal);
-@@ -212,6 +216,10 @@ XnStatus XnHostProtocolInitFWParams(XnDevicePrivateData* pDevicePrivateData, XnU
- 		{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422, XN_RESOLUTION_QVGA, 30 },
- 		{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422, XN_RESOLUTION_QVGA, 60 },
- 		{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422, XN_RESOLUTION_VGA, 30 },
-+		{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_SXGA, 15 },
-+		{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_QVGA, 30 },
-+		{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_QVGA, 60 },
-+		{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_VGA, 30 },
- 	};
- 	nRetVal = pDevicePrivateData->FWInfo.imageIsoModes.AddLast(imageIsoModes, sizeof(imageIsoModes)/sizeof(imageIsoModes[0]));
- 	XN_IS_STATUS_OK(nRetVal);
-@@ -348,6 +356,8 @@ XnStatus XnHostProtocolInitFWParams(XnDevicePrivateData* pDevicePrivateData, XnU
- 		{
- 			{ XN_IO_IMAGE_FORMAT_YUV422, XN_RESOLUTION_QVGA, 25 },
- 			{ XN_IO_IMAGE_FORMAT_YUV422, XN_RESOLUTION_VGA, 25 },
-+			{ XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_QVGA, 25 },
-+			{ XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_VGA, 25 },
- 		};
- 		nRetVal = pDevicePrivateData->FWInfo.imageBulkModes.AddLast(imageModes25FpsCommon, sizeof(imageModes25FpsCommon)/sizeof(imageModes25FpsCommon[0]));
- 		XN_IS_STATUS_OK(nRetVal);
-@@ -358,6 +368,8 @@ XnStatus XnHostProtocolInitFWParams(XnDevicePrivateData* pDevicePrivateData, XnU
- 		{
- 			{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422, XN_RESOLUTION_QVGA, 25 },
- 			{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422, XN_RESOLUTION_VGA, 25 },
-+			{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_QVGA, 25 },
-+			{ XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_VGA, 25 },
- 		};
- 		nRetVal = pDevicePrivateData->FWInfo.imageIsoModes.AddLast(imageModes25FpsIso, sizeof(imageModes25FpsIso)/sizeof(imageModes25FpsIso[0]));
- 		XN_IS_STATUS_OK(nRetVal);
-diff --git a/Source/XnDeviceSensorV2/XnHostProtocol.h b/Source/XnDeviceSensorV2/XnHostProtocol.h
-index ead0738..1e75bcf 100644
---- a/Source/XnDeviceSensorV2/XnHostProtocol.h
-+++ b/Source/XnDeviceSensorV2/XnHostProtocol.h
-@@ -105,8 +105,8 @@ enum EPsProtocolOpCodes_V017
- typedef enum
- {
- 	XN_HOST_PROTOCOL_ALGORITHM_DEPTH_INFO	= 0x00,
--	XN_HOST_PROTOCOL_ALGORITHM_REGISTRATION	= 0x02,
--	XN_HOST_PROTOCOL_ALGORITHM_PADDING		= 0x03,
-+	XN_HOST_PROTOCOL_ALGORITHM_REGISTRATION	= 0x40,
-+	XN_HOST_PROTOCOL_ALGORITHM_PADDING		= 0x41,
- 	XN_HOST_PROTOCOL_ALGORITHM_BLANKING		= 0x06,
- 	XN_HOST_PROTOCOL_ALGORITHM_DEVICE_INFO	= 0x07,
- 	XN_HOST_PROTOCOL_ALGORITHM_FREQUENCY	= 0x80
-diff --git a/Source/XnDeviceSensorV2/XnSensorDepthStream.h b/Source/XnDeviceSensorV2/XnSensorDepthStream.h
-index 29e0fbe..471249f 100644
---- a/Source/XnDeviceSensorV2/XnSensorDepthStream.h
-+++ b/Source/XnDeviceSensorV2/XnSensorDepthStream.h
-@@ -39,13 +39,13 @@
- 	#define XN_DEPTH_STREAM_DEFAULT_RESOLUTION					XN_RESOLUTION_QQVGA
- #else
- 	#define XN_DEPTH_STREAM_DEFAULT_INPUT_FORMAT				XN_IO_DEPTH_FORMAT_UNCOMPRESSED_11_BIT
--	#define XN_DEPTH_STREAM_DEFAULT_RESOLUTION					XN_RESOLUTION_QVGA
-+	#define XN_DEPTH_STREAM_DEFAULT_RESOLUTION					XN_RESOLUTION_VGA
- #endif
- 
- #define XN_DEPTH_STREAM_DEFAULT_FPS							30
- #define XN_DEPTH_STREAM_DEFAULT_OUTPUT_FORMAT				XN_OUTPUT_FORMAT_DEPTH_VALUES
- #define XN_DEPTH_STREAM_DEFAULT_REGISTRATION				FALSE
--#define XN_DEPTH_STREAM_DEFAULT_REGISTRATION_TYPE			XN_PROCESSING_DONT_CARE
-+#define XN_DEPTH_STREAM_DEFAULT_REGISTRATION_TYPE			XN_PROCESSING_SOFTWARE
- #define XN_DEPTH_STREAM_DEFAULT_HOLE_FILLER					TRUE
- #define XN_DEPTH_STREAM_DEFAULT_WHITE_BALANCE				TRUE
- #define XN_DEPTH_STREAM_DEFAULT_GAIN_OLD					50
-@@ -172,4 +172,4 @@ private:
- 	XnCallbackHandle m_hReferenceSizeChangedCallback;
- };
- 
--#endif //__XN_SENSOR_DEPTH_STREAM_H__
-\ No newline at end of file
-+#endif //__XN_SENSOR_DEPTH_STREAM_H__
-diff --git a/Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp b/Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp
-index a661dc6..6598e61 100644
---- a/Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp
-+++ b/Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp
-@@ -504,12 +504,10 @@ XnStatus XnSensorFirmwareParams::SetImageFormat(XnUInt64 nValue)
- {
- 	XnStatus nRetVal = XN_STATUS_OK;
- 
--/*	
- 	if (nValue == XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER)
- 	{
- 		nValue = XN_IO_IMAGE_FORMAT_BAYER;
- 	}
--*/
- 
- 	nRetVal = SetFirmwareParam(&m_ImageFormat, nValue);
- 	XN_IS_STATUS_OK(nRetVal);
-diff --git a/Source/XnDeviceSensorV2/XnSensorImageStream.h b/Source/XnDeviceSensorV2/XnSensorImageStream.h
-index 6ec9e56..0519155 100644
---- a/Source/XnDeviceSensorV2/XnSensorImageStream.h
-+++ b/Source/XnDeviceSensorV2/XnSensorImageStream.h
-@@ -32,8 +32,8 @@
- // Defines
- //---------------------------------------------------------------------------
- #define XN_IMAGE_STREAM_DEFAULT_FPS				30
--#define XN_IMAGE_STREAM_DEFAULT_RESOLUTION		XN_RESOLUTION_QVGA
--#define XN_IMAGE_STREAM_DEFAULT_INPUT_FORMAT	XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422
-+#define XN_IMAGE_STREAM_DEFAULT_RESOLUTION		XN_RESOLUTION_VGA
-+#define XN_IMAGE_STREAM_DEFAULT_INPUT_FORMAT	XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER
- #define XN_IMAGE_STREAM_DEFAULT_OUTPUT_FORMAT	XN_OUTPUT_FORMAT_RGB24
- #define XN_IMAGE_STREAM_DEFAULT_FLICKER			0
- #define XN_IMAGE_STREAM_DEFAULT_QUALITY			3
-@@ -163,4 +163,4 @@ private:
- 	XnActualIntProperty m_ActualRead;
- };
- 
--#endif //__XN_SENSOR_IMAGE_STREAM_H__
-\ No newline at end of file
-+#endif //__XN_SENSOR_IMAGE_STREAM_H__
diff --git a/debian/patches/0008-Add-support-for-different-frame-rates-and-high-resol.patch b/debian/patches/0008-Add-support-for-different-frame-rates-and-high-resol.patch
new file mode 100644
index 0000000..7e3b5cf
--- /dev/null
+++ b/debian/patches/0008-Add-support-for-different-frame-rates-and-high-resol.patch
@@ -0,0 +1,76 @@
+From: Jochen Sprickerhof <jochen at sprickerhof.de>
+Date: Tue, 6 Nov 2012 20:42:17 +0100
+Subject: Add support for different frame rates and high resolution
+
+taken from https://github.com/avin2/SensorKinect
+---
+ Source/XnDeviceSensorV2/XnFirmwareStreams.cpp      |   12 ------------
+ Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp |    4 ----
+ Source/XnDeviceSensorV2/XnSensorIRStream.cpp       |    2 ++
+ 3 files changed, 2 insertions(+), 16 deletions(-)
+
+diff --git a/Source/XnDeviceSensorV2/XnFirmwareStreams.cpp b/Source/XnDeviceSensorV2/XnFirmwareStreams.cpp
+index eb2e45d..5d1f30b 100644
+--- a/Source/XnDeviceSensorV2/XnFirmwareStreams.cpp
++++ b/Source/XnDeviceSensorV2/XnFirmwareStreams.cpp
+@@ -110,12 +110,6 @@ XnStatus XnFirmwareStreams::CheckClaimStream(const XnChar* strType, XnResolution
+ 			{
+ 				XN_LOG_WARNING_RETURN(XN_STATUS_DEVICE_BAD_PARAM, XN_MASK_DEVICE_SENSOR, "Cannot set depth stream to resolution %d when IR is set to resolution %d!", nRes, pIRStreamData->nRes);
+ 			}
+-
+-			// check FPS
+-			if (pIRStreamData->nFPS != nFPS)
+-			{
+-				XN_LOG_WARNING_RETURN(XN_STATUS_DEVICE_BAD_PARAM, XN_MASK_DEVICE_SENSOR, "Depth and IR streams must have the same FPS!");
+-			}
+ 		}
+ 	}
+ 	else if (strcmp(strType, XN_STREAM_TYPE_IR) == 0)
+@@ -142,12 +136,6 @@ XnStatus XnFirmwareStreams::CheckClaimStream(const XnChar* strType, XnResolution
+ 			{
+ 				XN_LOG_WARNING_RETURN(XN_STATUS_DEVICE_BAD_PARAM, XN_MASK_DEVICE_SENSOR, "Cannot set IR stream to resolution %d when Depth is set to resolution %d!", nRes, pDepthStreamData->nRes);
+ 			}
+-
+-			// check FPS
+-			if (pDepthStreamData->nFPS != nFPS)
+-			{
+-				XN_LOG_WARNING_RETURN(XN_STATUS_DEVICE_BAD_PARAM, XN_MASK_DEVICE_SENSOR, "Depth and IR streams must have the same FPS!");
+-			}
+ 		}
+ 	}
+ 	else if (strcmp(strType, XN_STREAM_TYPE_IMAGE) == 0)
+diff --git a/Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp b/Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp
+index 913fb6a..235da3b 100644
+--- a/Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp
++++ b/Source/XnDeviceSensorV2/XnSensorFirmwareParams.cpp
+@@ -510,10 +510,6 @@ XnStatus XnSensorFirmwareParams::SetImageResolution(XnUInt64 nValue)
+ 		case XN_RESOLUTION_VGA:
+ 			break;
+ 		case XN_RESOLUTION_SXGA:
+-			if (m_pInfo->nFWVer < XN_SENSOR_FW_VER_5_3)
+-			{
+-				XN_LOG_WARNING_RETURN(XN_STATUS_IO_INVALID_STREAM_IMAGE_RESOLUTION, XN_MASK_DEVICE_SENSOR, "Image resolution is not supported by this firmware!");
+-			}
+ 			break;
+ 		case XN_RESOLUTION_UXGA:
+ 			if (m_pInfo->nFWVer < XN_SENSOR_FW_VER_5_1)
+diff --git a/Source/XnDeviceSensorV2/XnSensorIRStream.cpp b/Source/XnDeviceSensorV2/XnSensorIRStream.cpp
+index ebf162a..73c50a1 100644
+--- a/Source/XnDeviceSensorV2/XnSensorIRStream.cpp
++++ b/Source/XnDeviceSensorV2/XnSensorIRStream.cpp
+@@ -87,6 +87,7 @@ XnStatus XnSensorIRStream::Init()
+ 		{ 0, XN_RESOLUTION_QVGA, 60 },
+ 		{ 0, XN_RESOLUTION_VGA, 30 },
+ 		{ 0, XN_RESOLUTION_SXGA, 30 },
++		{ 0, XN_RESOLUTION_SXGA, 15 },
+ 	};
+ 	nRetVal = AddSupportedModes(aSupportedModes, sizeof(aSupportedModes)/sizeof(aSupportedModes[0]));
+ 	XN_IS_STATUS_OK(nRetVal);
+@@ -96,6 +97,7 @@ XnStatus XnSensorIRStream::Init()
+ 		XnCmosPreset aSupportedModesSXGA[] = 
+ 		{
+ 			{ 0, XN_RESOLUTION_SXGA, 30 },
++			{ 0, XN_RESOLUTION_SXGA, 15 },
+ 		};
+ 		nRetVal = AddSupportedModes(aSupportedModesSXGA, sizeof(aSupportedModesSXGA)/sizeof(aSupportedModesSXGA[0]));
+ 		XN_IS_STATUS_OK(nRetVal);
diff --git a/debian/patches/0006-Test-for-y-value-in-registration.patch b/debian/patches/0009-Test-for-y-value-in-registration.patch
similarity index 83%
rename from debian/patches/0006-Test-for-y-value-in-registration.patch
rename to debian/patches/0009-Test-for-y-value-in-registration.patch
index 2642842..f1eca68 100644
--- a/debian/patches/0006-Test-for-y-value-in-registration.patch
+++ b/debian/patches/0009-Test-for-y-value-in-registration.patch
@@ -8,45 +8,45 @@ taken from https://kforge.ros.org/openni/drivers
  1 file changed, 17 insertions(+), 2 deletions(-)
 
 diff --git a/Source/XnDeviceSensorV2/Registration.cpp b/Source/XnDeviceSensorV2/Registration.cpp
-index f5ce7e9..84eff38 100644
+index 4f85eee..1ad0435 100644
 --- a/Source/XnDeviceSensorV2/Registration.cpp
 +++ b/Source/XnDeviceSensorV2/Registration.cpp
-@@ -460,13 +460,28 @@ void XnRegistration::Apply1000(XnDepthPixel* pInput, XnDepthPixel* pOutput)
+@@ -472,13 +472,28 @@ void XnRegistration::Apply1000(XnDepthPixel* pInput, XnDepthPixel* pOutput)
  			nNewX = (XnInt32)(XnDouble(*pRegTable)/XN_REG_X_SCALE + XnInt32(pDepth2ShiftTable[nValue]/XN_REG_PARAB_COEFF - nConstShift) * dShiftFactor);
  			nNewY = *(pRegTable+1);
  
 -			if ((XnUInt32)nNewX-1 < (XnUInt32)nDepthXRes-1)
-+			if ((XnUInt32)nNewX-1 < (XnUInt32)nDepthXRes-1 && (XnUInt32)nNewY < (XnUInt32)nDepthYRes)
++			if ((XnUInt32)nNewX-1 < (XnUInt32)nDepthXRes-1 && (XnUInt32)nNewY <(XnUInt32) nDepthYRes)
  			{
  				nArrPos = nNewY * nDepthXRes + nNewX;
  				nOutValue = pOutput[nArrPos];
  
  				if (nOutValue == 0 || nOutValue > nValue)
  				{
-+					if (nNewX > 0 && nNewY > 0)
-+					{
-+						pOutput[nArrPos-nDepthXRes] = nValue;
-+						pOutput[nArrPos-nDepthXRes-1] = nValue;
-+						pOutput[nArrPos-1] = nValue;
-+					}
-+					else if(nNewY > 0)
-+					{
-+						pOutput[nArrPos-nDepthXRes] = nValue;
-+					}
-+					else if(nNewX > 0)
-+					{
-+						pOutput[nArrPos-1] = nValue;
-+					}
-+
++				  if ( nNewX > 0 && nNewY > 0 )
++					{
++						pOutput[nArrPos-nDepthXRes] = nValue;
++						pOutput[nArrPos-nDepthXRes-1] = nValue;
++						pOutput[nArrPos-1] = nValue;
++					}
++					else if( nNewY > 0 )
++					{
++						pOutput[nArrPos-nDepthXRes] = nValue;
++					}
++					else if( nNewX > 0 )
++					{
++						pOutput[nArrPos-1] = nValue;
++					}
++    
  					pOutput[nArrPos] = nValue;
  					pOutput[nArrPos-1] = nValue;
  					pOutput[nArrPos-nDepthXRes] = nValue;
-@@ -508,7 +523,7 @@ void XnRegistration::Apply1080(XnDepthPixel* pInput, XnDepthPixel* pOutput)
+@@ -523,7 +538,7 @@ void XnRegistration::Apply1080(XnDepthPixel* pInput, XnDepthPixel* pOutput)
  				nNewX = (XnUInt32)(*pRegTable + pRGBRegDepthToShiftTable[nValue]) / RGB_REG_X_VAL_SCALE;
  				nNewY = *(pRegTable+1);
  
 -				if (nNewX < nDepthXRes)
-+				if (nNewX < nDepthXRes && nNewY < nDepthYRes)
++				if (nNewX < nDepthXRes && nNewY < nDepthYRes)
  				{
  					nArrPos = bMirror ? (nNewY+1)*nDepthXRes - nNewX : (nNewY*nDepthXRes) + nNewX;
- 					
+ 					nArrPos -= nConstOffset;
diff --git a/debian/patches/0007-Change-host-protocol.patch b/debian/patches/0010-Change-host-protocol.patch
similarity index 79%
rename from debian/patches/0007-Change-host-protocol.patch
rename to debian/patches/0010-Change-host-protocol.patch
index 2021272..c706a28 100644
--- a/debian/patches/0007-Change-host-protocol.patch
+++ b/debian/patches/0010-Change-host-protocol.patch
@@ -8,14 +8,14 @@ taken from https://github.com/avin2/SensorKinect
  1 file changed, 1 insertion(+)
 
 diff --git a/Source/XnDeviceSensorV2/XnSensorDepthStream.cpp b/Source/XnDeviceSensorV2/XnSensorDepthStream.cpp
-index a94979b..24b9059 100644
+index 5c2ed2e..f9a0c9f 100644
 --- a/Source/XnDeviceSensorV2/XnSensorDepthStream.cpp
 +++ b/Source/XnDeviceSensorV2/XnSensorDepthStream.cpp
-@@ -298,6 +298,7 @@ XnStatus XnSensorDepthStream::ConfigureStreamImpl()
+@@ -319,6 +319,7 @@ XnStatus XnSensorDepthStream::ConfigureStreamImpl()
  	nRetVal = m_Helper.GetCmosInfo()->SetCmosConfig(XN_CMOS_TYPE_DEPTH, GetResolution(), GetFPS());
  	XN_IS_STATUS_OK(nRetVal);
  
-+	XnHostProtocolSetParam(GetHelper()->GetPrivateData(), 0x105, 0);
++  XnHostProtocolSetParam(GetHelper()->GetPrivateData(), 0x105, 0);
  	return XN_STATUS_OK;
  }
  
diff --git a/debian/patches/0011-Add-and-enable-uncompressed-Bayer-modes.patch b/debian/patches/0011-Add-and-enable-uncompressed-Bayer-modes.patch
new file mode 100644
index 0000000..cc23002
--- /dev/null
+++ b/debian/patches/0011-Add-and-enable-uncompressed-Bayer-modes.patch
@@ -0,0 +1,150 @@
+From: Jochen Sprickerhof <jochen at sprickerhof.de>
+Date: Tue, 6 Nov 2012 20:43:44 +0100
+Subject: Add and enable (uncompressed) Bayer modes
+
+taken from https://kforge.ros.org/openni/drivers
+---
+ Source/XnDeviceSensorV2/XnHostProtocol.h        |    4 +--
+ Source/XnDeviceSensorV2/XnSensorDepthStream.h   |    6 ++---
+ Source/XnDeviceSensorV2/XnSensorImageStream.cpp |   33 ++++++++++++++++++++++-
+ Source/XnDeviceSensorV2/XnSensorImageStream.h   |    6 ++---
+ 4 files changed, 40 insertions(+), 9 deletions(-)
+
+diff --git a/Source/XnDeviceSensorV2/XnHostProtocol.h b/Source/XnDeviceSensorV2/XnHostProtocol.h
+index 36721c8..e04f2b4 100644
+--- a/Source/XnDeviceSensorV2/XnHostProtocol.h
++++ b/Source/XnDeviceSensorV2/XnHostProtocol.h
+@@ -108,8 +108,8 @@ enum EPsProtocolOpCodes_V017
+ typedef enum
+ {
+ 	XN_HOST_PROTOCOL_ALGORITHM_DEPTH_INFO	= 0x00,
+-	XN_HOST_PROTOCOL_ALGORITHM_REGISTRATION	= 0x02,
+-	XN_HOST_PROTOCOL_ALGORITHM_PADDING		= 0x03,
++	XN_HOST_PROTOCOL_ALGORITHM_REGISTRATION	= 0x40,
++	XN_HOST_PROTOCOL_ALGORITHM_PADDING		= 0x41,
+ 	XN_HOST_PROTOCOL_ALGORITHM_BLANKING		= 0x06,
+ 	XN_HOST_PROTOCOL_ALGORITHM_DEVICE_INFO	= 0x07,
+ 	XN_HOST_PROTOCOL_ALGORITHM_FREQUENCY	= 0x80
+diff --git a/Source/XnDeviceSensorV2/XnSensorDepthStream.h b/Source/XnDeviceSensorV2/XnSensorDepthStream.h
+index 7ac329a..737ec68 100644
+--- a/Source/XnDeviceSensorV2/XnSensorDepthStream.h
++++ b/Source/XnDeviceSensorV2/XnSensorDepthStream.h
+@@ -36,11 +36,11 @@
+ // Defines
+ //---------------------------------------------------------------------------
+ #define XN_DEPTH_STREAM_DEFAULT_INPUT_FORMAT				XN_IO_DEPTH_FORMAT_UNCOMPRESSED_11_BIT
+-#define XN_DEPTH_STREAM_DEFAULT_RESOLUTION					XN_RESOLUTION_QVGA
++#define XN_DEPTH_STREAM_DEFAULT_RESOLUTION					XN_RESOLUTION_VGA
+ #define XN_DEPTH_STREAM_DEFAULT_FPS							30
+ #define XN_DEPTH_STREAM_DEFAULT_OUTPUT_FORMAT				XN_OUTPUT_FORMAT_DEPTH_VALUES
+ #define XN_DEPTH_STREAM_DEFAULT_REGISTRATION				FALSE
+-#define XN_DEPTH_STREAM_DEFAULT_REGISTRATION_TYPE			XN_PROCESSING_DONT_CARE
++#define XN_DEPTH_STREAM_DEFAULT_REGISTRATION_TYPE			XN_PROCESSING_SOFTWARE
+ #define XN_DEPTH_STREAM_DEFAULT_HOLE_FILLER					TRUE
+ #define XN_DEPTH_STREAM_DEFAULT_WHITE_BALANCE				TRUE
+ #define XN_DEPTH_STREAM_DEFAULT_GAIN_OLD					50
+@@ -162,4 +162,4 @@ private:
+ 	XnCallbackHandle m_hReferenceSizeChangedCallback;
+ };
+ 
+-#endif //__XN_SENSOR_DEPTH_STREAM_H__
+\ No newline at end of file
++#endif //__XN_SENSOR_DEPTH_STREAM_H__
+diff --git a/Source/XnDeviceSensorV2/XnSensorImageStream.cpp b/Source/XnDeviceSensorV2/XnSensorImageStream.cpp
+index 23f25a5..8c17b11 100644
+--- a/Source/XnDeviceSensorV2/XnSensorImageStream.cpp
++++ b/Source/XnDeviceSensorV2/XnSensorImageStream.cpp
+@@ -214,6 +214,14 @@ XnStatus XnSensorImageStream::Init()
+ 		nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_YUV422, XN_RESOLUTION_VGA, 30);
+ 		XN_IS_STATUS_OK(nRetVal);
+ 
++		// Enable Bayer images
++		nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_QVGA, 30);
++		XN_IS_STATUS_OK(nRetVal);
++		nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_QVGA, 60);
++		XN_IS_STATUS_OK(nRetVal);
++		nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_VGA, 30);
++		XN_IS_STATUS_OK(nRetVal);
++
+ 		// add uncompressed ones
+ 		if (bUncompressedAllowed)
+ 		{
+@@ -223,6 +231,16 @@ XnStatus XnSensorImageStream::Init()
+ 			XN_IS_STATUS_OK(nRetVal);
+ 			nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422, XN_RESOLUTION_VGA, 30);
+ 			XN_IS_STATUS_OK(nRetVal);
++      
++      // Enable umcompressed Bayer			
++			nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_SXGA, 15);
++			XN_IS_STATUS_OK(nRetVal);
++			nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_VGA, 30);
++			XN_IS_STATUS_OK(nRetVal);
++			nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_QVGA, 60);
++			XN_IS_STATUS_OK(nRetVal);
++			nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_QVGA, 30);
++			XN_IS_STATUS_OK(nRetVal);
+ 		}
+ 
+ 		// starting with FW 5.1, 25 FPS is also supported
+@@ -232,13 +250,22 @@ XnStatus XnSensorImageStream::Init()
+ 			XN_IS_STATUS_OK(nRetVal);
+ 			nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_YUV422, XN_RESOLUTION_VGA, 25);
+ 			XN_IS_STATUS_OK(nRetVal);
+-
++      // Enable Bayer
++			nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_QVGA, 25);
++			XN_IS_STATUS_OK(nRetVal);
++			nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_VGA, 25);
++			XN_IS_STATUS_OK(nRetVal);
++      
+ 			if (bUncompressedAllowed)
+ 			{
+ 				nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422, XN_RESOLUTION_QVGA, 25);
+ 				XN_IS_STATUS_OK(nRetVal);
+ 				nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422, XN_RESOLUTION_VGA, 25);
+ 				XN_IS_STATUS_OK(nRetVal);
++			  nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_QVGA, 25);
++			  XN_IS_STATUS_OK(nRetVal);
++			  nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_VGA, 25);
++			  XN_IS_STATUS_OK(nRetVal);
+ 			}
+ 		}
+ 
+@@ -255,11 +282,15 @@ XnStatus XnSensorImageStream::Init()
+ 			{
+ 				nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_YUV422, XN_RESOLUTION_SXGA, 30);
+ 				XN_IS_STATUS_OK(nRetVal);
++				nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_BAYER, XN_RESOLUTION_SXGA, 30);
++				XN_IS_STATUS_OK(nRetVal);
+ 
+ 				if (bUncompressedAllowed)
+ 				{
+ 					nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422, XN_RESOLUTION_SXGA, 30);
+ 					XN_IS_STATUS_OK(nRetVal);
++					nRetVal = AddSupportedMode(supportedModes, XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER, XN_RESOLUTION_SXGA, 30);
++					XN_IS_STATUS_OK(nRetVal);
+ 				}
+ 			}
+ 		}
+diff --git a/Source/XnDeviceSensorV2/XnSensorImageStream.h b/Source/XnDeviceSensorV2/XnSensorImageStream.h
+index 94bc3a5..be9091f 100644
+--- a/Source/XnDeviceSensorV2/XnSensorImageStream.h
++++ b/Source/XnDeviceSensorV2/XnSensorImageStream.h
+@@ -33,8 +33,8 @@
+ // Defines
+ //---------------------------------------------------------------------------
+ #define XN_IMAGE_STREAM_DEFAULT_FPS				30
+-#define XN_IMAGE_STREAM_DEFAULT_RESOLUTION		XN_RESOLUTION_QVGA
+-#define XN_IMAGE_STREAM_DEFAULT_INPUT_FORMAT	XN_IO_IMAGE_FORMAT_UNCOMPRESSED_YUV422
++#define XN_IMAGE_STREAM_DEFAULT_RESOLUTION		XN_RESOLUTION_VGA
++#define XN_IMAGE_STREAM_DEFAULT_INPUT_FORMAT	XN_IO_IMAGE_FORMAT_UNCOMPRESSED_BAYER
+ #define XN_IMAGE_STREAM_DEFAULT_OUTPUT_FORMAT	XN_OUTPUT_FORMAT_RGB24
+ #define XN_IMAGE_STREAM_DEFAULT_FLICKER			0
+ #define XN_IMAGE_STREAM_DEFAULT_QUALITY			3
+@@ -169,4 +169,4 @@ private:
+ 	XnActualIntProperty m_ActualRead;
+ };
+ 
+-#endif //__XN_SENSOR_IMAGE_STREAM_H__
+\ No newline at end of file
++#endif //__XN_SENSOR_IMAGE_STREAM_H__
diff --git a/debian/patches/0009-Add-ROS-code-for-improved-Bayer-Pattern-to-RGB-conve.patch b/debian/patches/0012-Add-ROS-code-for-improved-Bayer-Pattern-to-RGB-conve.patch
similarity index 97%
rename from debian/patches/0009-Add-ROS-code-for-improved-Bayer-Pattern-to-RGB-conve.patch
rename to debian/patches/0012-Add-ROS-code-for-improved-Bayer-Pattern-to-RGB-conve.patch
index 8241b51..50f3ff8 100644
--- a/debian/patches/0009-Add-ROS-code-for-improved-Bayer-Pattern-to-RGB-conve.patch
+++ b/debian/patches/0012-Add-ROS-code-for-improved-Bayer-Pattern-to-RGB-conve.patch
@@ -8,83 +8,83 @@ taken from https://kforge.ros.org/openni/drivers
  1 file changed, 1168 insertions(+), 65 deletions(-)
 
 diff --git a/Source/XnDeviceSensorV2/Bayer.cpp b/Source/XnDeviceSensorV2/Bayer.cpp
-index 43666ad..940e5b6 100644
+index 43666ad..3190857 100644
 --- a/Source/XnDeviceSensorV2/Bayer.cpp
 +++ b/Source/XnDeviceSensorV2/Bayer.cpp
 @@ -20,104 +20,1207 @@
  *                                                                           *
  ****************************************************************************/
  //---------------------------------------------------------------------------
-+/****************************************************************************
-+ * Edited 12.04.2011 by Raphael Dumusc                                      *
-+ * Incorporated ROS code for improved Bayer Pattern to RGB conversion.      *
-+ ***************************************************************************/
++/****************************************************************************
++ * Edited 12.04.2011 by Raphael Dumusc                                      *
++ * Incorporated ROS code for improved Bayer Pattern to RGB conversion.      *
++ ***************************************************************************/
  // Includes
-+ /*
-+ The ROS bayer pattern to RGB conversion
-+ Modified to be used in Avin's mod of the Primesense driver.
-+ Original code available here:
-+ http://www.ros.org/doc/api/openni_camera/html/openni__image__bayer__grbg_8cpp_source.html
-+*/
-+
-+/*
-+ * Software License Agreement (BSD License)
-+ *
-+ *  Copyright (c) 2011 2011 Willow Garage, Inc.
-+ *    Suat Gedikli <gedikli at willowgarage.com>
-+ *
-+ *  All rights reserved.
-+ *
-+ *  Redistribution and use in source and binary forms, with or without
-+ *  modification, are permitted provided that the following conditions
-+ *  are met:
-+ *
-+ *   * Redistributions of source code must retain the above copyright
-+ *     notice, this list of conditions and the following disclaimer.
-+ *   * Redistributions in binary form must reproduce the above
-+ *     copyright notice, this list of conditions and the following
-+ *     disclaimer in the documentation and/or other materials provided
-+ *     with the distribution.
-+ *   * Neither the name of Willow Garage, Inc. nor the names of its
-+ *     contributors may be used to endorse or promote products derived
-+ *     from this software without specific prior written permission.
-+ *
-+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
-+ *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
-+ *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
-+ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-+ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
-+ *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-+ *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
-+ *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-+ *  POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ */
++ /*
++ The ROS bayer pattern to RGB conversion
++ Modified to be used in Avin's mod of the Primesense driver.
++ Original code available here:
++ http://www.ros.org/doc/api/openni_camera/html/openni__image__bayer__grbg_8cpp_source.html
++*/
++
++/*
++ * Software License Agreement (BSD License)
++ *
++ *  Copyright (c) 2011 2011 Willow Garage, Inc.
++ *    Suat Gedikli <gedikli at willowgarage.com>
++ *
++ *  All rights reserved.
++ *
++ *  Redistribution and use in source and binary forms, with or without
++ *  modification, are permitted provided that the following conditions
++ *  are met:
++ *
++ *   * Redistributions of source code must retain the above copyright
++ *     notice, this list of conditions and the following disclaimer.
++ *   * Redistributions in binary form must reproduce the above
++ *     copyright notice, this list of conditions and the following
++ *     disclaimer in the documentation and/or other materials provided
++ *     with the distribution.
++ *   * Neither the name of Willow Garage, Inc. nor the names of its
++ *     contributors may be used to endorse or promote products derived
++ *     from this software without specific prior written permission.
++ *
++ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
++ *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
++ *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
++ *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
++ *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
++ *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
++ *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
++ *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
++ *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
++ *  POSSIBILITY OF SUCH DAMAGE.
++ *
++ */
  //---------------------------------------------------------------------------
  #include "Bayer.h"
 -#include <math.h>
-+#include <sstream>
-+#include <iostream>
++#include <sstream>
++#include <iostream>
  
-+#define AVG(a,b) (((int)(a) + (int)(b)) >> 1)
-+#define AVG3(a,b,c) (((int)(a) + (int)(b) + (int)(c)) / 3)
-+#define AVG4(a,b,c,d) (((int)(a) + (int)(b) + (int)(c) + (int)(d)) >> 2)
-+#define WAVG4(a,b,c,d,x,y)  ( ( ((int)(a) + (int)(b)) * (int)(x) + ((int)(c) + (int)(d)) * (int)(y) ) / ( 2 * ((int)(x) + (int(y))) ) )
-+using namespace std;
++#define AVG(a,b) (((int)(a) + (int)(b)) >> 1)
++#define AVG3(a,b,c) (((int)(a) + (int)(b) + (int)(c)) / 3)
++#define AVG4(a,b,c,d) (((int)(a) + (int)(b) + (int)(c) + (int)(d)) >> 2)
++#define WAVG4(a,b,c,d,x,y)  ( ( ((int)(a) + (int)(b)) * (int)(x) + ((int)(c) + (int)(d)) * (int)(y) ) / ( 2 * ((int)(x) + (int(y))) ) )
++using namespace std;
  //---------------------------------------------------------------------------
-+typedef enum
-+{
-+	Bilinear = 0,
-+	EdgeAware,
-+	EdgeAwareWeighted
-+} DebayeringMethod;
++typedef enum
++{
++	Bilinear = 0,
++	EdgeAware,
++	EdgeAwareWeighted
++} DebayeringMethod;
  // Global Variables
-+void BayerUpdateGamma(float fGammaCorr)
-+{
-+}
++void BayerUpdateGamma(float fGammaCorr)
++{
++}
  //---------------------------------------------------------------------------
 -XnUInt8 Gamma[256] = {
 -	0,      1,     2,     3,     4,     5,     6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
@@ -103,310 +103,310 @@ index 43666ad..940e5b6 100644
 -	208,   209,   210,   211,   212,   213,   214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
 -	224,   225,   226,   227,   228,   229,   230,   231,   232,   233,   234,   235,   236,   237,   238,   239,
 -	240,   241,   242,   243,   244,   245,   246,   247,   248,   249,   250,   251,   252,   253,   254,   255};
-+void fillRGB(unsigned width, unsigned height, const XnUInt8* bayer_pixel, unsigned char* rgb_buffer, DebayeringMethod debayering_method, XnUInt32 nDownSampleStep)
-+{
++void fillRGB(unsigned width, unsigned height, const XnUInt8* bayer_pixel, unsigned char* rgb_buffer, DebayeringMethod debayering_method, XnUInt32 nDownSampleStep)
++{
  
-+	unsigned rgb_line_step = width * 3;
++	unsigned rgb_line_step = width * 3;
  //---------------------------------------------------------------------------
  // Code
-+	unsigned rgb_line_skip = rgb_line_step - width * 3;
++	unsigned rgb_line_skip = rgb_line_step - width * 3;
  //---------------------------------------------------------------------------
 -void BayerUpdateGamma(float fGammaCorr)
-+	if (nDownSampleStep == 1)
++	if (nDownSampleStep == 1)
  {
 -	for(XnUInt32 iG = 0; iG < 256;++iG)
 -		Gamma[iG] = XnUInt8(255*pow(XnDouble(iG)/255.0,(XnDouble)fGammaCorr) + 0.5);
-+		//register const XnUInt8 *bayer_pixel = image_md_->Data ();
-+		register unsigned yIdx, xIdx;
-+		
-+		int bayer_line_step = width;
-+		int bayer_line_step2 = width << 1;
-+		
-+		if (debayering_method == Bilinear)
-+		{
-+			// first two pixel values for first two lines
-+			// Bayer         0 1 2
-+			//         0     G r g
-+			// line_step     b g b
-+			// line_step2    g r g
-+			
-+			rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
-+			rgb_buffer[1] = bayer_pixel[0]; // green pixel
-+			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
-+			
-+			// Bayer         0 1 2
-+			//         0     g R g
-+			// line_step     b g b
-+			// line_step2    g r g
-+			//rgb_pixel[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
-+			rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+			
-+			// BGBG line
-+			// Bayer         0 1 2
-+			//         0     g r g
-+			// line_step     B g b
-+			// line_step2    g r g
-+			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
-+			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
-+			
-+			// pixel (1, 1)  0 1 2
-+			//         0     g r g
-+			// line_step     b G b
-+			// line_step2    g r g
-+			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
-+			
-+			rgb_buffer += 6;
-+			bayer_pixel += 2;
-+			// rest of the first two lines
-+			
-+			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
-+			{
-+				// GRGR line
-+				// Bayer        -1 0 1 2
-+				//           0   r G r g
-+				//   line_step   g b g b
-+				// line_step2    r g r g
-+				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+				rgb_buffer[1] = bayer_pixel[0];
-+				rgb_buffer[2] = bayer_pixel[bayer_line_step + 1];
-+				
-+				// Bayer        -1 0 1 2
-+				//          0    r g R g
-+				//  line_step    g b g b
-+				// line_step2    r g r g
-+				rgb_buffer[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
-+				rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+				
-+				// BGBG line
-+				// Bayer         -1 0 1 2
-+				//         0      r g r g
-+				// line_step      g B g b
-+				// line_step2     r g r g
-+				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+				
-+				// Bayer         -1 0 1 2
-+				//         0      r g r g
-+				// line_step      g b G b
-+				// line_step2     r g r g
-+				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
++		//register const XnUInt8 *bayer_pixel = image_md_->Data ();
++		register unsigned yIdx, xIdx;
++		
++		int bayer_line_step = width;
++		int bayer_line_step2 = width << 1;
++		
++		if (debayering_method == Bilinear)
++		{
++			// first two pixel values for first two lines
++			// Bayer         0 1 2
++			//         0     G r g
++			// line_step     b g b
++			// line_step2    g r g
++			
++			rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
++			rgb_buffer[1] = bayer_pixel[0]; // green pixel
++			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
++			
++			// Bayer         0 1 2
++			//         0     g R g
++			// line_step     b g b
++			// line_step2    g r g
++			//rgb_pixel[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
++			rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++			
++			// BGBG line
++			// Bayer         0 1 2
++			//         0     g r g
++			// line_step     B g b
++			// line_step2    g r g
++			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
++			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
++			
++			// pixel (1, 1)  0 1 2
++			//         0     g r g
++			// line_step     b G b
++			// line_step2    g r g
++			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
++			
++			rgb_buffer += 6;
++			bayer_pixel += 2;
++			// rest of the first two lines
++			
++			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
++			{
++				// GRGR line
++				// Bayer        -1 0 1 2
++				//           0   r G r g
++				//   line_step   g b g b
++				// line_step2    r g r g
++				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++				rgb_buffer[1] = bayer_pixel[0];
++				rgb_buffer[2] = bayer_pixel[bayer_line_step + 1];
++				
++				// Bayer        -1 0 1 2
++				//          0    r g R g
++				//  line_step    g b g b
++				// line_step2    r g r g
++				rgb_buffer[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
++				rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++				
++				// BGBG line
++				// Bayer         -1 0 1 2
++				//         0      r g r g
++				// line_step      g B g b
++				// line_step2     r g r g
++				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++				
++				// Bayer         -1 0 1 2
++				//         0      r g r g
++				// line_step      g b G b
++				// line_step2     r g r g
++				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
  }
  
 -static inline void WriteRGB(XnUInt8 *pBuffer, XnUInt8 nRed, XnUInt8 nGreen, XnUInt8 nBlue)
-+			// last two pixel values for first two lines
-+			// GRGR line
-+			// Bayer        -1 0 1
-+			//           0   r G r
-+			//   line_step   g b g
-+			// line_step2    r g r
-+			rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+			rgb_buffer[1] = bayer_pixel[0];
-+			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
-+			
-+			// Bayer        -1 0 1
-+			//          0    r g R
-+			//  line_step    g b g
-+			// line_step2    r g r
-+			rgb_buffer[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
-+			//rgb_pixel[5] = bayer_pixel[line_step];
-+			
-+			// BGBG line
-+			// Bayer        -1 0 1
-+			//          0    r g r
-+			//  line_step    g B g
-+			// line_step2    r g r
-+			rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+			rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
-+			
-+			// Bayer         -1 0 1
-+			//         0      r g r
-+			// line_step      g b G
-+			// line_step2     r g r
-+			rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
-+			
-+			bayer_pixel += bayer_line_step + 2;
-+			rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
-+			
-+			// main processing
-+			
-+			for (yIdx = 2; yIdx < height - 2; yIdx += 2)
++			// last two pixel values for first two lines
++			// GRGR line
++			// Bayer        -1 0 1
++			//           0   r G r
++			//   line_step   g b g
++			// line_step2    r g r
++			rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++			rgb_buffer[1] = bayer_pixel[0];
++			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
++			
++			// Bayer        -1 0 1
++			//          0    r g R
++			//  line_step    g b g
++			// line_step2    r g r
++			rgb_buffer[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
++			//rgb_pixel[5] = bayer_pixel[line_step];
++			
++			// BGBG line
++			// Bayer        -1 0 1
++			//          0    r g r
++			//  line_step    g B g
++			// line_step2    r g r
++			rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++			rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
++			
++			// Bayer         -1 0 1
++			//         0      r g r
++			// line_step      g b G
++			// line_step2     r g r
++			rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
++			
++			bayer_pixel += bayer_line_step + 2;
++			rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
++			
++			// main processing
++			
++			for (yIdx = 2; yIdx < height - 2; yIdx += 2)
  {
 -	pBuffer[BAYER_RED] = Gamma[nRed];
 -	pBuffer[BAYER_GREEN] = Gamma[nGreen];
 -	pBuffer[BAYER_BLUE] = Gamma[nBlue];
-+				// first two pixel values
-+				// Bayer         0 1 2
-+				//        -1     b g b
-+				//         0     G r g
-+				// line_step     b g b
-+				// line_step2    g r g
-+				
-+				rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
-+				rgb_buffer[1] = bayer_pixel[0]; // green pixel
-+				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]); // blue;
-+				
-+				// Bayer         0 1 2
-+				//        -1     b g b
-+				//         0     g R g
-+				// line_step     b g b
-+				// line_step2    g r g
-+				//rgb_pixel[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
-+				
-+				// BGBG line
-+				// Bayer         0 1 2
-+				//         0     g r g
-+				// line_step     B g b
-+				// line_step2    g r g
-+				rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
-+				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+				
-+				// pixel (1, 1)  0 1 2
-+				//         0     g r g
-+				// line_step     b G b
-+				// line_step2    g r g
-+				//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+				
-+				rgb_buffer += 6;
-+				bayer_pixel += 2;
-+				// continue with rest of the line
-+				for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
-+				{
-+					// GRGR line
-+					// Bayer        -1 0 1 2
-+					//          -1   g b g b
-+					//           0   r G r g
-+					//   line_step   g b g b
-+					// line_step2    r g r g
-+					rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+					rgb_buffer[1] = bayer_pixel[0];
-+					rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
-+					
-+					// Bayer        -1 0 1 2
-+					//          -1   g b g b
-+					//          0    r g R g
-+					//  line_step    g b g b
-+					// line_step2    r g r g
-+					rgb_buffer[3] = bayer_pixel[1];
-+					rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+					rgb_buffer[5] = AVG4 (bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step], bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+					
-+					// BGBG line
-+					// Bayer         -1 0 1 2
-+					//         -1     g b g b
-+					//          0     r g r g
-+					// line_step      g B g b
-+					// line_step2     r g r g
-+					rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+					rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+					rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+					
-+					// Bayer         -1 0 1 2
-+					//         -1     g b g b
-+					//          0     r g r g
-+					// line_step      g b G b
-+					// line_step2     r g r g
-+					rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+					rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+					rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++				// first two pixel values
++				// Bayer         0 1 2
++				//        -1     b g b
++				//         0     G r g
++				// line_step     b g b
++				// line_step2    g r g
++				
++				rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
++				rgb_buffer[1] = bayer_pixel[0]; // green pixel
++				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]); // blue;
++				
++				// Bayer         0 1 2
++				//        -1     b g b
++				//         0     g R g
++				// line_step     b g b
++				// line_step2    g r g
++				//rgb_pixel[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
++				
++				// BGBG line
++				// Bayer         0 1 2
++				//         0     g r g
++				// line_step     B g b
++				// line_step2    g r g
++				rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
++				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++				
++				// pixel (1, 1)  0 1 2
++				//         0     g r g
++				// line_step     b G b
++				// line_step2    g r g
++				//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++				
++				rgb_buffer += 6;
++				bayer_pixel += 2;
++				// continue with rest of the line
++				for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
++				{
++					// GRGR line
++					// Bayer        -1 0 1 2
++					//          -1   g b g b
++					//           0   r G r g
++					//   line_step   g b g b
++					// line_step2    r g r g
++					rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++					rgb_buffer[1] = bayer_pixel[0];
++					rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
++					
++					// Bayer        -1 0 1 2
++					//          -1   g b g b
++					//          0    r g R g
++					//  line_step    g b g b
++					// line_step2    r g r g
++					rgb_buffer[3] = bayer_pixel[1];
++					rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++					rgb_buffer[5] = AVG4 (bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step], bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++					
++					// BGBG line
++					// Bayer         -1 0 1 2
++					//         -1     g b g b
++					//          0     r g r g
++					// line_step      g B g b
++					// line_step2     r g r g
++					rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++					rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++					rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++					
++					// Bayer         -1 0 1 2
++					//         -1     g b g b
++					//          0     r g r g
++					// line_step      g b G b
++					// line_step2     r g r g
++					rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++					rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++					rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
  }
  
 -void Bayer2RGB888(const XnUInt8* pBayerImage, XnUInt8* pRGBImage, XnUInt32 nXRes, XnUInt32 nYRes, XnUInt32 /*nDownSampleStep*/, XnUInt32 nBadPixels)
-+				// last two pixels of the line
-+				// last two pixel values for first two lines
-+				// GRGR line
-+				// Bayer        -1 0 1
-+				//           0   r G r
-+				//   line_step   g b g
-+				// line_step2    r g r
-+				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+				rgb_buffer[1] = bayer_pixel[0];
-+				rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
-+				
-+				// Bayer        -1 0 1
-+				//          0    r g R
-+				//  line_step    g b g
-+				// line_step2    r g r
-+				rgb_buffer[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
-+				//rgb_pixel[5] = bayer_pixel[line_step];
-+				
-+				// BGBG line
-+				// Bayer        -1 0 1
-+				//          0    r g r
-+				//  line_step    g B g
-+				// line_step2    r g r
-+				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+				//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
-+				
-+				// Bayer         -1 0 1
-+				//         0      r g r
-+				// line_step      g b G
-+				// line_step2     r g r
-+				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
-+				
-+				bayer_pixel += bayer_line_step + 2;
-+				rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
-+			}
-+			
-+			//last two lines
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     G r g
-+			// line_step     b g b
-+			
-+			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
-+			rgb_buffer[1] = bayer_pixel[0]; // green pixel
-+			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
-+			
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     g R g
-+			// line_step     b g b
-+			//rgb_pixel[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+			rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
-+			
-+			// BGBG line
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     g r g
-+			// line_step     B g b
-+			//rgb_pixel[rgb_line_step    ] = bayer_pixel[1];
-+			rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
-+			rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+			
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     g r g
-+			// line_step     b G b
-+			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+			
-+			rgb_buffer += 6;
-+			bayer_pixel += 2;
-+			// rest of the last two lines
-+			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
++				// last two pixels of the line
++				// last two pixel values for first two lines
++				// GRGR line
++				// Bayer        -1 0 1
++				//           0   r G r
++				//   line_step   g b g
++				// line_step2    r g r
++				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++				rgb_buffer[1] = bayer_pixel[0];
++				rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
++				
++				// Bayer        -1 0 1
++				//          0    r g R
++				//  line_step    g b g
++				// line_step2    r g r
++				rgb_buffer[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
++				//rgb_pixel[5] = bayer_pixel[line_step];
++				
++				// BGBG line
++				// Bayer        -1 0 1
++				//          0    r g r
++				//  line_step    g B g
++				// line_step2    r g r
++				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++				//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
++				
++				// Bayer         -1 0 1
++				//         0      r g r
++				// line_step      g b G
++				// line_step2     r g r
++				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
++				
++				bayer_pixel += bayer_line_step + 2;
++				rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
++			}
++			
++			//last two lines
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     G r g
++			// line_step     b g b
++			
++			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
++			rgb_buffer[1] = bayer_pixel[0]; // green pixel
++			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
++			
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     g R g
++			// line_step     b g b
++			//rgb_pixel[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++			rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
++			
++			// BGBG line
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     g r g
++			// line_step     B g b
++			//rgb_pixel[rgb_line_step    ] = bayer_pixel[1];
++			rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
++			rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++			
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     g r g
++			// line_step     b G b
++			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++			
++			rgb_buffer += 6;
++			bayer_pixel += 2;
++			// rest of the last two lines
++			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
  {
 -	XnUInt8 nRed;
 -	XnUInt8 nGreen;
@@ -418,11 +418,11 @@ index 43666ad..940e5b6 100644
  	//{
  		//nBadPixels = 1;
  	//}
-+				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+				rgb_buffer[1] = bayer_pixel[0];
-+				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
-+
-+
++				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++				rgb_buffer[1] = bayer_pixel[0];
++				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
++
++
  
 -	XnInt32 BAYER_LINE_LENGTH = nXRes;
 -	XnInt32 BAYER_LINE_LENGTH2 = BAYER_LINE_LENGTH*2;
@@ -437,9 +437,9 @@ index 43666ad..940e5b6 100644
  
 -	pBayer = pBayerImage + BAYER_LINE_LENGTH - nBadPixels;
 -	pRGB = pRGBImage + BAYER_RGB_LINE_LENGTH;
-+				rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[-bayer_line_step + 2]);
++				rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[-bayer_line_step + 2]);
  
 -	do {
 -		pCurrBayer = pBayer+ 1;
@@ -460,814 +460,814 @@ index 43666ad..940e5b6 100644
 -			nGreen = ((XnUInt32)pCurrBayer[BAYER_LINE_LENGTH-1]+pCurrBayer[BAYER_LINE_LENGTH+1]) / 2;
 -			nBlue  = ((XnUInt32)pCurrBayer[BAYER_LINE_LENGTH2-1]+pCurrBayer[BAYER_LINE_LENGTH2+1]) / 2;
 -			WriteRGB(pCurrRGB+BAYER_RGB_LINE_LENGTH, pCurrBayer[BAYER_LINE_LENGTH], nGreen, nBlue);
-+				rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[-1], bayer_pixel[1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+
-+				
-+				// Bayer       -1 0 1 2
-+				//        -1    g b g b
-+				//         0    r g r g
-+				// line_step    g b G b
-+				//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+}
-+			
-+			// last two pixel values for first two lines
-+			// GRGR line
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r G r
-+			// line_step    g b g
-+			rgb_buffer[rgb_line_step ] = rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+			rgb_buffer[1] = bayer_pixel[0];
-+			rgb_buffer[5] = rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
-+			
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r g R
-+			// line_step    g b g
-+			rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[-bayer_line_step + 1]);
-+			//rgb_pixel[5] = AVG( bayer_pixel[line_step], bayer_pixel[-line_step] );
-+			
-+			// BGBG line
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r g r
-+			// line_step    g B g
-+			//rgb_pixel[rgb_line_step    ] = AVG2( bayer_pixel[-1], bayer_pixel[1] );
-+			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+			
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r g r
-+			// line_step    g b G
-+			//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
-+		}
-+		else if (debayering_method == EdgeAware)
-+		{
-+			int dh, dv;
-+			
-+			// first two pixel values for first two lines
-+			// Bayer         0 1 2
-+			//         0     G r g
-+			// line_step     b g b
-+			// line_step2    g r g
-+			
-+			rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
-+			rgb_buffer[1] = bayer_pixel[0]; // green pixel
-+			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
-+			
-+			// Bayer         0 1 2
-+			//         0     g R g
-+			// line_step     b g b
-+			// line_step2    g r g
-+			//rgb_pixel[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
-+			rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+			
-+			// BGBG line
-+			// Bayer         0 1 2
-+			//         0     g r g
-+			// line_step     B g b
-+			// line_step2    g r g
-+			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
-+			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
-+			
-+			// pixel (1, 1)  0 1 2
-+			//         0     g r g
-+			// line_step     b G b
-+			// line_step2    g r g
-+			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
-+			
-+			rgb_buffer += 6;
-+			bayer_pixel += 2;
-+			// rest of the first two lines
-+			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
-+			{
-+				// GRGR line
-+				// Bayer        -1 0 1 2
-+				//           0   r G r g
-+				//   line_step   g b g b
-+				// line_step2    r g r g
-+				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+				rgb_buffer[1] = bayer_pixel[0];
-+				rgb_buffer[2] = bayer_pixel[bayer_line_step + 1];
-+				
-+				// Bayer        -1 0 1 2
-+				//          0    r g R g
-+				//  line_step    g b g b
-+				// line_step2    r g r g
-+				rgb_buffer[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
-+				rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+				
-+				// BGBG line
-+				// Bayer         -1 0 1 2
-+				//         0      r g r g
-+				// line_step      g B g b
-+				// line_step2     r g r g
-+				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+				
-+				// Bayer         -1 0 1 2
-+				//         0      r g r g
-+				// line_step      g b G b
-+				// line_step2     r g r g
-+				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
-+			}
-+			
-+			// last two pixel values for first two lines
-+			// GRGR line
-+			// Bayer        -1 0 1
-+			//           0   r G r
-+			//   line_step   g b g
-+			// line_step2    r g r
-+			rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+			rgb_buffer[1] = bayer_pixel[0];
-+			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
-+			
-+			// Bayer        -1 0 1
-+			//          0    r g R
-+			//  line_step    g b g
-+			// line_step2    r g r
-+			rgb_buffer[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
-+			//rgb_pixel[5] = bayer_pixel[line_step];
-+			
-+			// BGBG line
-+			// Bayer        -1 0 1
-+			//          0    r g r
-+			//  line_step    g B g
-+			// line_step2    r g r
-+			rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+			rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
-+			
-+			// Bayer         -1 0 1
-+			//         0      r g r
-+			// line_step      g b G
-+			// line_step2     r g r
-+			rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
-+			
-+			bayer_pixel += bayer_line_step + 2;
-+			rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
-+			// main processing
-+			for (yIdx = 2; yIdx < height - 2; yIdx += 2)
-+			{
-+				// first two pixel values
-+				// Bayer         0 1 2
-+				//        -1     b g b
-+				//         0     G r g
-+				// line_step     b g b
-+				// line_step2    g r g
-+				
-+				rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
-+				rgb_buffer[1] = bayer_pixel[0]; // green pixel
-+				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]); // blue;
-+				
-+				// Bayer         0 1 2
-+				//        -1     b g b
-+				//         0     g R g
-+				// line_step     b g b
-+				// line_step2    g r g
-+				//rgb_pixel[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
-+				
-+				// BGBG line
-+				// Bayer         0 1 2
-+				//         0     g r g
-+				// line_step     B g b
-+				// line_step2    g r g
-+				rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
-+				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+				
-+				// pixel (1, 1)  0 1 2
-+				//         0     g r g
-+				// line_step     b G b
-+				// line_step2    g r g
-+				//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+				
-+				rgb_buffer += 6;
-+				bayer_pixel += 2;
-+				// continue with rest of the line
-+				for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
-+				{
-+					// GRGR line
-+					// Bayer        -1 0 1 2
-+					//          -1   g b g b
-+					//           0   r G r g
-+					//   line_step   g b g b
-+					// line_step2    r g r g
-+					rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+					rgb_buffer[1] = bayer_pixel[0];
-+					rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
-+					
-+					// Bayer        -1 0 1 2
-+					//          -1   g b g b
-+					//          0    r g R g
-+					//  line_step    g b g b
-+					// line_step2    r g r g
-+					
-+					dh = abs (bayer_pixel[0] - bayer_pixel[2]);
-+					dv = abs (bayer_pixel[-bayer_line_step + 1] - bayer_pixel[bayer_line_step + 1]);
-+					
-+					if (dh > dv)
-+						rgb_buffer[4] = AVG (bayer_pixel[-bayer_line_step + 1], bayer_pixel[bayer_line_step + 1]);
-+					else if (dv > dh)
-+						rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[2]);
-+					else
-+						rgb_buffer[4] = AVG4 (bayer_pixel[-bayer_line_step + 1], bayer_pixel[bayer_line_step + 1], bayer_pixel[0], bayer_pixel[2]);
-+					
-+					rgb_buffer[3] = bayer_pixel[1];
-+					rgb_buffer[5] = AVG4 (bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step], bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+					
-+					// BGBG line
-+					// Bayer         -1 0 1 2
-+					//         -1     g b g b
-+					//          0     r g r g
-+					// line_step      g B g b
-+					// line_step2     r g r g
-+					rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+					rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+					
-+					dv = abs (bayer_pixel[0] - bayer_pixel[bayer_line_step2]);
-+					dh = abs (bayer_pixel[bayer_line_step - 1] - bayer_pixel[bayer_line_step + 1]);
-+					
-+					if (dv > dh)
-+						rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+					else if (dh > dv)
-+						rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step2]);
-+					else
-+						rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+					
-+					// Bayer         -1 0 1 2
-+					//         -1     g b g b
-+					//          0     r g r g
-+					// line_step      g b G b
-+					// line_step2     r g r g
-+					rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+					rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+					rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+				}
-+				
-+				// last two pixels of the line
-+				// last two pixel values for first two lines
-+				// GRGR line
-+				// Bayer        -1 0 1
-+				//           0   r G r
-+				//   line_step   g b g
-+				// line_step2    r g r
-+				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+				rgb_buffer[1] = bayer_pixel[0];
-+				rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
-+				
-+				// Bayer        -1 0 1
-+				//          0    r g R
-+				//  line_step    g b g
-+				// line_step2    r g r
-+				rgb_buffer[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
-+				//rgb_pixel[5] = bayer_pixel[line_step];
-+				
-+				// BGBG line
-+				// Bayer        -1 0 1
-+				//          0    r g r
-+				//  line_step    g B g
-+				// line_step2    r g r
-+				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+				//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
-+				
-+				// Bayer         -1 0 1
-+				//         0      r g r
-+				// line_step      g b G
-+				// line_step2     r g r
-+				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
-+				
-+				bayer_pixel += bayer_line_step + 2;
-+				rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
-+			}
-+			
-+			//last two lines
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     G r g
-+			// line_step     b g b
-+			
-+			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
-+			rgb_buffer[1] = bayer_pixel[0]; // green pixel
-+			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
-+			
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     g R g
-+			// line_step     b g b
-+			//rgb_pixel[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+			rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
-+			
-+			// BGBG line
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     g r g
-+			// line_step     B g b
-+			//rgb_pixel[rgb_line_step    ] = bayer_pixel[1];
-+			rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
-+			rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+			
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     g r g
-+			// line_step     b G b
-+			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+			
-+			rgb_buffer += 6;
-+			bayer_pixel += 2;
-+			// rest of the last two lines
-+			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
-+			{
-+				// GRGR line
-+				// Bayer       -1 0 1 2
-+				//        -1    g b g b
-+				//         0    r G r g
-+				// line_step    g b g b
-+				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+				rgb_buffer[1] = bayer_pixel[0];
-+				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
-+				
-+				// Bayer       -1 0 1 2
-+				//        -1    g b g b
-+				//         0    r g R g
-+				// line_step    g b g b
-+				rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[-bayer_line_step + 2]);
-+				
-+				// BGBG line
-+				// Bayer       -1 0 1 2
-+				//        -1    g b g b
-+				//         0    r g r g
-+				// line_step    g B g b
-+				rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[-1], bayer_pixel[1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+				
-+				
-+				// Bayer       -1 0 1 2
-+				//        -1    g b g b
-+				//         0    r g r g
-+				// line_step    g b G b
-+				//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+			}
-+			
-+			// last two pixel values for first two lines
-+			// GRGR line
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r G r
-+			// line_step    g b g
-+			rgb_buffer[rgb_line_step ] = rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+			rgb_buffer[1] = bayer_pixel[0];
-+			rgb_buffer[5] = rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
-+			
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r g R
-+			// line_step    g b g
-+			rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[-bayer_line_step + 1]);
-+			//rgb_pixel[5] = AVG( bayer_pixel[line_step], bayer_pixel[-line_step] );
-+			
-+			// BGBG line
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r g r
-+			// line_step    g B g
-+			//rgb_pixel[rgb_line_step    ] = AVG2( bayer_pixel[-1], bayer_pixel[1] );
-+			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+			
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r g r
-+			// line_step    g b G
-+			//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
-+		}
-+		else if (debayering_method == EdgeAwareWeighted)
-+		{
-+			int dh, dv;
-+			
-+			// first two pixel values for first two lines
-+			// Bayer         0 1 2
-+			//         0     G r g
-+			// line_step     b g b
-+			// line_step2    g r g
-+			
-+			rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
-+			rgb_buffer[1] = bayer_pixel[0]; // green pixel
-+			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
-+			
-+			// Bayer         0 1 2
-+			//         0     g R g
-+			// line_step     b g b
-+			// line_step2    g r g
-+			//rgb_pixel[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
-+			rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+			
-+			// BGBG line
-+			// Bayer         0 1 2
-+			//         0     g r g
-+			// line_step     B g b
-+			// line_step2    g r g
-+			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
-+			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
-+			
-+			// pixel (1, 1)  0 1 2
-+			//         0     g r g
-+			// line_step     b G b
-+			// line_step2    g r g
-+			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
-+			
-+			rgb_buffer += 6;
-+			bayer_pixel += 2;
-+			// rest of the first two lines
-+			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
-+			{
-+				// GRGR line
-+				// Bayer        -1 0 1 2
-+				//           0   r G r g
-+				//   line_step   g b g b
-+				// line_step2    r g r g
-+				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+				rgb_buffer[1] = bayer_pixel[0];
-+				rgb_buffer[2] = bayer_pixel[bayer_line_step + 1];
-+				
-+				// Bayer        -1 0 1 2
-+				//          0    r g R g
-+				//  line_step    g b g b
-+				// line_step2    r g r g
-+				rgb_buffer[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
-+				rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+				
-+				// BGBG line
-+				// Bayer         -1 0 1 2
-+				//         0      r g r g
-+				// line_step      g B g b
-+				// line_step2     r g r g
-+				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+				
-+				// Bayer         -1 0 1 2
-+				//         0      r g r g
-+				// line_step      g b G b
-+				// line_step2     r g r g
-+				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
-+			}
-+			
-+			// last two pixel values for first two lines
-+			// GRGR line
-+			// Bayer        -1 0 1
-+			//           0   r G r
-+			//   line_step   g b g
-+			// line_step2    r g r
-+			rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+			rgb_buffer[1] = bayer_pixel[0];
-+			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
-+			
-+			// Bayer        -1 0 1
-+			//          0    r g R
-+			//  line_step    g b g
-+			// line_step2    r g r
-+			rgb_buffer[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
-+			//rgb_pixel[5] = bayer_pixel[line_step];
-+			
-+			// BGBG line
-+			// Bayer        -1 0 1
-+			//          0    r g r
-+			//  line_step    g B g
-+			// line_step2    r g r
-+			rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+			rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
-+			
-+			// Bayer         -1 0 1
-+			//         0      r g r
-+			// line_step      g b G
-+			// line_step2     r g r
-+			rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
-+			
-+			bayer_pixel += bayer_line_step + 2;
-+			rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
-+			// main processing
-+			for (yIdx = 2; yIdx < height - 2; yIdx += 2)
-+			{
-+				// first two pixel values
-+				// Bayer         0 1 2
-+				//        -1     b g b
-+				//         0     G r g
-+				// line_step     b g b
-+				// line_step2    g r g
-+				
-+				rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
-+				rgb_buffer[1] = bayer_pixel[0]; // green pixel
-+				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]); // blue;
-+				
-+				// Bayer         0 1 2
-+				//        -1     b g b
-+				//         0     g R g
-+				// line_step     b g b
-+				// line_step2    g r g
-+				//rgb_pixel[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
-+				
-+				// BGBG line
-+				// Bayer         0 1 2
-+				//         0     g r g
-+				// line_step     B g b
-+				// line_step2    g r g
-+				rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
-+				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+				
-+				// pixel (1, 1)  0 1 2
-+				//         0     g r g
-+				// line_step     b G b
-+				// line_step2    g r g
-+				//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+				
-+				rgb_buffer += 6;
-+				bayer_pixel += 2;
-+				// continue with rest of the line
-+				for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
-+				{
-+					// GRGR line
-+					// Bayer        -1 0 1 2
-+					//          -1   g b g b
-+					//           0   r G r g
-+					//   line_step   g b g b
-+					// line_step2    r g r g
-+					rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+					rgb_buffer[1] = bayer_pixel[0];
-+					rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
-+					
-+					// Bayer        -1 0 1 2
-+					//          -1   g b g b
-+					//          0    r g R g
-+					//  line_step    g b g b
-+					// line_step2    r g r g
-+					
-+					dh = abs (bayer_pixel[0] - bayer_pixel[2]);
-+					dv = abs (bayer_pixel[-bayer_line_step + 1] - bayer_pixel[bayer_line_step + 1]);
-+					
-+					if (dv == 0 && dh == 0)
-+						rgb_buffer[4] = AVG4 (bayer_pixel[1 - bayer_line_step], bayer_pixel[1 + bayer_line_step], bayer_pixel[0], bayer_pixel[2]);
-+					else
-+						rgb_buffer[4] = WAVG4 (bayer_pixel[1 - bayer_line_step], bayer_pixel[1 + bayer_line_step], bayer_pixel[0], bayer_pixel[2], dh, dv);
-+					rgb_buffer[3] = bayer_pixel[1];
-+					rgb_buffer[5] = AVG4 (bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step], bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+					
-+					// BGBG line
-+					// Bayer         -1 0 1 2
-+					//         -1     g b g b
-+					//          0     r g r g
-+					// line_step      g B g b
-+					// line_step2     r g r g
-+					rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+					rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+					
-+					dv = abs (bayer_pixel[0] - bayer_pixel[bayer_line_step2]);
-+					dh = abs (bayer_pixel[bayer_line_step - 1] - bayer_pixel[bayer_line_step + 1]);
-+					
-+					if (dv == 0 && dh == 0)
-+						rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+					else
-+						rgb_buffer[rgb_line_step + 1] = WAVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1], dh, dv);
-+					
-+					// Bayer         -1 0 1 2
-+					//         -1     g b g b
-+					//          0     r g r g
-+					// line_step      g b G b
-+					// line_step2     r g r g
-+					rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+					rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+					rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+				}
-+				
-+				// last two pixels of the line
-+				// last two pixel values for first two lines
-+				// GRGR line
-+				// Bayer        -1 0 1
-+				//           0   r G r
-+				//   line_step   g b g
-+				// line_step2    r g r
-+				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+				rgb_buffer[1] = bayer_pixel[0];
-+				rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
-+				
-+				// Bayer        -1 0 1
-+				//          0    r g R
-+				//  line_step    g b g
-+				// line_step2    r g r
-+				rgb_buffer[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
-+				//rgb_pixel[5] = bayer_pixel[line_step];
-+				
-+				// BGBG line
-+				// Bayer        -1 0 1
-+				//          0    r g r
-+				//  line_step    g B g
-+				// line_step2    r g r
-+				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+				//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
-+				
-+				// Bayer         -1 0 1
-+				//         0      r g r
-+				// line_step      g b G
-+				// line_step2     r g r
-+				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
-+				
-+				bayer_pixel += bayer_line_step + 2;
-+				rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
-+			}
-+			
-+			//last two lines
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     G r g
-+			// line_step     b g b
-+			
-+			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
-+			rgb_buffer[1] = bayer_pixel[0]; // green pixel
-+			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
-+			
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     g R g
-+			// line_step     b g b
-+			//rgb_pixel[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+			rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
-+			
-+			// BGBG line
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     g r g
-+			// line_step     B g b
-+			//rgb_pixel[rgb_line_step    ] = bayer_pixel[1];
-+			rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
-+			rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+			
-+			// Bayer         0 1 2
-+			//        -1     b g b
-+			//         0     g r g
-+			// line_step     b G b
-+			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+			
-+			rgb_buffer += 6;
-+			bayer_pixel += 2;
-+			// rest of the last two lines
-+			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
-+			{
-+				// GRGR line
-+				// Bayer       -1 0 1 2
-+				//        -1    g b g b
-+				//         0    r G r g
-+				// line_step    g b g b
-+				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+				rgb_buffer[1] = bayer_pixel[0];
-+				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
-+				
-+				// Bayer       -1 0 1 2
-+				//        -1    g b g b
-+				//         0    r g R g
-+				// line_step    g b g b
-+				rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
-+				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
-+				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[-bayer_line_step + 2]);
-+				
-+				// BGBG line
-+				// Bayer       -1 0 1 2
-+				//        -1    g b g b
-+				//         0    r g r g
-+				// line_step    g B g b
-+				rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[-1], bayer_pixel[1]);
-+				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+				
-+				
-+				// Bayer       -1 0 1 2
-+				//        -1    g b g b
-+				//         0    r g r g
-+				// line_step    g b G b
-+				//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
-+				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
-+			}
-+			
-+			// last two pixel values for first two lines
-+			// GRGR line
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r G r
-+			// line_step    g b g
-+			rgb_buffer[rgb_line_step ] = rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
-+			rgb_buffer[1] = bayer_pixel[0];
-+			rgb_buffer[5] = rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
-+			
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r g R
-+			// line_step    g b g
-+			rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
-+			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[-bayer_line_step + 1]);
-+			//rgb_pixel[5] = AVG( bayer_pixel[line_step], bayer_pixel[-line_step] );
-+			
-+			// BGBG line
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r g r
-+			// line_step    g B g
-+			//rgb_pixel[rgb_line_step    ] = AVG2( bayer_pixel[-1], bayer_pixel[1] );
-+			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
-+			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
-+			
-+			// Bayer       -1 0 1
-+			//        -1    g b g
-+			//         0    r g r
-+			// line_step    g b G
-+			//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
-+			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
-+			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
-+		}
-+		//else
-+		//	THROW_OPENNI_EXCEPTION ("Unknwon debayering method: %d", (int)debayering_method);
-+	}
-+	//Warning: Downsampling mod is untested
-+	else if (nDownSampleStep > 1)
-+	{		
-+		// get each or each 2nd pixel group to find rgb values!
-+		register unsigned bayerXStep = nDownSampleStep;
-+		register unsigned bayerYSkip = (nDownSampleStep - 1) * width;
-+		
-+		// Downsampling and debayering at once
-+		register const XnUInt8* bayer_buffer = bayer_pixel;
-+		
-+		for (register unsigned yIdx = 0; yIdx < height; ++yIdx, bayer_buffer += bayerYSkip, rgb_buffer += rgb_line_skip) // skip a line
-+		{
-+			for (register unsigned xIdx = 0; xIdx < width; ++xIdx, rgb_buffer += 3, bayer_buffer += bayerXStep)
-+			{
-+				rgb_buffer[ 2 ] = bayer_buffer[ width ];
-+				rgb_buffer[ 1 ] = AVG (bayer_buffer[0], bayer_buffer[ width + 1]);
-+				rgb_buffer[ 0 ] = bayer_buffer[ 1 ];
-+			}
-+		}
-+	}
-+}
++				rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[-1], bayer_pixel[1]);
++				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++
++				
++				// Bayer       -1 0 1 2
++				//        -1    g b g b
++				//         0    r g r g
++				// line_step    g b G b
++				//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++}
++			
++			// last two pixel values for first two lines
++			// GRGR line
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r G r
++			// line_step    g b g
++			rgb_buffer[rgb_line_step ] = rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++			rgb_buffer[1] = bayer_pixel[0];
++			rgb_buffer[5] = rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
++			
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r g R
++			// line_step    g b g
++			rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[-bayer_line_step + 1]);
++			//rgb_pixel[5] = AVG( bayer_pixel[line_step], bayer_pixel[-line_step] );
++			
++			// BGBG line
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r g r
++			// line_step    g B g
++			//rgb_pixel[rgb_line_step    ] = AVG2( bayer_pixel[-1], bayer_pixel[1] );
++			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++			
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r g r
++			// line_step    g b G
++			//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
++		}
++		else if (debayering_method == EdgeAware)
++		{
++			int dh, dv;
++			
++			// first two pixel values for first two lines
++			// Bayer         0 1 2
++			//         0     G r g
++			// line_step     b g b
++			// line_step2    g r g
++			
++			rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
++			rgb_buffer[1] = bayer_pixel[0]; // green pixel
++			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
++			
++			// Bayer         0 1 2
++			//         0     g R g
++			// line_step     b g b
++			// line_step2    g r g
++			//rgb_pixel[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
++			rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++			
++			// BGBG line
++			// Bayer         0 1 2
++			//         0     g r g
++			// line_step     B g b
++			// line_step2    g r g
++			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
++			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
++			
++			// pixel (1, 1)  0 1 2
++			//         0     g r g
++			// line_step     b G b
++			// line_step2    g r g
++			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
++			
++			rgb_buffer += 6;
++			bayer_pixel += 2;
++			// rest of the first two lines
++			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
++			{
++				// GRGR line
++				// Bayer        -1 0 1 2
++				//           0   r G r g
++				//   line_step   g b g b
++				// line_step2    r g r g
++				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++				rgb_buffer[1] = bayer_pixel[0];
++				rgb_buffer[2] = bayer_pixel[bayer_line_step + 1];
++				
++				// Bayer        -1 0 1 2
++				//          0    r g R g
++				//  line_step    g b g b
++				// line_step2    r g r g
++				rgb_buffer[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
++				rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++				
++				// BGBG line
++				// Bayer         -1 0 1 2
++				//         0      r g r g
++				// line_step      g B g b
++				// line_step2     r g r g
++				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++				
++				// Bayer         -1 0 1 2
++				//         0      r g r g
++				// line_step      g b G b
++				// line_step2     r g r g
++				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
++			}
++			
++			// last two pixel values for first two lines
++			// GRGR line
++			// Bayer        -1 0 1
++			//           0   r G r
++			//   line_step   g b g
++			// line_step2    r g r
++			rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++			rgb_buffer[1] = bayer_pixel[0];
++			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
++			
++			// Bayer        -1 0 1
++			//          0    r g R
++			//  line_step    g b g
++			// line_step2    r g r
++			rgb_buffer[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
++			//rgb_pixel[5] = bayer_pixel[line_step];
++			
++			// BGBG line
++			// Bayer        -1 0 1
++			//          0    r g r
++			//  line_step    g B g
++			// line_step2    r g r
++			rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++			rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
++			
++			// Bayer         -1 0 1
++			//         0      r g r
++			// line_step      g b G
++			// line_step2     r g r
++			rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
++			
++			bayer_pixel += bayer_line_step + 2;
++			rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
++			// main processing
++			for (yIdx = 2; yIdx < height - 2; yIdx += 2)
++			{
++				// first two pixel values
++				// Bayer         0 1 2
++				//        -1     b g b
++				//         0     G r g
++				// line_step     b g b
++				// line_step2    g r g
++				
++				rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
++				rgb_buffer[1] = bayer_pixel[0]; // green pixel
++				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]); // blue;
++				
++				// Bayer         0 1 2
++				//        -1     b g b
++				//         0     g R g
++				// line_step     b g b
++				// line_step2    g r g
++				//rgb_pixel[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
++				
++				// BGBG line
++				// Bayer         0 1 2
++				//         0     g r g
++				// line_step     B g b
++				// line_step2    g r g
++				rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
++				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++				
++				// pixel (1, 1)  0 1 2
++				//         0     g r g
++				// line_step     b G b
++				// line_step2    g r g
++				//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++				
++				rgb_buffer += 6;
++				bayer_pixel += 2;
++				// continue with rest of the line
++				for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
++				{
++					// GRGR line
++					// Bayer        -1 0 1 2
++					//          -1   g b g b
++					//           0   r G r g
++					//   line_step   g b g b
++					// line_step2    r g r g
++					rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++					rgb_buffer[1] = bayer_pixel[0];
++					rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
++					
++					// Bayer        -1 0 1 2
++					//          -1   g b g b
++					//          0    r g R g
++					//  line_step    g b g b
++					// line_step2    r g r g
++					
++					dh = abs (bayer_pixel[0] - bayer_pixel[2]);
++					dv = abs (bayer_pixel[-bayer_line_step + 1] - bayer_pixel[bayer_line_step + 1]);
++					
++					if (dh > dv)
++						rgb_buffer[4] = AVG (bayer_pixel[-bayer_line_step + 1], bayer_pixel[bayer_line_step + 1]);
++					else if (dv > dh)
++						rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[2]);
++					else
++						rgb_buffer[4] = AVG4 (bayer_pixel[-bayer_line_step + 1], bayer_pixel[bayer_line_step + 1], bayer_pixel[0], bayer_pixel[2]);
++					
++					rgb_buffer[3] = bayer_pixel[1];
++					rgb_buffer[5] = AVG4 (bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step], bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++					
++					// BGBG line
++					// Bayer         -1 0 1 2
++					//         -1     g b g b
++					//          0     r g r g
++					// line_step      g B g b
++					// line_step2     r g r g
++					rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++					rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++					
++					dv = abs (bayer_pixel[0] - bayer_pixel[bayer_line_step2]);
++					dh = abs (bayer_pixel[bayer_line_step - 1] - bayer_pixel[bayer_line_step + 1]);
++					
++					if (dv > dh)
++						rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++					else if (dh > dv)
++						rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step2]);
++					else
++						rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++					
++					// Bayer         -1 0 1 2
++					//         -1     g b g b
++					//          0     r g r g
++					// line_step      g b G b
++					// line_step2     r g r g
++					rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++					rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++					rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++				}
++				
++				// last two pixels of the line
++				// last two pixel values for first two lines
++				// GRGR line
++				// Bayer        -1 0 1
++				//           0   r G r
++				//   line_step   g b g
++				// line_step2    r g r
++				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++				rgb_buffer[1] = bayer_pixel[0];
++				rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
++				
++				// Bayer        -1 0 1
++				//          0    r g R
++				//  line_step    g b g
++				// line_step2    r g r
++				rgb_buffer[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
++				//rgb_pixel[5] = bayer_pixel[line_step];
++				
++				// BGBG line
++				// Bayer        -1 0 1
++				//          0    r g r
++				//  line_step    g B g
++				// line_step2    r g r
++				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++				//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
++				
++				// Bayer         -1 0 1
++				//         0      r g r
++				// line_step      g b G
++				// line_step2     r g r
++				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
++				
++				bayer_pixel += bayer_line_step + 2;
++				rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
++			}
++			
++			//last two lines
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     G r g
++			// line_step     b g b
++			
++			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
++			rgb_buffer[1] = bayer_pixel[0]; // green pixel
++			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
++			
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     g R g
++			// line_step     b g b
++			//rgb_pixel[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++			rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
++			
++			// BGBG line
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     g r g
++			// line_step     B g b
++			//rgb_pixel[rgb_line_step    ] = bayer_pixel[1];
++			rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
++			rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++			
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     g r g
++			// line_step     b G b
++			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++			
++			rgb_buffer += 6;
++			bayer_pixel += 2;
++			// rest of the last two lines
++			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
++			{
++				// GRGR line
++				// Bayer       -1 0 1 2
++				//        -1    g b g b
++				//         0    r G r g
++				// line_step    g b g b
++				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++				rgb_buffer[1] = bayer_pixel[0];
++				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
++				
++				// Bayer       -1 0 1 2
++				//        -1    g b g b
++				//         0    r g R g
++				// line_step    g b g b
++				rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[-bayer_line_step + 2]);
++				
++				// BGBG line
++				// Bayer       -1 0 1 2
++				//        -1    g b g b
++				//         0    r g r g
++				// line_step    g B g b
++				rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[-1], bayer_pixel[1]);
++				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++				
++				
++				// Bayer       -1 0 1 2
++				//        -1    g b g b
++				//         0    r g r g
++				// line_step    g b G b
++				//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++			}
++			
++			// last two pixel values for first two lines
++			// GRGR line
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r G r
++			// line_step    g b g
++			rgb_buffer[rgb_line_step ] = rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++			rgb_buffer[1] = bayer_pixel[0];
++			rgb_buffer[5] = rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
++			
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r g R
++			// line_step    g b g
++			rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[-bayer_line_step + 1]);
++			//rgb_pixel[5] = AVG( bayer_pixel[line_step], bayer_pixel[-line_step] );
++			
++			// BGBG line
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r g r
++			// line_step    g B g
++			//rgb_pixel[rgb_line_step    ] = AVG2( bayer_pixel[-1], bayer_pixel[1] );
++			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++			
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r g r
++			// line_step    g b G
++			//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
++		}
++		else if (debayering_method == EdgeAwareWeighted)
++		{
++			int dh, dv;
++			
++			// first two pixel values for first two lines
++			// Bayer         0 1 2
++			//         0     G r g
++			// line_step     b g b
++			// line_step2    g r g
++			
++			rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
++			rgb_buffer[1] = bayer_pixel[0]; // green pixel
++			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
++			
++			// Bayer         0 1 2
++			//         0     g R g
++			// line_step     b g b
++			// line_step2    g r g
++			//rgb_pixel[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
++			rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++			
++			// BGBG line
++			// Bayer         0 1 2
++			//         0     g r g
++			// line_step     B g b
++			// line_step2    g r g
++			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
++			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
++			
++			// pixel (1, 1)  0 1 2
++			//         0     g r g
++			// line_step     b G b
++			// line_step2    g r g
++			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
++			
++			rgb_buffer += 6;
++			bayer_pixel += 2;
++			// rest of the first two lines
++			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
++			{
++				// GRGR line
++				// Bayer        -1 0 1 2
++				//           0   r G r g
++				//   line_step   g b g b
++				// line_step2    r g r g
++				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++				rgb_buffer[1] = bayer_pixel[0];
++				rgb_buffer[2] = bayer_pixel[bayer_line_step + 1];
++				
++				// Bayer        -1 0 1 2
++				//          0    r g R g
++				//  line_step    g b g b
++				// line_step2    r g r g
++				rgb_buffer[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1]);
++				rgb_buffer[rgb_line_step + 5] = rgb_buffer[5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++				
++				// BGBG line
++				// Bayer         -1 0 1 2
++				//         0      r g r g
++				// line_step      g B g b
++				// line_step2     r g r g
++				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++				
++				// Bayer         -1 0 1 2
++				//         0      r g r g
++				// line_step      g b G b
++				// line_step2     r g r g
++				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				//rgb_pixel[rgb_line_step + 5] = AVG( bayer_pixel[line_step] , bayer_pixel[line_step+2] );
++			}
++			
++			// last two pixel values for first two lines
++			// GRGR line
++			// Bayer        -1 0 1
++			//           0   r G r
++			//   line_step   g b g
++			// line_step2    r g r
++			rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++			rgb_buffer[1] = bayer_pixel[0];
++			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
++			
++			// Bayer        -1 0 1
++			//          0    r g R
++			//  line_step    g b g
++			// line_step2    r g r
++			rgb_buffer[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
++			//rgb_pixel[5] = bayer_pixel[line_step];
++			
++			// BGBG line
++			// Bayer        -1 0 1
++			//          0    r g r
++			//  line_step    g B g
++			// line_step2    r g r
++			rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++			rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++			//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
++			
++			// Bayer         -1 0 1
++			//         0      r g r
++			// line_step      g b G
++			// line_step2     r g r
++			rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
++			
++			bayer_pixel += bayer_line_step + 2;
++			rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
++			// main processing
++			for (yIdx = 2; yIdx < height - 2; yIdx += 2)
++			{
++				// first two pixel values
++				// Bayer         0 1 2
++				//        -1     b g b
++				//         0     G r g
++				// line_step     b g b
++				// line_step2    g r g
++				
++				rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
++				rgb_buffer[1] = bayer_pixel[0]; // green pixel
++				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]); // blue;
++				
++				// Bayer         0 1 2
++				//        -1     b g b
++				//         0     g R g
++				// line_step     b g b
++				// line_step2    g r g
++				//rgb_pixel[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
++				
++				// BGBG line
++				// Bayer         0 1 2
++				//         0     g r g
++				// line_step     B g b
++				// line_step2    g r g
++				rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[bayer_line_step2]);
++				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++				
++				// pixel (1, 1)  0 1 2
++				//         0     g r g
++				// line_step     b G b
++				// line_step2    g r g
++				//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++				
++				rgb_buffer += 6;
++				bayer_pixel += 2;
++				// continue with rest of the line
++				for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
++				{
++					// GRGR line
++					// Bayer        -1 0 1 2
++					//          -1   g b g b
++					//           0   r G r g
++					//   line_step   g b g b
++					// line_step2    r g r g
++					rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++					rgb_buffer[1] = bayer_pixel[0];
++					rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
++					
++					// Bayer        -1 0 1 2
++					//          -1   g b g b
++					//          0    r g R g
++					//  line_step    g b g b
++					// line_step2    r g r g
++					
++					dh = abs (bayer_pixel[0] - bayer_pixel[2]);
++					dv = abs (bayer_pixel[-bayer_line_step + 1] - bayer_pixel[bayer_line_step + 1]);
++					
++					if (dv == 0 && dh == 0)
++						rgb_buffer[4] = AVG4 (bayer_pixel[1 - bayer_line_step], bayer_pixel[1 + bayer_line_step], bayer_pixel[0], bayer_pixel[2]);
++					else
++						rgb_buffer[4] = WAVG4 (bayer_pixel[1 - bayer_line_step], bayer_pixel[1 + bayer_line_step], bayer_pixel[0], bayer_pixel[2], dh, dv);
++					rgb_buffer[3] = bayer_pixel[1];
++					rgb_buffer[5] = AVG4 (bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step], bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++					
++					// BGBG line
++					// Bayer         -1 0 1 2
++					//         -1     g b g b
++					//          0     r g r g
++					// line_step      g B g b
++					// line_step2     r g r g
++					rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++					rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++					
++					dv = abs (bayer_pixel[0] - bayer_pixel[bayer_line_step2]);
++					dh = abs (bayer_pixel[bayer_line_step - 1] - bayer_pixel[bayer_line_step + 1]);
++					
++					if (dv == 0 && dh == 0)
++						rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++					else
++						rgb_buffer[rgb_line_step + 1] = WAVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1], dh, dv);
++					
++					// Bayer         -1 0 1 2
++					//         -1     g b g b
++					//          0     r g r g
++					// line_step      g b G b
++					// line_step2     r g r g
++					rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++					rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++					rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++				}
++				
++				// last two pixels of the line
++				// last two pixel values for first two lines
++				// GRGR line
++				// Bayer        -1 0 1
++				//           0   r G r
++				//   line_step   g b g
++				// line_step2    r g r
++				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++				rgb_buffer[1] = bayer_pixel[0];
++				rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = rgb_buffer[5] = rgb_buffer[2] = bayer_pixel[bayer_line_step];
++				
++				// Bayer        -1 0 1
++				//          0    r g R
++				//  line_step    g b g
++				// line_step2    r g r
++				rgb_buffer[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
++				//rgb_pixel[5] = bayer_pixel[line_step];
++				
++				// BGBG line
++				// Bayer        -1 0 1
++				//          0    r g r
++				//  line_step    g B g
++				// line_step2    r g r
++				rgb_buffer[rgb_line_step ] = AVG4 (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1], bayer_pixel[-1], bayer_pixel[bayer_line_step2 - 1]);
++				rgb_buffer[rgb_line_step + 1] = AVG4 (bayer_pixel[0], bayer_pixel[bayer_line_step2], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++				//rgb_pixel[rgb_line_step + 2] = bayer_pixel[line_step];
++				
++				// Bayer         -1 0 1
++				//         0      r g r
++				// line_step      g b G
++				// line_step2     r g r
++				rgb_buffer[rgb_line_step + 3] = AVG (bayer_pixel[1], bayer_pixel[bayer_line_step2 + 1]);
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
++				
++				bayer_pixel += bayer_line_step + 2;
++				rgb_buffer += rgb_line_step + 6 + rgb_line_skip;
++			}
++			
++			//last two lines
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     G r g
++			// line_step     b g b
++			
++			rgb_buffer[rgb_line_step + 3] = rgb_buffer[rgb_line_step ] = rgb_buffer[3] = rgb_buffer[0] = bayer_pixel[1]; // red pixel
++			rgb_buffer[1] = bayer_pixel[0]; // green pixel
++			rgb_buffer[rgb_line_step + 2] = rgb_buffer[2] = bayer_pixel[bayer_line_step]; // blue;
++			
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     g R g
++			// line_step     b g b
++			//rgb_pixel[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++			rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[2 - bayer_line_step]);
++			
++			// BGBG line
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     g r g
++			// line_step     B g b
++			//rgb_pixel[rgb_line_step    ] = bayer_pixel[1];
++			rgb_buffer[rgb_line_step + 1] = AVG (bayer_pixel[0], bayer_pixel[bayer_line_step + 1]);
++			rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++			
++			// Bayer         0 1 2
++			//        -1     b g b
++			//         0     g r g
++			// line_step     b G b
++			//rgb_pixel[rgb_line_step + 3] = AVG( bayer_pixel[1] , bayer_pixel[line_step2+1] );
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++			
++			rgb_buffer += 6;
++			bayer_pixel += 2;
++			// rest of the last two lines
++			for (xIdx = 2; xIdx < width - 2; xIdx += 2, rgb_buffer += 6, bayer_pixel += 2)
++			{
++				// GRGR line
++				// Bayer       -1 0 1 2
++				//        -1    g b g b
++				//         0    r G r g
++				// line_step    g b g b
++				rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++				rgb_buffer[1] = bayer_pixel[0];
++				rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
++				
++				// Bayer       -1 0 1 2
++				//        -1    g b g b
++				//         0    r g R g
++				// line_step    g b g b
++				rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
++				rgb_buffer[4] = AVG4 (bayer_pixel[0], bayer_pixel[2], bayer_pixel[bayer_line_step + 1], bayer_pixel[1 - bayer_line_step]);
++				rgb_buffer[5] = AVG4 (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2], bayer_pixel[-bayer_line_step], bayer_pixel[-bayer_line_step + 2]);
++				
++				// BGBG line
++				// Bayer       -1 0 1 2
++				//        -1    g b g b
++				//         0    r g r g
++				// line_step    g B g b
++				rgb_buffer[rgb_line_step ] = AVG (bayer_pixel[-1], bayer_pixel[1]);
++				rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++				rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++				
++				
++				// Bayer       -1 0 1 2
++				//        -1    g b g b
++				//         0    r g r g
++				// line_step    g b G b
++				//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
++				rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++				rgb_buffer[rgb_line_step + 5] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[bayer_line_step + 2]);
++			}
++			
++			// last two pixel values for first two lines
++			// GRGR line
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r G r
++			// line_step    g b g
++			rgb_buffer[rgb_line_step ] = rgb_buffer[0] = AVG (bayer_pixel[1], bayer_pixel[-1]);
++			rgb_buffer[1] = bayer_pixel[0];
++			rgb_buffer[5] = rgb_buffer[2] = AVG (bayer_pixel[bayer_line_step], bayer_pixel[-bayer_line_step]);
++			
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r g R
++			// line_step    g b g
++			rgb_buffer[rgb_line_step + 3] = rgb_buffer[3] = bayer_pixel[1];
++			rgb_buffer[4] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step + 1], bayer_pixel[-bayer_line_step + 1]);
++			//rgb_pixel[5] = AVG( bayer_pixel[line_step], bayer_pixel[-line_step] );
++			
++			// BGBG line
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r g r
++			// line_step    g B g
++			//rgb_pixel[rgb_line_step    ] = AVG2( bayer_pixel[-1], bayer_pixel[1] );
++			rgb_buffer[rgb_line_step + 1] = AVG3 (bayer_pixel[0], bayer_pixel[bayer_line_step - 1], bayer_pixel[bayer_line_step + 1]);
++			rgb_buffer[rgb_line_step + 5] = rgb_buffer[rgb_line_step + 2] = bayer_pixel[bayer_line_step];
++			
++			// Bayer       -1 0 1
++			//        -1    g b g
++			//         0    r g r
++			// line_step    g b G
++			//rgb_pixel[rgb_line_step + 3] = bayer_pixel[1];
++			rgb_buffer[rgb_line_step + 4] = bayer_pixel[bayer_line_step + 1];
++			//rgb_pixel[rgb_line_step + 5] = bayer_pixel[line_step];
++		}
++		//else
++		//	THROW_OPENNI_EXCEPTION ("Unknwon debayering method: %d", (int)debayering_method);
++	}
++	//Warning: Downsampling mod is untested
++	else if (nDownSampleStep > 1)
++	{		
++		// get each or each 2nd pixel group to find rgb values!
++		register unsigned bayerXStep = nDownSampleStep;
++		register unsigned bayerYSkip = (nDownSampleStep - 1) * width;
++		
++		// Downsampling and debayering at once
++		register const XnUInt8* bayer_buffer = bayer_pixel;
++		
++		for (register unsigned yIdx = 0; yIdx < height; ++yIdx, bayer_buffer += bayerYSkip, rgb_buffer += rgb_line_skip) // skip a line
++		{
++			for (register unsigned xIdx = 0; xIdx < width; ++xIdx, rgb_buffer += 3, bayer_buffer += bayerXStep)
++			{
++				rgb_buffer[ 2 ] = bayer_buffer[ width ];
++				rgb_buffer[ 1 ] = AVG (bayer_buffer[0], bayer_buffer[ width + 1]);
++				rgb_buffer[ 0 ] = bayer_buffer[ 1 ];
++			}
++		}
++	}
++}
  
 -			nRed   = ((XnUInt32)pCurrBayer[BAYER_LINE_LENGTH]+pCurrBayer[BAYER_LINE_LENGTH+2]) / 2;
 -			nBlue  = ((XnUInt32)pCurrBayer[1]+pCurrBayer[BAYER_LINE_LENGTH2+1]) / 2;
@@ -1280,7 +1280,7 @@ index 43666ad..940e5b6 100644
 -		pBayer += BAYER_LINE_LENGTH2;
 -		pRGB += BAYER_RGB_LINE_LENGTH2;
 -	} while (--nTotalRowsCount);
-+void Bayer2RGB888(const XnUInt8* pBayerImage, XnUInt8* pRGBImage, XnUInt32 nXRes, XnUInt32 nYRes, XnUInt32 nDownSampleStep, XnUInt32 nBadPixels)
-+{	
-+	fillRGB(nXRes, nYRes, pBayerImage, pRGBImage, DebayeringMethod(1), nDownSampleStep); // DebayeringMethod(0) == bilinear, (1) == edge aware, (2) == edge aware weighted
++void Bayer2RGB888(const XnUInt8* pBayerImage, XnUInt8* pRGBImage, XnUInt32 nXRes, XnUInt32 nYRes, XnUInt32 nDownSampleStep, XnUInt32 nBadPixels)
++{	
++	fillRGB(nXRes, nYRes, pBayerImage, pRGBImage, DebayeringMethod(1), nDownSampleStep); // DebayeringMethod(0) == bilinear, (1) == edge aware, (2) == edge aware weighted
  }
diff --git a/debian/patches/0010-Disable-SSE.patch b/debian/patches/0013-Disable-SSE.patch
similarity index 94%
rename from debian/patches/0010-Disable-SSE.patch
rename to debian/patches/0013-Disable-SSE.patch
index 11ea734..7e5d3f0 100644
--- a/debian/patches/0010-Disable-SSE.patch
+++ b/debian/patches/0013-Disable-SSE.patch
@@ -9,7 +9,7 @@ well to get clean CFLAGS.
  1 file changed, 1 insertion(+), 3 deletions(-)
 
 diff --git a/Platform/Linux/Build/Common/Platform.x86 b/Platform/Linux/Build/Common/Platform.x86
-index 1891a27..8d3a8e9 100644
+index 1891a27..91a6f1a 100644
 --- a/Platform/Linux/Build/Common/Platform.x86
 +++ b/Platform/Linux/Build/Common/Platform.x86
 @@ -2,7 +2,7 @@
@@ -17,7 +17,7 @@ index 1891a27..8d3a8e9 100644
  
  ifndef SSE_GENERATION
 -	SSE_GENERATION = 3
-+	SSE_GENERATION = 0
++	SSE_GENERATION = 0
  endif
  
  ifeq ("$(OSTYPE)","Darwin")
diff --git a/debian/patches/0011-Don-t-write-log-file-upon-OpenNI-invocation.patch b/debian/patches/0014-Don-t-write-log-file-upon-OpenNI-invocation.patch
similarity index 94%
rename from debian/patches/0011-Don-t-write-log-file-upon-OpenNI-invocation.patch
rename to debian/patches/0014-Don-t-write-log-file-upon-OpenNI-invocation.patch
index aabe100..d48bc0e 100644
--- a/debian/patches/0011-Don-t-write-log-file-upon-OpenNI-invocation.patch
+++ b/debian/patches/0014-Don-t-write-log-file-upon-OpenNI-invocation.patch
@@ -7,7 +7,7 @@ Subject: Don't write log file upon OpenNI invocation
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Data/GlobalDefaults.ini b/Data/GlobalDefaults.ini
-index eee0d2c..9d013c0 100644
+index fcfec6c..527cb34 100644
 --- a/Data/GlobalDefaults.ini
 +++ b/Data/GlobalDefaults.ini
 @@ -6,7 +6,7 @@ LogMasks=ALL
@@ -15,7 +15,7 @@ index eee0d2c..9d013c0 100644
  ;LogWriteToConsole=1
  ; 0 - No (default), 1 - Yes
 -LogWriteToFile=1
-+;LogWriteToFile=1
++;LogWriteToFile=1
  ; 0 - No (default), 1 - Yes
  ;LogWriteLineInfo=0
  ; leave empty for nothing (default). ALL - all masks
diff --git a/debian/patches/0012-Fix-parallel-build.patch b/debian/patches/0015-Fix-parallel-build.patch
similarity index 95%
rename from debian/patches/0012-Fix-parallel-build.patch
rename to debian/patches/0015-Fix-parallel-build.patch
index 7b19a0f..e434bf3 100644
--- a/debian/patches/0012-Fix-parallel-build.patch
+++ b/debian/patches/0015-Fix-parallel-build.patch
@@ -8,7 +8,7 @@ taken from https://kforge.ros.org/openni/drivers
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Platform/Linux/CreateRedist/RedistMaker b/Platform/Linux/CreateRedist/RedistMaker
-index bb27bd4..8815fd6 100755
+index cb4489c..4d58a30 100644
 --- a/Platform/Linux/CreateRedist/RedistMaker
 +++ b/Platform/Linux/CreateRedist/RedistMaker
 @@ -67,7 +67,7 @@ rm -rf ../$REDIST_DIR
diff --git a/debian/patches/0013-Add-SONAME-to-libraries.patch b/debian/patches/0016-Add-SONAME-to-libraries.patch
similarity index 96%
rename from debian/patches/0013-Add-SONAME-to-libraries.patch
rename to debian/patches/0016-Add-SONAME-to-libraries.patch
index e94365d..6503e22 100644
--- a/debian/patches/0013-Add-SONAME-to-libraries.patch
+++ b/debian/patches/0016-Add-SONAME-to-libraries.patch
@@ -7,7 +7,7 @@ Subject: Add SONAME to libraries
  1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/Platform/Linux/Build/Common/CommonCppMakefile b/Platform/Linux/Build/Common/CommonCppMakefile
-index 5a15c82..b6bbfe4 100644
+index 5a15c82..dadc461 100644
 --- a/Platform/Linux/Build/Common/CommonCppMakefile
 +++ b/Platform/Linux/Build/Common/CommonCppMakefile
 @@ -77,8 +77,8 @@ ifneq "$(LIB_NAME)" ""
@@ -16,8 +16,8 @@ index 5a15c82..b6bbfe4 100644
  		LDFLAGS += -Wl,--no-undefined
 -		OUTPUT_NAME = lib$(LIB_NAME).so
 -		OUTPUT_COMMAND = $(CXX) -o $(OUTPUT_FILE) $(OBJ_FILES) $(LDFLAGS) -shared
-+		OUTPUT_NAME = lib$(LIB_NAME).so.0
-+		OUTPUT_COMMAND = $(CXX) -o $(OUTPUT_FILE) $(OBJ_FILES) $(LDFLAGS) -shared -Wl,-soname,${OUTPUT_NAME} && cd ${OUT_DIR} && ln -fs ${OUTPUT_NAME} lib${LIB_NAME}.so
++		OUTPUT_NAME = lib$(LIB_NAME).so.0
++		OUTPUT_COMMAND = $(CXX) -o $(OUTPUT_FILE) $(OBJ_FILES) $(LDFLAGS) -shared -Wl,-soname,${OUTPUT_NAME} && cd ${OUT_DIR} && ln -fs ${OUTPUT_NAME} lib${LIB_NAME}.so
  	else
  		LDFLAGS += -undefined error
  		OUTPUT_NAME = lib$(LIB_NAME).dylib
diff --git a/debian/patches/0017-Set-UsbInterface-to-0.patch b/debian/patches/0017-Set-UsbInterface-to-0.patch
deleted file mode 100644
index c409912..0000000
--- a/debian/patches/0017-Set-UsbInterface-to-0.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Jochen Sprickerhof <jochen at sprickerhof.de>
-Date: Mon, 7 Jan 2013 21:22:08 +0100
-Subject: Set UsbInterface to 0
-
-taken from
-https://github.com/rbrusu/Sensor/commit/beaaefddf0adf2f1049538ee20c63ee37c4594cb
----
- Data/GlobalDefaults.ini |    2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/Data/GlobalDefaults.ini b/Data/GlobalDefaults.ini
-index 9d013c0..cfdbeb4 100644
---- a/Data/GlobalDefaults.ini
-+++ b/Data/GlobalDefaults.ini
-@@ -60,7 +60,7 @@ LogMasks=ALL
- ;APCEnabled=1
- 
- ; USB interface to be used. 0 - FW Default, 1 - ISO endpoints, 2 - BULK endpoints. Default: Arm - 2, other platforms - 1
--;UsbInterface=2
-+UsbInterface=0
- 
- [Depth]
- ; Output format. 0 - Shift values, 1 - depth values (default)
diff --git a/debian/patches/0014-Use-system-wide-libjpeg.patch b/debian/patches/0017-Use-system-wide-libjpeg.patch
similarity index 97%
rename from debian/patches/0014-Use-system-wide-libjpeg.patch
rename to debian/patches/0017-Use-system-wide-libjpeg.patch
index 89c91e5..b215a97 100644
--- a/debian/patches/0014-Use-system-wide-libjpeg.patch
+++ b/debian/patches/0017-Use-system-wide-libjpeg.patch
@@ -31,7 +31,7 @@ index 4a04486..09b2812 100644
  
  include ../EngineLibMakefile
 diff --git a/Source/XnFormats/XnStreamCompression.h b/Source/XnFormats/XnStreamCompression.h
-index d49723c..06549f5 100644
+index d49723c..a15c0ec 100644
 --- a/Source/XnFormats/XnStreamCompression.h
 +++ b/Source/XnFormats/XnStreamCompression.h
 @@ -27,7 +27,7 @@
@@ -39,7 +39,7 @@ index d49723c..06549f5 100644
  #include "XnFormats.h"
  #include <XnOS.h>
 -#include <External/LibJPEG/jpeglib.h>
-+#include <jpeglib.h>
++#include <jpeglib.h>
  #include <setjmp.h>
  
  //---------------------------------------------------------------------------
diff --git a/debian/patches/0018-Add-support-for-Kinect-4-Windows-sensors.patch b/debian/patches/0018-Add-support-for-Kinect-4-Windows-sensors.patch
deleted file mode 100644
index 9602f26..0000000
--- a/debian/patches/0018-Add-support-for-Kinect-4-Windows-sensors.patch
+++ /dev/null
@@ -1,71 +0,0 @@
-From: Jochen Sprickerhof <jochen at sprickerhof.de>
-Date: Mon, 7 Jan 2013 21:39:50 +0100
-Subject: Add support for Kinect 4 Windows sensors
-
-taken from
-https://github.com/rbrusu/Sensor/commit/0ea4c3d766b6e97507169854a170ef68a5d39fc7
----
- Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp |   42 ++++++++++----------------
- 1 file changed, 16 insertions(+), 26 deletions(-)
-
-diff --git a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-index a3a7a35..a79de49 100644
---- a/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-+++ b/Source/XnDeviceSensorV2/XnDeviceSensorIO.cpp
-@@ -145,29 +145,6 @@ XnStatus XnSensorIO::OpenDataEndPoints(XnSensorUsbInterface nInterface, const Xn
- {
- 	XnStatus nRetVal = XN_STATUS_OK;
- 
--	// try to set requested interface
--	if (nInterface != XN_SENSOR_USB_INTERFACE_DEFAULT)
--	{
--		XnUInt8 nAlternativeInterface = 0;
--
--		switch (nInterface)
--		{
--		case XN_SENSOR_USB_INTERFACE_ISO_ENDPOINTS:
--			nAlternativeInterface = fwInfo.nISOAlternativeInterface;
--			break;
--		case XN_SENSOR_USB_INTERFACE_BULK_ENDPOINTS:
--			nAlternativeInterface = fwInfo.nBulkAlternativeInterface;
--			break;
--		default:
--			XN_ASSERT(FALSE);
--			XN_LOG_WARNING_RETURN(XN_STATUS_USB_INTERFACE_NOT_SUPPORTED, XN_MASK_DEVICE_IO, "Unknown interface type: %d", nInterface);
--		}
--
--		xnLogVerbose(XN_MASK_DEVICE_IO, "Setting USB alternative interface to %d...", nAlternativeInterface);
--		nRetVal = xnUSBSetInterface(m_pSensorHandle->USBDevice, 0, nAlternativeInterface);
--		XN_IS_STATUS_OK(nRetVal);
--	}
--
- 	xnLogVerbose(XN_MASK_DEVICE_IO, "Opening endpoints...");
- 
- 	// up until v3.0/4.0, Image went over 0x82, depth on 0x83, audio on 0x86, and control was using bulk EPs, at 0x4 and 0x85.
-@@ -182,10 +159,23 @@ XnStatus XnSensorIO::OpenDataEndPoints(XnSensorUsbInterface nInterface, const Xn
- 	nRetVal = xnUSBOpenEndPoint(m_pSensorHandle->USBDevice, 0x81, XN_USB_EP_BULK, XN_USB_DIRECTION_IN, &m_pSensorHandle->DepthConnection.UsbEp);
- 	if (nRetVal == XN_STATUS_USB_ENDPOINT_NOT_FOUND)
- 	{
--		bNewUSB = FALSE;
--		xnLogVerbose(XN_MASK_DEVICE_IO, "Endpoint 0x81 does not exist. Trying old USB: Opening 0x82 for depth...");
--		nRetVal = xnUSBOpenEndPoint(m_pSensorHandle->USBDevice, 0x82, XN_USB_EP_BULK, XN_USB_DIRECTION_IN, &m_pSensorHandle->DepthConnection.UsbEp);
-+		// Try ISO mode before old USB
-+		m_pSensorHandle->DepthConnection.bIsISO = TRUE;
-+		xnLogVerbose(XN_MASK_DEVICE_IO, "Endpoint 0x81 does not exist. Trying XN_USB_EP_ISOCHRONOUS (%d)", fwInfo.nBulkAlternativeInterface);
-+		nRetVal = xnUSBSetInterface(m_pSensorHandle->USBDevice, 0, fwInfo.nBulkAlternativeInterface);
-+		XN_IS_STATUS_OK(nRetVal);
-+		nRetVal = xnUSBOpenEndPoint(m_pSensorHandle->USBDevice, 0x81, XN_USB_EP_ISOCHRONOUS, XN_USB_DIRECTION_IN, &m_pSensorHandle->DepthConnection.UsbEp);
- 		XN_IS_STATUS_OK(nRetVal);
-+
-+		// Try old USB
-+		if (nRetVal == XN_STATUS_USB_ENDPOINT_NOT_FOUND)
-+		{
-+			m_pSensorHandle->DepthConnection.bIsISO = FALSE;
-+			bNewUSB = FALSE;
-+			xnLogVerbose(XN_MASK_DEVICE_IO, "Endpoint 0x81 does not exist. Trying old USB: Opening 0x82 for depth...");
-+			nRetVal = xnUSBOpenEndPoint(m_pSensorHandle->USBDevice, 0x82, XN_USB_EP_BULK, XN_USB_DIRECTION_IN, &m_pSensorHandle->DepthConnection.UsbEp);
-+			XN_IS_STATUS_OK(nRetVal);
-+		}
- 	}
- 	else
- 	{
diff --git a/debian/patches/0015-Fix-include-dirs.patch b/debian/patches/0018-Fix-include-dirs.patch
similarity index 100%
rename from debian/patches/0015-Fix-include-dirs.patch
rename to debian/patches/0018-Fix-include-dirs.patch
diff --git a/debian/patches/0019-Remove-call-to-XnLockedServerStreamsHash.patch b/debian/patches/0019-Remove-call-to-XnLockedServerStreamsHash.patch
new file mode 100644
index 0000000..2c2783c
--- /dev/null
+++ b/debian/patches/0019-Remove-call-to-XnLockedServerStreamsHash.patch
@@ -0,0 +1,33 @@
+From: Jochen Sprickerhof <jochen at sprickerhof.de>
+Date: Wed, 7 Nov 2012 00:03:03 +0100
+Subject: Remove call to XnLockedServerStreamsHash
+
+taken from https://github.com/rbrusu/Sensor
+---
+ Source/XnDeviceSensorV2/XnServerSensorInvoker.h |    8 +-------
+ 1 file changed, 1 insertion(+), 7 deletions(-)
+
+diff --git a/Source/XnDeviceSensorV2/XnServerSensorInvoker.h b/Source/XnDeviceSensorV2/XnServerSensorInvoker.h
+index dbeeb29..c73cff9 100644
+--- a/Source/XnDeviceSensorV2/XnServerSensorInvoker.h
++++ b/Source/XnDeviceSensorV2/XnServerSensorInvoker.h
+@@ -104,12 +104,6 @@ private:
+ 			m_locker(other.m_locker)
+ 		{}
+ 
+-		inline XnLockedServerStreamsHash& operator=(const XnLockedServerStreamsHash& other)
+-		{
+-			this->m_hash = other.m_hash;
+-			this->m_locker = other.m_locker;
+-			return *this;
+-		}
+ 
+ 		inline _XnServerStreamsHash::Iterator begin()
+ 		{
+@@ -205,4 +199,4 @@ private:
+ 	XnServerStreamsHash m_streams;
+ };
+ 
+-#endif // __XN_SERVER_SENSOR_INVOKER_H__
+\ No newline at end of file
++#endif // __XN_SERVER_SENSOR_INVOKER_H__
diff --git a/debian/patches/0016-Move-XnSensorServer-to-usr-lib-libopenni-sensor-prim.patch b/debian/patches/0020-Move-XnSensorServer-to-usr-lib-libopenni-sensor-prim.patch
similarity index 88%
rename from debian/patches/0016-Move-XnSensorServer-to-usr-lib-libopenni-sensor-prim.patch
rename to debian/patches/0020-Move-XnSensorServer-to-usr-lib-libopenni-sensor-prim.patch
index 2e588d3..1b942a5 100644
--- a/debian/patches/0016-Move-XnSensorServer-to-usr-lib-libopenni-sensor-prim.patch
+++ b/debian/patches/0020-Move-XnSensorServer-to-usr-lib-libopenni-sensor-prim.patch
@@ -7,10 +7,10 @@ Subject: Move XnSensorServer to /usr/lib/libopenni-sensor-primesense0
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/Source/XnDeviceSensorV2/XnSensorClient.cpp b/Source/XnDeviceSensorV2/XnSensorClient.cpp
-index 269ddda..782b281 100644
+index 7907999..a010f3f 100644
 --- a/Source/XnDeviceSensorV2/XnSensorClient.cpp
 +++ b/Source/XnDeviceSensorV2/XnSensorClient.cpp
-@@ -887,7 +887,7 @@ XnStatus XnSensorClient::StartServerProcess()
+@@ -883,7 +883,7 @@ XnStatus XnSensorClient::StartServerProcess()
  #if (XN_PLATFORM == XN_PLATFORM_WIN32)
  	nRetVal = GetModuleDir(strServerDir);
  #elif (XN_PLATFORM == XN_PLATFORM_LINUX_X86 || XN_PLATFORM == XN_PLATFORM_LINUX_ARM || XN_PLATFORM == XN_PLATFORM_MACOSX)
diff --git a/debian/patches/series b/debian/patches/series
index 674bc0d..2331faa 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,18 +1,20 @@
 0001-Fix-types.patch
-0002-Add-support-for-vendor-id-in-Enumerate-USB-devices.patch
-0003-Add-support-for-XN-sensor-version-2.patch
-0004-Add-support-for-Kinect-product-id.patch
-0005-Add-support-for-different-frame-rates-and-high-resol.patch
-0006-Test-for-y-value-in-registration.patch
-0007-Change-host-protocol.patch
-0008-Add-and-enable-uncompressed-Bayer-modes.patch
-0009-Add-ROS-code-for-improved-Bayer-Pattern-to-RGB-conve.patch
-0010-Disable-SSE.patch
-0011-Don-t-write-log-file-upon-OpenNI-invocation.patch
-0012-Fix-parallel-build.patch
-0013-Add-SONAME-to-libraries.patch
-0014-Use-system-wide-libjpeg.patch
-0015-Fix-include-dirs.patch
-0016-Move-XnSensorServer-to-usr-lib-libopenni-sensor-prim.patch
-0017-Set-UsbInterface-to-0.patch
-0018-Add-support-for-Kinect-4-Windows-sensors.patch
+0002-Changed-25Hz-support-to-5_1-since-5_1_6-works-good.patch
+0003-Don-t-try-to-register-callback-for-a-5.0-device.patch
+0004-Disable-setting-USB-interface.patch
+0005-Add-support-for-vendor-id-in-Enumerate-USB-devices.patch
+0006-Add-support-for-XN-sensor-version-2.patch
+0007-Add-support-for-Kinect-product-id.patch
+0008-Add-support-for-different-frame-rates-and-high-resol.patch
+0009-Test-for-y-value-in-registration.patch
+0010-Change-host-protocol.patch
+0011-Add-and-enable-uncompressed-Bayer-modes.patch
+0012-Add-ROS-code-for-improved-Bayer-Pattern-to-RGB-conve.patch
+0013-Disable-SSE.patch
+0014-Don-t-write-log-file-upon-OpenNI-invocation.patch
+0015-Fix-parallel-build.patch
+0016-Add-SONAME-to-libraries.patch
+0017-Use-system-wide-libjpeg.patch
+0018-Fix-include-dirs.patch
+0019-Remove-call-to-XnLockedServerStreamsHash.patch
+0020-Move-XnSensorServer-to-usr-lib-libopenni-sensor-prim.patch

-- 
openni-sensor-primesense packaging



More information about the pkg-multimedia-commits mailing list