usbcam: fix rendering failure in 720p mode

  * check v4l2 format parameter settings
  * add option of '--resolution' in test-device-manager for usbcam
  * test command:
    test-device-manager -m dma -f YUYV -d video -e overlay -p \
        --usb /dev/videoX --resolution 1280x960

Signed-off-by: Wind Yuan <feng.yuan@intel.com>
diff --git a/tests/test-device-manager.cpp b/tests/test-device-manager.cpp
index 2cfc8bf..32925f3 100644
--- a/tests/test-device-manager.cpp
+++ b/tests/test-device-manager.cpp
@@ -64,6 +64,8 @@
         : _file (NULL)
         , _save_file (false)
         , _interval (1)
+        , _frame_width (0)
+        , _frame_height (0)
         , _frame_count (0)
         , _frame_save (0)
         , _enable_display (false)
@@ -81,9 +83,19 @@
     void enable_save_file (bool enable) {
         _save_file = enable;
     }
+
     void set_interval (uint32_t inteval) {
         _interval = inteval;
     }
+
+    void set_frame_width (uint32_t frame_width) {
+        _frame_width = frame_width;
+    }
+
+    void set_frame_height (uint32_t frame_height) {
+        _frame_height = frame_height;
+    }
+
     void set_frame_save (uint32_t frame_save) {
         _frame_save = frame_save;
     }
@@ -109,6 +121,8 @@
     FILE      *_file;
     bool       _save_file;
     uint32_t   _interval;
+    uint32_t   _frame_width;
+    uint32_t   _frame_height;
     uint32_t   _frame_count;
     uint32_t   _frame_save;
     SmartPtr<DrmDisplay> _display;
@@ -214,7 +228,8 @@
     struct v4l2_rect rect = { 0, 0, (int)frame_info.width, (int)frame_info.height };
 
     if (!_display->is_render_inited ()) {
-        ret = _display->render_init (0, 0, 1920, 1080, frame_info.format, &rect);
+        ret = _display->render_init (0, 0, this->_frame_width, this->_frame_height,
+                                     frame_info.format, &rect);
         CHECK (ret, "display failed on render_init");
     }
     ret = _display->render_setup_frame_buffer (buf);
@@ -295,6 +310,8 @@
             "\t -p preview on local display\n"
             "\t --usb         specify node for usb camera device, enables capture path through USB camera \n"
             "\t               specify [/dev/video4, /dev/video5] depending on which node USB camera is attached\n"
+            "\t --resolution  specify the resolution of usb camera\n"
+            "\t               select from [1920x1080, 1280x720 ...], default is [1920x1080]\n"
             "\t -e display_mode    preview mode\n"
             "\t                select from [primary, overlay], default is [primary]\n"
             "\t --sync        set analyzer in sync mode\n"
@@ -367,6 +384,8 @@
     char*   usb_device_name = NULL;
     bool sync_mode = false;
     int frame_rate;
+    int frame_width = 1920;
+    int frame_height = 1080;
     char *path_to_fake = NULL;
 
     const char *short_opts = "sca:n:m:f:d:b:pi:e:r:h";
@@ -381,6 +400,7 @@
         {"enable-dpc", no_argument, NULL, 'D'},
         {"enable-wdr", no_argument, NULL, 'W'},
         {"usb", required_argument, NULL, 'U'},
+        {"resolution", required_argument, NULL, 'R'},
         {"sync", no_argument, NULL, 'Y'},
         {"capture", required_argument, NULL, 'C'},
         {"pipeline", required_argument, NULL, 'P'},
@@ -460,6 +480,9 @@
             usb_device_name = strdup(optarg);
             XCAM_LOG_DEBUG("using USB camera plugged in at node: %s", usb_device_name);
             break;
+        case 'R':
+            sscanf (optarg, "%d%*c%d", &frame_width, &frame_height);
+            break;
         case 'e': {
             if (!strcmp (optarg, "primary"))
                 display_mode = DRM_DISPLAY_MODE_PRIMARY;
@@ -575,6 +598,8 @@
         }
     }
 
+    device_manager->set_frame_width(frame_width);
+    device_manager->set_frame_height(frame_height);
     if (need_display) {
         device_manager->enable_display (true);
         device_manager->set_display_mode (display_mode);
@@ -649,7 +674,7 @@
     }
     ret = device->open ();
     CHECK (ret, "device(%s) open failed", device->get_device_name());
-    ret = device->set_format (1920, 1080, pixel_format, V4L2_FIELD_NONE, 1920 * 2);
+    ret = device->set_format (frame_width, frame_height, pixel_format, V4L2_FIELD_NONE, frame_width * 2);
     CHECK (ret, "device(%s) set format failed", device->get_device_name());
 
     ret = event_device->open ();