isp_comm_def.h 19.1 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601
/*******************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2010
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*******************************************************************************/

/*******************************************************************************
 * Filename:
 * ---------
 *	isp_comm_def.h
 *
 * Project:
 * --------
 *   All
 *
 * Description:
 * ------------
 *   This file is intends for ISP .
 *
 * Author:
 * -------
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 * removed!
 * removed!
 * removed!
 *
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
 ****************************************************************************/
#ifndef __ISP_COMM_H__
#define __ISP_COMM_H__

#include "cal_api.h"
#include "cal_comm_def.h"

typedef enum
{
	ISP_IDLE_STATE=0,
	ISP_STANDBY_STATE,
	ISP_PREVIEW_STATE,
	ISP_CAPTURE_RAW_STATE,
	ISP_CAPTURE_JPEG_STATE,
	ISP_PREVIEW_WEBCAM_STATE,
	ISP_CAPTURE_WEBCAM_STATE,
	ISP_MPEG4_ENCODE_STATE,
	ISP_MJPEG_ENCODE_STATE,
	ISP_MPEG4_DECODE_STATE
} ISP_OPERATION_STATE_ENUM;


typedef enum
{
   	ISP_DRIVING_2MA=0,
   	ISP_DRIVING_4MA,
	ISP_DRIVING_6MA,
	ISP_DRIVING_8MA,
	ISP_DRIVING_0MA,
	ISP_DRIVING_NO
} ISP_DRIVING_CURRENT_ENUM;

typedef enum
{
    ISP_FEATURE_BEGIN=CAL_ISP_FEATURE_BEGIN,
    ISP_FEATURE_INIT_HW,                // In : IMAGE_SENSOR_GET_SENSOR_INFO_STRUCT (defined in sensor comm header file), Out : NULL
    ISP_FEATURE_DEINIT_HW,              // In : IMAGE_SENSOR_GET_SENSOR_INFO_STRUCT (defined in sensor comm header file), Out : NULL
    ISP_FEATURE_SET_TG,                 // In : ISP_FEATURE_SET_TG_STRUCT, Out : NULL
    ISP_FEATURE_SET_CUSTOM_DRIVER_FEATURE_CTRL_FUNC,    // In : ISP_FEATURE_CUSTOM_DRIVER_FEATURE_CTRL_FUN_STRUCT, Out : NULL
    ISP_FEATURE_GET_NVRAM_INFO,         // In : CAL_SENSOR_SUPPORT_STRUCT, Out : ISP_FEATURE_NVRAM_INFO_STRUCT
    ISP_FEATURE_SET_NVRAM_DATA,         // In : ISP_FEATURE_NVRAM_DATA_STRUCT, Out : NULL
    ISP_FEATURE_GET_NVRAM_DATA,         // In : ISP_FEATURE_NVRAM_DATA_STRUCT, Out : ISP_FEATURE_NVRAM_DATA_STRUCT
    ISP_FEATURE_GET_OUTPUT_RESOLUTION,  // In : ISP_FEATURE_GET_OUTPUT_RESOLUTION_IN_STRUCT, Out : ISP_FEATURE_GET_OUTPUT_RESOLUTION_OUT_STRUCT, calculat the ISP output resolution according to sensor input resolution, digital zoom facotr and target resolution
    ISP_FEATURE_GET_CURRENT_ZOOM_INFO,      // In : NULL, Out : ISP_FEATURE_CURRENT_ZOOM_INFO_STRUCT
    ISP_FEATURE_GET_DIGITAL_ZOOM_RESOLUTION,// In : ISP_FEATURE_GET_DIGITAL_ZOOM_RESOLUTION_IN_STRUCT, Out : ISP_FEATURE_GET_DIGITAL_ZOOM_RESOLUTION_IN_STRUCT
    ISP_FEATURE_SET_FACE_INFO,			//  In : AAA_FACE_INFO_STRUCT, Out : NULL
    ISP_FEATURE_SET_AE_BYPASS,              // In: , Out: NULL
    ISP_FEATURE_SET_AWB_BYPASS,             //In: , Out: NULL
    ISP_FEATURE_SET_AE_LIMIT_ENABLE,        //In: , Out: NULL
    ISP_FEATURE_GET_CAPTURE_EV_IDX,         //In: , Out: 
    ISP_FEATURE_SET_AF_BYPASS,             //In: , Out: NULL
    ISP_FEATURE_RESET_AF,                   //In: , Out: NULL
    ISP_FEATURE_SET_CAPTURE_FORMAT,
    ISP_FEATURE_CONFIG_3A_BEFORE_SENSOR_SWITCH_CAPTURE,  //In:ISP_FEATURE_CONFIG_3A_BEFORE_CAPTURE_STRUCT, Out: NULL  
    ISP_FEATURE_STOP_FLASHLIGHT_PROCESS_AFTER_CAPTURE_DONE, // In: , Out: NULL
    ISP_FEATURE_DISABLE_VIEWFINDER, //In: , Out: NULL
    ISP_FEATURE_UPDATE_EXIF_INFO  ,   //In:ISP_CAMERA_UPDATE_EXIF_INFO_STRUCT , Out: NULL
    ISP_FEATURE_SET_3A_REF, // In: SENSOR_AE_AWB_REF_STRUCT, Out: NULL //__AUTO_SCENE_DETECT_SUPPORT__
    ISP_FEATURE_GET_3A_REF,// In: NULL, Out: ISP_CAMERA_AWB_AF_REF_STRUCT //__AUTO_SCENE_DETECT_SUPPORT__
    ISP_FEATURE_GET_3A_INFO,// In: NULL, Out:ISP_CAMERA_INFO_3A_STRUCT //__AUTO_SCENE_DETECT_SUPPORT__
    ISP_FEATURE_SET_SCENE_COMPENSATION, // In: ISP_CAMERA_SCENE_COMPENSATION_STRUCT, Out: NULL //__AUTO_SCENE_DETECT_SUPPORT__
    ISP_FEASTURE_MAX,
} ISP_FEATURE_ENUM;

