struct mfld_driver_t
{
int fd;
- advci_isp_mode mode;
+ cam_capture_mode_t capture_mode;
int rer_enabled;
int dis_enabled, dvs_enabled;
int af_enabled, ae_enabled, awb_enabled;
int af_result; // 0 means fail, it will be filled when captured finished.
int still_af_count, start_still_af;
+ advci_window window;
struct timeval af_start_time;
int initflag;
int mmap;
else
mfld_driver.first_frame = 1;
- mfld_driver.mode = mode;
+ mfld_driver.capture_mode = mode;
return ret;
}
cam_err_t
cam_driver_init (int fd, const char *sensor_id)
{
- advci_window window;
cam_driver_dbg ("%s\n", __func__);
mfld_driver.fd = fd;
mfldadvci->AfEnable(TRUE);
mfldadvci->AfLock(FALSE);
- window.x_left = 0;
- window.x_right = 0,
- window.y_top = 0;
- window.y_bottom = 0;
- window.weight = 0;
- mfldadvci->AeSetWindow(&window);
-
- mfldadvci->AeSetExposureProgram(advci_ae_exposure_program_auto);
- mfldadvci->AeSetMode(advci_ae_mode_auto);
- mfldadvci->AeSetMeteringMode(advci_ae_metering_mode_center);
- mfldadvci->AfSetRange (advci_af_range_full);
- mfldadvci->AwbSetMode(advci_awb_mode_auto);
- mfldadvci->AfSetMode(advci_af_mode_auto);
- mfldadvci->AfSetMeteringMode (advci_af_metering_mode_auto);
-
-
-
+ mfld_driver.window.x_left = 0;
+ mfld_driver.window.x_right = 0,
+ mfld_driver.window.y_top = 0;
+ mfld_driver.window.y_bottom = 0;
+ mfld_driver.window.weight = 0;
+ mfldadvci->AeSetWindow(&mfld_driver.window);
+
+ mfldadvci->AeSetExposureProgram(advci_ae_exposure_program_auto);
+ mfldadvci->AeSetMode(advci_ae_mode_auto);
+ mfldadvci->AeSetMeteringMode(advci_ae_metering_mode_center);
+ mfldadvci->AfSetRange (advci_af_range_full);
+ mfldadvci->AwbSetMode(advci_awb_mode_auto);
+ mfldadvci->AfSetMode(advci_af_mode_auto);
+ mfldadvci->AfSetMeteringMode (advci_af_metering_mode_auto);
}
else
mfld_driver.sensor_type = SENSOR_TYPE_SOC;
dump_v4l2_buffer(struct v4l2_buffer *buffer)
{
void *data;
- static unsigned int i = 0;
if (mfld_driver.mmap)
data = mmap (NULL, buffer->length, PROT_READ | PROT_WRITE, MAP_SHARED,
mfld_driver.fd, buffer->m.offset);
cam_capture_init (int fd, struct v4l2_buffer *buffer,
struct cam_capture_settings *capture_settings)
{
- int i;
gboolean need_assist = FALSE;
mfld_driver.mmap = capture_settings->mmap;
mfld_driver.ae_enabled = capture_settings->ae;
mfld_driver.enable_torch = TRUE;
cam_driver_set_torch(fd, TRUE);
}
- if (mfld_driver.af_enabled)
+ if (mfld_driver.af_enabled) {
mfldadvci->af_start ();
+ if(mfld_cam_settings.focus_mode == CAM_FOCUS_MODE_TOUCH_AUTO) {
+ mfldadvci->AfSetWindows (1, &mfld_driver.window );
+ mfldadvci->AeSetWindow(&mfld_driver.window );
+ }
+ }
}
}
cam_driver_dbg ("Begin cam_dis_still_process\n");
- if (mfld_driver.mode == advci_isp_mode_video)
+ if (mfld_driver.capture_mode == CAM_CAPTURE_MODE_VIDEO_RECORD)
dvs_vector = &mfld_driver.dvs_vector;
else
dvs_vector = NULL;
cam_capture_init (fd, buffer, capture_settings);
- if ((mfld_driver.mode == CAM_CAPTURE_MODE_STILL_CAPTURE ) &&
+ if ((mfld_driver.capture_mode == CAM_CAPTURE_MODE_STILL_CAPTURE ) &&
(mfld_driver.sensor_type == SENSOR_TYPE_RAW) ) {
/* check flash here not in always when capturing frames */
flash_en = get_flash_status ();
return cam_driver_get_focus_posi(fd, posi);
}
+void cam_set_af_ae_window(advci_window *window)
+{
+ mfldadvci->AfSetWindows (1, window);
+ mfldadvci->AeSetWindow(window);
+ mfld_driver.window = *window;
+}
+
void get_af_result(int fd, unsigned * result)
{
*result = mfld_driver.af_result; // 0 means fail, it will be filled when captured finished.
cam_err_t cam_get_focus_posi(int fd, unsigned * posi);
void get_af_result(int fd, unsigned * result);
cam_err_t get_af_status(int fd, unsigned * status);
+void cam_set_af_ae_window(advci_window *window);
+
cam_err_t get_exp_mode(int fd, cam_scene_mode_t *expmode);
void get_ae_bias(int fd, int * bias);
cam_err_t get_ae_manual_shutter(int fd, float *time);
static gboolean gst_v4l2camsrc_unlock (GstCameraSrc * src);
static gboolean gst_v4l2camsrc_unlock_stop (GstCameraSrc * src);
static gboolean gst_v4l2camsrc_set_zoom (GstCameraSrc * camsrc, gfloat zoom);
-static gboolean gst_v4l2camsrc_set_AeAafwindow (GstCameraSrc * camsrc, GstCameraSrc3a_window window);
static gboolean gst_v4l2camsrc_set_ae_mode (GstCameraSrc * camsrc, int mode);
static gboolean gst_v4l2camsrc_get_ae_mode (GstCameraSrc * camsrc, int *mode);
gboolean
gst_v4l2camsrc_set_strobe_state (GstCameraSrc *camsrc, gboolean state);
+gboolean
+gst_v4l2camsrc_set_AeAafwindow (GstCameraSrc * camsrc, GstCameraSrc3a_window window);
/*
* gst_v4l2camsrc_class_init:
v4l2camsrc->mfldadvci->AfSetWindows (1, (advci_window *) (&(v4l2camsrc->af_window)));
- v4l2camsrc->mfldadvci->AeSetWindow((advci_window *) (&(v4l2camsrc->af_window)));
gst_structure_free (af_window_param);
g_free (ctmp);
return ret;
}
static gboolean
-gst_v4l2camsrc_set_AeAafwindow (GstCameraSrc * camsrc, GstCameraSrc3a_window window)
-{
- GstMFLDV4l2CamSrc *v4l2camsrc;
- gboolean ret = TRUE;
-
- v4l2camsrc = GST_V4L2CAMSRC (camsrc);
-
- GST_DEBUG_OBJECT(v4l2camsrc,"ae-af-window-setting: x_left:%d, x_right:%d,"
- "y_bottom:%d, y_top:%d, weight:%d.\n",
- window.x_left,window.x_right,
- window.y_bottom, window.y_top,
- window.weight);
-
- v4l2camsrc->af_window = v4l2camsrc->ae_window = *(GstCameraWindow*)&window;
-
- if (v4l2camsrc->is_active) {
- g_mutex_lock (v4l2camsrc->device_mutex);
- v4l2camsrc->mfldadvci->AfSetWindows (1, (advci_window *) (&(v4l2camsrc->af_window)));
- v4l2camsrc->mfldadvci->AeSetWindow((advci_window *) (&(v4l2camsrc->af_window)));
- g_mutex_unlock (v4l2camsrc->device_mutex);
- }
-
- return ret;
-}
-static gboolean
gst_v4l2camsrc_set_ae_mode(GstCameraSrc * camsrc, int mode)
{
GstMFLDV4l2CamSrc *v4l2camsrc;
int attribute_num, const int value)
{
GstMFLDV4l2CamSrc *v4l2camsrc = GST_V4L2CAMSRC (camsrc);
- cam_err_t err;
struct v4l2_control control;
GST_DEBUG_OBJECT (v4l2camsrc, "setting value of attribute %d to %d",
{
GstStructure *tmp = NULL;
GList *res = NULL;
- long w,h,wl,wh,hl,hh,ws,hs;
+ long wl,wh,hl,hh,ws,hs;
wl = size->stepwise.min_width; wh = size->stepwise.max_width; ws = size->stepwise.step_width;
hl = size->stepwise.min_height; hh = size->stepwise.max_height; hs = size->stepwise.step_height;
gst_camerasrc_send_capture_stop_message (camsrc);
} else {
/* Send the CAF status message */
- GstCameraFocusStatus s;
+ GstCameraFocusStatus focus_status;
gboolean lret;
- lret = gst_v4l2camsrc_check_focus_status(v4l2camsrc, &s, FALSE);
+ lret = gst_v4l2camsrc_check_focus_status(v4l2camsrc, &focus_status, FALSE);
if (lret) {
- GST_LOG_OBJECT (v4l2camsrc, "CAF status: %d", s.status);
- if (s.status == GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS )
+ GST_LOG_OBJECT (v4l2camsrc, "CAF status: %d", focus_status.status);
+ if (focus_status.status == GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS )
gst_camerasrc_send_af_status(GST_CAMERA_SRC (v4l2camsrc) ,CAMERASRC_AUTO_FOCUS_RESULT_FOCUSED);
- else if (s.status == GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL )
+ else if (focus_status.status == GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL )
gst_camerasrc_send_af_status(GST_CAMERA_SRC (v4l2camsrc) ,CAMERASRC_AUTO_FOCUS_RESULT_FAILED);
else {
- GST_WARNING_OBJECT (v4l2camsrc, "CAF status erronous: %d send as failed", s.status);
+ GST_WARNING_OBJECT (v4l2camsrc, "CAF status erronous: %d send as failed", focus_status.status);
gst_camerasrc_send_af_status(GST_CAMERA_SRC (v4l2camsrc) ,CAMERASRC_AUTO_FOCUS_RESULT_FAILED);
}
}
GstCameraControlExifInfo *exif_info)
{
GstMFLDV4l2CamSrc *v4l2camsrc;
- int focal_len;
cam_err_t err;
struct atomisp_makernote_info maker_note;
unsigned char *buf;
}
gboolean
+gst_v4l2camsrc_set_AeAafwindow (GstCameraSrc * camsrc, GstCameraSrc3a_window window)
+{
+ GstMFLDV4l2CamSrc *v4l2camsrc;
+ gboolean ret = TRUE;
+
+ v4l2camsrc = GST_V4L2CAMSRC (camsrc);
+
+ GST_DEBUG_OBJECT(v4l2camsrc,"ae-af-window-setting: x_left:%d, x_right:%d,"
+ "y_bottom:%d, y_top:%d, weight:%d.\n",
+ window.x_left,window.x_right,
+ window.y_bottom, window.y_top,
+ window.weight);
+
+ v4l2camsrc->af_window = v4l2camsrc->ae_window = *(GstCameraWindow*)&window;
+
+ if (v4l2camsrc->is_active) {
+ g_mutex_lock (v4l2camsrc->device_mutex);
+ cam_set_af_ae_window((advci_window *) (&v4l2camsrc->af_window));
+ g_mutex_unlock (v4l2camsrc->device_mutex);
+ }
+
+ return ret;
+}
+
+gboolean
gst_v4l2camsrc_set_autofocus (GstCameraSrc * camsrc, gboolean on)
{
GstMFLDV4l2CamSrc *v4l2camsrc;
cam_err_t err = CAM_ERR_NONE;
- err= cam_set_autofocus(on);
- v4l2camsrc->af_enabled = on;
+ err= cam_set_autofocus(on);
+ v4l2camsrc->af_enabled = on;
ret = (err == CAM_ERR_NONE);
{
gboolean ret = FALSE;
cam_focus_status_t status;
- cam_err_t err;
gboolean update;
GST_DEBUG_OBJECT (v4l2camsrc, "Retrieving focus status");
ret = TRUE;
GST_DEBUG_OBJECT (v4l2camsrc, "Focus status: %d", fs->status);
-
- if (detailed && fs->status == CAM_FOCUS_STATUS_SUCCESS) {
- fs->windows = g_malloc (sizeof (guint));
- fs->num_windows = 1;
- fs->focus_rows = 1;
- fs->focus_columns = 1;
- fs->coverage = 0;
- }
}
return ret;
}
parm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
err = ioctl(fd, VIDIOC_G_PARM, &parm);
if (err < 0) {
- GST_DEBUG(stderr,"Unable to get frame rate: %s (%d).\n",
+ GST_DEBUG("Unable to get frame rate: %s (%d).\n",
strerror(errno), errno);
goto done;
}