Focus range and mode now separated.
Change-Id: I4eeaa81abc740a957b6b78d9c74b40f7891016c1
return ret;
}
-static cam_err_t
-set_focus_mode (int mode)
+cam_err_t
+cam_set_focus_mode (int mode, int range)
{
if ( (mfld_driver.sensor_type == SENSOR_TYPE_RAW) &&
- (mfld_cam_settings.focus_mode != mode) ) {
+ (mfld_cam_settings.focus_mode != mode ||
+ mfld_cam_settings.focus_range != range) ) {
- cam_driver_dbg ("%s mode %d\n", __func__, mode);
+ cam_driver_dbg ("%s mode: %d range:%d \n", __func__, mode, range);
switch (mode) {
case CAM_FOCUS_MODE_AUTO:
mfldadvci->AfSetMode (advci_af_mode_manual);
- mfldadvci->AfSetRange (advci_af_range_norm);
mfldadvci->AfSetMeteringMode(advci_af_metering_mode_auto);
break;
case CAM_FOCUS_MODE_TOUCH_AUTO:
mfldadvci->AfSetMode (advci_af_mode_auto);
- mfldadvci->AfSetRange (advci_af_range_full);
mfldadvci->AfSetMeteringMode(advci_af_metering_mode_multi);
break;
case CAM_FOCUS_MODE_MACRO:
- mfldadvci->AfSetMode (advci_af_mode_auto);
- mfldadvci->AfSetRange (advci_af_range_macro);
- mfldadvci->AfSetMeteringMode(advci_af_metering_mode_auto);
- break;
case CAM_FOCUS_MODE_NORM:
+ case CAM_FOCUS_MODE_CONTINUOUS:
mfldadvci->AfSetMode (advci_af_mode_auto);
- mfldadvci->AfSetRange (advci_af_range_norm);
mfldadvci->AfSetMeteringMode(advci_af_metering_mode_auto);
break;
case CAM_FOCUS_MODE_FULL:
+ case CAM_FOCUS_MODE_HYPERFOCAL:
+ case CAM_FOCUS_MODE_MANUAL:
mfldadvci->AfSetMode (advci_af_mode_manual);
- mfldadvci->AfSetRange (advci_af_range_full);
break;
- case CAM_FOCUS_MODE_CONTINUOUS:
- mfldadvci->AfSetMode (advci_af_mode_auto);
+ default:
+ cam_driver_dbg ("Not supported mode\n");
+ return CAM_ERR_UNSUPP;
+ }
+ switch (range) {
+ case CAM_FOCUS_RANGE_NORMAL:
mfldadvci->AfSetRange (advci_af_range_norm);
- mfldadvci->AfSetMeteringMode(advci_af_metering_mode_auto);
+ break;
+ case CAM_FOCUS_RANGE_MACRO:
+ mfldadvci->AfSetRange (advci_af_range_macro);
+ break;
+ case CAM_FOCUS_RANGE_FULL:
+ mfldadvci->AfSetRange (advci_af_range_full);
break;
default:
cam_driver_dbg ("Not supported mode\n");
return CAM_ERR_UNSUPP;
+ break;
}
mfld_cam_settings.focus_mode = mode;
+ mfld_cam_settings.focus_range = range;
+
}
return CAM_ERR_NONE;
}
case CAM_EXPOSURE_ISO_VALUE:
ret = set_iso_speed (value);
break;
- case CAM_FOCUS_MODE:
- ret = set_focus_mode (value);
- break;
case CAM_GENERAL_FLICKER_REDUCTION_MODE:
ret = set_flicker_mode (value);
break;
mfld_cam_settings.tone_mode = CAM_GENERAL_EFFECT_TYPE_NORMAL;
mfld_cam_settings.flicker_mode = CAM_GENERAL_FLICKER_REDUCTION_MODE_50HZ;
mfld_cam_settings.focus_mode = CAM_FOCUS_MODE_AUTO;
+ mfld_cam_settings.focus_range = CAM_FOCUS_RANGE_FULL;
mfld_driver.ae_awb_af_enabled = 0;
mfld_driver.dis_enabled = 0;
CAM_FOCUS_MODE_NORM,
CAM_FOCUS_MODE_CONTINUOUS,
CAM_FOCUS_MODE_TOUCH_AUTO,
+ CAM_FOCUS_MODE_HYPERFOCAL,
+ CAM_FOCUS_MODE_MANUAL
} cam_focus_mode_t;
+
+typedef enum
+{
+ CAM_FOCUS_RANGE_NORMAL,
+ CAM_FOCUS_RANGE_MACRO,
+ CAM_FOCUS_RANGE_FULL
+} cam_focus_range_t;
+
typedef enum
{
CAM_VIEWFINDER_MODE_VIEWFINDER,
int ev_compensation;
int iso_speed;
struct tone_control tone;
- int flicker_mode, focus_mode;
+ int flicker_mode, focus_mode, focus_range;
int noise_reduction, capture_correction;
float zoom;
};
int cam_checkfocus_status (cam_focus_status_t * status, int force_update);
+cam_err_t cam_set_focus_mode (int mode, int range);
+
cam_err_t cam_get_shake_risk (int fd, int risk);
cam_err_t cam_set_flash (int fd, int on);
GstFocusMode focus_mode;
gboolean ret = TRUE;
- GST_DEBUG_OBJECT (camerasrc, "gst_camerasrc_camera_control_set_focus: %d", mode);
+ GST_DEBUG_OBJECT (camerasrc, "set_focus mode: %d range:%d", mode, range);
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_AUTO:
- focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_AUTO;
- break;
- case MM_CAMCORDER_FOCUS_MODE_TOUCH_AUTO:
- focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT;
- break;
- case MM_CAMCORDER_FOCUS_MODE_PAN:
- focus_mode = GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL;
- 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;
+ camerasrc->af_range = range;
+ camerasrc->af_mode = mode;
+
GST_OBJECT_UNLOCK (camerasrc);
if (bclass->is_active (camerasrc)) {
- ret = bclass->write_settings (camerasrc, &camerasrc->photoconf, FALSE);
+ bclass->set_focus_state(camerasrc, camerasrc->af_mode, camerasrc->af_range);
}
return ret;
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_HYPERFOCAL:
- *mode = MM_CAMCORDER_FOCUS_MODE_PAN;
- break;
- case GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL:
- *mode = MM_CAMCORDER_FOCUS_MODE_CONTINUOUS;
- break;
- default:
- *mode = MM_CAMCORDER_FOCUS_MODE_NONE;
- break;
- }
+ *mode = camerasrc->af_mode;
+ *range = camerasrc->af_range;
GST_OBJECT_UNLOCK (camerasrc);
- *range = 0;
+
return TRUE;
}
#define GST_IS_CAMERA_SRC_CAMERA_CONTROL_CHANNEL_CLASS(klass) \
(G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_CAMERA_SRC_CAMERA_CONTROL_CHANNEL))
-/* Nicely defined Interface. These are taken from user of interface no definitions in interface itself */
-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;
camerasrc->preview_fourcc = 0;
camerasrc->requested_af_mode = AF_NONE_REQUESTED;
+ camerasrc->af_range = AF_RANGE_FULL;
+ camerasrc->af_mode = AF_MODE_AUTO;
camerasrc->maker_note = FALSE;
/* second pad init */
AF_ON_REQUESTED
} GstCameraSrcAFReqMode;
+typedef enum {
+ AF_RANGE_NORMAL,
+ AF_RANGE_MACRO,
+ AF_RANGE_FULL
+} GstCameraSrcAFRange;
+
+typedef enum{
+ AF_MODE_NONE = 0, /**< Focus mode is None */
+ AF_MODE_PAN, /**< Pan focus mode*/
+ AF_MODE_AUTO, /**< Autofocus mode*/
+ AF_MODE_MANUAL, /**< Manual focus mode*/
+ AF_TOUCH_AUTO, /**< Touch Autofocus mode*/
+ AF_CONTINUOUS, /**< Continuous Autofocus mode*/
+} GstCameraSrcAFMode;
+
/**
* GstCameraCapturePhase:
//guint frame_byte_size;
guint8 requested_af_mode;
+ gint af_range;
+ gint af_mode;
+
gboolean maker_note;
gboolean enable_torch;
(*write_settings) (GstCameraSrc *camsrc,
GstPhotoSettings *photoconf,
gboolean scene_mode_override);
+ gboolean
+ (*set_focus_state) (GstCameraSrc *camsrc,
+ gint mode, gint range);
gboolean
(*read_settings) (GstCameraSrc *camsrc, GstPhotoSettings *photoconf);
GstPhotoSettings * photoconf);
gboolean gst_v4l2camsrc_write_settings (GstCameraSrc * camsrc,
GstPhotoSettings * photoconf, gboolean scene_override);
+
+gboolean gst_v4l2camsrc_set_focus_state(GstCameraSrc *camsrc,
+ gint mode, gint range);
+
gboolean
gst_v4l2camsrc_set_flash_mode (GstCameraSrc *camsrc, int value);
gboolean
GST_DEBUG_FUNCPTR (gst_v4l2camsrc_read_settings);
camera_class->write_settings =
GST_DEBUG_FUNCPTR (gst_v4l2camsrc_write_settings);
+ camera_class->set_focus_state =
+ GST_DEBUG_FUNCPTR (gst_v4l2camsrc_set_focus_state);
+
camera_class->get_capabilities =
GST_DEBUG_FUNCPTR (gst_v4l2camsrc_get_capabilities);
camera_class->set_zoom = GST_DEBUG_FUNCPTR (gst_v4l2camsrc_set_zoom);
};
static const gint gst_v4l2camsrc_focus_map[] = {
- CAM_FOCUS_MODE_AUTO, /* GST_PHOTOGRAPHY_FOCUS_MODE_AUTO = 0 */
- CAM_FOCUS_MODE_MACRO, /* GST_PHOTOGRAPHY_FOCUS_MODE_MACRO */
- CAM_FOCUS_MODE_TOUCH_AUTO, /* GST_PHOTOGRAPHY_FOCUS_MODE_PORTRAIT */
- CAM_FOCUS_MODE_FULL, /* GST_PHOTOGRAPHY_FOCUS_MODE_INFINITY */
- CAM_FOCUS_MODE_AUTO, /* GST_PHOTOGRAPHY_FOCUS_MODE_HYPERFOCAL */
- CAM_FOCUS_MODE_FULL, /* GST_PHOTOGRAPHY_FOCUS_MODE_EXTENDED */
- CAM_FOCUS_MODE_CONTINUOUS, /* GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_NORMAL */
- CAM_FOCUS_MODE_CONTINUOUS, /* GST_PHOTOGRAPHY_FOCUS_MODE_CONTINUOUS_EXTENDED */
+ CAM_FOCUS_MODE_AUTO, /* AF_MODE_NONE = 0 */
+ CAM_FOCUS_MODE_HYPERFOCAL, /* AF_MODE_PAN */
+ CAM_FOCUS_MODE_TOUCH_AUTO, /* AF_MODE_AUTO */
+ CAM_FOCUS_MODE_MANUAL, /* AF_MODE_MANUAL */
+ CAM_FOCUS_MODE_TOUCH_AUTO, /* AF_TOUCH_AUTO */
+ CAM_FOCUS_MODE_CONTINUOUS /* AF_CONTINUOUS */
-1
};
goto error;
}
- err = cam_feature_get (v4l2camsrc->video_fd, CAM_FOCUS_MODE, &focus);
- if (err != CAM_ERR_NONE) {
- GST_DEBUG ("CAM_FOCUS_MODE query failed: %s", cameralib_error_map[err]);
- goto error;
- }
-
err =
cam_feature_get (v4l2camsrc->video_fd, CAM_GENERAL_FLICKER_REDUCTION_MODE,
&flicker);
photoconf->tone_mode = find_item (gst_v4l2camsrc_effect_map, effect);
photoconf->scene_mode = find_item (gst_v4l2camsrc_scene_map, scene);
photoconf->flash_mode = find_item (gst_v4l2camsrc_flash_map, flash);
- photoconf->focus_mode = find_item (gst_v4l2camsrc_focus_map, focus);
photoconf->flicker_mode = find_item (gst_v4l2camsrc_flicker_map, flicker);
photoconf->ev_compensation = (gfloat) ev;
}
gboolean
+gst_v4l2camsrc_set_focus_state(GstCameraSrc *camsrc,
+ gint mode, gint range)
+{
+ cam_err_t err = CAM_ERR_NONE;
+ GST_DEBUG ("update focus mode and range");
+
+ err = cam_set_focus_mode(gst_v4l2camsrc_focus_map[mode], range);
+ return(err == CAM_ERR_NONE);
+}
+
+
+gboolean
gst_v4l2camsrc_write_settings (GstCameraSrc * camsrc,
GstPhotoSettings * photoconf, gboolean scene_override)
{
cam_feature_set (v4l2camsrc->video_fd, CAM_EXPOSURE_ISO_VALUE,
gst_v4l2camsrc_libmfld_reverse_map_iso (photoconf->iso_speed));
- cam_feature_set (v4l2camsrc->video_fd, CAM_FOCUS_MODE,
- gst_v4l2camsrc_focus_map[photoconf->focus_mode]);
-
cam_feature_set (v4l2camsrc->video_fd, CAM_GENERAL_FLICKER_REDUCTION_MODE,
gst_v4l2camsrc_flicker_map[photoconf->flicker_mode]);
+* Tue Apr 09 2013 Marko Ollonen <marko.ollonen@ixonos.com> accepted/tizen_2.0/20130307.195130@fc8a6d8
+- Add support for auto focus range.
+- cleanup lsc & dvs code.
+- [Author: Jussi, Saavalainen] Drop still shot resolution step requirement to 4/4
+- [Author: Yuan, Feng] compile: fix issue of different structure sizes between libs
+
* Mon Apr 08 2013 Marko Ollonen <marko.ollonen@ixonos.com> accepted/tizen_2.0/20130307.195130@de1d55e
- second pad on request.