From 36bb95a581fa67a92b9a60a71d334f1fb7686a57 Mon Sep 17 00:00:00 2001 From: Marko Ollonen Date: Tue, 4 Dec 2012 11:55:16 +0200 Subject: [PATCH] prevent soc sensor call 3a lib methods. Change-Id: I1234becab6d71eab3fbafb4560a5f7c5cfc89949 --- gst-libs/atomisphal/mfld_cam.c | 367 ++++++++++++++++++++++----------------- packaging/mfldv4l2camsrc.changes | 3 + 2 files changed, 206 insertions(+), 164 deletions(-) diff --git a/gst-libs/atomisphal/mfld_cam.c b/gst-libs/atomisphal/mfld_cam.c index e75723b..c233155 100644 --- a/gst-libs/atomisphal/mfld_cam.c +++ b/gst-libs/atomisphal/mfld_cam.c @@ -161,37 +161,38 @@ static cam_err_t set_wb_mode (int wb_mode) { - switch (wb_mode) { - case CAM_AWB_MODE_AUTO: - mfldadvci->AwbSetMode (advci_awb_mode_auto); - break; - case CAM_AWB_MODE_DAYLIGHT: - mfldadvci->AwbSetMode (advci_awb_mode_manual); - mfldadvci->AwbSetLightSource (advci_awb_light_source_clear_sky); - break; - case CAM_AWB_MODE_CLOUDY: - mfldadvci->AwbSetMode (advci_awb_mode_manual); - mfldadvci->AwbSetLightSource (advci_awb_light_source_cloudiness); - break; - case CAM_AWB_MODE_SUNSET: - mfldadvci->AwbSetMode (advci_awb_mode_manual); - mfldadvci->AwbSetLightSource (advci_awb_light_source_shadow_area); - break; - case CAM_AWB_MODE_TUNGSTEN: - mfldadvci->AwbSetMode (advci_awb_mode_manual); - mfldadvci->AwbSetLightSource (advci_awb_light_source_filament_lamp); - break; - case CAM_AWB_MODE_FLUORESCENT: - mfldadvci->AwbSetMode (advci_awb_mode_manual); - mfldadvci->AwbSetLightSource (advci_awb_light_source_fluorlamp_w); - break; - default: - cam_driver_dbg ("Not support awb mode\n"); - return CAM_ERR_UNSUPP; + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) { + switch (wb_mode) { + case CAM_AWB_MODE_AUTO: + mfldadvci->AwbSetMode (advci_awb_mode_auto); + break; + case CAM_AWB_MODE_DAYLIGHT: + mfldadvci->AwbSetMode (advci_awb_mode_manual); + mfldadvci->AwbSetLightSource (advci_awb_light_source_clear_sky); + break; + case CAM_AWB_MODE_CLOUDY: + mfldadvci->AwbSetMode (advci_awb_mode_manual); + mfldadvci->AwbSetLightSource (advci_awb_light_source_cloudiness); + break; + case CAM_AWB_MODE_SUNSET: + mfldadvci->AwbSetMode (advci_awb_mode_manual); + mfldadvci->AwbSetLightSource (advci_awb_light_source_shadow_area); + break; + case CAM_AWB_MODE_TUNGSTEN: + mfldadvci->AwbSetMode (advci_awb_mode_manual); + mfldadvci->AwbSetLightSource (advci_awb_light_source_filament_lamp); + break; + case CAM_AWB_MODE_FLUORESCENT: + mfldadvci->AwbSetMode (advci_awb_mode_manual); + mfldadvci->AwbSetLightSource (advci_awb_light_source_fluorlamp_w); + break; + default: + cam_driver_dbg ("Not support awb mode\n"); + return CAM_ERR_UNSUPP; + } } mfld_cam_settings.wb_mode = wb_mode; - - return 0; + return CAM_ERR_NONE; } cam_err_t @@ -200,8 +201,12 @@ get_wb_mode (int *wb_mode) advci_awb_light_source ls; advci_awb_mode mode; - mfldadvci->AwbGetMode (&mode); + if (mfld_driver.sensor_type != SENSOR_TYPE_RAW) { + *wb_mode = CAM_AWB_MODE_AUTO; + return CAM_ERR_NONE; + } + mfldadvci->AwbGetMode (&mode); if (mode == advci_awb_mode_auto) { *wb_mode = CAM_AWB_MODE_AUTO; return CAM_ERR_NONE; @@ -231,6 +236,7 @@ get_wb_mode (int *wb_mode) *wb_mode = CAM_AWB_MODE_DAYLIGHT; break; } + return CAM_ERR_NONE; } @@ -261,31 +267,32 @@ set_scene_mode (int mode) { advci_ae_exposure_program scene; - switch (mode) { - case CAM_GENERAL_SCENE_MODE_PORTRAIT: - scene = advci_ae_exposure_program_portrait; - break; - case CAM_GENERAL_SCENE_MODE_LANDSCAPE: - scene = advci_ae_exposure_program_landscape; - break; - case CAM_GENERAL_SCENE_MODE_SPORT: - scene = advci_ae_exposure_program_sports; - break; - case CAM_GENERAL_SCENE_MODE_NIGHT: - scene = advci_ae_exposure_program_night; - break; - case CAM_GENERAL_SCENE_MODE_AUTO: - scene = advci_ae_exposure_program_auto; - break; - case CAM_GENERAL_SCENE_MODE_FIREWORKS: - scene = advci_ae_exposure_program_fireworks; - break; - default: - cam_driver_dbg ("%s Not supported Scene Mode %d\n", __func__, mode); - break; + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) { + switch (mode) { + case CAM_GENERAL_SCENE_MODE_PORTRAIT: + scene = advci_ae_exposure_program_portrait; + break; + case CAM_GENERAL_SCENE_MODE_LANDSCAPE: + scene = advci_ae_exposure_program_landscape; + break; + case CAM_GENERAL_SCENE_MODE_SPORT: + scene = advci_ae_exposure_program_sports; + break; + case CAM_GENERAL_SCENE_MODE_NIGHT: + scene = advci_ae_exposure_program_night; + break; + case CAM_GENERAL_SCENE_MODE_AUTO: + scene = advci_ae_exposure_program_auto; + break; + case CAM_GENERAL_SCENE_MODE_FIREWORKS: + scene = advci_ae_exposure_program_fireworks; + break; + default: + cam_driver_dbg ("%s Not supported Scene Mode %d\n", __func__, mode); + break; + } + mfldadvci->AeSetExposureProgram (scene); } - mfldadvci->AeSetExposureProgram (scene); - mfld_cam_settings.scene_mode = mode; return CAM_ERR_NONE; } @@ -300,10 +307,12 @@ get_scene_mode (int *scene_mode) static cam_err_t set_iso_speed (int iso) { - cam_err_t ret; - mfld_cam_settings.iso_speed = iso; - ret = mfldadvci->AeSetIso(mfld_cam_settings.iso_speed); - return ret; + cam_err_t ret = CAM_ERR_NONE; + mfld_cam_settings.iso_speed = iso; + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) { + ret = mfldadvci->AeSetIso(mfld_cam_settings.iso_speed); + } + return ret; } static cam_err_t @@ -345,24 +354,25 @@ get_flash_mode (int *flash_mode) static cam_err_t set_flicker_mode (int mode) { - - /* Convert camera genreral flicker mode to AE flicker mode */ - switch (mode) { - case CAM_GENERAL_FLICKER_REDUCTION_MODE_OFF: - mfldadvci->AeSetFlickerMode (advci_ae_flicker_mode_off); - break; - case CAM_GENERAL_FLICKER_REDUCTION_MODE_50HZ: - mfldadvci->AeSetFlickerMode (advci_ae_flicker_mode_50hz); - break; - case CAM_GENERAL_FLICKER_REDUCTION_MODE_60HZ: - mfldadvci->AeSetFlickerMode (advci_ae_flicker_mode_60hz); - break; - case CAM_GENERAL_FLICKER_REDUCTION_MODE_AUTO: - mfldadvci->AeSetFlickerMode (advci_ae_flicker_mode_auto); - break; - default: - cam_driver_dbg ("Not supported flicker mode\n"); - return CAM_ERR_UNSUPP; + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) { + /* Convert camera genreral flicker mode to AE flicker mode */ + switch (mode) { + case CAM_GENERAL_FLICKER_REDUCTION_MODE_OFF: + mfldadvci->AeSetFlickerMode (advci_ae_flicker_mode_off); + break; + case CAM_GENERAL_FLICKER_REDUCTION_MODE_50HZ: + mfldadvci->AeSetFlickerMode (advci_ae_flicker_mode_50hz); + break; + case CAM_GENERAL_FLICKER_REDUCTION_MODE_60HZ: + mfldadvci->AeSetFlickerMode (advci_ae_flicker_mode_60hz); + break; + case CAM_GENERAL_FLICKER_REDUCTION_MODE_AUTO: + mfldadvci->AeSetFlickerMode (advci_ae_flicker_mode_auto); + break; + default: + cam_driver_dbg ("Not supported flicker mode\n"); + return CAM_ERR_UNSUPP; + } } return CAM_ERR_NONE; } @@ -370,9 +380,13 @@ set_flicker_mode (int mode) static cam_err_t get_flicker_mode (int *mode) { - int ret = 0; + int ret = CAM_ERR_NONE; advci_ae_flicker_mode flicker_mode; + if (mfld_driver.sensor_type != SENSOR_TYPE_RAW) { + *mode = CAM_GENERAL_FLICKER_REDUCTION_MODE_AUTO; + return ret; + } mfldadvci->AeGetFlickerMode (&flicker_mode); /* Convert AE flicker mode to camera general flicker mode */ @@ -811,6 +825,10 @@ cam_checkfocus_status (cam_focus_status_t * status, int force_update) advci_af_status af_status; gboolean do_read = FALSE; + if (mfld_driver.sensor_type != SENSOR_TYPE_RAW) { + return 0; + } + if (mfld_driver.focus_done >= FOCUS_REALLY_DONE) { mfld_driver.focus_done = 0; do_read = TRUE; @@ -1184,7 +1202,8 @@ libmfld_cam_dispose (void) mfld_driver.thread = 0; } mfld_driver.g_3a_started = 0; - mfldadvci->uninit (); + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) + mfldadvci->uninit (); return; } @@ -1442,12 +1461,15 @@ mfldcam_3a_process (gpointer data) void mfldcam_3a_start (void) { - if (!mfld_driver.g_3a_started) { - mfld_driver.g_3a_started = 1; - if (pthread_create (&mfld_driver.thread, NULL, mfldcam_3a_process, - NULL) != 0) { - mfld_driver.g_3a_started = 0; - cam_driver_dbg ("Create thread failed %s\n", __func__);; + + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW){ + if (!mfld_driver.g_3a_started) { + mfld_driver.g_3a_started = 1; + if (pthread_create (&mfld_driver.thread, NULL, mfldcam_3a_process, + NULL) != 0) { + mfld_driver.g_3a_started = 0; + cam_driver_dbg ("Create thread failed %s\n", __func__);; + } } } } @@ -1455,9 +1477,12 @@ mfldcam_3a_start (void) void mfldcam_3a_stop (void) { - if (mfld_driver.g_3a_started) - pthread_cancel (mfld_driver.thread); - mfld_driver.g_3a_started = 0; + + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW){ + if (mfld_driver.g_3a_started) + pthread_cancel (mfld_driver.thread); + mfld_driver.g_3a_started = 0; + } } static cam_err_t @@ -1542,7 +1567,7 @@ cam_capture_init (int fd, struct v4l2_buffer *buffer, mfld_driver.first_frame = 0; } /* Still AF start */ - if (mfld_driver.start_still_af) { + if ((mfld_driver.start_still_af) && (mfld_driver.sensor_type == SENSOR_TYPE_RAW)) { if (mfld_driver.af_enabled && mfld_driver.still_af_count > 0) mfldadvci->af_stop (); mfld_driver.focus_done = 0; @@ -1590,24 +1615,26 @@ cam_dis_dvs_processing (struct atomisp_dis_vector *vectors, advci_frame_t *bufs, struct atomisp_dis_vector *dvs_vector; cam_driver_dbg ("Begin cam_dis_get_statices\n"); - mfldadvci->dis_read_statistics (); //read_dis_stats_from_xmem(); + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) { + mfldadvci->dis_read_statistics (); //read_dis_stats_from_xmem(); - cam_driver_dbg ("Begin cam_dis_still_process\n"); + cam_driver_dbg ("Begin cam_dis_still_process\n"); - if (mfld_driver.mode == advci_isp_mode_video) - dvs_vector = &mfld_driver.dvs_vector; - else - dvs_vector = NULL; - // TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 - // mfldadvci->dis_process (dvs_vector); /* dis_vector only valid in video mode */ + if (mfld_driver.mode == advci_isp_mode_video) + dvs_vector = &mfld_driver.dvs_vector; + else + dvs_vector = NULL; + // TODO !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 + // mfldadvci->dis_process (dvs_vector); /* dis_vector only valid in video mode */ - if (dis_enabled) { - mfldadvci->dis_calc_still (&vectors[frame_cnt], frame_cnt); - cam_copy_v4l2buf_to_user (&bufs[frame_cnt], buffer); - } + if (dis_enabled) { + mfldadvci->dis_calc_still (&vectors[frame_cnt], frame_cnt); + cam_copy_v4l2buf_to_user (&bufs[frame_cnt], buffer); + } - cam_driver_dbg ("Update DIS results\n"); - mfldadvci->update_dis_results(); + cam_driver_dbg ("Update DIS results\n"); + mfldadvci->update_dis_results(); + } } static cam_err_t @@ -1798,32 +1825,38 @@ cam_err_t get_exp_mode(int fd, cam_scene_mode_t *expmode) { advci_ae_exposure_program mode; - mfldadvci->AeGetExposureProgram(&mode); + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) { - /* Convert AE flicker mode to camera general flicker mode */ - switch (mode) { - case advci_ae_exposure_program_auto: - *expmode = CAM_GENERAL_SCENE_MODE_AUTO; - break; - case advci_ae_exposure_program_portrait: - *expmode = CAM_GENERAL_SCENE_MODE_PORTRAIT; - break; - case advci_ae_exposure_program_sports: - *expmode = CAM_GENERAL_SCENE_MODE_SPORT; - break; - case advci_ae_exposure_program_landscape: - *expmode = CAM_GENERAL_SCENE_MODE_LANDSCAPE; - break; - case advci_ae_exposure_program_night: - *expmode = CAM_GENERAL_SCENE_MODE_NIGHT; - break; - case advci_ae_exposure_program_fireworks: - *expmode = CAM_GENERAL_SCENE_MODE_FIREWORKS; - break; - default: - cam_driver_dbg ("Not supported exposure mode\n"); - return CAM_ERR_UNSUPP; + mfldadvci->AeGetExposureProgram(&mode); + + /* Convert AE flicker mode to camera general flicker mode */ + switch (mode) { + case advci_ae_exposure_program_auto: + *expmode = CAM_GENERAL_SCENE_MODE_AUTO; + break; + case advci_ae_exposure_program_portrait: + *expmode = CAM_GENERAL_SCENE_MODE_PORTRAIT; + break; + case advci_ae_exposure_program_sports: + *expmode = CAM_GENERAL_SCENE_MODE_SPORT; + break; + case advci_ae_exposure_program_landscape: + *expmode = CAM_GENERAL_SCENE_MODE_LANDSCAPE; + break; + case advci_ae_exposure_program_night: + *expmode = CAM_GENERAL_SCENE_MODE_NIGHT; + break; + case advci_ae_exposure_program_fireworks: + *expmode = CAM_GENERAL_SCENE_MODE_FIREWORKS; + break; + default: + cam_driver_dbg ("Not supported exposure mode\n"); + return CAM_ERR_UNSUPP; + } } + else { + *expmode = CAM_GENERAL_SCENE_MODE_AUTO; + } return CAM_ERR_NONE; } @@ -1870,52 +1903,58 @@ cam_err_t get_ae_flash_mode(int fd, cam_flash_mode_t *mode) { cam_flash_mode_t ci_mode; - mfldadvci->AeGetFlashMode(&ci_mode); - - switch(ci_mode) - { - case advci_ae_flash_mode_auto: - *mode = CAM_LIGHT_FLASH_MODE_AUTO; - break; - case advci_ae_flash_mode_off: - *mode = CAM_LIGHT_FLASH_MODE_OFF; - break; - case advci_ae_flash_mode_on: - *mode = CAM_LIGHT_FLASH_MODE_ON; - break; - case advci_ae_flash_mode_day_sync: - *mode = CAM_LIGHT_FLASH_MODE_AUTO; - break; - case advci_ae_flash_mode_slow_sync: - *mode = CAM_LIGHT_FLASH_MODE_AUTO; - break; - default: - *mode = CAM_LIGHT_FLASH_MODE_AUTO; - return CAM_ERR_3A; + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) { + mfldadvci->AeGetFlashMode(&ci_mode); + switch(ci_mode) + { + case advci_ae_flash_mode_auto: + *mode = CAM_LIGHT_FLASH_MODE_AUTO; + break; + case advci_ae_flash_mode_off: + *mode = CAM_LIGHT_FLASH_MODE_OFF; + break; + case advci_ae_flash_mode_on: + *mode = CAM_LIGHT_FLASH_MODE_ON; + break; + case advci_ae_flash_mode_day_sync: + *mode = CAM_LIGHT_FLASH_MODE_AUTO; + break; + case advci_ae_flash_mode_slow_sync: + *mode = CAM_LIGHT_FLASH_MODE_AUTO; + break; + default: + *mode = CAM_LIGHT_FLASH_MODE_AUTO; + return CAM_ERR_3A; + } } + else + *mode = CAM_LIGHT_FLASH_MODE_OFF; + return CAM_ERR_NONE; } cam_err_t set_ae_flash_mode(int fd, cam_flash_mode_t mode) { advci_ae_flash_mode flash_mode; - switch(mode) - { - case CAM_LIGHT_FLASH_MODE_AUTO: - flash_mode = advci_ae_flash_mode_auto; - break; - case CAM_LIGHT_FLASH_MODE_OFF: - flash_mode = advci_ae_flash_mode_off; - break; - case CAM_LIGHT_FLASH_MODE_ON: - flash_mode = advci_ae_flash_mode_on; - break; - default: - flash_mode = advci_ae_flash_mode_auto; - break; - } + if (mfld_driver.sensor_type == SENSOR_TYPE_RAW) { + switch(mode) + { + case CAM_LIGHT_FLASH_MODE_AUTO: + flash_mode = advci_ae_flash_mode_auto; + break; + case CAM_LIGHT_FLASH_MODE_OFF: + flash_mode = advci_ae_flash_mode_off; + break; + case CAM_LIGHT_FLASH_MODE_ON: + flash_mode = advci_ae_flash_mode_on; + break; + default: + flash_mode = advci_ae_flash_mode_auto; + break; + } - mfldadvci->AeSetFlashMode(flash_mode); + mfldadvci->AeSetFlashMode(flash_mode); + } return CAM_ERR_NONE; } diff --git a/packaging/mfldv4l2camsrc.changes b/packaging/mfldv4l2camsrc.changes index ce05ccc..7daa25d 100644 --- a/packaging/mfldv4l2camsrc.changes +++ b/packaging/mfldv4l2camsrc.changes @@ -1,3 +1,6 @@ +* Tue Dec 04 2012 Marko Ollonen accepted/trunk/20121130.212420@ebba9cc +- prevent soc sensor call 3a lib methods. TZSP-4281 + * Fri Nov 30 2012 Marko Ollonen submit/trunk/20121129.125759@70ce86b - atom isp strobe light control added. -- 2.7.4