typedef enum
{
	ISP_RAW_SUPPORT=0,
	ISP_YUV_SUPPORT,
	ISP_SUPPORT_END
} ISP_DATA_FORMAT_ENUM;

typedef enum
{
    ISP_PROCESS_DATA_8_BIT=0,
    ISP_PROCESS_DATA_10_BIT
}ISP_BIT_DEPTH_ENUM;

#if defined (__AUTO_SCENE_DETECT_SUPPORT__)
typedef enum
{
    ISP_ASD_COMP_NIGHT_MODE_ON=0,
    ISP_ASD_COMP_NIGHT_MODE_OFF,		
    ISP_ASD_COMP_SKIN_COLOR_ENHANCE,
    ISP_ASD_COMP_FACE_EV_BIOS,
    ISP_ASD_COMP_SCENE_ENHANCE,    
    ISP_ASD_COMP_MAX,	
}ISP_ASD_COMPENSATION_ENUM;
#endif

typedef struct
{
    ISP_BIT_DEPTH_ENUM CameraPreviewBitDepth;
    ISP_BIT_DEPTH_ENUM CameraCaptureBitDepth;
}ISP_PROCESS_DATA_BIT_DEPTH_STRUCT, *P_ISP_PROCESS_DATA_BIT_DEPTH_STRUCT;

typedef struct
{
    kal_uint16 ImageWidth;
    kal_uint16 ImageHeight;
} ISP_CAMERA_PREVIEW_PARA_OUT_STRUCT, *P_ISP_CAMERA_PREVIEW_PARA_OUT_STRUCT;

typedef struct
{
    kal_uint32 ScenarioCtrlCode;
    kal_uint32 ScenarioCtrlParaLen;
    void *pScenarioCtrlPara;
} ISP_SCENARIO_CTRL_STRUCT, *P_ISP_SCENARIO_CTRL_STRUCT;

// for ISP_FEATURE_GET_NVRAM_INFO
typedef struct
{
    kal_bool SensorSupport[4];  // notify ISP which sensor will be supported,
                                // IMAGE_SENSOR_MAIN/IMAGE_SENSOR_SUB/IMAGE_SENSOR_BAK1/IMAGE_SENSOR_SUB/BAK1
} CAL_SENSOR_SUPPORT_STRUCT, *P_CAL_SENSOR_SUPPORT_STRUCT;

typedef struct
{
    kal_uint32 CameraNvramStartFileLid[4];  // the
    kal_uint32 CameraNvramEndFileLid[4];    // query result
} ISP_FEATURE_NVRAM_INFO_STRUCT, *P_ISP_FEATURE_NVRAM_INFO_STRUCT;

