af window configuration update.
authorMarko Ollonen <marko.ollonen@ixonos.com>
Fri, 25 Jan 2013 11:40:08 +0000 (13:40 +0200)
committerMarko Ollonen <marko.ollonen@ixonos.com>
Fri, 25 Jan 2013 15:09:22 +0000 (17:09 +0200)
Change-Id: Ifca8a4a75f0488f69b9d112458182259b0ae9f0a

gst-libs/atomisphal/mfld_cam.c
gst-libs/atomisphal/mfld_cam.h
gst/mfldv4l2cam/gstv4l2camsrc.c
gst/mfldv4l2cam/v4l2camsrc_calls.c

index cc988da..7f6277a 100644 (file)
@@ -87,12 +87,13 @@ cam_find_item_new (const int table[][2], const int item, int reverse)
 struct mfld_driver_t
 {
   int fd;
-  advci_isp_mode mode;
+  cam_capture_mode_t capture_mode;
   int rer_enabled;
   int dis_enabled, dvs_enabled;
   int af_enabled, ae_enabled, awb_enabled;
   int af_result;  // 0 means fail, it will be filled when captured finished.
   int still_af_count, start_still_af;
+  advci_window window;
   struct timeval af_start_time;
   int initflag;
   int mmap;
@@ -696,7 +697,7 @@ cam_set_capture_mode (int fd, cam_capture_mode_t mode)
   else
     mfld_driver.first_frame = 1;
 
-  mfld_driver.mode = mode;
+  mfld_driver.capture_mode = mode;
   return ret;
 }
 
@@ -1227,7 +1228,6 @@ libmfld_cam_dispose (void)
 cam_err_t
 cam_driver_init (int fd, const char *sensor_id)
 {
-  advci_window window;
   cam_driver_dbg ("%s\n", __func__);
 
   mfld_driver.fd = fd;
@@ -1242,23 +1242,20 @@ cam_driver_init (int fd, const char *sensor_id)
     mfldadvci->AfEnable(TRUE);
     mfldadvci->AfLock(FALSE);
 
-    window.x_left = 0;
-    window.x_right = 0,
-    window.y_top = 0;
-    window.y_bottom = 0;
-    window.weight = 0;
-    mfldadvci->AeSetWindow(&window);
-
-   mfldadvci->AeSetExposureProgram(advci_ae_exposure_program_auto);
-   mfldadvci->AeSetMode(advci_ae_mode_auto);
-   mfldadvci->AeSetMeteringMode(advci_ae_metering_mode_center);
-   mfldadvci->AfSetRange (advci_af_range_full);
-   mfldadvci->AwbSetMode(advci_awb_mode_auto);
-   mfldadvci->AfSetMode(advci_af_mode_auto);
-   mfldadvci->AfSetMeteringMode (advci_af_metering_mode_auto);
-
-
-
+    mfld_driver.window.x_left = 0;
+    mfld_driver.window.x_right = 0,
+    mfld_driver.window.y_top = 0;
+    mfld_driver.window.y_bottom = 0;
+    mfld_driver.window.weight = 0;
+    mfldadvci->AeSetWindow(&mfld_driver.window);
+
+    mfldadvci->AeSetExposureProgram(advci_ae_exposure_program_auto);
+    mfldadvci->AeSetMode(advci_ae_mode_auto);
+    mfldadvci->AeSetMeteringMode(advci_ae_metering_mode_center);
+    mfldadvci->AfSetRange (advci_af_range_full);
+    mfldadvci->AwbSetMode(advci_awb_mode_auto);
+    mfldadvci->AfSetMode(advci_af_mode_auto);
+    mfldadvci->AfSetMeteringMode (advci_af_metering_mode_auto);
   }
   else
     mfld_driver.sensor_type =  SENSOR_TYPE_SOC;
