diff --git a/modules/video_capture/android/video_capture_android.cc b/modules/video_capture/android/video_capture_android.cc
index 7321495..b8ee514 100644
--- a/modules/video_capture/android/video_capture_android.cc
+++ b/modules/video_capture/android/video_capture_android.cc
@@ -21,7 +21,7 @@
 #if defined(WEBRTC_ANDROID) && !defined(WEBRTC_CHROMIUM_BUILD)
 // TODO(leozwang) These SetAndroidVM apis will be refactored, thus we only
 // keep and reference java vm.
-WebRtc_Word32 SetCaptureAndroidVM(void* javaVM, void* javaContext) {
+int32_t SetCaptureAndroidVM(void* javaVM, void* javaContext) {
   return videocapturemodule::VideoCaptureAndroid::SetAndroidObjects(
       javaVM,
       javaContext);
@@ -32,7 +32,7 @@
 {
 
 VideoCaptureModule* VideoCaptureImpl::Create(
-    const WebRtc_Word32 id,
+    const int32_t id,
     const char* deviceUniqueIdUTF8) {
 
   RefCountImpl<videocapturemodule::VideoCaptureAndroid>* implementation =
@@ -64,8 +64,8 @@
 /*
  * Register references to Java Capture class.
  */
-WebRtc_Word32 VideoCaptureAndroid::SetAndroidObjects(void* javaVM,
-                                                     void* javaContext) {
+int32_t VideoCaptureAndroid::SetAndroidObjects(void* javaVM,
+                                               void* javaContext) {
 
   g_jvm = static_cast<JavaVM*> (javaVM);
   g_javaContext = static_cast<jobject> (javaContext);
@@ -232,7 +232,7 @@
   return 0;
 }
 
-WebRtc_Word32 VideoCaptureAndroid::AttachAndUseAndroidDeviceInfoObjects(
+int32_t VideoCaptureAndroid::AttachAndUseAndroidDeviceInfoObjects(
     JNIEnv*& env,
     jclass& javaCmDevInfoClass,
     jobject& javaCmDevInfoObject,
@@ -263,7 +263,7 @@
 
 }
 
-WebRtc_Word32 VideoCaptureAndroid::ReleaseAndroidDeviceInfoObjects(
+int32_t VideoCaptureAndroid::ReleaseAndroidDeviceInfoObjects(
     bool attached) {
   if (attached && g_jvm->DetachCurrentThread() < 0) {
     WEBRTC_TRACE(webrtc::kTraceWarning, webrtc::kTraceVideoCapture, -1,
@@ -290,14 +290,14 @@
   WEBRTC_TRACE(webrtc::kTraceInfo, webrtc::kTraceVideoCapture,
                -1, "%s: IncomingFrame %d", __FUNCTION__,length);
   jbyte* cameraFrame= env->GetByteArrayElements(javaCameraFrame,NULL);
-  captureModule->IncomingFrame((WebRtc_UWord8*) cameraFrame,
+  captureModule->IncomingFrame((uint8_t*) cameraFrame,
                                length,captureModule->_frameInfo,0);
   env->ReleaseByteArrayElements(javaCameraFrame,cameraFrame,JNI_ABORT);
 }
 
 
 
-VideoCaptureAndroid::VideoCaptureAndroid(const WebRtc_Word32 id)
+VideoCaptureAndroid::VideoCaptureAndroid(const int32_t id)
     : VideoCaptureImpl(id), _capInfo(id), _javaCaptureObj(NULL),
       _captureStarted(false) {
   WEBRTC_TRACE(webrtc::kTraceDebug, webrtc::kTraceVideoCapture, -1,
@@ -310,8 +310,8 @@
 //  Initializes needed Java resources like the JNI interface to
 //  VideoCaptureAndroid.java
 // ----------------------------------------------------------------------------
-WebRtc_Word32 VideoCaptureAndroid::Init(const WebRtc_Word32 id,
-                                        const char* deviceUniqueIdUTF8) {
+int32_t VideoCaptureAndroid::Init(const int32_t id,
+                                  const char* deviceUniqueIdUTF8) {
   const int nameLength = strlen(deviceUniqueIdUTF8);
   if (nameLength >= kVideoCaptureUniqueNameLength) {
     return -1;
@@ -468,14 +468,14 @@
   }
 }
 
-WebRtc_Word32 VideoCaptureAndroid::StartCapture(
+int32_t VideoCaptureAndroid::StartCapture(
     const VideoCaptureCapability& capability) {
   CriticalSectionScoped cs(&_apiCs);
   WEBRTC_TRACE(webrtc::kTraceStateInfo, webrtc::kTraceVideoCapture, -1,
                "%s: ", __FUNCTION__);
 
   bool isAttached = false;
-  WebRtc_Word32 result = 0;
+  int32_t result = 0;
   // get the JNI env for this thread
   JNIEnv *env;
   if (g_jvm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
@@ -538,13 +538,13 @@
   return result;
 }
 
-WebRtc_Word32 VideoCaptureAndroid::StopCapture() {
+int32_t VideoCaptureAndroid::StopCapture() {
   CriticalSectionScoped cs(&_apiCs);
   WEBRTC_TRACE(webrtc::kTraceStateInfo, webrtc::kTraceVideoCapture, -1,
                "%s: ", __FUNCTION__);
 
   bool isAttached = false;
-  WebRtc_Word32 result = 0;
+  int32_t result = 0;
   // get the JNI env for this thread
   JNIEnv *env = NULL;
   if (g_jvm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
@@ -598,7 +598,7 @@
   return _captureStarted;
 }
 
-WebRtc_Word32 VideoCaptureAndroid::CaptureSettings(
+int32_t VideoCaptureAndroid::CaptureSettings(
     VideoCaptureCapability& settings) {
   CriticalSectionScoped cs(&_apiCs);
   WEBRTC_TRACE(webrtc::kTraceStateInfo, webrtc::kTraceVideoCapture, -1,
@@ -607,7 +607,7 @@
   return 0;
 }
 
-WebRtc_Word32 VideoCaptureAndroid::SetCaptureRotation(
+int32_t VideoCaptureAndroid::SetCaptureRotation(
     VideoCaptureRotation rotation) {
   CriticalSectionScoped cs(&_apiCs);
   if (VideoCaptureImpl::SetCaptureRotation(rotation) == 0) {