// for ISP_FEATURE_SET_NVRAM_DATA
// ISP_FEATURE_GET_NVRAM_DATA
typedef struct
{
    kal_uint32 CameraNvramFileLid;            // set para
    void *pCameraNvramFileData;               // set para
    kal_uint32 CameraNvramDataSize;
} ISP_FEATURE_NVRAM_DATA_STRUCT, *P_ISP_FEATURE_NVRAM_DATA_STRUCT;

// for ISP_FEATURE_GET_OUTPUT_RESOLUTION
typedef struct
{
    ISP_OPERATION_STATE_ENUM IspState;
    kal_bool MetaModeFlag;
    kal_bool   BinningMode;    			   // for capture mode only 
    kal_bool   RawCaptureEnable;
	
    kal_uint8  ZoomStep;
    kal_uint8  TotalZoomStep;
    kal_uint16 MaxZoomFactor;
    kal_uint16 SensorImageGrabStartX;
    kal_uint16 SensorImageGrabStartY;
    kal_uint16 SensorImageWidth;
    kal_uint16 SensorImageHeight;
    kal_uint16 TargetWidth;
    kal_uint16 TargetHeight;
    kal_uint8 WaitStableFrameNum;

    CAL_CAMERA_DIGITAL_ZOOM_TYPE_ENUM DzType;
    const kal_uint16 *pZoomFactorListTable;
} ISP_FEATURE_GET_OUTPUT_RESOLUTION_IN_STRUCT, *P_ISP_FEATURE_GET_OUTPUT_RESOLUTION_IN_STRUCT;

typedef struct
{
    kal_uint16 IspOutWidth;
    kal_uint16 IspOutHeight;
} ISP_FEATURE_GET_OUTPUT_RESOLUTION_OUT_STRUCT, *P_ISP_FEATURE_GET_OUTPUT_RESOLUTION_OUT_STRUCT;

// for ISP_FEATURE_GET_CURRENT_ZOOM_INFO
typedef struct
{
    kal_uint8   CurrentZoomStep;
    kal_uint8   TotalZoomStep;
    kal_uint16  MaxZoomFactor;
    kal_uint16  CurrentZoomFactor;
} ISP_FEATURE_CURRENT_ZOOM_INFO_STRUCT, *P_ISP_FEATURE_CURRENT_ZOOM_INFO_STRUCT;

// ISP_FEATURE_GET_DIGITAL_ZOOM_RESOLUTION
typedef struct
{
    kal_uint8 ZoomStep;
    CAL_CAMERA_DIGITAL_ZOOM_TYPE_ENUM DzType;
    const kal_uint16 *pZoomFactorListTable;
} ISP_FEATURE_GET_DIGITAL_ZOOM_RESOLUTION_IN_STRUCT, *P_ISP_FEATURE_GET_DIGITAL_ZOOM_RESOLUTION_IN_STRUCT;

typedef struct
{
    kal_bool  MdpCropEnable;        // Digital zoom is cropped by MDP or not.
    kal_uint16 IspOutWidth;         // ISP Output Image width
    kal_uint16 IspOutHeight;        // ISP output image height
    kal_uint16 DigitalZoomWidth;    // Image width after digital zoom
    kal_uint16 DigitalZoomHeight;   // Image height after digital zoom
} ISP_FEATURE_GET_DIGITAL_ZOOM_RESOLUTION_OUT_STRUCT, *P_ISP_FEATURE_GET_DIGITAL_ZOOM_RESOLUTION_OUT_STRUCT;

// for ISP_FEATURE_TG_STRUCT
typedef struct
{
    CAL_SCENARIO_ENUM ScenarioId;
    void *pSensorInfo;              // IMAGE_SENSOR_GET_SENSOR_INFO_STRUCT
} ISP_FEATURE_SET_TG_STRUCT, *P_ISP_FEATURE_SET_TG_STRUCT;

typedef struct
{
    kal_bool    BinningMode;                    // enable/disable binning mode
    kal_uint8   ExpoBracketLevel;
    kal_bool    RawCaptureEnable;
    MULTISHOT_INFO_ENUM MultishotInfo;
    CAL_CAMERA_STILL_CAPTURE_ENUM StillCaptureMode;    
}ISP_FEATURE_CONFIG_3A_BEFORE_CAPTURE_STRUCT, *P_ISP_FEATURE_CONFIG_3A_BEFORE_CAPTURE_STRUCT;

