diff --git a/libcamera/CameraHal_Module.cpp b/libcamera/CameraHal_Module.cpp
index d322673..93841dc 100644
--- a/libcamera/CameraHal_Module.cpp
+++ b/libcamera/CameraHal_Module.cpp
@@ -49,7 +49,7 @@
 #include <binder/MemoryHeapBase.h>
 #include <utils/threads.h>
 #include "V4L2Camera.h"
-#define LOG_FUNCTION_NAME           LOGD("%d: %s() ENTER", __LINE__, __FUNCTION__);
+#define LOG_FUNCTION_NAME           ALOGD("%d: %s() ENTER", __LINE__, __FUNCTION__);
 
 using namespace android;
 static CameraHardware *V4L2CameraHardware;
@@ -99,13 +99,13 @@
 
     if(window==NULL)
     {
-        LOGW("window is NULL");
+        ALOGW("window is NULL");
         V4L2CameraHardware->setPreviewWindow(window);
      return -1; 
     }
 
         V4L2CameraHardware->setPreviewWindow(window);
-    LOGD("Exiting the function");
+    ALOGD("Exiting the function");
     return 0;
 }
 
@@ -160,12 +160,12 @@
     LOG_FUNCTION_NAME
     if(V4L2CameraHardware->previewEnabled())
     {
-        LOGW("----Preview Enabled----");
+        ALOGW("----Preview Enabled----");
         return 1;
     }
     else
     {
-        LOGW("----Preview not Enabled----");
+        ALOGW("----Preview not Enabled----");
         return 0;
     }
 }
@@ -244,7 +244,7 @@
     // camera service frees this string...
     param = (char*) malloc(sizeof(char) * (params_str8.length()+1));
     strcpy(param, params_str8.string());
-    LOGD("%s",param);
+    ALOGD("%s",param);
 #endif
     LOG_FUNCTION_NAME
     return param;
@@ -314,14 +314,14 @@
     LOG_FUNCTION_NAME
 
 
-    LOGI("camera_device open");
+    ALOGI("camera_device open");
 
     if (name != NULL) {
         cameraid = atoi(name);
 
         if(cameraid > num_cameras)
         {
-            LOGE("camera service provided cameraid out of bounds, "
+            ALOGE("camera service provided cameraid out of bounds, "
                     "cameraid = %d, num supported = %d",
                     cameraid, num_cameras);
             rv = -EINVAL;
@@ -332,7 +332,7 @@
         camera_device = (V4l2_camera_device_t*)malloc(sizeof(*camera_device));
         if(!camera_device)
         {
-            LOGE("camera_device allocation fail");
+            ALOGE("camera_device allocation fail");
             rv = -ENOMEM;
             goto fail;
         }
@@ -340,7 +340,7 @@
         camera_ops = (camera_device_ops_t*)malloc(sizeof(*camera_ops));
         if(!camera_ops)
         {
-            LOGE("camera_ops allocation fail");
+            ALOGE("camera_ops allocation fail");
             rv = -ENOMEM;
             goto fail;
         }
@@ -417,13 +417,13 @@
     const char *valstr = NULL;
     if(camera_id == 0) {
     info->facing = CAMERA_FACING_BACK;
-    LOGD("cameraHal BACK %d",camera_id);
+    ALOGD("cameraHal BACK %d",camera_id);
     }
     else {
-    LOGD("cameraHal Front %d",camera_id);
+    ALOGD("cameraHal Front %d",camera_id);
     info->facing = face_value;
     }
     info->orientation = orientation;
-    LOGD("cameraHal %d",camera_id);
+    ALOGD("cameraHal %d",camera_id);
     return rv;
 }
diff --git a/libcamera/CameraHardware.cpp b/libcamera/CameraHardware.cpp
index 93299bc..510464a 100644
--- a/libcamera/CameraHardware.cpp
+++ b/libcamera/CameraHardware.cpp
@@ -87,7 +87,7 @@
     p.set(p.KEY_SUPPORTED_PICTURE_SIZES, CAM_SIZE);
 
     if (setParameters(p) != NO_ERROR) {
-        LOGE("Failed to set default parameters?!");
+        ALOGE("Failed to set default parameters?!");
     }
 }
 
@@ -129,7 +129,7 @@
             mNativeWindow=NULL;
     if(window==NULL)
     {
-        LOGW("Window is Null");
+        ALOGW("Window is Null");
         return 0;
     }
     int width, height;
@@ -143,10 +143,10 @@
                 HAL_PIXEL_FORMAT_RGB_565);
     err = mNativeWindow->set_buffer_count(mNativeWindow, 3);
     if (err != 0) {
-        LOGE("native_window_set_buffer_count failed: %s (%d)", strerror(-err), -err);
+        ALOGE("native_window_set_buffer_count failed: %s (%d)", strerror(-err), -err);
 
         if ( ENODEV == err ) {
-            LOGE("Preview surface abandoned!");
+            ALOGE("Preview surface abandoned!");
             mNativeWindow = NULL;
         }
     }
