From b5db7e22b30f3042bbbea0d7c541c7c5aa40e0b6 Mon Sep 17 00:00:00 2001 From: Marko Ollonen Date: Thu, 15 Nov 2012 13:17:41 +0200 Subject: [PATCH] clean up flash setting in camera control interface. flash setting method for 3A lib added. Change-Id: I086e0c74abba099b45a87a46864cc545127cfdef --- gst-libs/atomisphal/gstv4l2mfldadvci.c | 7 +++ gst-libs/atomisphal/gstv4l2mfldadvci.h | 1 + gst-libs/atomisphal/mfld_cam.c | 25 +++++++++++ gst-libs/atomisphal/mfld_cam.h | 2 + gst-libs/gst/camera/gstmfldcameracontroliface.c | 57 ++++++++----------------- gst-libs/gst/camera/gstmfldcameracontroliface.h | 11 ----- gst/mfldv4l2cam/v4l2camsrc_calls.c | 2 + packaging/mfldv4l2camsrc.changes | 3 ++ 8 files changed, 57 insertions(+), 51 deletions(-) diff --git a/gst-libs/atomisphal/gstv4l2mfldadvci.c b/gst-libs/atomisphal/gstv4l2mfldadvci.c index 10f0693..6eba158 100644 --- a/gst-libs/atomisphal/gstv4l2mfldadvci.c +++ b/gst-libs/atomisphal/gstv4l2mfldadvci.c @@ -334,6 +334,12 @@ static void lib_3a_AeGetFlashMode(ia_3a_ae_flash_mode *mode) *mode= ia_3a_ae_get_flash_mode(); } +static void lib_3a_AeSetFlashMode(ia_3a_ae_flash_mode mode) +{ + cam_lib_3a_dbg("%s:%d mode:%d \n", __func__, __LINE__, mode); + ci_adv_ae_set_flash_mode(mode); +} + static void lib_3a_AwbGetManualColorTemperature(int *ctemp) { cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__); @@ -535,6 +541,7 @@ lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci) mfldadvci->AeGetManualShutter = lib_3a_AeGetManualShutter; mfldadvci->Awbdata = lib_3a_Awbdata; mfldadvci->AeGetManualAperture = lib_3a_AeGetManualAperture; + mfldadvci->AeSetFlashMode = lib_3a_AeSetFlashMode; mfldadvci->AeGetFlashMode = lib_3a_AeGetFlashMode; mfldadvci->AwbGetManualColorTemperature = lib_3a_AwbGetManualColorTemperature; mfldadvci->Awbmatrix = lib_3a_Awbmatrix; diff --git a/gst-libs/atomisphal/gstv4l2mfldadvci.h b/gst-libs/atomisphal/gstv4l2mfldadvci.h index 24f053f..62b8ac6 100644 --- a/gst-libs/atomisphal/gstv4l2mfldadvci.h +++ b/gst-libs/atomisphal/gstv4l2mfldadvci.h @@ -154,6 +154,7 @@ struct _GstV4l2MFLDAdvCI unsigned * avg_b, unsigned * avg_gb); void (*AeGetManualAperture)(int *aperture); void (*AeGetFlashMode)(ia_3a_ae_flash_mode *mode); + void (*AeSetFlashMode)(ia_3a_ae_flash_mode mode); void (*AwbGetManualColorTemperature)(int *ctemp); void (*Awbmatrix)(int msqWbGain[3], int msqCcMtrx[9], unsigned short * shift); void (*GetGridInfo)(void * grid_info); diff --git a/gst-libs/atomisphal/mfld_cam.c b/gst-libs/atomisphal/mfld_cam.c index d2cfbd0..10befb3 100644 --- a/gst-libs/atomisphal/mfld_cam.c +++ b/gst-libs/atomisphal/mfld_cam.c @@ -1814,6 +1814,31 @@ cam_err_t get_ae_flash_mode(int fd, cam_flash_mode_t *mode) } return CAM_ERR_NONE; } +cam_err_t set_ae_flash_mode(int fd, cam_flash_mode_t mode) +{ + ia_3a_ae_flash_mode ia_mode; + + switch(mode) + { + case CAM_LIGHT_FLASH_MODE_AUTO: + ia_mode = ia_3a_ae_flash_mode_auto; + break; + case CAM_LIGHT_FLASH_MODE_OFF: + ia_mode = ia_3a_ae_flash_mode_off; + break; + case CAM_LIGHT_FLASH_MODE_ON: + ia_mode = ia_3a_ae_flash_mode_on; + break; + default: + ia_mode = ia_3a_ae_flash_mode_auto; + break; + } + + mfldadvci->AeSetFlashMode(ia_mode); + + return CAM_ERR_NONE; +} + cam_err_t get_awb_manual_color_temperature(int fd, int *ctemp) { diff --git a/gst-libs/atomisphal/mfld_cam.h b/gst-libs/atomisphal/mfld_cam.h index f2bfe44..59b73c2 100644 --- a/gst-libs/atomisphal/mfld_cam.h +++ b/gst-libs/atomisphal/mfld_cam.h @@ -296,6 +296,8 @@ cam_err_t get_awb_data(int fd, unsigned * num_p, unsigned * avg_r, unsigned * avg_gr, unsigned * avg_b, unsigned * avg_gb); cam_err_t get_ae_manual_aperture(int fd, int *aperture); cam_err_t get_ae_flash_mode(int fd, cam_flash_mode_t *mode); +cam_err_t set_ae_flash_mode(int fd, cam_flash_mode_t mode); + int cam_find_item_new (const int table[][2], const int item, int reverse); cam_err_t get_awb_manual_color_temperature(int fd, int *ctemp); diff --git a/gst-libs/gst/camera/gstmfldcameracontroliface.c b/gst-libs/gst/camera/gstmfldcameracontroliface.c index 1f976b9..1a45816 100644 --- a/gst-libs/gst/camera/gstmfldcameracontroliface.c +++ b/gst-libs/gst/camera/gstmfldcameracontroliface.c @@ -191,37 +191,31 @@ gst_camerasrc_camera_control_set_strobe( GstCameraSrc* camerasrc, { GstCameraSrcClass *bclass; 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); - switch (value) { - case MM_CAMCORDER_STROBE_MODE_OFF: - camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_OFF; - break; - case MM_CAMCORDER_STROBE_MODE_ON: - camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_ON; - break; - case MM_CAMCORDER_STROBE_MODE_AUTO: - camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_AUTO; - break; - case MM_CAMCORDER_STROBE_MODE_REDEYE_REDUCTION: - camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE; - break; - case MM_CAMCORDER_STROBE_MODE_SLOW_SYNC: - case MM_CAMCORDER_STROBE_MODE_FRONT_CURTAIN: - case MM_CAMCORDER_STROBE_MODE_REAR_CURTAIN: - // TODO check if used in torch or indication - case MM_CAMCORDER_STROBE_MODE_PERMANENT: - default: - camerasrc->photoconf.flash_mode = GST_PHOTOGRAPHY_FLASH_MODE_OFF; - break; - } + camerasrc->photoconf.flash_mode = value; GST_OBJECT_UNLOCK (camerasrc); + if (bclass->is_active (camerasrc)) { + ret = bclass->write_settings (camerasrc, &camerasrc->photoconf, FALSE); + } - return TRUE; + return ret; } gboolean gst_camerasrc_camera_control_get_strobe( GstCameraSrc* camerasrc, @@ -236,23 +230,6 @@ gst_camerasrc_camera_control_get_strobe( GstCameraSrc* camerasrc, GST_OBJECT_LOCK (camerasrc); *value = camerasrc->photoconf.flash_mode; - switch (camerasrc->photoconf.flash_mode) { - case GST_PHOTOGRAPHY_FLASH_MODE_OFF: - *value = MM_CAMCORDER_STROBE_MODE_OFF; - break; - case GST_PHOTOGRAPHY_FLASH_MODE_AUTO: - *value = MM_CAMCORDER_STROBE_MODE_AUTO; - break; - case GST_PHOTOGRAPHY_FLASH_MODE_ON: - *value = MM_CAMCORDER_STROBE_MODE_ON; - break; - case GST_PHOTOGRAPHY_FLASH_MODE_RED_EYE: - *value = MM_CAMCORDER_STROBE_MODE_REDEYE_REDUCTION; - break; - default: - *value = MM_CAMCORDER_STROBE_MODE_OFF; - break; - } GST_OBJECT_UNLOCK (camerasrc); return TRUE; diff --git a/gst-libs/gst/camera/gstmfldcameracontroliface.h b/gst-libs/gst/camera/gstmfldcameracontroliface.h index 6883568..5814830 100644 --- a/gst-libs/gst/camera/gstmfldcameracontroliface.h +++ b/gst-libs/gst/camera/gstmfldcameracontroliface.h @@ -55,17 +55,6 @@ typedef enum{ MM_CAMCORDER_FOCUS_MODE_CONTINUOUS, /**< Continuous Autofocus mode*/ } MMCamcorderFocusMode; -/* Nicely defined Interface. These are taken from user of interface no definitions in interface itself */ -enum MMCamcorderStrobeMode { - MM_CAMCORDER_STROBE_MODE_OFF = 0, /**< Always off */ - MM_CAMCORDER_STROBE_MODE_ON, /**< Always splashes */ - MM_CAMCORDER_STROBE_MODE_AUTO, /**< Depending on intensity of light, strobe starts to flash. */ - MM_CAMCORDER_STROBE_MODE_REDEYE_REDUCTION, /**< Red eye reduction. Multiple flash before capturing. */ - MM_CAMCORDER_STROBE_MODE_SLOW_SYNC, /**< Slow sync. A type of curtain synchronization. */ - MM_CAMCORDER_STROBE_MODE_FRONT_CURTAIN, /**< Front curtain. A type of curtain synchronization. */ - MM_CAMCORDER_STROBE_MODE_REAR_CURTAIN, /**< Rear curtain. A type of curtain synchronization. */ - MM_CAMCORDER_STROBE_MODE_PERMANENT, /**< keep turned on until turning off */ -}; typedef struct _GstCameraSrcCameraControlChannel { GstCameraControlChannel parent; diff --git a/gst/mfldv4l2cam/v4l2camsrc_calls.c b/gst/mfldv4l2cam/v4l2camsrc_calls.c index f8455a4..4153a76 100644 --- a/gst/mfldv4l2cam/v4l2camsrc_calls.c +++ b/gst/mfldv4l2cam/v4l2camsrc_calls.c @@ -3289,6 +3289,8 @@ gst_v4l2camsrc_set_flash_mode (GstCameraSrc * camsrc, err= cam_feature_set (v4l2camsrc->video_fd, CAM_LIGHT_FLASH_MODE, flash); + set_ae_flash_mode(v4l2camsrc->video_fd,flash); + if(err) goto error; diff --git a/packaging/mfldv4l2camsrc.changes b/packaging/mfldv4l2camsrc.changes index c5da20c..dd153e4 100644 --- a/packaging/mfldv4l2camsrc.changes +++ b/packaging/mfldv4l2camsrc.changes @@ -1,3 +1,6 @@ +* Thu Nov 15 2012 Marko Ollonen accepted/trunk/20121112.215039@c15e86d +- clean up flash setting in camera control interface. flash setting method for 3A lib added. + * Thu Nov 15 2012 Marko Ollonen accepted/trunk/20121112.215039@f192b64 - white bablance control added. -- 2.7.4