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;
}
gst_camerasrc_camera_control_get_focus_level( GstCameraSrc* camerasrc,
gint* manual_level )
{
+ // Manual focus not supported atm
return FALSE;
}
#include <gst/gst.h>
#include <gst/interfaces/cameracontrol.h>
+#include <gst/interfaces/photography.h>
#include "gstmfldcamerasrc.h"
#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;