@@ -189,7 +189,7 @@
     if (mNativeWindow != NULL)
     {
     if ((err = mNativeWindow->dequeue_buffer(mNativeWindow,(buffer_handle_t**) &hndl2hndl,&stride)) != 0) {
-        LOGW("Surface::dequeueBuffer returned error %d", err);
+        ALOGW("Surface::dequeueBuffer returned error %d", err);
         return -1;
     }
     mNativeWindow->lock_buffer(mNativeWindow, (buffer_handle_t*) hndl2hndl);
@@ -240,11 +240,11 @@
         return INVALID_OPERATION;
     }
 #if 1
-    LOGI("startPreview: in startpreview \n");
+    ALOGI("startPreview: in startpreview \n");
     mParameters.getPreviewSize(&width, &height);
     for( i=MAX_VIDEONODES; i>=0; i--) {
         sprintf(devnode,"/dev/video%d",i);
-        LOGI("trying the node %s width=%d height=%d \n",devnode,width,height);
+        ALOGI("trying the node %s width=%d height=%d \n",devnode,width,height);
         ret = camera.Open(devnode, width, height, PIXEL_FORMAT);
         if( ret >= 0)
             break;
@@ -260,14 +260,14 @@
 
     ret = camera.Init();
     if (ret != 0) {  
-        LOGI("startPreview: Camera.Init failed\n");
+        ALOGI("startPreview: Camera.Init failed\n");
         camera.Close();
         return ret;
     }
 
     ret = camera.StartStreaming();
     if (ret != 0) {  
-        LOGI("startPreview: Camera.StartStreaming failed\n");
+        ALOGI("startPreview: Camera.StartStreaming failed\n");
         camera.Uninit();
         camera.Close();
         return ret;
@@ -394,7 +394,7 @@
         mNotifyFn(CAMERA_MSG_SHUTTER, 0, 0, mUser);
 
     mParameters.getPictureSize(&w, &h);
-    LOGD("Picture Size: Width = %d \t Height = %d", w, h);
+    ALOGD("Picture Size: Width = %d \t Height = %d", w, h);
 
     int width, height;
     mParameters.getPictureSize(&width, &height);
@@ -402,7 +402,7 @@
 
     for(i=MAX_VIDEONODES; i>=0; i--) {
         sprintf(devnode,"/dev/video%d",i);
-        LOGI("trying the node %s \n",devnode);
+        ALOGI("trying the node %s \n",devnode);
         ret = camera.Open(devnode, width, height, PIXEL_FORMAT);
         if( ret >= 0)
             break;
@@ -415,7 +415,7 @@
     camera.StartStreaming();
     //TODO xxx : Optimize the memory capture call. Too many memcpy
     if (mMsgEnabled & CAMERA_MSG_COMPRESSED_IMAGE) {
-        LOGD ("mJpegPictureCallback");
+        ALOGD ("mJpegPictureCallback");
         picture = camera.GrabJpegFrame(mRequestMemory);
         mDataFn(CAMERA_MSG_COMPRESSED_IMAGE,picture,0,NULL ,mUser);
     }
@@ -429,7 +429,7 @@
 
 status_t CameraHardware::takePicture()
 {
-        LOGD ("takepicture");
+        ALOGD ("takepicture");
     stopPreview();
 
     pictureThread();
@@ -453,7 +453,7 @@
     Mutex::Autolock lock(mLock);
 
     if (strcmp(params.getPictureFormat(), "jpeg") != 0) {
-        LOGE("Only jpeg still pictures are supported");
+        ALOGE("Only jpeg still pictures are supported");
         return -1;
     }
 
@@ -466,7 +466,7 @@
     params.getPreviewSize(&w, &h);
     mParameters.setPreviewSize(w,h);
     framerate = params.getPreviewFrameRate();
-    LOGD("PREVIEW SIZE: w=%d h=%d framerate=%d", w, h, framerate);
+    ALOGD("PREVIEW SIZE: w=%d h=%d framerate=%d", w, h, framerate);
     mParameters = params;
     mParameters.setPreviewSize(w,h);
     mParameters.set(CameraParameters::KEY_SUPPORTED_PREVIEW_FPS_RANGE, supportedFpsRanges);
diff --git a/libcamera/V4L2Camera.cpp b/libcamera/V4L2Camera.cpp
index 90fc123..cfe73d2 100644
--- a/libcamera/V4L2Camera.cpp
+++ b/libcamera/V4L2Camera.cpp
@@ -38,23 +38,23 @@
     int ret;
 
     if ((fd = open(device, O_RDWR)) == -1) {
-        LOGE("ERROR opening V4L interface: %s", strerror(errno));
+        ALOGE("ERROR opening V4L interface: %s", strerror(errno));
     return -1;
     }
 
     ret = ioctl (fd, VIDIOC_QUERYCAP, &videoIn->cap);
     if (ret < 0) {
-        LOGE("Error opening device: unable to query device.");
+        ALOGE("Error opening device: unable to query device.");
         return -1;
     }
 
     if ((videoIn->cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) == 0) {
-        LOGE("Error opening device: video capture not supported.");
+        ALOGE("Error opening device: video capture not supported.");
         return -1;
     }
 
     if (!(videoIn->cap.capabilities & V4L2_CAP_STREAMING)) {
-        LOGE("Capture device does not support streaming i/o");
+        ALOGE("Capture device does not support streaming i/o");
         return -1;
     }
 
@@ -70,7 +70,7 @@
 
     ret = ioctl(fd, VIDIOC_S_FMT, &videoIn->format);
     if (ret < 0) {
-        LOGE("Open: VIDIOC_S_FMT Failed: %s", strerror(errno));
+        ALOGE("Open: VIDIOC_S_FMT Failed: %s", strerror(errno));
         return ret;
     }
 
@@ -93,7 +93,7 @@
 
     ret = ioctl(fd, VIDIOC_REQBUFS, &videoIn->rb);
     if (ret < 0) {
-        LOGE("Init: VIDIOC_REQBUFS failed: %s", strerror(errno));
+        ALOGE("Init: VIDIOC_REQBUFS failed: %s", strerror(errno));
         return ret;
     }
 
@@ -107,7 +107,7 @@
 
         ret = ioctl (fd, VIDIOC_QUERYBUF, &videoIn->buf);
         if (ret < 0) {
-            LOGE("Init: Unable to query buffer (%s)", strerror(errno));
+            ALOGE("Init: Unable to query buffer (%s)", strerror(errno));
             return ret;
         }
 
@@ -119,13 +119,13 @@
                videoIn->buf.m.offset);
 
         if (videoIn->mem[i] == MAP_FAILED) {
-            LOGE("Init: Unable to map buffer (%s)", strerror(errno));
+            ALOGE("Init: Unable to map buffer (%s)", strerror(errno));
             return -1;
         }
 
         ret = ioctl(fd, VIDIOC_QBUF, &videoIn->buf);
         if (ret < 0) {
-            LOGE("Init: VIDIOC_QBUF Failed");
+            ALOGE("Init: VIDIOC_QBUF Failed");
             return -1;
         }
 
@@ -148,7 +148,7 @@
     for (int i = 0; i < DQcount-1; i++) {
         ret = ioctl(fd, VIDIOC_DQBUF, &videoIn->buf);
         if (ret < 0)
-            LOGE("Uninit: VIDIOC_DQBUF Failed");
+            ALOGE("Uninit: VIDIOC_DQBUF Failed");
     }
     nQueued = 0;
     nDequeued = 0;
@@ -156,7 +156,7 @@
     /* Unmap buffers */
     for (int i = 0; i < NB_BUFFER; i++)
         if (munmap(videoIn->mem[i], videoIn->buf.length) < 0)
-            LOGE("Uninit: Unmap failed");
+            ALOGE("Uninit: Unmap failed");
 }
 
 int V4L2Camera::StartStreaming ()
@@ -169,7 +169,7 @@
 
         ret = ioctl (fd, VIDIOC_STREAMON, &type);
         if (ret < 0) {
-            LOGE("StartStreaming: Unable to start capture: %s", strerror(errno));
+            ALOGE("StartStreaming: Unable to start capture: %s", strerror(errno));
             return ret;
         }
 
@@ -189,7 +189,7 @@
 
         ret = ioctl (fd, VIDIOC_STREAMOFF, &type);
         if (ret < 0) {
-            LOGE("StopStreaming: Unable to stop capture: %s", strerror(errno));
+            ALOGE("StopStreaming: Unable to stop capture: %s", strerror(errno));
             return ret;
         }
 
@@ -210,7 +210,7 @@
     /* DQ */
     ret = ioctl(fd, VIDIOC_DQBUF, &videoIn->buf);
     if (ret < 0) {
-        LOGE("GrabPreviewFrame: VIDIOC_DQBUF Failed");
+        ALOGE("GrabPreviewFrame: VIDIOC_DQBUF Failed");
         return NULL;
     }
     nDequeued++;
@@ -223,7 +223,7 @@
     ret = ioctl(fd, VIDIOC_QBUF, &videoIn->buf);
     nQueued++;
     if (ret < 0) {
-        LOGE("GrabPreviewFrame: VIDIOC_QBUF Failed");
+        ALOGE("GrabPreviewFrame: VIDIOC_QBUF Failed");
         return;
     }
 }
@@ -308,17 +308,17 @@
     /* Dequeue buffer */
     ret = ioctl(fd, VIDIOC_DQBUF, &videoIn->buf);
     if (ret < 0) {
-        LOGE("GrabJpegFrame: VIDIOC_DQBUF Failed");
+        ALOGE("GrabJpegFrame: VIDIOC_DQBUF Failed");
         return NULL;
     }
     nDequeued++;
 
-    LOGI("GrabJpegFrame: Generated a frame from capture device");
+    ALOGI("GrabJpegFrame: Generated a frame from capture device");
 
     /* Enqueue buffer */
     ret = ioctl(fd, VIDIOC_QBUF, &videoIn->buf);
     if (ret < 0) {
-        LOGE("GrabJpegFrame: VIDIOC_QBUF Failed");
+        ALOGE("GrabJpegFrame: VIDIOC_QBUF Failed");
         return NULL;
     }
     nQueued++;
@@ -355,7 +355,7 @@
     jpeg_create_compress (&cinfo);
     jpeg_stdio_dest (&cinfo, file);
 
-    LOGI("JPEG PICTURE WIDTH AND HEIGHT: %dx%d", width, height);
+    ALOGI("JPEG PICTURE WIDTH AND HEIGHT: %dx%d", width, height);
 
     cinfo.image_width = width;
     cinfo.image_height = height;
