basic AF support to camera control interface
authorMarko Ollonen <marko.ollonen@ixonos.com>
Tue, 14 Aug 2012 09:37:19 +0000 (12:37 +0300)
committerMarko Ollonen <marko.ollonen@ixonos.com>
Tue, 14 Aug 2012 10:05:24 +0000 (13:05 +0300)
Change-Id: I01a2e48a3eb0e3bfd26f5846ac35269a2c57a48f

gst-libs/gst/camera/gstmfldcameracontroliface.c
gst-libs/gst/camera/gstmfldcameracontroliface.h
packaging/mfldv4l2camsrc.changes

index f24b8f5..6334356 100644 (file)
@@ -206,31 +206,117 @@ gboolean
 gst_camerasrc_camera_control_set_focus( GstCameraSrc* camerasrc,
     gint mode, gint range )
 {
-  return FALSE;
+  GstCameraSrcClass *bclass;
+  gboolean opened;
+  GstFocusMode focus_mode;
+  GST_DEBUG_OBJECT (camerasrc, "gst_camerasrc_camera_control_set_focus");
+
+  bclass = GST_CAMERA_SRC_GET_CLASS (camerasrc);
+  opened = bclass->is_open (camerasrc);
+  g_return_val_if_fail (opened, FALSE);
+
+  // Map focus to photography definitions
+  switch (mode) {
+    case MM_CAMCORDER_FOCUS_MODE_NONE:
+      focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY;
+      break;
+    case MM_CAMCORDER_FOCUS_MODE_PAN:
+    case MM_CAMCORDER_FOCUS_MODE_AUTO:
+    case MM_CAMCORDER_FOCUS_MODE_TOUCH_AUTO:
+      focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_AUTO;
+      break;
+    case MM_CAMCORDER_FOCUS_MODE_MANUAL:
+      focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY;
+      break;
+    case MM_CAMCORDER_FOCUS_MODE_CONTINUOUS:
+      focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL ;
+      break;
+    default:
+      focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY;
+      break;
+   }
+  GST_OBJECT_LOCK (camerasrc);
+  camerasrc->photoconf.focus_mode = focus_mode;
+  GST_OBJECT_UNLOCK (camerasrc);
+
+  return TRUE;
 }
 
 gboolean
 gst_camerasrc_camera_control_get_focus( GstCameraSrc* camerasrc,
     gint* mode, gint* range )
 {
-  return FALSE;
+  GstCameraSrcClass *bclass;
+  gboolean opened;
+  GST_DEBUG_OBJECT (camerasrc, "gst_camerasrc_camera_control_get_focus");
+
+  bclass = GST_CAMERA_SRC_GET_CLASS (camerasrc);
+  opened = bclass->is_open (camerasrc);
+  g_return_val_if_fail (opened, FALSE);
+  // Map focus from photography definitions
+  GST_OBJECT_LOCK (camerasrc);
+  switch (camerasrc->photoconf.focus_mode) {
+    case GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY:
+      *mode = MM_CAMCORDER_FOCUS_MODE_NONE;
+      break;
+    case GST_PHOTOGRAPHY_FOCUS_MODE_AUTO:
+      *mode = MM_CAMCORDER_FOCUS_MODE_AUTO;
+      break;
+    case GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL:
+      *mode = MM_CAMCORDER_FOCUS_MODE_CONTINUOUS;
+      break;
+    default:
+      *mode = MM_CAMCORDER_FOCUS_MODE_NONE;
+      break;
+   }
+  GST_OBJECT_UNLOCK (camerasrc);
+  *range = 0;
+
+  return TRUE;
 }
 
 gboolean 
 gst_camerasrc_camera_control_start_auto_focus( GstCameraSrc* camerasrc)
 {
-  return FALSE;
+  GstCameraSrcClass *bclass;
+  gboolean opened;
+
+  GST_DEBUG_OBJECT (camerasrc, "setting autofocus ON");
+
+  bclass = GST_CAMERA_SRC_GET_CLASS (camerasrc);
+  opened = bclass->is_open (camerasrc);
+  g_return_val_if_fail (opened, FALSE);
+
+  g_mutex_lock (camerasrc->af_lock);
+  camerasrc->requested_af_mode = AF_ON_REQUESTED;
+  g_mutex_unlock (camerasrc->af_lock);
+
+  return (bclass->set_autofocus(camerasrc, TRUE));
 }
 
 gboolean
 gst_camerasrc_camera_control_stop_auto_focus( GstCameraSrc* camerasrc)
 {
-  return FALSE;
+  GstCameraSrcClass *bclass;
+  gboolean opened;
+
+  GST_DEBUG_OBJECT (camerasrc, "setting autofocus OFF");
+
+  bclass = GST_CAMERA_SRC_GET_CLASS (camerasrc);
+  opened = bclass->is_open (camerasrc);
+  g_return_val_if_fail (opened, FALSE);
+
+  g_mutex_lock (camerasrc->af_lock);
+  camerasrc->requested_af_mode = AF_OFF_REQUESTED;
+  g_mutex_unlock (camerasrc->af_lock);
+
+  return (bclass->set_autofocus(camerasrc, FALSE));
 }
 gboolean
 gst_camerasrc_camera_control_set_focus_level( GstCameraSrc* camerasrc,
     gint manual_level )
 {
+  // Manual focus not supported atm
   return FALSE;
 }
 
@@ -238,6 +324,7 @@ gboolean
 gst_camerasrc_camera_control_get_focus_level( GstCameraSrc* camerasrc,
     gint* manual_level )
 {
+  // Manual focus not supported atm
   return FALSE;
 }
 
index 7abf48f..5c57a42 100644 (file)
@@ -26,6 +26,7 @@
 
 #include <gst/gst.h>
 #include <gst/interfaces/cameracontrol.h>
+#include <gst/interfaces/photography.h>
 
 #include "gstmfldcamerasrc.h"
 
@@ -44,6 +45,16 @@ G_BEGIN_DECLS
 #define GST_IS_CAMERA_SRC_CAMERA_CONTROL_CHANNEL_CLASS(klass) \
   (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CAMERA_SRC_CAMERA_CONTROL_CHANNEL))
 
+
+typedef enum{
+  MM_CAMCORDER_FOCUS_MODE_NONE = 0,   /**< Focus mode is None */
+  MM_CAMCORDER_FOCUS_MODE_PAN,        /**< Pan focus mode*/
+  MM_CAMCORDER_FOCUS_MODE_AUTO,       /**< Autofocus mode*/
+  MM_CAMCORDER_FOCUS_MODE_MANUAL,     /**< Manual focus mode*/
+  MM_CAMCORDER_FOCUS_MODE_TOUCH_AUTO, /**< Touch Autofocus mode*/
+  MM_CAMCORDER_FOCUS_MODE_CONTINUOUS, /**< Continuous Autofocus mode*/
+} MMCamcorderFocusMode;
+
 typedef struct _GstCameraSrcCameraControlChannel {
   GstCameraControlChannel parent;
 
index 7e1738c..5da24d7 100644 (file)
@@ -1,3 +1,7 @@
+* Tue Aug 14 2012 Marko Ollonen <marko.ollonen@ixonos.com> v0.43@1e08b82
+- basic AF support to camera control interface
+- update changelog
+
 * Fri Aug 10 2012 Marko Ollonen <marko.ollonen@ixonos.com> v0.43@4c5843c
 [ Marko Ollonen ]
 - photo effect support added.