android-mtk方案 “CompileTimeError” 编译报错的分析 (摄像头HAL相关,其他类似报错可以参考)
2013-07-04 16:09
489 查看
“CompileTimeError” 编译报错的分析
加入如下代码之后编译报错
CONFIG_FEATURE_SI(
FID_AE_STROBE,
BY_DEFAULT(FLASHLIGHT_FORCE_OFF),
FLASHLIGHT_FORCE_ON, FLASHLIGHT_FORCE_OFF
)
编译器报错提示:
mediatek/platform/mt6572/hardware/camera/custom/imgsensor/../hal/imgsensor/cfg_ftbl_gc2035_yuv.h:148:1:
error: aggregate
'NSFeature::CompileTimeError<0> ERROR_FID_AE_STROBE__NOT_scene_indep' has incomplete type and cannot be defined
Import includes file: out/target/product/mbk72_wet_lca/obj/SHARED_LIBRARIES/libcam_camera_exif_intermediates/import_includes
target thumb C++: libcam.exif.common <= mediatek/hard
#define CHECK_FID_YUV_SI(_fid) \ // Fid2Type<_fid>::Info::isYUVSceneIndep = 0;
STATIC_CHECK(Fid2Type<_fid>::Info::isYUVSceneIndep, _fid##__NOT_scene_indep)
// _fid 满足8~23 之间是数字,则 Fid2Type<_fid>::Info::isYUVSceneIndep = 1;
// 才满足 CompileTimeError 中的 ((expr) != 0
mediatek/custom/common/hal/inc/camera_feature/camera_feature_utility.h
Fid2Type<_fid>::Info
#define STATIC_CHECK(expr, msg) \
{ CompileTimeError<((expr) != 0)> ERROR_##msg; (void)ERROR_##msg; }
// 如果 expr 为true 即不为 0,那就编译通过,如果等于0,那就编译报错。而expr最终等于 Fid2Type<_fid>::Info::isYUVSceneIndep ,所以报错了。
#define CHECK_FID_SI CHECK_FID_YUV_SI
#define CHECK_FID_SD CHECK_FID_YUV_SD
template <MUINT32 v>
struct
Int2Type
{
enum { value = v };
};
template<MBOOL> struct CompileTimeError;
template<> struct CompileTimeError<MTRUE> {};
CONFIG_FEATURE_SI(FID_AE_STROBE,
BY_DEFAULT(FLASHLIGHT_FORCE_OFF),
FLASHLIGHT_FORCE_ON, FLASHLIGHT_FORCE_OFF
#define CONFIG_FEATURE_SI(_fid, _default_macro, _table...) \
_CONFIG_FEATURE(_fid, Fid2Type<_fid>::Type) \
CHECK_FID_SI(_fid); \ // _fid =FID_AE_STROBE
_default_macro \
static type aTable[] = { _table }; \
_END_CONFIG_FEATURE()
#define _CONFIG_FEATURE(_fid, _ftype) \
case _fid: \
{ __CONFIG_FEATURE(_fid, _ftype)
#define __CONFIG_FEATURE(_fid, _ftype) \
enum { EFeatureID = _fid }; \
typedef _ftype const type;
#define _END_CONFIG_FEATURE() \
__END_CONFIG_FEATURE() \
return &FInfo; \
}
#define __END_CONFIG_FEATURE() \
STATIC_CHECK(sizeof(aDefault)==sizeof(type), _NOT_assign_DEFAULT); \
STATIC_CHECK(sizeof(aTable) > 0, _table_CANNOT_be_emtpy); \
enum { ETblNum = sizeof(aTable)/sizeof(type) }; \
static FInfo_Source<EFeatureID, ETblNum, type> \
FInfo(aDefault[0], aTable);
#define BY_DEFAULT(_default) \
type const aDefault[] = { _default };
#define ENUM_MISC_FIDS_SI(fids...)\
FID_PRE_BEGIN_MISC_SI = FID_PRE_BEGIN_SI, \ // 0
fids \
FID_OVER_LAST_MISC_SI
#define _GETFINFO_SCENE_INDEP(_sensor_type_sz) \
static \
FInfoIF* \
GetFInfo(FID_T const fid) \
{ \
MY_LOG_OBJ_ONCE(_sensor_type_sz "[SI][GetFInfo]\n"); \
switch (fid) \
{ \
#define _END_GETFINFO_SCENE_INDEP(_sensor_type_sz) \
default: \
MY_LOG( \
_sensor_type_sz "[SI][GetFInfo] unsupported FID:" \
"(fid)=(%d)", fid \
); \
break; \
} \
return NULL; \
}
//--------------------------
#define ENUM_MISC_FIDS_SI(fids...)\
FID_PRE_BEGIN_MISC_SI = FID_PRE_BEGIN_SI, \ // = 0
fids \
FID_OVER_LAST_MISC_SI // so =8
#define ENUM_RAW_ONLY_FIDS_SI(fids...)\
FID_PRE_BEGIN_RAW_ONLY_SI = FID_OVER_LAST_MISC_SI - 1, \ //=8-1=7 // key-word:
fids \
FID_OVER_LAST_RAW_ONLY_SI //so =8 ;key-word
#define ENUM_RAW_YUV_SHARED_FIDS_SI(fids...)\
FID_PRE_BEGIN_RAW_YUV_SI = FID_OVER_LAST_RAW_ONLY_SI - 1, \ // so=8-1= 7;key-word:
fids \
FID_OVER_LAST_RAW_YUV_SI // so =24
#define ENUM_YUV_ONLY_FIDS_SI(fids...)\
FID_PRE_BEGIN_YUV_ONLY_SI = FID_OVER_LAST_RAW_YUV_SI - 1, \ // =24-1 =23
fids \
FID_OVER_LAST_YUV_ONLY_SI// so =24
#define ENUM_MISC_FIDS_SD(fids...)\
FID_PRE_BEGIN_MISC_SD = FID_PRE_BEGIN_SD, \
fids \
FID_OVER_LAST_MISC_SD
#define ENUM_RAW_ONLY_SD(fids...)\
FID_PRE_BEGIN_RAW_ONLY_SD = FID_OVER_LAST_MISC_SD - 1, \
fids \
FID_OVER_LAST_RAW_ONLY_SD
#define ENUM_RAW_YUV_SHARED_FIDS_SD(fids...)\
FID_PRE_BEGIN_RAW_YUV_SD = FID_OVER_LAST_RAW_ONLY_SD - 1, \
fids \
FID_OVER_LAST_RAW_YUV_SD
#define ENUM_YUV_ONLY_SD(fids...)\
FID_PRE_BEGIN_YUV_ONLY_SD = FID_OVER_LAST_RAW_YUV_SD - 1, \
fids \
FID_OVER_LAST_YUV_ONLY_SD
//---------------
template <MUINT32 _fid>
struct FidInfo
{
template <MUINT32 _val, MUINT32 _beg, MUINT32 _end>
struct IsWithin
{
enum { Result = (_beg <= _val && _val < _end) };
};
// Result = 8<=2 && 2 < 24 = 0 && 1 = 0
enum
{
isSceneIndep =
IsWithin<_fid,FID_BEGIN_SI,FID_END_SI>::Result,
isMiscSceneIndep =
IsWithin<_fid,FID_BEGIN_MISC_SI,FID_END_MISC_SI>::Result,
isRAWSceneIndep =
IsWithin<_fid,FID_BEGIN_RAW_SI,FID_END_RAW_SI>::Result,
isYUVSceneIndep =
IsWithin<_fid,FID_BEGIN_YUV_SI,FID_END_YUV_SI>::Result, // _fid=2,FID_BEGIN_YUV_SI =8, FID_END_YUV_SI= 24,
// FID_BEGIN_YUV_SI
=FID_BEGIN_RAW_YUV_SI =FID_PRE_BEGIN_RAW_YUV_SI + 1=FID_OVER_LAST_RAW_ONLY_SI - 1 //(ENUM_RAW_ONLY_FIDS_SI)
// FID_END_YUV_SI=FID_END_YUV_ONLY_SI=FID_OVER_LAST_YUV_ONLY_SI // (ENUM_YUV_ONLY_FIDS_SI)
isSceneDep =
^^^^^^
}
mediatek/custom/common/hal/inc/camera_feature/camera_feature_id.h: //这个文件包含了"kd_camera_feature_id.h"
namespace NSFeature
{
#include "kd_camera_feature_id.h"
typedef FEATURE_ID FEATURE_ID_T;
enum
{
FID_BEGIN = FID_PRE_BEGIN + 1, // FID_BEGIN = 0+1 = 1;
FID_NUM = FID_OVER_LAST - FID_BEGIN,
//////////////////////////////////////////////////////////////////////////////
// Scene-Independent (SI) feature id.
FID_BEGIN_SI = FID_PRE_BEGIN_SI + 1,
FID_END_SI = FID_OVER_LAST_SI,
//Misc. feature id.
FID_BEGIN_MISC_SI = FID_PRE_BEGIN_MISC_SI + 1,
FID_END_MISC_SI = FID_OVER_LAST_MISC_SI,
FID_NUM_MISC_SI = FID_END_MISC_SI - FID_BEGIN_MISC_SI,
//RAW-only feature id.
FID_BEGIN_RAW_ONLY_SI = FID_PRE_BEGIN_RAW_ONLY_SI + 1,
FID_END_RAW_ONLY_SI = FID_OVER_LAST_RAW_ONLY_SI,
FID_NUM_RAW_ONLY_SI = FID_END_RAW_ONLY_SI - FID_BEGIN_RAW_ONLY_SI,
//RAW-YUV-shared feature id.
FID_BEGIN_RAW_YUV_SI = FID_PRE_BEGIN_RAW_YUV_SI + 1, // = 8 key-word
FID_END_RAW_YUV_SI = FID_OVER_LAST_RAW_YUV_SI,
FID_NUM_RAW_YUV_SI = FID_END_RAW_YUV_SI - FID_BEGIN_RAW_YUV_SI,
//YUV-only feature id.
FID_BEGIN_YUV_ONLY_SI = FID_PRE_BEGIN_YUV_ONLY_SI + 1,
FID_END_YUV_ONLY_SI = FID_OVER_LAST_YUV_ONLY_SI, // =24;ke-word
FID_NUM_YUV_ONLY_SI = FID_END_YUV_ONLY_SI - FID_BEGIN_YUV_ONLY_SI,
//RAW feature id.
FID_BEGIN_RAW_SI = FID_BEGIN_RAW_ONLY_SI,
FID_END_RAW_SI = FID_OVER_LAST_RAW_YUV_SI,
FID_NUM_RAW_SI = FID_END_RAW_SI - FID_BEGIN_RAW_SI,
//YUV feature id.
FID_BEGIN_YUV_SI = FID_BEGIN_RAW_YUV_SI, // = 8 ; key-word
FID_END_YUV_SI = FID_END_YUV_ONLY_SI, // =24;key-word
FID_NUM_YUV_SI = FID_END_YUV_SI - FID_BEGIN_YUV_SI,
mediatek/custom/common/kernel/imgsensor/inc/kd_camera_feature_id.h:
typedef enum
{
FID_PRE_BEGIN = 0,
//////////////////////////////////////////////////////////////////////////////
// Scene-Independent (SI) feature id.
FID_PRE_BEGIN_SI = FID_PRE_BEGIN,
//----------------------------------------------------------------------------
//Misc. feature id.
ENUM_MISC_FIDS_SI (
FID_ZOOM_FACTOR, // Legacy symbol (Remove if possible)
FID_AE_STROBE, //value--> 2 ;// 涉事(涉及编译错误的枚举变量)的枚举变量。
FID_ZSD,
FID_AWB2PASS,
FID_AF_LAMP,
FID_FAST_CONTINUOUS_SHOT,
),// so FID_OVER_LAST_MISC_SI = 8;
//RAW-only feature id.
ENUM_RAW_ONLY_FIDS_SI (
),
//RAW-YUV-shared feature id.
ENUM_RAW_YUV_SHARED_FIDS_SI (
FID_SCENE_MODE,//8
FID_COLOR_EFFECT, // 9
FID_CAPTURE_MODE, //10
FID_CAP_SIZE, //11
FID_PREVIEW_SIZE, //12
FID_VIDEO_PREVIEW_SIZE, //13
FID_FRAME_RATE, //14
FID_FRAME_RATE_RANGE, //15
FID_AE_FLICKER, //-->16
FID_FOCUS_DIST_NORMAL, //17
FID_FOCUS_DIST_MACRO, //18
FID_STEREO_3D_CAP_SIZE, //19
FID_STEREO_3D_PREVIEW_SIZE, //20
FID_STEREO_3D_TYPE, //21
FID_STEREO_3D_MODE, //22
FID_STEREO_3D_IMAGE_FORMAT,//23
),
//YUV-only feature id.
ENUM_YUV_ONLY_FIDS_SI (
),
// FID_BEGIN_YUV_SI =FID_BEGIN_RAW_YUV_SI =FID_PRE_BEGIN_RAW_YUV_SI + 1=FID_OVER_LAST_RAW_ONLY_SI - 1 //(ENUM_RAW_ONLY_FIDS_SI)
// FID_END_YUV_SI=FID_END_YUV_ONLY_SI=FID_OVER_LAST_YUV_ONLY_SI // (ENUM_YUV_ONLY_FIDS_SI)
//----------------------------------------------------------------------------
FID_OVER_LAST_SI = FID_OVER_LAST_YUV_ONLY_SI,
//////////////////////////////////////////////////////////////////////////////
// Scene-Dependent (SD) feature id.
FID_PRE_BEGIN_SD = FID_OVER_LAST_SI - 1,
//----------------------------------------------------------------------------
//Misc. feature id.
ENUM_MISC_FIDS_SD (
FID_FD_ON_OFF,
),
//RAW-only feature id.
ENUM_RAW_ONLY_SD (
),
//RAW-YUV-shared feature id.
ENUM_RAW_YUV_SHARED_FIDS_SD (
FID_AE_SCENE_MODE,
FID_AE_METERING,
FID_AE_ISO,
FID_AE_EV,
FID_AF_MODE,
FID_AF_METERING,
FID_AWB_MODE,
FID_ISP_EDGE,
FID_ISP_HUE,
FID_ISP_SAT,
FID_ISP_BRIGHT,
FID_ISP_CONTRAST,
),
//YUV-only feature id.
ENUM_YUV_ONLY_SD (
FID_YUV_AUTOTEST,
),
// IsWithin<_fid,FID_BEGIN_YUV_SI,FID_END_YUV_SI>::Result 限定了
// _fid 的值(也就是[b]FID_AE_STROBE,), 必须是在 ENUM_RAW_ONLY_SD 枚举的尾部 和 ENUM_YUV_ONLY_SD 枚举的尾部之间。 其实它本应该被放在 ENUM_RAW_YUV_SHARED_FIDS_SI 枚举类型中。[/b]
//上面的编译错误是为了 避免非 YUV的 枚举值 被用到.
//----------------------------------------------------------------------------
FID_OVER_LAST_SD = FID_OVER_LAST_YUV_ONLY_SD,
//////////////////////////////////////////////////////////////////////////////
FID_OVER_LAST = FID_OVER_LAST_SD,
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
} FEATURE_ID;
加入如下代码之后编译报错
CONFIG_FEATURE_SI(
FID_AE_STROBE,
BY_DEFAULT(FLASHLIGHT_FORCE_OFF),
FLASHLIGHT_FORCE_ON, FLASHLIGHT_FORCE_OFF
)
编译器报错提示:
mediatek/platform/mt6572/hardware/camera/custom/imgsensor/../hal/imgsensor/cfg_ftbl_gc2035_yuv.h:148:1:
error: aggregate
'NSFeature::CompileTimeError<0> ERROR_FID_AE_STROBE__NOT_scene_indep' has incomplete type and cannot be defined
Import includes file: out/target/product/mbk72_wet_lca/obj/SHARED_LIBRARIES/libcam_camera_exif_intermediates/import_includes
target thumb C++: libcam.exif.common <= mediatek/hard
#define CHECK_FID_YUV_SI(_fid) \ // Fid2Type<_fid>::Info::isYUVSceneIndep = 0;
STATIC_CHECK(Fid2Type<_fid>::Info::isYUVSceneIndep, _fid##__NOT_scene_indep)
// _fid 满足8~23 之间是数字,则 Fid2Type<_fid>::Info::isYUVSceneIndep = 1;
// 才满足 CompileTimeError 中的 ((expr) != 0
mediatek/custom/common/hal/inc/camera_feature/camera_feature_utility.h
Fid2Type<_fid>::Info
#define STATIC_CHECK(expr, msg) \
{ CompileTimeError<((expr) != 0)> ERROR_##msg; (void)ERROR_##msg; }
// 如果 expr 为true 即不为 0,那就编译通过,如果等于0,那就编译报错。而expr最终等于 Fid2Type<_fid>::Info::isYUVSceneIndep ,所以报错了。
#define CHECK_FID_SI CHECK_FID_YUV_SI
#define CHECK_FID_SD CHECK_FID_YUV_SD
template <MUINT32 v>
struct
Int2Type
{
enum { value = v };
};
template<MBOOL> struct CompileTimeError;
template<> struct CompileTimeError<MTRUE> {};
CONFIG_FEATURE_SI(FID_AE_STROBE,
BY_DEFAULT(FLASHLIGHT_FORCE_OFF),
FLASHLIGHT_FORCE_ON, FLASHLIGHT_FORCE_OFF
#define CONFIG_FEATURE_SI(_fid, _default_macro, _table...) \
_CONFIG_FEATURE(_fid, Fid2Type<_fid>::Type) \
CHECK_FID_SI(_fid); \ // _fid =FID_AE_STROBE
_default_macro \
static type aTable[] = { _table }; \
_END_CONFIG_FEATURE()
#define _CONFIG_FEATURE(_fid, _ftype) \
case _fid: \
{ __CONFIG_FEATURE(_fid, _ftype)
#define __CONFIG_FEATURE(_fid, _ftype) \
enum { EFeatureID = _fid }; \
typedef _ftype const type;
#define _END_CONFIG_FEATURE() \
__END_CONFIG_FEATURE() \
return &FInfo; \
}
#define __END_CONFIG_FEATURE() \
STATIC_CHECK(sizeof(aDefault)==sizeof(type), _NOT_assign_DEFAULT); \
STATIC_CHECK(sizeof(aTable) > 0, _table_CANNOT_be_emtpy); \
enum { ETblNum = sizeof(aTable)/sizeof(type) }; \
static FInfo_Source<EFeatureID, ETblNum, type> \
FInfo(aDefault[0], aTable);
#define BY_DEFAULT(_default) \
type const aDefault[] = { _default };
#define ENUM_MISC_FIDS_SI(fids...)\
FID_PRE_BEGIN_MISC_SI = FID_PRE_BEGIN_SI, \ // 0
fids \
FID_OVER_LAST_MISC_SI
#define _GETFINFO_SCENE_INDEP(_sensor_type_sz) \
static \
FInfoIF* \
GetFInfo(FID_T const fid) \
{ \
MY_LOG_OBJ_ONCE(_sensor_type_sz "[SI][GetFInfo]\n"); \
switch (fid) \
{ \
#define _END_GETFINFO_SCENE_INDEP(_sensor_type_sz) \
default: \
MY_LOG( \
_sensor_type_sz "[SI][GetFInfo] unsupported FID:" \
"(fid)=(%d)", fid \
); \
break; \
} \
return NULL; \
}
//--------------------------
#define ENUM_MISC_FIDS_SI(fids...)\
FID_PRE_BEGIN_MISC_SI = FID_PRE_BEGIN_SI, \ // = 0
fids \
FID_OVER_LAST_MISC_SI // so =8
#define ENUM_RAW_ONLY_FIDS_SI(fids...)\
FID_PRE_BEGIN_RAW_ONLY_SI = FID_OVER_LAST_MISC_SI - 1, \ //=8-1=7 // key-word:
fids \
FID_OVER_LAST_RAW_ONLY_SI //so =8 ;key-word
#define ENUM_RAW_YUV_SHARED_FIDS_SI(fids...)\
FID_PRE_BEGIN_RAW_YUV_SI = FID_OVER_LAST_RAW_ONLY_SI - 1, \ // so=8-1= 7;key-word:
fids \
FID_OVER_LAST_RAW_YUV_SI // so =24
#define ENUM_YUV_ONLY_FIDS_SI(fids...)\
FID_PRE_BEGIN_YUV_ONLY_SI = FID_OVER_LAST_RAW_YUV_SI - 1, \ // =24-1 =23
fids \
FID_OVER_LAST_YUV_ONLY_SI// so =24
#define ENUM_MISC_FIDS_SD(fids...)\
FID_PRE_BEGIN_MISC_SD = FID_PRE_BEGIN_SD, \
fids \
FID_OVER_LAST_MISC_SD
#define ENUM_RAW_ONLY_SD(fids...)\
FID_PRE_BEGIN_RAW_ONLY_SD = FID_OVER_LAST_MISC_SD - 1, \
fids \
FID_OVER_LAST_RAW_ONLY_SD
#define ENUM_RAW_YUV_SHARED_FIDS_SD(fids...)\
FID_PRE_BEGIN_RAW_YUV_SD = FID_OVER_LAST_RAW_ONLY_SD - 1, \
fids \
FID_OVER_LAST_RAW_YUV_SD
#define ENUM_YUV_ONLY_SD(fids...)\
FID_PRE_BEGIN_YUV_ONLY_SD = FID_OVER_LAST_RAW_YUV_SD - 1, \
fids \
FID_OVER_LAST_YUV_ONLY_SD
//---------------
template <MUINT32 _fid>
struct FidInfo
{
template <MUINT32 _val, MUINT32 _beg, MUINT32 _end>
struct IsWithin
{
enum { Result = (_beg <= _val && _val < _end) };
};
// Result = 8<=2 && 2 < 24 = 0 && 1 = 0
enum
{
isSceneIndep =
IsWithin<_fid,FID_BEGIN_SI,FID_END_SI>::Result,
isMiscSceneIndep =
IsWithin<_fid,FID_BEGIN_MISC_SI,FID_END_MISC_SI>::Result,
isRAWSceneIndep =
IsWithin<_fid,FID_BEGIN_RAW_SI,FID_END_RAW_SI>::Result,
isYUVSceneIndep =
IsWithin<_fid,FID_BEGIN_YUV_SI,FID_END_YUV_SI>::Result, // _fid=2,FID_BEGIN_YUV_SI =8, FID_END_YUV_SI= 24,
// FID_BEGIN_YUV_SI
=FID_BEGIN_RAW_YUV_SI =FID_PRE_BEGIN_RAW_YUV_SI + 1=FID_OVER_LAST_RAW_ONLY_SI - 1 //(ENUM_RAW_ONLY_FIDS_SI)
// FID_END_YUV_SI=FID_END_YUV_ONLY_SI=FID_OVER_LAST_YUV_ONLY_SI // (ENUM_YUV_ONLY_FIDS_SI)
isSceneDep =
^^^^^^
}
mediatek/custom/common/hal/inc/camera_feature/camera_feature_id.h: //这个文件包含了"kd_camera_feature_id.h"
namespace NSFeature
{
#include "kd_camera_feature_id.h"
typedef FEATURE_ID FEATURE_ID_T;
enum
{
FID_BEGIN = FID_PRE_BEGIN + 1, // FID_BEGIN = 0+1 = 1;
FID_NUM = FID_OVER_LAST - FID_BEGIN,
//////////////////////////////////////////////////////////////////////////////
// Scene-Independent (SI) feature id.
FID_BEGIN_SI = FID_PRE_BEGIN_SI + 1,
FID_END_SI = FID_OVER_LAST_SI,
//Misc. feature id.
FID_BEGIN_MISC_SI = FID_PRE_BEGIN_MISC_SI + 1,
FID_END_MISC_SI = FID_OVER_LAST_MISC_SI,
FID_NUM_MISC_SI = FID_END_MISC_SI - FID_BEGIN_MISC_SI,
//RAW-only feature id.
FID_BEGIN_RAW_ONLY_SI = FID_PRE_BEGIN_RAW_ONLY_SI + 1,
FID_END_RAW_ONLY_SI = FID_OVER_LAST_RAW_ONLY_SI,
FID_NUM_RAW_ONLY_SI = FID_END_RAW_ONLY_SI - FID_BEGIN_RAW_ONLY_SI,
//RAW-YUV-shared feature id.
FID_BEGIN_RAW_YUV_SI = FID_PRE_BEGIN_RAW_YUV_SI + 1, // = 8 key-word
FID_END_RAW_YUV_SI = FID_OVER_LAST_RAW_YUV_SI,
FID_NUM_RAW_YUV_SI = FID_END_RAW_YUV_SI - FID_BEGIN_RAW_YUV_SI,
//YUV-only feature id.
FID_BEGIN_YUV_ONLY_SI = FID_PRE_BEGIN_YUV_ONLY_SI + 1,
FID_END_YUV_ONLY_SI = FID_OVER_LAST_YUV_ONLY_SI, // =24;ke-word
FID_NUM_YUV_ONLY_SI = FID_END_YUV_ONLY_SI - FID_BEGIN_YUV_ONLY_SI,
//RAW feature id.
FID_BEGIN_RAW_SI = FID_BEGIN_RAW_ONLY_SI,
FID_END_RAW_SI = FID_OVER_LAST_RAW_YUV_SI,
FID_NUM_RAW_SI = FID_END_RAW_SI - FID_BEGIN_RAW_SI,
//YUV feature id.
FID_BEGIN_YUV_SI = FID_BEGIN_RAW_YUV_SI, // = 8 ; key-word
FID_END_YUV_SI = FID_END_YUV_ONLY_SI, // =24;key-word
FID_NUM_YUV_SI = FID_END_YUV_SI - FID_BEGIN_YUV_SI,
mediatek/custom/common/kernel/imgsensor/inc/kd_camera_feature_id.h:
typedef enum
{
FID_PRE_BEGIN = 0,
//////////////////////////////////////////////////////////////////////////////
// Scene-Independent (SI) feature id.
FID_PRE_BEGIN_SI = FID_PRE_BEGIN,
//----------------------------------------------------------------------------
//Misc. feature id.
ENUM_MISC_FIDS_SI (
FID_ZOOM_FACTOR, // Legacy symbol (Remove if possible)
FID_AE_STROBE, //value--> 2 ;// 涉事(涉及编译错误的枚举变量)的枚举变量。
FID_ZSD,
FID_AWB2PASS,
FID_AF_LAMP,
FID_FAST_CONTINUOUS_SHOT,
),// so FID_OVER_LAST_MISC_SI = 8;
//RAW-only feature id.
ENUM_RAW_ONLY_FIDS_SI (
),
//RAW-YUV-shared feature id.
ENUM_RAW_YUV_SHARED_FIDS_SI (
FID_SCENE_MODE,//8
FID_COLOR_EFFECT, // 9
FID_CAPTURE_MODE, //10
FID_CAP_SIZE, //11
FID_PREVIEW_SIZE, //12
FID_VIDEO_PREVIEW_SIZE, //13
FID_FRAME_RATE, //14
FID_FRAME_RATE_RANGE, //15
FID_AE_FLICKER, //-->16
FID_FOCUS_DIST_NORMAL, //17
FID_FOCUS_DIST_MACRO, //18
FID_STEREO_3D_CAP_SIZE, //19
FID_STEREO_3D_PREVIEW_SIZE, //20
FID_STEREO_3D_TYPE, //21
FID_STEREO_3D_MODE, //22
FID_STEREO_3D_IMAGE_FORMAT,//23
),
//YUV-only feature id.
ENUM_YUV_ONLY_FIDS_SI (
),
// FID_BEGIN_YUV_SI =FID_BEGIN_RAW_YUV_SI =FID_PRE_BEGIN_RAW_YUV_SI + 1=FID_OVER_LAST_RAW_ONLY_SI - 1 //(ENUM_RAW_ONLY_FIDS_SI)
// FID_END_YUV_SI=FID_END_YUV_ONLY_SI=FID_OVER_LAST_YUV_ONLY_SI // (ENUM_YUV_ONLY_FIDS_SI)
//----------------------------------------------------------------------------
FID_OVER_LAST_SI = FID_OVER_LAST_YUV_ONLY_SI,
//////////////////////////////////////////////////////////////////////////////
// Scene-Dependent (SD) feature id.
FID_PRE_BEGIN_SD = FID_OVER_LAST_SI - 1,
//----------------------------------------------------------------------------
//Misc. feature id.
ENUM_MISC_FIDS_SD (
FID_FD_ON_OFF,
),
//RAW-only feature id.
ENUM_RAW_ONLY_SD (
),
//RAW-YUV-shared feature id.
ENUM_RAW_YUV_SHARED_FIDS_SD (
FID_AE_SCENE_MODE,
FID_AE_METERING,
FID_AE_ISO,
FID_AE_EV,
FID_AF_MODE,
FID_AF_METERING,
FID_AWB_MODE,
FID_ISP_EDGE,
FID_ISP_HUE,
FID_ISP_SAT,
FID_ISP_BRIGHT,
FID_ISP_CONTRAST,
),
//YUV-only feature id.
ENUM_YUV_ONLY_SD (
FID_YUV_AUTOTEST,
),
// IsWithin<_fid,FID_BEGIN_YUV_SI,FID_END_YUV_SI>::Result 限定了
// _fid 的值(也就是[b]FID_AE_STROBE,), 必须是在 ENUM_RAW_ONLY_SD 枚举的尾部 和 ENUM_YUV_ONLY_SD 枚举的尾部之间。 其实它本应该被放在 ENUM_RAW_YUV_SHARED_FIDS_SI 枚举类型中。[/b]
//上面的编译错误是为了 避免非 YUV的 枚举值 被用到.
//----------------------------------------------------------------------------
FID_OVER_LAST_SD = FID_OVER_LAST_YUV_ONLY_SD,
//////////////////////////////////////////////////////////////////////////////
FID_OVER_LAST = FID_OVER_LAST_SD,
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
} FEATURE_ID;
相关文章推荐
- Android摄像头相关源码分析: 设备驱动, HAL, Framework
- Android摄像头相关源码分析: 设备驱动, HAL, Framework
- Android 开发效率工具,开发自测相关,测试工具,开发及编译环境,其他
- Android 开源项目android-open-project开发工具及测试工具解析 开发效率工具,开发自测相关,测试工具,开发及编译环境,其他
- Android CameraHal NativeWindow相关(三)- Leon 5 (mDisplayAdapter->setErrorHandler(mAppCallbackNotifier.get());)
- Android启动流程分析之一:Bootloader(基于高通芯片) 【mtk lk阶段有类似】
- 【cocos2dx音频问题参考方案】【Android开发】之MediaPlayer的错误分析
- android编译报错Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
- android邮箱开发可以参考的相关开源资料
- 反编译与回编译android的framework.jar(其他jar文件也可参考)
- 反编译与回编译android的framework.jar(其他jar文件也可参考)
- MTK平台相关总结#########[FAQ18279]开机时间慢分析 android 系统重启关机流程分析
- android下编摄像头的hal下代码时的错误error: call to '__property_get_too_small_error' declared with attribute error
- 引入其他项目做为module之后,在编译时候提示“Error:Dependency Android_2015:projLib:unspecified on project projAPK resol”
- 关于PHP-Zend framework2 框架 学习过程。 阅前须知: ZF2中的配置文件是可以静态文件配置来注册和通过相关函数动态注册。 1.EventManager(事件驱动),关于事件驱动,在ZF2相关资料没有详细说明,可以参考ANDROID的事件驱动,MFC的消息响应/事件驱动。
- Android中View绘制流程以及invalidate()等相关方法分析
- android中ListView的优化方案详解分析