1 /* GStreamer MFLD ADVIC API
2 * Copyright (C) 2010 Intel Corporation <www.intel.com>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
20 #include "gstv4l2mfldadvci.h"
21 #include <linux/videodev2.h>
23 #include <sys/ioctl.h>
25 #include "ci_adv_pub.h"
27 void cam_lib_3a_dbg(const char *format, ...);
29 int __android_log_print(int prio, const char *tag, const char *fmt, ...)
34 /* for debug message and error message output
37 static bool use_3A_debug = FALSE;
40 cam_lib_3a_dbg (const char *format, ...)
44 va_start (ap, format);
45 vfprintf (stdout, format, ap);
50 static void wrapper_default_void (void)
55 static void wrapper_default_int (int a)
60 static int wrapper_default_int_void (void)
65 static void wrapper_default_ae (void)
70 static void wrapper_default_init(void)
74 static void wrapper_default_uninit(void)
79 wrapper_default_dis_process (struct atomisp_dis_statistics *stats,
80 struct atomisp_dis_vector *motion_vector)
85 wrapper_default_dis_calc_still (struct atomisp_dis_vector * vector, int frame_number)
90 wrapper_default_do_redeye_removal (ia_frame *ia_frame)
95 wrapper_default_still_compose (ia_frame *com_buf,
98 struct atomisp_dis_vector vectors[])
103 wrapper_default_AeSetFlickerMode(ia_3a_ae_flicker_mode mode)
108 wrapper_default_AeGetFlickerMode(ia_3a_ae_flicker_mode *mode)
113 wrapper_default_AeSetExposureProgram(ia_3a_ae_exposure_program program)
118 wrapper_default_AeGetExposureProgram(ia_3a_ae_exposure_program *program)
122 static void wrapper_default_AfSetMode(ia_3a_af_mode mode)
126 static void wrapper_default_AfGetMode(ia_3a_af_mode *mode)
130 static void wrapper_default_AfSetRange(ia_3a_af_range range)
134 static void wrapper_default_AfGetRange(ia_3a_af_range *range)
138 static void wrapper_default_AwbSetMode(ia_3a_awb_mode mode)
142 static void wrapper_default_AwbGetMode(ia_3a_awb_mode *mode)
146 static void wrapper_default_AwbSetLightSource(ia_3a_awb_light_source ls)
151 wrapper_default_AwbGetLightSource(ia_3a_awb_light_source *ls)
156 wrapper_default_int_int (int i)
161 wrapper_default_intp (int *p)
166 wrapper_default_isp_set_fd (int fd, const char *sensor_id)
168 return SENSOR_TYPE_SOC;
172 wrapper_default_switch_mode (ia_3a_isp_mode mode, float frame_rate)
177 wrapper_default_AeGetWindowsNum(int *num)
179 return ci_adv_Success;
182 static void wrapper_default_AwbVersion(int * major, int * minor)
186 static void wrapper_default_AeVersion(int * major, int * minor)
190 static void wrapper_default_AfVersion(int * major, int * minor)
194 static void wrapper_default_AfGetStillAfStatus(ia_3a_af_status *status)
198 static bool wrapper_default_af_is_complete(void)
203 static void wrapper_default_RerVersion(int * major, int * minor)
208 static ci_adv_Err wrapper_default_AeGetManualShutter(int *time)
210 return ci_adv_Success;
214 wrapper_default_Awbdata(unsigned * num_p, unsigned * avg_r,
216 unsigned * avg_b, unsigned * avg_gb)
221 static void wrapper_default_AeGetManualAperture(int *aperture)
225 static void wrapper_default_AeGetFlashMode(ia_3a_ae_flash_mode *mode)
229 static void wrapper_default_AeSetFlashMode(ia_3a_ae_flash_mode mode)
233 static void wrapper_default_AwbGetManualColorTemperature(int *ctemp)
238 wrapper_default_Awbmatrix(int msqWbGain[3], int msqCcMtrx[9], unsigned short * shift)
242 static void wrapper_default_GetGridInfo(void * grid_info)
247 wrapper_default_AeSetMeteringMode(ia_3a_ae_metering_mode mode)
252 wrapper_default_AeGetMeteringMode(ia_3a_ae_metering_mode *mode)
257 wrapper_default_AfSetMeteringMode(ia_3a_af_metering_mode mode)
262 wrapper_default_AfGetMeteringMode(ia_3a_af_metering_mode *mode)
267 wrapper_default_Ae_Af_GetWindow(ia_3a_window *window)
273 wrapper_default_Ae_Af_SetWindow( ia_3a_window *window)
276 static void wrapper_default_af_start( )
280 static void wrapper_default_af_stop( )
283 static void wrapper_default_ae_calc_for_flash( )
286 static void wrapper_default_calc_without_flash( )
290 static void wrapper_default_calc_with_flash( )
294 static void wrapper_default_AeAfAwb_process( struct timeval *frame_timestamp)
297 static void wrapper_default_get_statistics( )
301 static void wrapper_default_awb_apply_results( )
304 static void wrapper_default_AwbSetImageEffect(ia_3a_image_effect effect)
309 wrapper_default_AwbGetImageEffect(ia_3a_image_effect *effect)
314 wrapper_default_is_flash_needed(bool *useflash)
319 static ci_adv_Err wrapper_default_AeSetManualIso(int sensitivity)
321 return ci_adv_success;
324 static ci_adv_Err wrapper_default_AeGetManualIso(int *sensitivity)
326 return ci_adv_success;
330 wrapper_default_GetMakerNote(ia_3a_mknote_mode mknMode, ia_3a_mknote *note)
335 wrapper_default_AddMakerNoteRecord(ia_3a_mknote_field_type mkn_format_id,
336 ia_3a_mknote_field_name mkn_name_id,
338 unsigned short record_size)
344 wrapper_default_PutMakerNote(ia_3a_mknote *mknData)
350 wrapper_default_ResetMakerNote(void)
354 /*------------------------------------------------------------------------------------------------*/
365 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
370 lib_3a_int_void (void)
385 use_3A_debug= ((env = getenv ("LIBMFLDCAM_DEBUG")) && strstr (env, "verbose"));
386 cam_lib_3a_dbg("%s:%d", __func__, __LINE__);
392 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
397 lib_3a_dis_process (struct atomisp_dis_statistics *stats,
398 struct atomisp_dis_vector *motion_vector)
400 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
405 lib_3a_dis_calc_still (struct atomisp_dis_vector * vector, int frame_number)
407 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
412 lib_3a_do_redeye_removal (ia_frame *ia_frame)
414 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
418 lib_3a_still_compose (ia_frame *com_buf,
421 struct atomisp_dis_vector vectors[])
423 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
428 lib_3a_AeSetFlickerMode(ia_3a_ae_flicker_mode mode)
430 cam_lib_3a_dbg("%s:%d mode:%d\n", __func__, __LINE__,mode);
431 ci_adv_ae_set_flicker_mode(mode);
435 lib_3a_AeGetFlickerMode(ia_3a_ae_flicker_mode *mode)
437 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
438 *mode= ia_3a_ae_get_flicker_mode();
442 lib_3a_AeSetExposureProgram(ia_3a_ae_exposure_program program)
444 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
445 ci_adv_ae_set_exposure_program(program);
449 lib_3a_AeGetExposureProgram(ia_3a_ae_exposure_program *program)
451 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
452 ci_adv_ae_get_exposure_program(program);
456 lib_3a_AfSetMode(ia_3a_af_mode mode)
458 cam_lib_3a_dbg("%s:%d mode:%d\n", __func__, __LINE__,mode);
459 ci_adv_af_set_mode(mode);
463 lib_3a_AfGetMode(ia_3a_af_mode *mode)
465 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
466 *mode = ia_3a_af_get_focus_mode();
470 lib_3a_AfSetRange(ia_3a_af_range range)
472 cam_lib_3a_dbg ("%s:%d\n", __func__, __LINE__);
473 ci_adv_af_set_range(range);
477 lib_3a_AfGetRange(ia_3a_af_range *range)
479 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
480 *range = ia_3a_af_get_focus_range();
484 lib_3a_AwbSetMode(ia_3a_awb_mode mode)
486 cam_lib_3a_dbg("%s:%d mode:%d\n" , __func__, __LINE__,mode);
487 ci_adv_awb_set_mode(mode);
491 lib_3a_AwbGetMode(ia_3a_awb_mode *mode)
493 *mode = ia_3a_awb_get_mode();
497 lib_3a_AwbSetLightSource(ia_3a_awb_light_source ls)
499 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
500 ci_adv_awb_set_light_source(ls);
504 lib_3a_AwbGetLightSource(ia_3a_awb_light_source *ls)
506 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
507 *ls = ia_3a_awb_get_light_source();
511 lib_3a_int_int (int i)
513 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
514 return ci_adv_Success;
520 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
521 return ci_adv_Success;
525 lib_3a_isp_set_fd (int fd, const char *sensor_id)
530 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
531 if (ci_adv_init(sensor_id, fd, NULL) == 0) {
532 sensor_type = SENSOR_TYPE_RAW;
534 sensor_type = SENSOR_TYPE_SOC;
537 if (sensor_type == SENSOR_TYPE_RAW) {
538 cam_lib_3a_dbg("SENSOR_TYPE_RAW");
539 ci_adv_awb_enable(TRUE);
540 ci_adv_awb_lock(FALSE);
542 ci_adv_ae_enable(TRUE);
543 ci_adv_ae_lock(FALSE);
545 ci_adv_af_enable(TRUE);
546 ci_adv_af_lock(FALSE);
554 ci_adv_ae_set_window(&window);
556 ci_adv_ae_set_exposure_program(ia_3a_ae_exposure_program_auto);
557 ci_adv_ae_set_mode(ia_3a_ae_mode_auto);
558 ci_adv_ae_set_metering_mode(ia_3a_ae_metering_mode_center);
559 ci_adv_af_set_range (ia_3a_af_range_full);
560 ci_adv_awb_set_mode(ia_3a_awb_mode_auto);
561 ci_adv_af_set_mode(ia_3a_af_mode_auto);
562 ci_adv_af_set_metering_mode (ia_3a_af_metering_mode_auto);
570 lib_3a_switch_mode (ia_3a_isp_mode mode, float frame_rate)
572 cam_lib_3a_dbg("%s:%d mode:%d frame_rate:%f\n", __func__, __LINE__, mode,frame_rate);
573 ci_adv_configure(mode, frame_rate);
576 static ci_adv_Err lib_3a_AeGetWindowsNum(int *num)
578 cam_lib_3a_dbg ("%s:%d\n", __func__, __LINE__);
579 return ci_adv_Success;
582 static void lib_3a_AwbVersion(int * major, int * minor)
584 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
585 ci_adv_awb_version(major,minor);
588 static void lib_3a_AeVersion(int * major, int * minor)
590 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
591 ci_adv_ae_version(major,minor);
594 static void lib_3a_AfVersion(int * major, int * minor)
596 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
597 ci_adv_af_version(major,minor);
600 static void lib_3a_AfGetStillAfStatus(ia_3a_af_status *status)
602 *status = ci_adv_af_get_status();
605 static bool lib_3a_af_is_complete(void)
608 ia_3a_af_status status;
609 bool completed = FALSE;
611 lib_3a_AfGetStillAfStatus(&status);
613 if (status == ia_3a_af_status_error) {
614 cam_lib_3a_dbg("==== still AF failed \n");
617 else if (status == ia_3a_af_status_success) {
618 cam_lib_3a_dbg("==== still AF success");
620 } else if (status == ia_3a_af_status_cancelled) {
621 cam_lib_3a_dbg("==== still AF cancelled \n");
625 cam_lib_3a_dbg("==== still AF continue %d \n", status);
631 static void lib_3a_RerVersion(int * major, int * minor)
633 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
637 static ci_adv_Err lib_3a_AeGetManualShutter(int *time)
639 /* TODO time is float */
640 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
641 ci_adv_ae_set_manual_shutter((float)*time);
642 return ci_adv_Success;
645 static void lib_3a_Awbdata(unsigned * num_p, unsigned * avg_r, unsigned * avg_gr,
646 unsigned * avg_b, unsigned * avg_gb)
648 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
652 static void lib_3a_AeGetManualAperture(int *aperture)
654 // TODO returns float
655 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
656 *aperture = (int)ia_3a_ae_get_manual_aperture();
659 static void lib_3a_AeGetFlashMode(ia_3a_ae_flash_mode *mode)
661 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
662 *mode= ia_3a_ae_get_flash_mode();
665 static void lib_3a_AeSetFlashMode(ia_3a_ae_flash_mode mode)
667 cam_lib_3a_dbg("%s:%d mode:%d \n", __func__, __LINE__, mode);
668 ci_adv_ae_set_flash_mode(mode);
671 static void lib_3a_AwbGetManualColorTemperature(int *ctemp)
673 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
674 *ctemp = ia_3a_awb_get_manual_color_temperature();
678 lib_3a_Awbmatrix(int msqWbGain[3], int msqCcMtrx[9], unsigned short * shift)
680 cam_lib_3a_dbg ("%s:%d\n", __func__, __LINE__);
683 static void lib_3a_GetGridInfo(void * grid_info)
685 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
689 lib_3a_AeSetMeteringMode(ia_3a_ae_metering_mode mode)
691 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
692 ci_adv_ae_set_metering_mode(mode);
696 lib_3a_AeGetMeteringMode(ia_3a_ae_metering_mode *mode)
698 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
699 *mode = ia_3a_ae_get_metering_mode();
703 lib_3a_AfSetMeteringMode(ia_3a_af_metering_mode mode)
705 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
706 ci_adv_af_set_metering_mode(mode);
710 lib_3a_AfGetMeteringMode(ia_3a_af_metering_mode *mode)
712 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
713 ci_adv_af_get_metering_mode(mode);
717 lib_3a_Ae_Af_GetWindow(ia_3a_window *window)
719 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
720 ia_3a_ae_get_window(window);
724 lib_3a_Ae_Af_SetWindow( ia_3a_window *window)
726 cam_lib_3a_dbg("%s:window....%d:%d:%d:%d:%d\n",
727 __func__, window->x_left,window->x_right,
728 window->y_top , window->y_bottom, window->weight);
730 ci_adv_ae_set_window(window);
731 ci_adv_af_set_windows(1, window);
737 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
744 cam_lib_3a_dbg ("%s:%d\n", __func__, __LINE__);
749 lib_3a_ae_calc_for_flash( )
751 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
752 ci_adv_process_for_flash(ia_3a_flash_stage_none);
755 lib_3a_calc_without_flash( )
757 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
758 ci_adv_process_for_flash(ia_3a_flash_stage_pre);
762 lib_3a_calc_with_flash( )
764 cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
765 ci_adv_process_for_flash(ia_3a_flash_stage_main);
769 lib_3a_AeAfAwb_process( struct timeval *frame_timestamp)
772 //cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
773 status = ci_adv_process_frame(TRUE,frame_timestamp);
776 lib_3a_get_statistics( )
778 // cam_lib_3a_dbg("%s:%d\n", __func__, __LINE__);
779 ci_adv_3a_stat cur_stat;
780 ci_adv_get_3a_stat (&cur_stat);
781 /* cam_lib_3a_dbg("%8.3f, %8.3f, %8.3f, %8.3f, %8d, %8.3f, %8.3f, %8.3f\n",
794 lib_3a_awb_apply_results( )
798 lib_3a_AwbSetImageEffect(ia_3a_image_effect effect)
800 cam_lib_3a_dbg("%s:%d effect %d\n", __func__, __LINE__, effect);
802 ci_adv_isp_set_image_effect(effect);
806 lib_3a_AwbGetImageEffect(ia_3a_image_effect *effect)
808 *effect = ci_adv_isp_get_image_effect();
809 cam_lib_3a_dbg("%s:%d effect: %d\n", __func__, __LINE__, *effect);
814 lib_ae_is_flash_needed(bool *useflash)
816 ci_adv_ae_is_flash_necessary(useflash);
817 cam_lib_3a_dbg("%s:%d useflash: %d\n", __func__, __LINE__, *useflash);
822 lib_3a_AeSetManualIso(int sensitivity)
827 cam_lib_3a_dbg("error in get log2 math computation in line %d; sensitivity: %d\n", __LINE__, sensitivity);
828 return ci_adv_InvalidArgument;
831 sv = log10((float)sensitivity / 3.125) / log10(2.0);
832 ci_adv_err ret = ci_adv_ae_set_manual_iso(sv);
833 if(ci_adv_success != ret)
836 cam_lib_3a_dbg(" *** manual set iso in EV: %f\n", sv);
838 return ci_adv_success;
842 lib_3a_AeGetManualIso(int *sensitivity)
845 ci_adv_err ret = ci_adv_ae_get_manual_iso(&sv);
846 if(ci_adv_success != ret)
848 *sensitivity = (int)(3.125 * pow(2, sv));
850 return ci_adv_success;
854 lib_3a_GetMakerNote(ia_3a_mknote_mode mknMode, ia_3a_mknote *note)
856 note = ci_adv_get_maker_note(mknMode);
860 lib_3a_AddMakerNoteRecord(ia_3a_mknote_field_type mkn_format_id,
861 ia_3a_mknote_field_name mkn_name_id,
863 unsigned short record_size)
865 ci_adv_add_maker_note_record(mkn_format_id, mkn_name_id, record, record_size);
869 lib_3a_PutMakerNote(ia_3a_mknote *mknData)
873 ci_adv_put_maker_note(mknData);
878 lib_3a_ResetMakerNote(void)
880 ci_adv_reset_maker_note();
885 lib_3a_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
888 mfldadvci->initialized = 0;
889 mfldadvci->init = lib_3a_init;
890 mfldadvci->uninit = lib_3a_uninit;
891 mfldadvci->isp_set_fd = lib_3a_isp_set_fd;
892 mfldadvci->mode_spec_init = lib_3a_int_void; /* TODO */
893 mfldadvci->switch_mode = lib_3a_switch_mode;
895 mfldadvci->AeAfAwb_process = lib_3a_AeAfAwb_process;
896 mfldadvci->get_statistics = lib_3a_get_statistics; /* TODO atomisp_dis_statistics ? */
898 mfldadvci->ae_calc_for_flash = lib_3a_ae_calc_for_flash;
899 mfldadvci->ae_calc_without_flash = lib_3a_calc_without_flash;
900 mfldadvci->ae_calc_with_flash = lib_3a_calc_with_flash;
902 mfldadvci->ae_is_flash_needed = lib_ae_is_flash_needed;
904 mfldadvci->ae_apply_results = lib_3a_ae;
906 mfldadvci->af_start = lib_3a_af_start;
907 mfldadvci->af_stop = lib_3a_af_stop;
908 mfldadvci->af_is_complete = lib_3a_af_is_complete;
909 mfldadvci->awb_apply_results = lib_3a_awb_apply_results;
910 mfldadvci->awb_calc_flash = lib_3a_void;
912 mfldadvci->dis_read_statistics = lib_3a_void;
913 mfldadvci->update_dis_results = lib_3a_void;
914 mfldadvci->dis_process = lib_3a_dis_process;
915 mfldadvci->dis_calc_still = lib_3a_dis_calc_still;
917 mfldadvci->do_redeye_removal = lib_3a_do_redeye_removal;
918 mfldadvci->still_compose = lib_3a_still_compose;
919 mfldadvci->load_gdc_table = lib_3a_void;
921 mfldadvci->AeSetBias = lib_3a_int_int;
922 mfldadvci->AeGetBias = lib_3a_intp;
923 mfldadvci->AeSetFlickerMode = lib_3a_AeSetFlickerMode;
924 mfldadvci->AeGetFlickerMode = lib_3a_AeGetFlickerMode;
925 mfldadvci->AeSetExposureProgram = lib_3a_AeSetExposureProgram;
926 mfldadvci->AeGetExposureProgram = lib_3a_AeGetExposureProgram;
927 mfldadvci->AeSetMeteringMode = lib_3a_AeSetMeteringMode;
928 mfldadvci->AeGetMeteringMode = lib_3a_AeGetMeteringMode;
929 mfldadvci->AeGetWindow = lib_3a_Ae_Af_GetWindow;
930 mfldadvci->AeSetWindow = lib_3a_Ae_Af_SetWindow;
931 mfldadvci->AeSetIso = lib_3a_AeSetManualIso;
932 mfldadvci->AeGetIso = lib_3a_AeGetManualIso;
935 mfldadvci->AfSetMode = lib_3a_AfSetMode;
936 mfldadvci->AfGetMode = lib_3a_AfGetMode;
937 mfldadvci->AfSetRange = lib_3a_AfSetRange;
938 mfldadvci->AfGetRange = lib_3a_AfGetRange;
939 mfldadvci->AfSetMeteringMode = lib_3a_AfSetMeteringMode;
940 mfldadvci->AfGetMeteringMode = lib_3a_AfGetMeteringMode;
941 mfldadvci->AfGetWindow = lib_3a_Ae_Af_GetWindow;
942 mfldadvci->AfSetWindow = lib_3a_Ae_Af_SetWindow;
944 mfldadvci->AwbSetMode = lib_3a_AwbSetMode;
945 mfldadvci->AwbGetMode = lib_3a_AwbGetMode;
946 mfldadvci->AwbSetLightSource = lib_3a_AwbSetLightSource;
947 mfldadvci->AwbGetLightSource = lib_3a_AwbGetLightSource;
948 mfldadvci->AwbSetImageEffect = lib_3a_AwbSetImageEffect;
949 mfldadvci->AwbGetImageEffect = lib_3a_AwbGetImageEffect;
951 mfldadvci->AeGetWindowsNum = lib_3a_AeGetWindowsNum;
952 mfldadvci->AwbVersion = lib_3a_AwbVersion;
953 mfldadvci->AeVersion = lib_3a_AeVersion;
954 mfldadvci->AfVersion = lib_3a_AfVersion;
955 mfldadvci->AfGetStillAfStatus = lib_3a_AfGetStillAfStatus;
956 mfldadvci->RerVersion = lib_3a_RerVersion;
957 mfldadvci->AeGetManualShutter = lib_3a_AeGetManualShutter;
958 mfldadvci->Awbdata = lib_3a_Awbdata;
959 mfldadvci->AeGetManualAperture = lib_3a_AeGetManualAperture;
960 mfldadvci->AeSetFlashMode = lib_3a_AeSetFlashMode;
961 mfldadvci->AeGetFlashMode = lib_3a_AeGetFlashMode;
962 mfldadvci->AwbGetManualColorTemperature = lib_3a_AwbGetManualColorTemperature;
963 mfldadvci->Awbmatrix = lib_3a_Awbmatrix;
964 mfldadvci->GetGridInfo = lib_3a_GetGridInfo;
965 mfldadvci->GetMakerNote = lib_3a_GetMakerNote;
966 mfldadvci->AddMakerNoteRecord = lib_3a_AddMakerNoteRecord;
967 mfldadvci->PutMakerNote = lib_3a_PutMakerNote;
968 mfldadvci->ResetMakerNote = lib_3a_ResetMakerNote;
970 #endif /* USE_STATIC_3A */
972 wrapper_default_link_functions_init (GstV4l2MFLDAdvCI *mfldadvci)
975 mfldadvci->initialized = 0;
976 mfldadvci->init = wrapper_default_init;
977 mfldadvci->uninit = wrapper_default_uninit;
978 mfldadvci->isp_set_fd = wrapper_default_isp_set_fd;
979 mfldadvci->mode_spec_init = wrapper_default_int_void; /* TODO */
980 mfldadvci->switch_mode = wrapper_default_switch_mode;
982 mfldadvci->AeAfAwb_process = wrapper_default_AeAfAwb_process;
983 mfldadvci->get_statistics = wrapper_default_get_statistics; /* TODO atomisp_dis_statistics ? */
985 mfldadvci->ae_calc_for_flash = wrapper_default_ae_calc_for_flash;
986 mfldadvci->ae_calc_without_flash = wrapper_default_calc_without_flash;
987 mfldadvci->ae_calc_with_flash = wrapper_default_calc_with_flash;
989 mfldadvci->ae_is_flash_needed = wrapper_default_is_flash_needed;
991 mfldadvci->ae_apply_results = wrapper_default_ae;
993 mfldadvci->af_start = wrapper_default_af_start;
994 mfldadvci->af_stop = wrapper_default_af_stop;
995 mfldadvci->af_is_complete = wrapper_default_af_is_complete;
996 mfldadvci->awb_apply_results = wrapper_default_awb_apply_results;
997 mfldadvci->awb_calc_flash = wrapper_default_void;
999 mfldadvci->dis_read_statistics = wrapper_default_void;
1000 mfldadvci->update_dis_results = wrapper_default_void;
1001 mfldadvci->dis_process = wrapper_default_dis_process;
1002 mfldadvci->dis_calc_still = wrapper_default_dis_calc_still;
1004 mfldadvci->do_redeye_removal = wrapper_default_do_redeye_removal;
1005 mfldadvci->still_compose = wrapper_default_still_compose;
1006 mfldadvci->load_gdc_table = wrapper_default_void;
1008 mfldadvci->AeSetBias = wrapper_default_int_int;
1009 mfldadvci->AeGetBias = wrapper_default_intp;
1010 mfldadvci->AeSetFlickerMode = wrapper_default_AeSetFlickerMode;
1011 mfldadvci->AeGetFlickerMode = wrapper_default_AeGetFlickerMode;
1012 mfldadvci->AeSetExposureProgram = wrapper_default_AeSetExposureProgram;
1013 mfldadvci->AeGetExposureProgram = wrapper_default_AeGetExposureProgram;
1014 mfldadvci->AeSetMeteringMode = wrapper_default_AeSetMeteringMode;
1015 mfldadvci->AeGetMeteringMode = wrapper_default_AeGetMeteringMode;
1016 mfldadvci->AeGetWindow = wrapper_default_Ae_Af_GetWindow;
1017 mfldadvci->AeSetWindow = wrapper_default_Ae_Af_SetWindow;
1018 mfldadvci->AeSetIso = wrapper_default_AeSetManualIso;
1019 mfldadvci->AeGetIso = wrapper_default_AeGetManualIso;
1022 mfldadvci->AfSetMode = wrapper_default_AfSetMode;
1023 mfldadvci->AfGetMode = wrapper_default_AfGetMode;
1024 mfldadvci->AfSetRange = wrapper_default_AfSetRange;
1025 mfldadvci->AfGetRange = wrapper_default_AfGetRange;
1026 mfldadvci->AfSetMeteringMode = wrapper_default_AfSetMeteringMode;
1027 mfldadvci->AfGetMeteringMode = wrapper_default_AfGetMeteringMode;
1028 mfldadvci->AfGetWindow = wrapper_default_Ae_Af_GetWindow;
1029 mfldadvci->AfSetWindow = wrapper_default_Ae_Af_SetWindow;
1031 mfldadvci->AwbSetMode = wrapper_default_AwbSetMode;
1032 mfldadvci->AwbGetMode = wrapper_default_AwbGetMode;
1033 mfldadvci->AwbSetLightSource = wrapper_default_AwbSetLightSource;
1034 mfldadvci->AwbGetLightSource = wrapper_default_AwbGetLightSource;
1035 mfldadvci->AwbSetImageEffect = wrapper_default_AwbSetImageEffect;
1036 mfldadvci->AwbGetImageEffect = wrapper_default_AwbGetImageEffect;
1038 mfldadvci->AeGetWindowsNum = wrapper_default_AeGetWindowsNum;
1039 mfldadvci->AwbVersion = wrapper_default_AwbVersion;
1040 mfldadvci->AeVersion = wrapper_default_AeVersion;
1041 mfldadvci->AfVersion = wrapper_default_AfVersion;
1042 mfldadvci->AfGetStillAfStatus = wrapper_default_AfGetStillAfStatus;
1043 mfldadvci->RerVersion = wrapper_default_RerVersion;
1044 mfldadvci->AeGetManualShutter = wrapper_default_AeGetManualShutter;
1045 mfldadvci->Awbdata = wrapper_default_Awbdata;
1046 mfldadvci->AeGetManualAperture = wrapper_default_AeGetManualAperture;
1047 mfldadvci->AeSetFlashMode = wrapper_default_AeSetFlashMode;
1048 mfldadvci->AeGetFlashMode = wrapper_default_AeGetFlashMode;
1049 mfldadvci->AwbGetManualColorTemperature = wrapper_default_AwbGetManualColorTemperature;
1050 mfldadvci->Awbmatrix = wrapper_default_Awbmatrix;
1051 mfldadvci->GetGridInfo = wrapper_default_GetGridInfo;
1052 mfldadvci->GetMakerNote = wrapper_default_GetMakerNote;
1053 mfldadvci->AddMakerNoteRecord = wrapper_default_AddMakerNoteRecord;
1054 mfldadvci->PutMakerNote = wrapper_default_PutMakerNote;
1055 mfldadvci->ResetMakerNote = wrapper_default_ResetMakerNote;