Included modules in webrtc.gyp and fixed build errors.

Removed TODO from webrtc.gyp since it is done.

Tabs -> spaces.

Tabs -> spaces.

Tabs -> spaces.

Fixed compilation on Windows.

Added missing file.

Merge branch 'master' into fix_mac_modules

Fixed compilation errors for the modules.gyp on Mac. This included some pretty large refactorings.

 Please enter the commit message for your changes. Lines starting

BUG=
TEST=

Review URL: http://webrtc-codereview.appspot.com/269005

git-svn-id: http://webrtc.googlecode.com/svn/trunk@957 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/src/modules/audio_coding/neteq/test/NetEqRTPplay.cc b/src/modules/audio_coding/neteq/test/NetEqRTPplay.cc
index 8f1d631..6a276bd 100644
--- a/src/modules/audio_coding/neteq/test/NetEqRTPplay.cc
+++ b/src/modules/audio_coding/neteq/test/NetEqRTPplay.cc
@@ -74,21 +74,20 @@
     #define SEED_FILE "randseed.txt"
 #endif
 
-
 #ifdef WIN32
 #define MY_MAX_DRIVE _MAX_DRIVE
 #define MY_MAX_PATH _MAX_PATH
 #define MY_MAX_FNAME _MAX_FNAME
 #define MY_MAX_EXT _MAX_EXT
-#else
-#if defined(WEBRTC_LINUX)
+
+#elif defined(WEBRTC_LINUX)
 #include <linux/limits.h>
-//#define MY_MAX_DRIVE 17 // arbitary number
 #define MY_MAX_PATH PATH_MAX
-//#define MY_MAX_FNAME NAME_MAX
-//#define MY_MAX_EXT 17 // arbitary number
-#endif
-#endif
+
+#elif defined(WEBRTC_MAC)
+#include <sys/syslimits.h>
+#define MY_MAX_PATH PATH_MAX
+#endif // WEBRTC_MAC
 
 /************/
 /* Typedefs */
diff --git a/src/modules/video_capture/main/source/video_capture.gypi b/src/modules/video_capture/main/source/video_capture.gypi
index 20ca8cb..3784cea 100644
--- a/src/modules/video_capture/main/source/video_capture.gypi
+++ b/src/modules/video_capture/main/source/video_capture.gypi
@@ -214,6 +214,7 @@
             '../test/testAPI/cocoa_renderer.mm',
             '../test/testAPI/testDefines.h',
             '../test/testAPI/testAPI.cpp',
+            '../test/testAPI/testAPI_mac.mm',
             '../test/testAPI/testCameraEncoder.cpp',
             '../test/testAPI/testCameraEncoder.h',
             '../test/testAPI/testExternalCapture.cpp',
@@ -224,6 +225,11 @@
             '../test/testAPI/Logger.cpp',
             '../test/testAPI/Renderer.h',
             '../test/testAPI/Renderer.cpp',