@@ -1417,7 +1414,6 @@ static void
 dump_v4l2_buffer(struct v4l2_buffer *buffer)
 {
   void *data;
-  static unsigned int i = 0;
   if (mfld_driver.mmap)
     data = mmap (NULL, buffer->length, PROT_READ | PROT_WRITE, MAP_SHARED,
         mfld_driver.fd, buffer->m.offset);
@@ -1582,7 +1578,6 @@ static void
 cam_capture_init (int fd, struct v4l2_buffer *buffer,
                  struct cam_capture_settings *capture_settings)
 {
-  int i;
   gboolean need_assist = FALSE;
   mfld_driver.mmap = capture_settings->mmap;
   mfld_driver.ae_enabled = capture_settings->ae;
@@ -1607,8 +1602,13 @@ cam_capture_init (int fd, struct v4l2_buffer *buffer,
        mfld_driver.enable_torch = TRUE;
        cam_driver_set_torch(fd, TRUE);
     }
-    if (mfld_driver.af_enabled)
+    if (mfld_driver.af_enabled) {
       mfldadvci->af_start ();
+      if(mfld_cam_settings.focus_mode  == CAM_FOCUS_MODE_TOUCH_AUTO) {
+        mfldadvci->AfSetWindows (1, &mfld_driver.window );
+        mfldadvci->AeSetWindow(&mfld_driver.window );
+      }
+    }
   }
 }
 