// for ISP_FEATURE_SET_CUSTOM_DRIVER_FEATURE_CTRL_FUNC
// because isp_comm_def.h does not include sensor_comm_def.h such that we use kal_uint32 to
// replace IMAGE_SENSOR_FEATURE_ENUM for the parameter of SensorFeatureCtrl
typedef struct
{
    CAL_CAMERA_SOURCE_ENUM CameraId;
    kal_uint32 SensorIdx;       // IMAGE_SENSOR_INDEX_ENUM
    void *pSensorInfo;      // IMAGE_SENSOR_GET_SENSOR_INFO_STRUCT
    MM_ERROR_CODE_ENUM (* SensorFeatureCtrl) (kal_uint32 FeatureId, void *pFeatureParaIn, void *pFeatureParaOut,
                                              kal_uint32 FeatureParaOutLen, kal_uint32 *pRealFeatureParaOutLen);
    MM_ERROR_CODE_ENUM (* LensFeatureControl) (kal_uint32 FeatureId, void *pFeatureParaIn, void *pFeatureParaOut,
                                                kal_uint32 FeatureParaOutLen, kal_uint32 *pRealFeatureParaOutLen);
//	kal_uint32 (* FlashLightFeatureControl) (FLASH_LIGHT_FEATURE_ENUM FeatureId, void *pFeatureParaIn, void *pFeatureParaOut, kal_uint32 FeatureParaOutLen);
} ISP_FEATURE_CUSTOM_DRIVER_FEATURE_CTRL_FUN_STRUCT, *P_ISP_FEATURE_CUSTOM_DRIVER_FEATURE_CTRL_FUN_STRUCT;


typedef struct
{
    kal_uint8   FaceNo;
    kal_uint8   FaceLum;
    kal_bool    FdEnable;
    kal_bool    SdEnable;
    kal_uint8   ResultCounter;
    kal_uint16  FaceX0;
    kal_uint16  FaceY0;
    kal_uint16  FaceX1;
    kal_uint16  FaceY1;
    kal_uint16  ImgSrcWidth;
    kal_uint16  ImgSrcHeight;
} AAA_FACE_INFO_STRUCT, *P_AAA_FACE_INFO_STRUCT;


// for IMAGE_SENSOR_FEATURE_GET_AE_LUT
typedef struct
{
    kal_uint8  Band;
    kal_bool   VideoMode;
    kal_uint8  DscMode;
    kal_uint16 VideoFrameRate;
} ae_lut_info_struct, AE_LUT_INFO_STRUCT, *P_AE_LUT_INFO_STRUCT;

typedef struct
{
	kal_uint16	shutter;
	kal_uint16	sensorgain;
	kal_uint8	ispgain;
} exposure_lut_struct, AE_EXPOSURE_LUT_STRUCT, *P_AE_EXPOSURE_LUT_STRUCT;

// for IMAGE_SENSOR_FEATURE_GET_DSC_SUPPORT_INFO
typedef struct
{
	kal_bool	autodsc;
	kal_bool	portrait;
	kal_bool	landscape;
	kal_bool	sport;
	kal_bool flower;
	kal_bool	nightscene;
	kal_bool	tvmode;
	kal_bool	avmode;
	kal_bool	isomode;
	kal_bool	document_mode;
	kal_bool	iso_anti_hand_shake_mode;
	kal_bool	iso_100_mode;
	kal_bool	iso_200_mode;
	kal_bool	iso_400_mode;
	kal_bool	iso_800_mode;
	kal_bool	iso_1600_mode;
	kal_bool	video_auto_mode;
	kal_bool	video_night_mode;
}camcorder_mode_info_struct;

typedef struct
{
	kal_bool	flashlight;
	kal_bool	autofocus;
}dsc_comp_info_struct;

typedef struct
{
	kal_bool	autoflash;
	kal_bool	forceon;
	kal_bool	forceoff;
	kal_bool	antiredeye;
}flash_mode_info_struct;

typedef struct
{
	kal_bool	af_support;
	kal_bool	single;
	kal_bool	multizone;
	kal_bool	continuous;
	kal_bool	range_auto;
	kal_bool	range_macro;
	kal_bool	range_landscape;
}af_preview_mode_info_struct;

