Respect 'camera' flag in AVD

Turns of webcam emulation on condition that 'camera' AVD property is set to 'false'.
Note that command line options (-webcam) will enable webcam emulation even if
'camera' AVD property is set to 'false'

Change-Id: I493446f1d12b732ed49f9a5a9967b87b31b180f6
diff --git a/android/avd/hardware-properties.ini b/android/avd/hardware-properties.ini
index 83a9300..ebf2450 100644
--- a/android/avd/hardware-properties.ini
+++ b/android/avd/hardware-properties.ini
@@ -117,7 +117,7 @@
 # Camera support
 name        = hw.camera
 type        = boolean
-default     = no
+default     = yes
 abstract    = Camera support
 description = Whether the device has a camera.
 
diff --git a/android/camera/camera-service.c b/android/camera/camera-service.c
index 8f0e2ec..69b9524 100644
--- a/android/camera/camera-service.c
+++ b/android/camera/camera-service.c
@@ -438,6 +438,12 @@
     memset(ci, 0, sizeof(CameraInfo) * MAX_CAMERA);
     memset(csd->camera_info, 0, sizeof(CameraInfo) * MAX_CAMERA);
     csd->camera_count = 0;
+
+    if (android_hw->hw_camera == 0) {
+        /* Camera emulation is disabled. Skip enumeration of webcameras. */
+        return;
+    }
+
     connected_cnt = enumerate_camera_devices(ci, MAX_CAMERA);
     if (connected_cnt <= 0) {
         /* Nothing is connected - nothing to emulate. */
diff --git a/android/main.c b/android/main.c
index 56ae698..1adb6a1 100644
--- a/android/main.c
+++ b/android/main.c
@@ -1168,9 +1168,9 @@
         }
     }
 
+    int webcam_num = 0;
     if (opts->webcam != NULL) {
         ParamList*  pl = opts->webcam;
-        int webcam_num = 0;
         for ( ; pl != NULL; pl = pl->next ) {
             char webcam_name[64];
             char webcam_dir[16];
@@ -1229,6 +1229,18 @@
         hw->hw_webcam_count = webcam_num;
     }
 
+    /* Command line options related to webcam, and fake camera should
+     * override camera emulation flag, set in AVD. */
+    if (hw->hw_camera == 0) {
+        /* Camera emulation is disabled in AVD. Lets see if command line enables
+         * webcam, or fake camera emulation. */
+        if (webcam_num != 0 ||
+            (opts->fake_camera && strcmp(hw->hw_fakeCamera, "off") != 0)) {
+            /* Command line parameters enable camera emulation. */
+            hw->hw_camera = 1;
+        }
+    }
+
     /* physical memory is now in hw->hw_ramSize */
 
     hw->avd_name = ASTRDUP(avdInfo_getName(avd));