注意事项:在解决camera CTS failed 时要首先确认是哪一颗摄像头(前摄或后摄)引起的。
判断方法:单独运行报错的cts包(command: run cts -c android.hardware.camera2.cts.ExtendedCameraCharacteristicsTest -m testAvailableStreamConfigs --skip-preconditions --force -abi 32 for example),如果测试的机器进入了前摄(过程为先测后摄再前摄)才报错,即报错是前摄引起的。
1.android.hardware.camera2.cts.ExtendedCameraCharacteristicsTest--testAvailableStreamConfigs
junit.framework.AssertionFailedError: Required FULLHD size not found for format 100 for: ID 1 : No elements from [,320x240640x4801280x7681280x9601600x912...] in [, 1920x10801920x1088] at junit.framework.Assert.fail(Assert.java:50)
solution:根据FAQ17749
Case 9: CTS测试android.hardware.camera2.cts.ExtendedCameraCharacteristicsTest#testAvailableStreamConfigs fail
junit.framework.AssertionFailedError: Required HD size not found
-> 这条测试项会fail的原因在于: 如果最大的Pic Size超过(或者等于)HD(1280x720), 就必须包含HD的size. 同理,还有其他:
private static final Size FULLHD = new Size(1920, 1080);
private static final Size FULLHD_ALT = new Size(1920, 1088);
private static final Size HD = new Size(1280, 720);
private static final Size VGA = new Size(640, 480);
private static final Size QVGA = new Size(320, 240);
private static final Size FULLHD_ALT = new Size(1920, 1088);
private static final Size HD = new Size(1280, 720);
private static final Size VGA = new Size(640, 480);
private static final Size QVGA = new Size(320, 240);
所以,我们增加相应的Pic Size.
在对应的摄像头config.ftbl文件中修改如下代码(红色字体为add代码):
#if 1
// Picture Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_PICTURE_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("640x480"),
ITEM_AS_VALUES_(
"320x240", //QVGA
"640x480", //VGA
"1280x720", "1280x768", //1M
"1280x960", "1600x912", //1.3M
"1600x1200", "2048x1152", "1920x1088", //2M
)
),
)
#endif
// Picture Size
FTABLE_CONFIG_AS_TYPE_OF_DEFAULT_VALUES(
KEY_AS_(MtkCameraParameters::KEY_PICTURE_SIZE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("640x480"),
ITEM_AS_VALUES_(
"320x240", //QVGA
"640x480", //VGA
"1280x720", "1280x768", //1M
"1280x960", "1600x912", //1.3M
"1600x1200", "2048x1152", "1920x1088", //2M
)
),
)
#endif
2.android.hardware.camera2.cts.RecordingTest--
testBasicRecording和---- testRecordingFromPersistentSurface
junit.framework.AssertionFailedError: Frame rate range [20, 20] (for profile ID 2) must be one of the camera device available FPS range! at junit.framework.Assert.fail(Assert.java:50)
Solution:根据提示看出,是指frame rate range [20 20] 必须要有。在对应的config.ftbl文件中做如下修改:
#if 1
// Preview Frame Rate Range
FTABLE_CONFIG_AS_TYPE_OF_USER(
KEY_AS_(MtkCameraParameters::KEY_PREVIEW_FPS_RANGE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("30000,30000"),
ITEM_AS_USER_LIST_(
"(15000,15000)",
"(20000,20000)",
"(30000,30000)",
)
),
)
#endif
// Preview Frame Rate Range
FTABLE_CONFIG_AS_TYPE_OF_USER(
KEY_AS_(MtkCameraParameters::KEY_PREVIEW_FPS_RANGE),
SCENE_AS_DEFAULT_SCENE(
ITEM_AS_DEFAULT_("30000,30000"),
ITEM_AS_USER_LIST_(
"(15000,15000)",
"(20000,20000)",
"(30000,30000)",
)
),
)
#endif
3.android.hardware.camera2.cts.FlashlightTest-- testCameraDeviceOpenAfterTorchOn/-- testSetTorchModeOnOff/
-- testTorchCallback/-- testTorchModeExceptions
java.lang.IllegalArgumentException: Bad argument passed to camera service at android.hardware.camera2.utils.CameraBinderDecorator.throwOnError(CameraBinderDecorator.java:114)
或
junit.framework.AssertionFailedError: not expecting IllegalArgumentException at junit.framework.Assert.fail(Assert.java:50)
Solution:
如果摄像头有闪光灯效果,在config_static_metadata.project.flashlight.××.h中
STATIC_METADATA2_BEGIN(DEVICE, FLASHLIGHT, SENSOR_DRVNAME_GC0310_MIPI_YUV)
CONFIG_METADATA_BEGIN(MTK_FLASH_INFO_AVAILABLE)
CONFIG_ENTRY_VALUE(MTK_FLASH_INFO_AVAILABLE_TRUE, MUINT8)
CONFIG_METADATA_END()
CONFIG_METADATA_BEGIN(MTK_FLASH_INFO_AVAILABLE)
CONFIG_ENTRY_VALUE(MTK_FLASH_INFO_AVAILABLE_TRUE, MUINT8)
CONFIG_METADATA_END()
CONFIG_METADATA_BEGIN(MTK_FLASH_INFO_CHARGE_DURATION)
CONFIG_ENTRY_VALUE(0, MINT64)
CONFIG_METADATA_END()
STATIC_METADATA_END()
反之亦然 。
4.android.hardware.camera2.cts.RecordingTest-- testBurstVideoSnapshot
com.android.ex.camera2.exceptions.TimeoutRuntimeException: Timed out after 3000 ms waiting for state(s) SESSION_CLOSED at com.android.ex.camera2.utils.StateWaiter.waitForAnyOfStates(StateWaiter.java:164)
Solution :
在对应摄像头的kernel里.c文件,减小picture/preview/video 等delay frame 。此问题也可以通过提高摄像头帧率解决。
5.android.hardware.cts.CameraGLTest-- testCameraToSurfaceTextureMetadata
junit.framework.AssertionFailedError: Too many frame intervals out of frame rate bounds: 98, limit 4 at junit.framework.Assert.fail(Assert.java:50)
Solution :可以通过提高摄像头帧率解决。