typedef struct
{
	kal_bool	af_support;
	kal_bool	automode;
	kal_bool	multizone;
	kal_bool	continuous;
	kal_bool	range_auto;
	kal_bool	range_macro;
	kal_bool	range_landscape;
}af_video_mode_info_struct;

typedef struct
{
	af_preview_mode_info_struct	preview_mode;
	af_video_mode_info_struct	video_mode;
}af_info_struct;

/************* AAA Engineer mode ******************/
typedef enum 
{
    AF_EM_FULL_SCAN_FORW1=0,  // 0
    AF_EM_FULL_SCAN_FORW4,    // 1
    AF_EM_FULL_SCAN_BACK1,    // 2
    AF_EM_FULL_SCAN_BACK4,    // 3
    AF_EM_CONT_FOCUS_SHOT,    // 4
    AF_EM_BEST_BRACKET_SHOT,  // 5
    AF_EM_CONT_FORWARD_LOG,   // 6
    AF_EM_CONT_BACKWARD_LOG,  // 7
    AF_EM_SINGLE_FORWARD_LOG, // 8
    AE_EM_FULL_SCAN,
    AE_EM_BEST_BRACKET_SCAN,
    AWB_EM_SEQ_PREVIEW_LOG_SAVE,
    AAA_EM_OFF,
    AAA_EM_NO
} AAA_EM_MODE_ENUM;

typedef enum
{
    AAA_EM_CAP_PV_SIZE,
    AAA_EM_CAP_FULL_SIZE,
    AAA_EM_CAP_NO
} AAA_EM_CAP_SIZE_ENUM;

typedef struct
{
    AAA_EM_MODE_ENUM AaaEmMode;
} AAA_EM_IN_PARA_STRUCT, *P_AAA_EM_IN_PARA_STRUCT;

typedef struct
{
    kal_uint32 SnapshotNum; // delay time (ms) if pre_log_enable
    //AAA_EM_CAP_SIZE cap_size;
    kal_bool AfEnable;
    kal_bool PreLogEnable;
} AAA_EM_OUT_PARA_STRUCT, *P_AAA_EM_OUT_PARA_STRUCT;
kal_bool AaaSetEm(P_AAA_EM_IN_PARA_STRUCT pInPara, P_AAA_EM_OUT_PARA_STRUCT pOutPara);
void AaaSaveLog(char *pFileNameBuf);
/**********************************************/



// data structure for ISP
// for ISP preview scenario
typedef struct
{
    IMAGE_SENSOR_MIRROR_ENUM ImageMirror;
    kal_uint16 ImageTargetWidth;
    kal_uint16 ImageTargetHeight;

    P_CAL_ISP_PREVIEW_STRUCT pCalIspPreviewPara;
} ISP_CAMERA_PREVIEW_STRUCT, *P_ISP_CAMERA_PREVIEW_STRUCT;

// for ISP still capture scenario
typedef struct
{
    IMAGE_SENSOR_MIRROR_ENUM ImageMirror;
    CAL_RAW_CAPTURE_MODE_ENUM CaptureScenario;  // for Raw sensor only
    MM_IMAGE_ROTATE_ENUM StillImageExifOrientation;

    kal_uint16 ImageTargetWidth;
    kal_uint16 ImageTargetHeight;

    P_CAL_ISP_STILL_CAPTURE_STRUCT pCalIspCapturePara;
} ISP_CAMERA_STILL_CAPTURE_STRUCT, *P_ISP_CAMERA_STILL_CAPTURE_STRUCT;

// for Video preview/record scenario
typedef struct
{
    IMAGE_SENSOR_MIRROR_ENUM ImageMirror;
    kal_uint16 ImageTargetWidth;
    kal_uint16 ImageTargetHeight;

    P_CAL_ISP_VIDEO_STRUCT pCalIspVideoPara;
} ISP_CAMERA_VIDEO_STRUCT, *P_ISP_CAMERA_VIDEO_STRUCT;


typedef struct
{
    kal_uint16 ImageTargetWidth;
    kal_uint16 ImageTargetHeight;
    kal_uint8 StillImageExifOrientation;
    //...  may add for future usage

} ISP_CAMERA_UPDATE_EXIF_INFO_STRUCT, *P_ISP_CAMERA_UPDATE_EXIF_INFO_STRUCT;

