Index: trunk/src/VBox/Main/Makefile.kmk
===================================================================
--- trunk/src/VBox/Main/Makefile.kmk	(revision 37281)
+++ trunk/src/VBox/Main/Makefile.kmk	(revision 37282)
@@ -62,4 +62,5 @@
 	$(if $(VBOX_WITH_GUEST_PROPS_RDONLY_GUEST),VBOX_WITH_GUEST_PROPS_RDONLY_GUEST,) \
 	$(if $(VBOX_WITH_GUEST_CONTROL),VBOX_WITH_GUEST_CONTROL,) \
+	$(if $(VBOX_WITH_USB_VIDEO),VBOX_WITH_USB_VIDEO,) \
 	$(if $(VBOX_WITH_HOSTNETIF_API),VBOX_WITH_HOSTNETIF_API,)
 
@@ -632,4 +633,5 @@
 	src-all/VirtualBoxErrorInfoImpl.cpp \
 	$(if $(VBOX_WITH_EXTPACK),src-all/ExtPackManagerImpl.cpp src-all/ExtPackUtil.cpp,) \
+	$(if $(VBOX_WITH_USB_VIDEO),src-client/UsbWebcamInterface.cpp,) \
 	src-client/AdditionsFacilityImpl.cpp \
 	src-client/AudioSnifferInterface.cpp \
Index: trunk/src/VBox/Main/include/ConsoleImpl.h
===================================================================
--- trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 37281)
+++ trunk/src/VBox/Main/include/ConsoleImpl.h	(revision 37282)
@@ -35,4 +35,7 @@
 class VRDEServerInfo;
 class AudioSniffer;
+#ifdef VBOX_WITH_USB_VIDEO
+class UsbWebcamInterface;
+#endif
 class ConsoleVRDPServer;
 class VMMDev;
@@ -719,4 +722,7 @@
     VMMDev * m_pVMMDev;
     AudioSniffer * const mAudioSniffer;
+#ifdef VBOX_WITH_USB_VIDEO
+    UsbWebcamInterface * const mUsbWebcamInterface;
+#endif
     BusAssignmentManager* mBusMgr;
 
Index: trunk/src/VBox/Main/include/ConsoleVRDPServer.h
===================================================================
--- trunk/src/VBox/Main/include/ConsoleVRDPServer.h	(revision 37281)
+++ trunk/src/VBox/Main/include/ConsoleVRDPServer.h	(revision 37282)
@@ -136,4 +136,8 @@
 
     void SendAudioInputEnd(void *pvUserCtx);
+#ifdef VBOX_WITH_USB_VIDEO
+    int GetVideoFrameDimensions(uint16_t *pu16Heigh, uint16_t *pu16Width);
+    int SendVideoSreamOn(bool fFetch);
+#endif
 
 private:
Index: trunk/src/VBox/Main/src-client/ConsoleImpl.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 37281)
+++ trunk/src/VBox/Main/src-client/ConsoleImpl.cpp	(revision 37282)
@@ -57,4 +57,5 @@
 #include "SharedFolderImpl.h"
 #include "AudioSnifferInterface.h"
+#include "UsbWebcamInterface.h"
 #include "ProgressCombinedImpl.h"
 #include "ConsoleVRDPServer.h"
@@ -368,4 +369,7 @@
     , m_pVMMDev(NULL)
     , mAudioSniffer(NULL)
+#ifdef VBOX_WITH_USB_VIDEO
+    , mUsbWebcamInterface(NULL)
+#endif
     , mBusMgr(NULL)
     , mVMStateChangeCallbackDisabled(false)
@@ -504,4 +508,8 @@
     unconst(mAudioSniffer) = new AudioSniffer(this);
     AssertReturn(mAudioSniffer, E_FAIL);
+#ifdef VBOX_WITH_USB_VIDEO
+    unconst(mUsbWebcamInterface) = new UsbWebcamInterface(this);
+    AssertReturn(mUsbWebcamInterface, E_FAIL);
+#endif
 
     /* VirtualBox events registration. */
@@ -594,4 +602,12 @@
         mpVmm2UserMethods = NULL;
     }
+
+#ifdef VBOX_WITH_USB_VIDEO
+    if (mUsbWebcamInterface)
+    {
+        delete mUsbWebcamInterface;
+        unconst(mUsbWebcamInterface) = NULL;
+    }
+#endif
 
     if (mAudioSniffer)
Index: trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 37281)
+++ trunk/src/VBox/Main/src-client/ConsoleImpl2.cpp	(revision 37282)
@@ -2273,5 +2273,5 @@
 #endif
 
-# if 0  /* Virtual Webcam */
+#ifdef VBOX_WITH_USB_VIDEO
 
                 InsertConfigNode(pUsbDevices, "Webcam", &pDev);
@@ -2282,10 +2282,14 @@
 # endif
                 InsertConfigNode(pInst,    "LUN#0", &pLunL0);
+# ifdef VBOX_WITH_USB_VIDEO_TEST
                 InsertConfigString(pLunL0,    "Driver", "WebcamFileFeeder");
                 InsertConfigNode(pLunL0,    "Config", &pCfg);
-# if 1
                 InsertConfigString(pCfg,   "DirToFeed", "out");
+# else
+                InsertConfigString(pLunL0,    "Driver", "UsbWebcamInterface");
+                InsertConfigNode(pLunL0,    "Config", &pCfg);
+                InsertConfigInteger(pCfg,   "Object", &mUsbWebcamInterface);
 # endif
-# endif
+#endif
 # if 0  /* Virtual MSD*/
 
Index: trunk/src/VBox/Main/src-client/ConsoleVRDPServer.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/ConsoleVRDPServer.cpp	(revision 37281)
+++ trunk/src/VBox/Main/src-client/ConsoleVRDPServer.cpp	(revision 37282)
@@ -2770,4 +2770,21 @@
     }
 }
+
+#ifdef VBOX_WITH_USB_VIDEO
+int ConsoleVRDPServer::GetVideoFrameDimensions(uint16_t *pu16Heigh, uint16_t *pu16Width)
+{
+    *pu16Heigh = 640;
+    *pu16Width = 480;
+    return VINF_SUCCESS;
+}
+
+int ConsoleVRDPServer::SendVideoSreamOn(bool fFetch)
+{
+    /* Here we inform server that guest is starting/stopping
+     * the stream
+     */
+    return VINF_SUCCESS;
+}
+#endif
 
 
Index: trunk/src/VBox/Main/src-client/VBoxDriversRegister.cpp
===================================================================
--- trunk/src/VBox/Main/src-client/VBoxDriversRegister.cpp	(revision 37281)
+++ trunk/src/VBox/Main/src-client/VBoxDriversRegister.cpp	(revision 37282)
@@ -25,4 +25,7 @@
 #include "VMMDev.h"
 #include "AudioSnifferInterface.h"
+#ifdef VBOX_WITH_USB_VIDEO
+# include "UsbWebcamInterface.h"
+#endif
 #include "ConsoleImpl.h"
 #ifdef VBOX_WITH_PCI_PASSTHROUGH
@@ -67,4 +70,10 @@
         return rc;
 
+#ifdef VBOX_WITH_USB_VIDEO
+    rc = pCallbacks->pfnRegister(pCallbacks, &UsbWebcamInterface::DrvReg);
+    if (RT_FAILURE(rc))
+        return rc;
+#endif
+
     rc = pCallbacks->pfnRegister(pCallbacks, &Console::DrvStatusReg);
     if (RT_FAILURE(rc))