@@ -1647,7 +1647,7 @@ cam_dis_dvs_processing (struct atomisp_dis_vector *vectors, advci_frame_t *bufs,
 
     cam_driver_dbg ("Begin cam_dis_still_process\n");
 
-    if (mfld_driver.mode == advci_isp_mode_video)
+    if (mfld_driver.capture_mode == CAM_CAPTURE_MODE_VIDEO_RECORD)
       dvs_vector = &mfld_driver.dvs_vector;
     else
       dvs_vector = NULL;
@@ -1781,7 +1781,7 @@ cam_capture_frames (int fd, struct v4l2_buffer *buffer,
 
   cam_capture_init (fd, buffer, capture_settings);
 
-  if ((mfld_driver.mode == CAM_CAPTURE_MODE_STILL_CAPTURE ) &&
+  if ((mfld_driver.capture_mode == CAM_CAPTURE_MODE_STILL_CAPTURE ) &&
       (mfld_driver.sensor_type == SENSOR_TYPE_RAW) ) {
       /* check flash here not in always when capturing frames  */
       flash_en = get_flash_status ();
@@ -1852,6 +1852,13 @@ cam_err_t cam_get_focus_posi(int fd, unsigned * posi)
   return cam_driver_get_focus_posi(fd, posi);
 }
 
+void cam_set_af_ae_window(advci_window *window)
+{
+  mfldadvci->AfSetWindows (1, window);
+  mfldadvci->AeSetWindow(window);
+  mfld_driver.window = *window;
+}
+
 void get_af_result(int fd, unsigned * result)
 {
   *result = mfld_driver.af_result;  // 0 means fail, it will be filled when captured finished.
index d8d56cd..240f5ad 100644 (file)
@@ -290,6 +290,8 @@ void get_af_version(int fd, int * major, int * minor);
 cam_err_t cam_get_focus_posi(int fd, unsigned * posi);
 void get_af_result(int fd, unsigned * result);
 cam_err_t get_af_status(int fd, unsigned * status);
+void cam_set_af_ae_window(advci_window *window);
+
 cam_err_t get_exp_mode(int fd, cam_scene_mode_t *expmode);
 void get_ae_bias(int fd, int * bias);
 cam_err_t get_ae_manual_shutter(int fd, float *time);
index dd346bd..eeba13e 100644 (file)
@@ -69,7 +69,6 @@ static void gst_v4l2camsrc_get_property (GObject * object,
 static gboolean gst_v4l2camsrc_unlock (GstCameraSrc * src);
 static gboolean gst_v4l2camsrc_unlock_stop (GstCameraSrc * src);
 static gboolean gst_v4l2camsrc_set_zoom (GstCameraSrc * camsrc, gfloat zoom);
-static gboolean gst_v4l2camsrc_set_AeAafwindow (GstCameraSrc * camsrc, GstCameraSrc3a_window window);
 static gboolean gst_v4l2camsrc_set_ae_mode (GstCameraSrc * camsrc, int mode);
 static gboolean gst_v4l2camsrc_get_ae_mode (GstCameraSrc * camsrc, int *mode);
 
@@ -756,6 +755,8 @@ gst_v4l2camsrc_read_exif (GstCameraSrc *camsrc,
 gboolean
 gst_v4l2camsrc_set_strobe_state (GstCameraSrc *camsrc, gboolean state);
 
+gboolean 
+gst_v4l2camsrc_set_AeAafwindow (GstCameraSrc * camsrc, GstCameraSrc3a_window window);
 
 /*
  * gst_v4l2camsrc_class_init:
@@ -1368,7 +1369,6 @@ gst_v4l2camsrc_set_property (GObject * object,
 
 
       v4l2camsrc->mfldadvci->AfSetWindows (1, (advci_window *) (&(v4l2camsrc->af_window)));
-      v4l2camsrc->mfldadvci->AeSetWindow((advci_window *) (&(v4l2camsrc->af_window)));
 
       gst_structure_free (af_window_param);
       g_free (ctmp);
@@ -1741,31 +1741,6 @@ gst_v4l2camsrc_set_zoom (GstCameraSrc * camsrc, gfloat zoom)
   return ret;
 }
 static gboolean
-gst_v4l2camsrc_set_AeAafwindow (GstCameraSrc * camsrc, GstCameraSrc3a_window window)
-{
-  GstMFLDV4l2CamSrc *v4l2camsrc;
-  gboolean ret = TRUE;
-
-  v4l2camsrc = GST_V4L2CAMSRC (camsrc);
-
-  GST_DEBUG_OBJECT(v4l2camsrc,"ae-af-window-setting: x_left:%d, x_right:%d,"
-         "y_bottom:%d, y_top:%d, weight:%d.\n",
-         window.x_left,window.x_right,
-         window.y_bottom, window.y_top,
-         window.weight);
-
-  v4l2camsrc->af_window = v4l2camsrc->ae_window  = *(GstCameraWindow*)&window;
-
-  if (v4l2camsrc->is_active) {
-    g_mutex_lock (v4l2camsrc->device_mutex);
-    v4l2camsrc->mfldadvci->AfSetWindows (1, (advci_window *) (&(v4l2camsrc->af_window)));
-    v4l2camsrc->mfldadvci->AeSetWindow((advci_window *) (&(v4l2camsrc->af_window)));
-    g_mutex_unlock (v4l2camsrc->device_mutex);
-  }
-
-  return ret;
-}
-static gboolean
 gst_v4l2camsrc_set_ae_mode(GstCameraSrc * camsrc, int mode)
 {
   GstMFLDV4l2CamSrc *v4l2camsrc;
index b328ec8..8fc5cfe 100644 (file)
@@ -1084,7 +1084,6 @@ gst_v4l2camsrc_set_attribute (GstCameraSrc * camsrc,
     int attribute_num, const int value)
 {
   GstMFLDV4l2CamSrc *v4l2camsrc = GST_V4L2CAMSRC (camsrc);
-  cam_err_t err;
   struct v4l2_control control;
 
   GST_DEBUG_OBJECT (v4l2camsrc, "setting value of attribute %d to %d",
@@ -1885,7 +1884,7 @@ static GList *build_caps_list(GstMFLDV4l2CamSrc * v4l2camsrc,
 {
        GstStructure *tmp = NULL;
        GList *res = NULL;
-       long w,h,wl,wh,hl,hh,ws,hs;
+       long wl,wh,hl,hh,ws,hs;
 
        wl = size->stepwise.min_width; wh = size->stepwise.max_width; ws = size->stepwise.step_width;
        hl = size->stepwise.min_height; hh = size->stepwise.max_height; hs = size->stepwise.step_height;
@@ -2194,17 +2193,17 @@ gst_v4l2camsrc_grab_frame (GstCameraSrc * camsrc, GstBuffer ** buf,
     gst_camerasrc_send_capture_stop_message (camsrc);
   } else  {
     /* Send the CAF status message */
-    GstCameraFocusStatus s;
+    GstCameraFocusStatus focus_status;
     gboolean lret;
-    lret = gst_v4l2camsrc_check_focus_status(v4l2camsrc, &s, FALSE);
+    lret = gst_v4l2camsrc_check_focus_status(v4l2camsrc, &focus_status, FALSE);
     if (lret) {
-      GST_LOG_OBJECT (v4l2camsrc, "CAF status: %d", s.status);
-      if (s.status == GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS )
+      GST_LOG_OBJECT (v4l2camsrc, "CAF status: %d", focus_status.status);
+      if (focus_status.status == GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS )
         gst_camerasrc_send_af_status(GST_CAMERA_SRC (v4l2camsrc) ,CAMERASRC_AUTO_FOCUS_RESULT_FOCUSED);
-      else if (s.status == GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL )
+      else if (focus_status.status == GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL )
         gst_camerasrc_send_af_status(GST_CAMERA_SRC (v4l2camsrc) ,CAMERASRC_AUTO_FOCUS_RESULT_FAILED);
       else {
-        GST_WARNING_OBJECT (v4l2camsrc, "CAF status erronous: %d send as failed", s.status);
+        GST_WARNING_OBJECT (v4l2camsrc, "CAF status erronous: %d send as failed", focus_status.status);
         gst_camerasrc_send_af_status(GST_CAMERA_SRC (v4l2camsrc) ,CAMERASRC_AUTO_FOCUS_RESULT_FAILED);
       }
     }
@@ -3159,7 +3158,6 @@ gst_v4l2camsrc_read_exif (GstCameraSrc * camsrc,
     GstCameraControlExifInfo *exif_info)
 {
   GstMFLDV4l2CamSrc *v4l2camsrc;
-  int focal_len;
   cam_err_t err;
   struct atomisp_makernote_info maker_note;
   unsigned char *buf;
@@ -3333,6 +3331,31 @@ gst_v4l2camsrc_write_settings (GstCameraSrc * camsrc,
 }
 
 gboolean
+gst_v4l2camsrc_set_AeAafwindow (GstCameraSrc * camsrc, GstCameraSrc3a_window window)
+{
+  GstMFLDV4l2CamSrc *v4l2camsrc;
+  gboolean ret = TRUE;
+
+  v4l2camsrc = GST_V4L2CAMSRC (camsrc);
+
+  GST_DEBUG_OBJECT(v4l2camsrc,"ae-af-window-setting: x_left:%d, x_right:%d,"
+         "y_bottom:%d, y_top:%d, weight:%d.\n",
+         window.x_left,window.x_right,
+         window.y_bottom, window.y_top,
+         window.weight);
+
+  v4l2camsrc->af_window = v4l2camsrc->ae_window  = *(GstCameraWindow*)&window;
+
+  if (v4l2camsrc->is_active) {
+   g_mutex_lock (v4l2camsrc->device_mutex);
+   cam_set_af_ae_window((advci_window *) (&v4l2camsrc->af_window));
+   g_mutex_unlock (v4l2camsrc->device_mutex);
+  }
+
+  return ret;
+}
+
+gboolean
 gst_v4l2camsrc_set_autofocus (GstCameraSrc * camsrc, gboolean on)
 {
   GstMFLDV4l2CamSrc *v4l2camsrc;
@@ -3344,8 +3367,8 @@ gst_v4l2camsrc_set_autofocus (GstCameraSrc * camsrc, gboolean on)
 
   cam_err_t err = CAM_ERR_NONE;
 
-   err= cam_set_autofocus(on);
-   v4l2camsrc->af_enabled = on;
+  err= cam_set_autofocus(on);
+  v4l2camsrc->af_enabled = on;
 
   ret = (err == CAM_ERR_NONE);
 
@@ -3415,7 +3438,6 @@ gst_v4l2camsrc_check_focus_status (GstMFLDV4l2CamSrc * v4l2camsrc,
 {
   gboolean ret = FALSE;
   cam_focus_status_t status;
-  cam_err_t err;
   gboolean update;
 
   GST_DEBUG_OBJECT (v4l2camsrc, "Retrieving focus status");
@@ -3427,14 +3449,6 @@ gst_v4l2camsrc_check_focus_status (GstMFLDV4l2CamSrc * v4l2camsrc,
     ret =  TRUE;
 
     GST_DEBUG_OBJECT (v4l2camsrc, "Focus status: %d", fs->status);
-
-    if (detailed && fs->status == CAM_FOCUS_STATUS_SUCCESS) {
-      fs->windows = g_malloc (sizeof (guint));
-      fs->num_windows = 1;
-      fs->focus_rows = 1;
-      fs->focus_columns = 1;
-      fs->coverage = 0;
-    }
   }
   return ret;
 }
@@ -3468,7 +3482,7 @@ gst_v4l2camsrc_set_capture_mode (GstCameraSrc * camsrc,
     parm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
     err = ioctl(fd, VIDIOC_G_PARM, &parm);
     if (err < 0) {
-      GST_DEBUG(stderr,"Unable to get frame rate: %s (%d).\n",
+      GST_DEBUG("Unable to get frame rate: %s (%d).\n",
       strerror(errno), errno);
       goto done;
     }