#if defined (__AUTO_SCENE_DETECT_SUPPORT__)
typedef struct
{
    kal_bool    AeIsBacklit; /* AE Backlit Condition from AE algorithm */
    kal_bool    AeIsStable;  /* AE converge to stable situation */
    kal_bool    AwbIsStable; /* AWB converge to stable situation */
    kal_bool    AfIsStable;  /* Af converge to stable situation */
    kal_uint16 AwbCurRgain; /* Current AWB R channel gain */
    kal_uint16 AwbCurBgain; /* Current AWB B channel gain */
    kal_uint16 AfPosition;  /* Current lens position */     
    kal_uint8   AeEv;        /* information version control, 0,1,2 for YUV,WCP1-RAW, WCP2-RAW*/
    kal_int16  AeFaceEnhanceEv;   /* AE face Ev adjustment value  */
} ISP_CAMERA_INFO_3A_STRUCT, *P_ISP_CAMERA_INFO_3A_STRUCT;

typedef struct
{
    kal_bool AaaInfoFromRaw;    /* Raw or Yuv 3A */
    kal_uint16 AwbRefD65Rgain;  /* D65 R channel gain */
    kal_uint16 AwbRefD65Bgain;  /* D65 B channel gain */
    kal_uint16 AwbRefCwfRgain;  /* CWF R channel gain */
    kal_uint16 AwbRefCwfBgain;  /* CWF B channel gain */
    void  *AfTblParam;      /* the whole AF table including macro index & total number of the table */
} ISP_CAMERA_AWB_AF_REF_STRUCT, *P_ISP_CAMERA_AWB_AF_REF_STRUCT;

typedef struct
{
    kal_bool NightModeEnable; /* Night mode enable */
    kal_bool SkinColorEnhanceEnable; /* Skin Color Enhance(PCA) enable */
    kal_bool FaceEVBiosEnable; /* Facial AE enable */	
    CAL_CAMERA_CONTRAST_ENUM SceneContrast; /* Scene Contrast */
    CAL_CAMERA_SATURATION_ENUM SceneSaturation; /* Scene Saturation */
    CAL_CAMERA_SHARPNESS_ENUM SceneSharpness; /* Scene Sharpness */
    CAL_CAMERA_SCENE_MODE_ENUM SceneType;/* Scene Type */	
    kal_uint8 FaceLuminance; /* Face Luminance */
    kal_bool AsdEnabled; /* ASD enable or not */
} ISP_CAMERA_SCENE_COMPENSATION_STRUCT, *P_ISP_CAMERA_SCENE_COMPENSATION_STRUCT ;

typedef struct
{
    kal_bool    AeIsStable;  /* AE converge to stable situation */
    kal_uint8   AeEv;        /* information version control, 0,1,2 for YUV,WCP1-RAW, WCP2-RAW*/
} ISP_CAMERA_INFO_AE_STRUCT, *P_ISP_CAMERA_INFO_AE_STRUCT;
#endif

typedef struct
{
    MM_ERROR_CODE_ENUM (* IspOpen) (void);
    MM_ERROR_CODE_ENUM (* IspFeatureCtrl) (kal_uint32 FeatureId, void *pIspParaIn,
                                           void *pIspParaOut, kal_uint32 IspParaOutLen,
                                           kal_uint32 *pRealIspParaOutLen);
    MM_ERROR_CODE_ENUM (* IspCtrl) (CAL_SCENARIO_ENUM ScenarioId, void *pCtrlParaIn,
    					            void *pCtrlParaOut, kal_uint32 CtrlParaOutLen,
    					            kal_uint32 *pRealCtrlParaOutLen);
    MM_ERROR_CODE_ENUM (* IspClose) (void);
}	ISP_FUNCTION_STRUCT, *P_ISP_FUNCTION_STRUCT;

MM_ERROR_CODE_ENUM IspInit(MM_ERROR_CODE_ENUM (* pfIspCallback) (CAL_CALLBACK_ID_ENUM CbId,
                           void *pCallbackPara, kal_uint16 CallbackParaLen),
                           P_ISP_FUNCTION_STRUCT *pfIspFunc);


#endif /* __ISP_COMM_H__ */