camera: Fix hotplug failure

Due to other v4l device getting enumerated as
"/dev/video0" when camera not connected at boot time,
camera gets enumerated as "/dev/video1" this may again
fail  in case if there are other v4l devices.

Change-Id: I2bcb91a2bd815746e68e2a38c746e69be476ba5e
Signed-off-by: Vishal Bhoj <vishal.bhoj@linaro.org>
diff --git a/libcamera/CameraHardware.cpp b/libcamera/CameraHardware.cpp
index bd7f079..64afcc3 100644
--- a/libcamera/CameraHardware.cpp
+++ b/libcamera/CameraHardware.cpp
@@ -25,7 +25,6 @@
 #include <fcntl.h>
 #include <sys/mman.h>
 
-#define VIDEO_DEVICE        "/dev/video0"
 #define MIN_WIDTH           640
 #define MIN_HEIGHT          480
 #define CAM_SIZE            "640x480"
@@ -147,15 +146,25 @@
 {
     int ret;
     int width, height;
-
+    int i;
+    char devnode[12];
     Mutex::Autolock lock(mLock);
     if (mPreviewThread != 0) {
         //already running
         return INVALID_OPERATION;
     }
+    LOGI("startPreview: in startpreview \n");
 
-        LOGI("startPreview: in startpreview \n");
-    camera.Open(VIDEO_DEVICE, MIN_WIDTH, MIN_HEIGHT, PIXEL_FORMAT);
+    for( i=0; i<10; i++) {
+        sprintf(devnode,"/dev/video%d",i);
+        LOGI("trying the node %s \n",devnode);
+        ret = camera.Open(devnode, MIN_WIDTH, MIN_HEIGHT, PIXEL_FORMAT);
+        if( ret >= 0)
+            break;
+        }
+
+    if( ret < 0)
+        return -1;
 
     mPreviewFrameSize = MIN_WIDTH * MIN_HEIGHT * 2;
 
@@ -286,6 +295,8 @@
     struct v4l2_buffer cfilledbuffer;
     struct v4l2_requestbuffers creqbuf;
     struct v4l2_capability cap;
+    int i;
+    char devnode[12];
 
 
    if (mMsgEnabled & CAMERA_MSG_SHUTTER)
@@ -296,7 +307,18 @@
 
     int width, height;
     mParameters.getPictureSize(&width, &height);
-    camera.Open(VIDEO_DEVICE, MIN_WIDTH, MIN_HEIGHT, PIXEL_FORMAT);
+
+    for(i=0; i<10; i++) {
+        sprintf(devnode,"/dev/video%d",i);
+        LOGI("trying the node %s \n",devnode);
+        ret = camera.Open(devnode, MIN_WIDTH, MIN_HEIGHT, PIXEL_FORMAT);
+        if( ret >= 0)
+            break;
+    }
+
+    if( ret < 0)
+        return -1;
+
     camera.Init();
     camera.StartStreaming();