+            '../test/testAPI/renderer_win.cc',
+            '../test/testAPI/renderer_mac.mm',
+            '../test/testAPI/renderer_linux.cc',
+            # Note: renderer_android.cc is deliberately not listed since it
+            # doesn't build through gyp anyway.
           ], # source
           'conditions': [
             # DEFINE PLATFORM SPECIFIC SOURCE FILES
diff --git a/src/modules/video_capture/main/test/testAPI/Renderer.cpp b/src/modules/video_capture/main/test/testAPI/Renderer.cpp
index 7e815e5..ce82185 100644
--- a/src/modules/video_capture/main/test/testAPI/Renderer.cpp
+++ b/src/modules/video_capture/main/test/testAPI/Renderer.cpp
@@ -19,227 +19,13 @@
 
 namespace webrtc
 {
-#if defined _WIN32
-#define SLEEP_10_SEC ::Sleep(10000)
-#define GET_TIME_IN_MS timeGetTime
-
-LRESULT CALLBACK WinProc( HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
-{
-    switch(uMsg)
-    {
-        case WM_DESTROY:
-        break;
-        case WM_COMMAND:
-        break;
-    }
-    return DefWindowProc(hWnd,uMsg,wParam,lParam);
-}
-
-int WebRtcCreateWindow(HWND &hwndMain,int winNum, int width, int height)
-{
-    HINSTANCE hinst = GetModuleHandle(0);
-    WNDCLASSEX wcx;
-    wcx.hInstance = hinst;
-    wcx.lpszClassName = _T(" test camera delay");
-    wcx.lpfnWndProc = (WNDPROC)WinProc;
-    wcx.style = CS_DBLCLKS;
-    wcx.hIcon = LoadIcon (NULL, IDI_APPLICATION);
-    wcx.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
-    wcx.hCursor = LoadCursor (NULL, IDC_ARROW);
-    wcx.lpszMenuName = NULL;
-    wcx.cbSize = sizeof (WNDCLASSEX);
-    wcx.cbClsExtra = 0;
-    wcx.cbWndExtra = 0;
-    wcx.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
-
-    // Register our window class with the operating system.
-    // If there is an error, exit program.
-    if ( !RegisterClassEx (&wcx) )
-    {
-        //MessageBox( 0, TEXT("Failed to register window class!"),TEXT("Error!"), MB_OK|MB_ICONERROR ) ;
-        //return 0;
-    }
-
-    // Create the main window.
-    hwndMain = CreateWindowEx(
-        0, // no extended styles
-        wcx.lpszClassName, // class name
-        _T("Test Camera Delay"), // window name
-        WS_OVERLAPPED |WS_THICKFRAME, // overlapped window
-        0, // horizontal position
-        0, // vertical position
-        width, // width
-        height, // height
-        (HWND) NULL, // no parent or owner window
-        (HMENU) NULL, // class menu used
-        hinst, // instance handle
-        NULL); // no window creation data
-
-    if (!hwndMain)
-    {
-        int error = GetLastError();
-        return -1;
-    }
-
-    // Show the window using the flag specified by the program
-    // that started the application, and send the application
-    // a WM_PAINT message.
-
-    ShowWindow(hwndMain, SW_SHOWDEFAULT);
-    UpdateWindow(hwndMain);
-    return 0;
-}
-
-void SetWindowPos(HWND &hwndMain, int x, int y, int width, int height, bool onTop)
-{
-    /*   if(onTop)
-     {
-     SetWindowPos(hwndMain,HWND_TOPMOST,x,y,width,height,0);
-     }
-     else*/
-    {
-        SetWindowPos(hwndMain,HWND_TOP,x,y,width,height,0);
-    }
-
-}
-
-#elif defined(WEBRTC_MAC_INTEL)
-static int _screen = 0;
-int WebRtcCreateWindow(CocoaRenderer*& cocoaRenderer,int winNum, int width, int height)
-{
-    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc]init];
-
-    _screen = winNum = 0;
-
-    // In Cocoa, rendering is not done directly to a window like in Windows and Linux.
-    // It is rendererd to a Subclass of NSOpenGLView
-
-    // create cocoa container window
-    NSRect outWindowFrame = NSMakeRect(200, 800, width + 20, height + 20);
-
-    NSArray* screens = [NSScreen screens];
-    if(_screen >= [screens count])
-    {
-        // requesting screen
-        return -1;
-    }
-    NSScreen* screen = (NSScreen*)[screens objectAtIndex:_screen];
-
-    NSWindow* outWindow = [[NSWindow alloc] initWithContentRect:outWindowFrame styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO screen:screen];
-    [outWindow orderOut:nil];
-    [outWindow setTitle:@"Cocoa Renderer"];
-    [outWindow setBackgroundColor:[NSColor blueColor]];
-    [[outWindow contentView] setAutoresizesSubviews:YES];
-
-    //		// ***** TODO: test screen positioning *****
-    //		// set to the appropriate screen
-    //		NSArray* screens = [NSScreen screens];
-    //		printf("TODO: test positioning to correct screen\n");
-    //		switch(winNum){
-    //			case 0:
-    //				if([screens count] >= 1){
-    //					[outWindow constrainFrameRect:outWindowFrame toScreen:(NSScreen*)[screens objectAtIndex:0]];
-    //				}
-    //				break;
-    //			case 1:
-    //				if([screens count] >= 2){
-    //					[outWindow constrainFrameRect:outWindowFrame toScreen:(NSScreen*)[screens objectAtIndex:1]];
-    //				}
-    //				break;
-    //			case 2:
-    //				if([screens count] >= 3){
-    //					[outWindow constrainFrameRect:outWindowFrame toScreen:(NSScreen*)[screens objectAtIndex:2]];
-    //				}
-    //				break;
-    //			case 3:
-    //				if([screens count] >= 4){
-    //					[outWindow constrainFrameRect:outWindowFrame toScreen:(NSScreen*)[screens objectAtIndex:3]];
-    //				}
-    //				break;
-    //			default:
-    //				break;
-    //
-    //		}//
-
-    // create renderer and attach to window
-    NSRect cocoaRendererFrame = NSMakeRect(10, 10, width, height);
-    cocoaRenderer = [[CocoaRenderer alloc] initWithFrame:cocoaRendererFrame];
-    [[outWindow contentView] addSubview:cocoaRenderer];
-
-    // must tell Cocoa to draw the window, but any GUI work must be done on the main thread.
-    [outWindow performSelector:@selector(display) onThread:[NSThread mainThread] withObject:nil waitUntilDone:YES];
-    [outWindow makeKeyAndOrderFront:NSApp];
-
-    [pool release];
-    return 0;
-
-}
-
-void SetWindowPos(CocoaRenderer*& cocoaRenderer, int x, int y, int width, int height, bool onTop)
-{
-    NSWindow* ownerWindow = [cocoaRenderer window];
-    NSRect ownerNewRect = NSMakeRect(x, y, width, height);
-    [ownerWindow setFrame:ownerNewRect display:YES];
-
-    //NSRect cocoaRendererNewRect = {0, 0, 500, 500};
-    //NSArray* screens = [NSScreen screens];
-    //NSScreen* screen = (NSScreen*)[screens objectAtIndex:_screen];
-    //cocoaRendererNewRect = [cocoaRenderer constrainFrameRect:cocoaRendererNewRect toScreen:screen];
-
-    //[cocoaRenderer setFrame:cocoaRendererNewRect];
-    //[cocoaRenderer performSelector:@selector(display) onThread:[NSThread mainThread] withObject:nil waitUntilDone:YES];
-
-
-    //[cocoaRenderer performSelector:@selector(drawRect) onThread:[NSThread mainThread] withObject:cocoaRendererNewRect waitUntilDone:YES];
-
-
-    // *** Setting onTop is toooo on top. Can't get to anything underneath.
-    //		[ownerWindow setLevel:NSNormalWindowLevel];
-    //		if(YES == onTop){
-    //			[ownerWindow setLevel:NSScreenSaverWindowLevel];
-    //		}
-    //		else{
-    //			[ownerWindow setLevel:NSNormalWindowLevel];
-    //		}
-}
-#elif defined(WEBRTC_ANDROID)
-#define nil NULL
-#define NO false
-jobject Renderer::g_renderWindow=NULL;
-
-int WebRtcCreateWindow(jobject &renderWin,int /*winNum*/, int /*width*/, int /*height*/)
-{
-    renderWin=Renderer::g_renderWindow;
-    return 0;
-}
-void SetWindowPos(void *& /*hwndMain*/, int /*x*/, int /*y*/, int /*width*/, int /*height*/, bool /*onTop*/)
-{
-
-}
-
-void Renderer::SetRenderWindow(jobject renderWindow)
-{
-    __android_log_print(ANDROID_LOG_DEBUG, "VideoCaptureModule -testAPI", "Renderer::SetRenderWindow");
-    g_renderWindow=renderWindow;
-}
-
-#elif defined(WEBRTC_LINUX)
-
-int WebRtcCreateWindow(HWND &hwndMain,int winNum, int width, int height)
-{
-    return 0;
-}
-void SetWindowPos(HWND &hwndMain, int x, int y, int width, int height, bool onTop)
-{
-}
-#endif
 
 Renderer::Renderer(bool preview) :
     _renderModule(NULL), _quiting(false), _renderWindow(NULL)
 
 {
 #ifndef _WIN32	
-    if (-1 == WebRtcCreateWindow(_renderWindow, 0, 352, 288))
+    if (-1 == WebRtcCreateWindow((void**)(&_renderWindow), 0, 352, 288))
     {
         printf("ERROR** INVALID SCREEN\n");
     }
@@ -253,14 +39,9 @@
         SLEEP(10);
     }// Wait until messageThread has created the window
 
-
     _renderModule = VideoRender::CreateVideoRender(0, (void*) _renderWindow,
                                                    false);
 
-#if defined(WEBRTC_MAC_INTEL)
-    _pool = [[NSAutoreleasePool alloc] init];
-#endif
-
     _renderProvider = _renderModule->AddIncomingRenderStream(0, 0, 0.0f, 0.0f,
                                                              1.0f, 1.0f);
 
@@ -319,11 +100,7 @@
     }
     _messageThread->Stop();
 
