strobe light control added to camera control interface.
authorMarko Ollonen <marko.ollonen@ixonos.com>
Fri, 30 Nov 2012 13:16:32 +0000 (15:16 +0200)
committerMarko Ollonen <marko.ollonen@ixonos.com>
Fri, 30 Nov 2012 13:18:16 +0000 (15:18 +0200)
Change-Id: I93a0c90de01e21c522ff1625b7fd491edcf1486e

gst-libs/gst/camera/gstmfldcameracontroliface.c
gst-libs/gst/camera/gstmfldcamerasrc.h
gst/mfldv4l2cam/gstv4l2camsrc.c
gst/mfldv4l2cam/v4l2camsrc_calls.c
packaging/mfldv4l2camsrc.changes

index 1f12f73..53d4361 100644 (file)
@@ -235,26 +235,39 @@ gst_camerasrc_camera_control_set_strobe( GstCameraSrc* camerasrc,
   gboolean opened;
   gboolean ret = FALSE;
 
-/* using GstFlashMode enumeration
- * typedef enum
- * {
- * GST_PHOTOGRAPHY_FLASH_MODE_AUTO = 0,
- * GST_PHOTOGRAPHY_FLASH_MODE_OFF,
- * GST_PHOTOGRAPHY_FLASH_MODE_ON,
- * GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN,
- * GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE
- * } GstFlashMode;
-*/
 
   bclass = GST_CAMERA_SRC_GET_CLASS (camerasrc);
   opened = bclass->is_open (camerasrc);
   g_return_val_if_fail (opened, FALSE);
 
-  GST_OBJECT_LOCK (camerasrc);
-  camerasrc->photoconf.flash_mode = value;
-  GST_OBJECT_UNLOCK (camerasrc);
-  if (bclass->is_active (camerasrc)) {
-    ret = bclass->write_settings (camerasrc, &camerasrc->photoconf, FALSE);
+
+  if (type  == GST_CAMERA_CONTROL_STROBE_MODE ) {
+  /* using GstFlashMode enumeration
+   * typedef enum
+   * {
+   * GST_PHOTOGRAPHY_FLASH_MODE_AUTO = 0,
+   * GST_PHOTOGRAPHY_FLASH_MODE_OFF,
+   * GST_PHOTOGRAPHY_FLASH_MODE_ON,
+   * GST_PHOTOGRAPHY_FLASH_MODE_FILL_IN,
+   * GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE
+   * } GstFlashMode;
+  */
+    GST_OBJECT_LOCK (camerasrc);
+    camerasrc->photoconf.flash_mode = value;
+    GST_OBJECT_UNLOCK (camerasrc);
+    if (bclass->is_active (camerasrc)) {
+      ret = bclass->write_settings (camerasrc, &camerasrc->photoconf, FALSE);
+    }
+  }
+  else if (type  == GST_CAMERA_CONTROL_STROBE_CONTROL) {
+    GST_OBJECT_LOCK (camerasrc);
+    if( value < 2)
+      camerasrc->enable_torch = value;
+    else
+      camerasrc->enable_torch = FALSE;
+    if (bclass->set_strobe_state)
+      bclass->set_strobe_state(camerasrc, camerasrc->enable_torch);
+    GST_OBJECT_UNLOCK (camerasrc);
   }
 
   return ret;
@@ -270,9 +283,17 @@ gst_camerasrc_camera_control_get_strobe( GstCameraSrc* camerasrc,
   opened = bclass->is_open (camerasrc);
   g_return_val_if_fail (opened, FALSE);
 
-  GST_OBJECT_LOCK (camerasrc);
-  *value =  camerasrc->photoconf.flash_mode;
-  GST_OBJECT_UNLOCK (camerasrc);
+
+  if (type  == GST_CAMERA_CONTROL_STROBE_MODE ) {
+    GST_OBJECT_LOCK (camerasrc);
+    *value =  camerasrc->photoconf.flash_mode;
+    GST_OBJECT_UNLOCK (camerasrc);
+  }
+  else if (type  == GST_CAMERA_CONTROL_STROBE_CONTROL) {
+    GST_OBJECT_LOCK (camerasrc);
+    *value = camerasrc->enable_torch;
+    GST_OBJECT_UNLOCK (camerasrc);
+  }
 
   return TRUE;
 }
index cb305e3..b7dea3a 100644 (file)
@@ -236,6 +236,7 @@ struct _GstCameraSrc {
 
   guint8 requested_af_mode;
   gboolean     maker_note;
+  gboolean enable_torch;
 };
 
 
@@ -338,6 +339,10 @@ struct _GstCameraSrcClass
                         GstCameraSrcCaptureMode mode);
 
   gboolean
+  (*set_strobe_state)  (GstCameraSrc *camsrc, gboolean  state);
+
+
+  gboolean
   (*set_autofocus)     (GstCameraSrc *camsrc, gboolean on_off);
 
   gboolean
index 85157ca..511c309 100644 (file)
@@ -718,6 +718,8 @@ gboolean
 gst_v4l2camsrc_set_flash_mode (GstCameraSrc *camsrc, int value);
 gst_v4l2camsrc_read_exif (GstCameraSrc *camsrc, 
     GstCameraControlExifInfo *exif_info);
+gboolean
+gst_v4l2camsrc_set_strobe_state (GstCameraSrc *camsrc, gboolean state);
 
 
 /*
@@ -966,6 +968,8 @@ gst_v4l2camsrc_class_init (GstMFLDV4l2CamSrcClass * klass)
   camera_class->set_flash_mode = GST_DEBUG_FUNCPTR(gst_v4l2camsrc_set_flash_mode);
   camera_class->read_exif = GST_DEBUG_FUNCPTR(gst_v4l2camsrc_read_exif);
 
+  camera_class->set_strobe_state = GST_DEBUG_FUNCPTR(gst_v4l2camsrc_set_strobe_state);
+
 //camera_class->fill_image_tags = GST_DEBUG_FUNCPTR(gst_v4l2camsrc_fill_image_tags);
 //camera_class->get_preview_image = GST_DEBUG_FUNCPTR(gst_v4l2camsrc_get_preview_image);
 }
index 5261055..eda27c2 100644 (file)
@@ -3505,6 +3505,18 @@ done:
   return ret;
 }
 
+gboolean gst_v4l2camsrc_set_strobe_state (GstCameraSrc * camsrc,
+    gboolean state)
+
+{
+  GstMFLDV4l2CamSrc *v4l2camsrc;
+  gint fd;
+
+  v4l2camsrc = GST_V4L2CAMSRC (camsrc);
+  fd = v4l2camsrc->video_fd;
+
+  cam_set_flash (fd, state);
+}
 gboolean
 gst_libmfldcam_capture_correction_update (GstMFLDV4l2CamSrc * v4l2camsrc)
 {
index 0e6cbd2..3f60fe4 100644 (file)
@@ -1,3 +1,6 @@
+* Fri Nov 30 2012 Marko Ollonen <marko.ollonen@ixonos.com> submit/trunk/20121129.125759@9854069
+- strobe light control added to camera control interface.
+
 * Wed Nov 28 2012 Marko Ollonen <marko.ollonen@ixonos.com> submit/trunk/20121126.140213@4962ec2
 - Clean up: remove dependency to 3a lib headers