-#if defined(WEBRTC_MAC_INTEL)
-    [_pool release];
-#endif
     delete _messageThread;
-
 }
 
 bool Renderer::RenderThread(ThreadObj obj)
@@ -333,10 +110,9 @@
 
 bool Renderer::RenderThreadProcess()
 {
-
     if (_quiting == false && _renderWindow == NULL) // Create the render window
     {
-        WebRtcCreateWindow(_renderWindow, 0, 352, 288);
+        WebRtcCreateWindow((void**)&_renderWindow, 0, 352, 288);
     }
 
 #ifdef _WIN32
@@ -384,7 +160,6 @@
 
 void Renderer::PaintBlue()
 {
-
     _videoFrame.VerifyAndAllocate(_frameWidth * _frameHeight * 3 / 2);
     _videoFrame.SetHeight(_frameHeight);
     _videoFrame.SetWidth(_frameWidth);
diff --git a/src/modules/video_capture/main/test/testAPI/Renderer.h b/src/modules/video_capture/main/test/testAPI/Renderer.h
index 3f86fb6..116e809 100644
--- a/src/modules/video_capture/main/test/testAPI/Renderer.h
+++ b/src/modules/video_capture/main/test/testAPI/Renderer.h
@@ -14,14 +14,11 @@
 #include "testDefines.h"
 
 #ifdef _WIN32
-
 #include <windows.h>
-#elif defined(WEBRTC_MAC_INTEL)
-#import <AppKit/AppKit.h>
-//#import "CocoaWindow.h"
-#import "cocoa_renderer.h"
+
 #elif defined (WEBRTC_ANDROID)
 #include <JNI.h>
+
 #elif defined(WEBRTC_LINUX)
 typedef void* HWND;
 #endif
@@ -31,6 +28,16 @@
 namespace webrtc
 {
 
+// Creates a window and fills in the os-specific handle type or pointer
+// into os_window_handle. Returns 0 on success.
+int WebRtcCreateWindow(void** os_window_handle,
+                       int window_number,
+                       int width, int height);
+
+// Sets the window position in an OS-specific manner.
+void SetWindowPos(void* os_window_handle, int x, int y, 
+                  int width, int height, bool onTop);
+
 class Renderer
 {
 public:
@@ -63,8 +70,7 @@
 #if defined(_WIN32)
     HWND _renderWindow;
 #elif defined(WEBRTC_MAC_INTEL)
-    NSAutoreleasePool* _pool;
-    CocoaRenderer* _renderWindow;
+    void* _renderWindow;
 #elif defined (WEBRTC_ANDROID)
     jobject _renderWindow; //this is a glsurface.
 public:
diff --git a/src/modules/video_capture/main/test/testAPI/renderer_android.cc b/src/modules/video_capture/main/test/testAPI/renderer_android.cc
new file mode 100644
index 0000000..8d23189
--- /dev/null
+++ b/src/modules/video_capture/main/test/testAPI/renderer_android.cc
@@ -0,0 +1,41 @@
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "Renderer.h"
+
+#define nil NULL
+#define NO false
+
+namespace webrtc {
+
+jobject Renderer::g_renderWindow = NULL;
+
+int WebRtcCreateWindow(void** os_specific_handle, int /*winNum*/, 
+                       int /*width*/, int /*height*/) {
+  // jobject is a pointer type, hence a pointer to it is a
+  // pointer-to-pointer, which makes it castable from void**.
+  jobject* window = (jobject*)os_specific_handle;
+  *window = Renderer::g_renderWindow;
+  return 0;
+}
+
+void SetWindowPos(void ** /*os_specific_handle*/, int /*x*/, int /*y*/, 
+                  int /*width*/, int /*height*/, bool /*onTop*/) {
+  // Do nothing.
+}
+
+void Renderer::SetRenderWindow(jobject renderWindow) {
+  __android_log_print(ANDROID_LOG_DEBUG, 
+                      "VideoCaptureModule -testAPI", 
+                      "Renderer::SetRenderWindow");
+  g_renderWindow=renderWindow;
+}
+
+} // namespace webrtc
\ No newline at end of file
diff --git a/src/modules/video_capture/main/test/testAPI/renderer_linux.cc b/src/modules/video_capture/main/test/testAPI/renderer_linux.cc
new file mode 100644
index 0000000..2a269e4
--- /dev/null
+++ b/src/modules/video_capture/main/test/testAPI/renderer_linux.cc
@@ -0,0 +1,25 @@
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "Renderer.h"
+
+namespace webrtc {
+
+int WebRtcCreateWindow(void** os_specific_handle, int winNum, 
+                       int width, int height) {
+  return 0;
+}
+
+void SetWindowPos(void** os_specific_handle, int x, int y, 
+                  int width, int height, bool onTop) {
+  // Do nothing.
+}
+
+} // namespace webrtc
\ No newline at end of file
diff --git a/src/modules/video_capture/main/test/testAPI/renderer_mac.mm b/src/modules/video_capture/main/test/testAPI/renderer_mac.mm
new file mode 100644
index 0000000..e23ad67
--- /dev/null
+++ b/src/modules/video_capture/main/test/testAPI/renderer_mac.mm
@@ -0,0 +1,80 @@
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "Renderer.h"
+
+#include <stdio.h>
+
+#import <AppKit/AppKit.h>
+#import "cocoa_renderer.h"
+
+#include "thread_wrapper.h"
+#include "tick_util.h"
+
+static int _screen = 0;
+
+namespace webrtc {
+
+int WebRtcCreateWindow(void** os_specific_handle, int winNum, int width, int height)
+{
+    CocoaRenderer** cocoaRenderer = reinterpret_cast<CocoaRenderer**> (os_specific_handle);
+
+    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc]init];
+
+    _screen = winNum = 0;
+
+    // In Cocoa, rendering is not done directly to a window like in Windows and Linux.
+    // It is rendererd to a Subclass of NSOpenGLView
+
+    // create cocoa container window
+    NSRect outWindowFrame = NSMakeRect(200, 800, width + 20, height + 20);
+
+    NSArray* screens = [NSScreen screens];
+    if(_screen >= [screens count])
+    {
+        // requesting screen
+        return -1;
+    }
+    NSScreen* screen = (NSScreen*)[screens objectAtIndex:_screen];
+
+    NSWindow* outWindow = [[NSWindow alloc] initWithContentRect:outWindowFrame 
+                                                      styleMask:NSTitledWindowMask 
+                                                        backing:NSBackingStoreBuffered
+                                                          defer:NO screen:screen];
+    [outWindow orderOut:nil];
+    [outWindow setTitle:@"Cocoa Renderer"];
+    [outWindow setBackgroundColor:[NSColor blueColor]];
+    [[outWindow contentView] setAutoresizesSubviews:YES];
+
+    // create renderer and attach to window
+    NSRect cocoaRendererFrame = NSMakeRect(10, 10, width, height);
+    *cocoaRenderer = [[CocoaRenderer alloc] initWithFrame:cocoaRendererFrame];
+    [[outWindow contentView] addSubview:*cocoaRenderer];
+
+    // must tell Cocoa to draw the window, but any GUI work must be done on the main thread.
+    [outWindow performSelector:@selector(display) 
+                      onThread:[NSThread mainThread] 
+                    withObject:nil 
+                 waitUntilDone:YES];
+    [outWindow makeKeyAndOrderFront:NSApp];
+
+    [pool release];
+    return 0;
+}
+
+void SetWindowPos(void* os_specific_handle, int x, int y, int width, int height, bool onTop)
+{
+    CocoaRenderer* cocoaRenderer = (CocoaRenderer*)os_specific_handle;
+    NSWindow* ownerWindow = [cocoaRenderer window];
+    NSRect ownerNewRect = NSMakeRect(x, y, width, height);
+    [ownerWindow setFrame:ownerNewRect display:YES];
+}
+
+}  // namespace webrtc
\ No newline at end of file
diff --git a/src/modules/video_capture/main/test/testAPI/renderer_win.cc b/src/modules/video_capture/main/test/testAPI/renderer_win.cc
new file mode 100644
index 0000000..f5ff9db
--- /dev/null
+++ b/src/modules/video_capture/main/test/testAPI/renderer_win.cc
@@ -0,0 +1,95 @@
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "Renderer.h"
+
+#include <stdio.h>
+
+#include <tchar.h>
+#include <windows.h>
+
+#include "thread_wrapper.h"
+#include "tick_util.h"
+
+#define SLEEP_10_SEC ::Sleep(10000)
+#define GET_TIME_IN_MS timeGetTime
+
+LRESULT CALLBACK WinProc( HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
+{
+    switch(uMsg)
+    {
+        case WM_DESTROY:
+            break;
+        case WM_COMMAND:
+            break;
+    }
+    return DefWindowProc(hWnd,uMsg,wParam,lParam);
+}
+
+namespace webrtc {
+
+int WebRtcCreateWindow(void** os_specific_handle, int winNum, int width, int height)
+{
+    HWND* hwndMain = reinterpret_cast<HWND*> (os_specific_handle);  // HWND is a pointer type
+    HINSTANCE hinst = GetModuleHandle(0);
+    WNDCLASSEX wcx;
+    wcx.hInstance = hinst;
+    wcx.lpszClassName = _T(" test camera delay");
+    wcx.lpfnWndProc = (WNDPROC)WinProc;
+    wcx.style = CS_DBLCLKS;
+    wcx.hIcon = LoadIcon (NULL, IDI_APPLICATION);
+    wcx.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
+    wcx.hCursor = LoadCursor (NULL, IDC_ARROW);
+    wcx.lpszMenuName = NULL;
+    wcx.cbSize = sizeof (WNDCLASSEX);
+    wcx.cbClsExtra = 0;
+    wcx.cbWndExtra = 0;
+    wcx.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
+
+    // Register our window class with the operating system.
+    RegisterClassEx (&wcx);
+    
+    // Create the main window.
+    *hwndMain = CreateWindowEx(0, // no extended styles
+                               wcx.lpszClassName, // class name
+                               _T("Test Camera Delay"), // window name
+                               WS_OVERLAPPED |WS_THICKFRAME, // overlapped window
+                               0, // horizontal position
+                               0, // vertical position
+                               width, // width
+                               height, // height
+                               (HWND) NULL, // no parent or owner window
+                               (HMENU) NULL, // class menu used
+                               hinst, // instance handle
+                               NULL); // no window creation data
+
+    if (!*hwndMain)
+    {
+        int error = GetLastError();
+        return -1;
+    }
+
+    // Show the window using the flag specified by the program
+    // that started the application, and send the application
+    // a WM_PAINT message.
+
+    ShowWindow(*hwndMain, SW_SHOWDEFAULT);
+    UpdateWindow(*hwndMain);
+    return 0;
+}
+
+void SetWindowPos(void* os_specific_handle, int x, int y, int width, int height, bool onTop)
+{
+    HWND hwndMain = (HWND)os_specific_handle;
+    // Call the Windows API
+    SetWindowPos(hwndMain, HWND_TOP, x, y, width, height, 0);
+}
+
+} // namespace webrtc 
diff --git a/src/modules/video_capture/main/test/testAPI/testAPI.cpp b/src/modules/video_capture/main/test/testAPI/testAPI.cpp
index c784abf..969c6f77 100644
--- a/src/modules/video_capture/main/test/testAPI/testAPI.cpp
+++ b/src/modules/video_capture/main/test/testAPI/testAPI.cpp
@@ -8,6 +8,8 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
+#include "testAPI.h"
+
 #if defined(_WIN32)
 #include <tchar.h>
 #include <windows.h>
@@ -21,15 +23,6 @@
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 #include <sys/time.h>
-
-#elif defined(WEBRTC_MAC_INTEL)
-#import <Foundation/Foundation.h>
-#import <Cocoa/Cocoa.h>
-#import <AppKit/AppKit.h>
-#import <QTKit/QTKit.h>
-#import "cocoa_renderer.h"
-#include <sys/time.h>
-#include <iostream>
 #endif
 
 using namespace std;
@@ -39,44 +32,33 @@
 #include "testPlatformDependent.h"
 #include "testCameraEncoder.h"
 
+void RunApiTest() {
+    int test_result = 0;
+
+    webrtc::testExternalCapture test;
+    test_result = test.DoTest();
+    printf("\nExternal capture test result %d\n", test_result);
+
+    webrtc::testPlatformDependent platform_dependent;
+    test_result = platform_dependent.DoTest();
+    printf("\nPlatform dependent test result %d\n", test_result);
+
+    webrtc::testCameraEncoder camera_encoder;
+    test_result = camera_encoder.DoTest();
+    printf("\nCamera encoder test result %d\n", test_result);
+
+    getchar();
+}
+
+// Note: The Mac main is implemented in testApi.mm.
 #if defined(_WIN32)
 int _tmain(int argc, _TCHAR* argv[])
 #elif defined(WEBRTC_LINUX)
 int main(int argc, char* argv[])
-#elif defined(WEBRTC_MAC_INTEL)
-int main (int argc, const char * argv[])
-#endif
+#endif // WEBRTC LINUX
+#if !defined(WEBRTC_MAC)
 {
-
-#if defined(WEBRTC_MAC_INTEL)
-    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
-    [NSApplication sharedApplication];
-#endif
-    int testResult=0;
-
-    {
-        webrtc::testExternalCapture test;
-        testResult=test.DoTest();
-        printf("\nExternal capture test result %d\n",testResult);
-    }
-
-    {
-        webrtc::testPlatformDependent platformDependent;
-        testResult=platformDependent.DoTest();
-        printf("\nPlatform dependent test result %d\n",testResult);
-    }
-    {
-        webrtc::testCameraEncoder cameraEncoder;
-        testResult=cameraEncoder.DoTest();
-        printf("\nCamera encoder test result %d\n",testResult);
-
-    }
-
-    getchar();
-
-#if defined (WEBRTC_MAC_INTEL)
-    [pool release];
-#endif
+    RunApiTest();
     return 0;
 }
-
+#endif // !WEBRTC_MAC
diff --git a/src/modules/video_capture/main/test/testAPI/testAPI.h b/src/modules/video_capture/main/test/testAPI/testAPI.h
new file mode 100644
index 0000000..755169a
--- /dev/null
+++ b/src/modules/video_capture/main/test/testAPI/testAPI.h
@@ -0,0 +1,18 @@
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+
+#ifndef WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_TEST_TESTAPI_TESTAPI_H
+#define WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_TEST_TESTAPI_TESTAPI_H
+
+// Runs the API test.
+void RunApiTest();
+
+#endif  // WEBRTC_MODULES_VIDEO_CAPTURE_MAIN_TEST_TESTAPI_TESTAPI_H
\ No newline at end of file
diff --git a/src/modules/video_capture/main/test/testAPI/testAPI_mac.mm b/src/modules/video_capture/main/test/testAPI/testAPI_mac.mm
new file mode 100644
index 0000000..7e09276
--- /dev/null
+++ b/src/modules/video_capture/main/test/testAPI/testAPI_mac.mm
@@ -0,0 +1,29 @@
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "testAPI.h"
+
+#import <Foundation/Foundation.h>
+#import <Cocoa/Cocoa.h>
+#import <AppKit/AppKit.h>
+#import <QTKit/QTKit.h>
+#import "cocoa_renderer.h"
+#include <sys/time.h>
+#include <iostream>
+
+int main (int argc, const char * argv[]) {
+    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+    [NSApplication sharedApplication];
+
+    RunApiTest();
+    
+    [pool release];
+    return 0;
+}
diff --git a/src/modules/video_capture/main/test/testAPI/testPlatformDependent.h b/src/modules/video_capture/main/test/testAPI/testPlatformDependent.h
index 04d15db..d93d891 100644
--- a/src/modules/video_capture/main/test/testAPI/testPlatformDependent.h
+++ b/src/modules/video_capture/main/test/testAPI/testPlatformDependent.h
@@ -10,7 +10,6 @@
 
 #pragma once
 
-
 #include "testDefines.h"
 #include "video_capture_factory.h"
 #include "Logger.h"
@@ -30,7 +29,7 @@
 {
     WebRtc_Word32 settingID;
     WebRtc_UWord8 captureName[256];
-    VideoCaptureCapability capability;     
+    VideoCaptureCapability capability;
     WebRtc_Word32 captureDelay;
     WebRtc_Word64 lastRenderTimeMS;
 
diff --git a/src/modules/video_render/main/source/video_render.gypi b/src/modules/video_render/main/source/video_render.gypi
index 2868e6e..a7e5c74 100644
--- a/src/modules/video_render/main/source/video_render.gypi
+++ b/src/modules/video_render/main/source/video_render.gypi
@@ -148,6 +148,7 @@
           ],
           'sources': [
             '../test/testAPI/testAPI.cpp',
+            '../test/testAPI/testAPI_mac.mm',
           ],
           'conditions': [
             ['OS=="mac" or OS=="linux"', {
diff --git a/src/modules/video_render/main/test/testAPI/testAPI.cpp b/src/modules/video_render/main/test/testAPI/testAPI.cpp
index 5309b8f..b148069 100644
--- a/src/modules/video_render/main/test/testAPI/testAPI.cpp
+++ b/src/modules/video_render/main/test/testAPI/testAPI.cpp
@@ -8,8 +8,7 @@
  *  be found in the AUTHORS file in the root of the source tree.
  */
 
-// testAPI.cpp : Defines the entry point for the console application.
-//
+#include "testApi.h"
 
 #include <stdio.h>
 
@@ -30,18 +29,6 @@
 #include <X11/Xutil.h>
 #include <sys/time.h>
 
-#elif defined(WEBRTC_MAC_INTEL)
-
-#import <Foundation/Foundation.h>
-#import <Cocoa/Cocoa.h>
-#import <AppKit/AppKit.h>
-#import <QTKit/QTKit.h>
-#include <sys/time.h>
-#include <iostream>
-using namespace std;
-
-@class CocoaRenderView;
-
 #endif
 
 #include "common_types.h"
@@ -103,6 +90,8 @@
 
 #elif defined(WEBRTC_MAC_INTEL)
 
+#include <unistd.h>
+
 #define GET_TIME_IN_MS timeGetTime()
 #define SLEEP(x) usleep(x * 1000)
 
@@ -274,31 +263,9 @@
 
     return 0;
 }
+#endif  // LINUX
 
-#elif defined(WEBRTC_MAC_INTEL) // LINUX
-int WebRtcCreateWindow(CocoaRenderView*& cocoaRenderer, int winNum, int width, int height) // unsigned char* title, int titleLength)
-
-{
-    // In Cocoa, rendering is not done directly to a window like in Windows and Linux.
-    // It is rendererd to a Subclass of NSOpenGLView
-
-    // create cocoa container window
-    NSRect outWindowFrame = NSMakeRect(200, 800, width + 20, height + 20);
-    NSWindow* outWindow = [[NSWindow alloc] initWithContentRect:outWindowFrame styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO];
-    [outWindow orderOut:nil];
-    [outWindow setTitle:@"Cocoa Renderer"];
-    [outWindow setBackgroundColor:[NSColor blueColor]];
-
-    // create renderer and attach to window
-    NSRect cocoaRendererFrame = NSMakeRect(10, 10, width, height);
-    cocoaRenderer = [[CocoaRenderView alloc] initWithFrame:cocoaRendererFrame];
-    [[outWindow contentView] addSubview:cocoaRenderer];
-
-    [outWindow makeKeyAndOrderFront:NSApp];
-
-    return 0;
-}
-#endif  
+// Note: Mac code is in testApi_mac.mm.
 
 class MyRenderCallback: public VideoRenderCallback
 {
@@ -626,46 +593,13 @@
     return 0;
 }
 
-#if defined(_WIN32)
-int _tmain(int argc, _TCHAR* argv[])
-#elif defined(WEBRTC_LINUX)
-int main(int argc, char* argv[])
-#elif defined(WEBRTC_MAC_INTEL)
-int main (int argc, const char * argv[])
-//int begin()
-#endif
-{
-#ifdef WEBRTC_MAC_INTEL
-    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
-    [NSApplication sharedApplication];
-#endif
-
-    int myId = 12345;
-
-    // Create a window for testing
-    void* window = NULL;
-#if defined (_WIN32)
-    HWND testHwnd;
-    WebRtcCreateWindow(testHwnd, 0, 352, 288);
-    window = (void*)testHwnd;
-    VideoRenderType windowType = kRenderWindows;
-#elif defined(WEBRTC_LINUX)
-    Window testWindow;
-    Display* display;
-    WebRtcCreateWindow(&testWindow, &display, 0, 352, 288);
-    VideoRenderType windowType = kRenderX11;
-    window = (void*)testWindow;
-#elif defined(WEBRTC_MAC_INTEL)
-    CocoaRenderView* testWindow;
-    WebRtcCreateWindow(testWindow, 0, 352, 288);
-    VideoRenderType windowType = kRenderCocoa;
-    window = (void*)testWindow;
-#endif
-
+void RunVideoRenderTests(void* window, VideoRenderType windowType) {
 #ifndef WEBRTC_INCLUDE_INTERNAL_VIDEO_RENDER
     windowType = kRenderExternal;
 #endif
 
+    int myId = 12345;
+
     // Create the render module
     printf("Create render module\n");
     VideoRender* renderModule = NULL;
@@ -710,9 +644,32 @@
     renderModule = NULL;
 
     printf("VideoRender unit tests passed.\n");
+}
 
-#if defined(WEBRTC_MAC_INTEL)
-    [pool release];
+// Note: The Mac main is implemented in testApi_mac.mm.
+#if defined(_WIN32)
+int _tmain(int argc, _TCHAR* argv[])
+#elif defined(WEBRTC_LINUX)
+int main(int argc, char* argv[])
 #endif
+#if !defined(WEBRTC_MAC)
+{
+    // Create a window for testing.
+    void* window = NULL;
+#if defined (_WIN32)
+    HWND testHwnd;
+    WebRtcCreateWindow(testHwnd, 0, 352, 288);
+    window = (void*)testHwnd;
+    VideoRenderType windowType = kRenderWindows;
+#elif defined(WEBRTC_LINUX)
+    Window testWindow;
+    Display* display;
+    WebRtcCreateWindow(&testWindow, &display, 0, 352, 288);
+    VideoRenderType windowType = kRenderX11;
+    window = (void*)testWindow;
+#endif // WEBRTC_LINUX
+
+    RunVideoRenderTests(window, windowType);
     return 0;
 }
+#endif  // !WEBRTC_MAC
diff --git a/src/modules/video_render/main/test/testAPI/testAPI_mac.mm b/src/modules/video_render/main/test/testAPI/testAPI_mac.mm
new file mode 100644
index 0000000..610ed48
--- /dev/null
+++ b/src/modules/video_render/main/test/testAPI/testAPI_mac.mm
@@ -0,0 +1,71 @@
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#include "testApi.h"
+
+#include <iostream>
+
+#import <Foundation/Foundation.h>
+#import <Cocoa/Cocoa.h>
+#import <AppKit/AppKit.h>
+#import <QTKit/QTKit.h>
+#include <sys/time.h>
+using namespace std;
+
+@class CocoaRenderView;
+
+#include "common_types.h"
+#include "module_common_types.h"
+#include "process_thread.h"
+#include "tick_util.h"
+#include "trace.h"
+#include "video_render_defines.h"
+#include "video_render.h"
+
+using namespace webrtc;
+
+int WebRtcCreateWindow(CocoaRenderView*& cocoaRenderer, int winNum, int width, int height)
+{
+    // In Cocoa, rendering is not done directly to a window like in Windows and Linux.
+    // It is rendererd to a Subclass of NSOpenGLView
+
+    // create cocoa container window
+    NSRect outWindowFrame = NSMakeRect(200, 800, width + 20, height + 20);
+    NSWindow* outWindow = [[NSWindow alloc] initWithContentRect:outWindowFrame 
+                                                      styleMask:NSTitledWindowMask 
+                                                        backing:NSBackingStoreBuffered 
+                                                          defer:NO];
+    [outWindow orderOut:nil];
+    [outWindow setTitle:@"Cocoa Renderer"];
+    [outWindow setBackgroundColor:[NSColor blueColor]];
+
+    // create renderer and attach to window
+    NSRect cocoaRendererFrame = NSMakeRect(10, 10, width, height);
+    cocoaRenderer = [[CocoaRenderView alloc] initWithFrame:cocoaRendererFrame];
+    [[outWindow contentView] addSubview:cocoaRenderer];
+
+    [outWindow makeKeyAndOrderFront:NSApp];
+
+    return 0;
+}
+
+int main (int argc, const char * argv[]) {
+    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
+    [NSApplication sharedApplication];
+
+    CocoaRenderView* testWindow;
+    WebRtcCreateWindow(testWindow, 0, 352, 288);
+    VideoRenderType windowType = kRenderCocoa;
+    void* window = (void*)testWindow;
+
+    RunVideoRenderTests(window, windowType);
+
+    [pool release];
+}
diff --git a/src/modules/video_render/main/test/testAPI/testApi.h b/src/modules/video_render/main/test/testAPI/testApi.h
new file mode 100644
index 0000000..e0e0631
--- /dev/null
+++ b/src/modules/video_render/main/test/testAPI/testApi.h
@@ -0,0 +1,18 @@
+/*
+ *  Copyright (c) 2011 The WebRTC project authors. All Rights Reserved.
+ *
+ *  Use of this source code is governed by a BSD-style license
+ *  that can be found in the LICENSE file in the root of the source
+ *  tree. An additional intellectual property rights grant can be found
+ *  in the file PATENTS.  All contributing project authors may
+ *  be found in the AUTHORS file in the root of the source tree.
+ */
+
+#ifndef WEBRTC_MODULES_VIDEO_RENDER_MAIN_TEST_TESTAPI_TESTAPI_H
+#define WEBRTC_MODULES_VIDEO_RENDER_MAIN_TEST_TESTAPI_TESTAPI_H
+
+#include "video_render_defines.h"
+
+void RunVideoRenderTests(void* window, webrtc::VideoRenderType windowType);
+
+#endif  // WEBRTC_MODULES_VIDEO_RENDER_MAIN_TEST_TESTAPI_TESTAPI_H
diff --git a/webrtc.gyp b/webrtc.gyp
index 19844be..d7c307c 100644
--- a/webrtc.gyp
+++ b/webrtc.gyp
@@ -17,8 +17,7 @@
       'dependencies': [
         'src/common_audio/common_audio.gyp:*',
         'src/common_video/common_video.gyp:*',
-        # TODO(andrew): enable this when all tests build.
-        #'src/modules/modules.gyp:*',
+        'src/modules/modules.gyp:*',
         'src/system_wrappers/source/system_wrappers.gyp:*',
         'src/video_engine/video_engine.gyp:*',
         'src/voice_engine/voice_engine.gyp:*',