出发点
在展锐平台开发Camera的时候有时候会遇到报错的情况,log如下:
1-05 13:26:12.429 722 29945 E Camera3-Device: Camera 0: sendRequestsBatch: RequestThread: Unable to submit capture request 8115 to HAL device: Function not implemented (-38)
01-05 13:26:12.430 29604 29766 E CAM2PORT_AndCam2AgntImp: Camera device '0' encountered error code '4'
01-05 13:26:12.431 29604 29604 W CAM_CameraActivity Drea: Camera open failure: HIST_ID0_-1_1_803_711_204_711_101_102_204_204_204_204_204_204_461_462_204_502_802_204_204_302_305_802_204_204_204_HEND
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: Handling Camera Open Failure:
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: java.lang.Exception
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: at com.android.camera.FatalErrorHandlerImpl.onCameraOpenFailure(FatalErrorHandlerImpl.java:49)
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: at com.android.camera.CameraActivity$8.run(CameraActivity.java:717)
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: at android.os.Handler.handleCallback(Handler.java:938)
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: at android.os.Looper.loop(Looper.java:223)
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: at android.app.ActivityThread.main(ActivityThread.java:7938)
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: at java.lang.reflect.Method.invoke(Native Method)
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:603)
01-05 13:26:12.432 29604 29604 E CAM_FatalErrorHandler: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
01-05 13:26:12.433 29604 29604 E CAM_CameraUtil: Show fatal error dialog
在log中会出现HIST_ID0_-1_1_803_711_204_711_101_102_204_204_204_204_204_204_461_462_204_502_802_204_204_302_305_802_204_204_204_HEND
这样的一段包含很多数字的信息,这些数字是有含义的,代表报错之前执行的一些Action,有时候可以帮助我们分析错误的原因。
这些数字主要定义在
vendor/sprd/platform/packages/apps/DreamCamera2/portability/src/com/android/ex/camera2/portability/SprdCameraActions.java
public static final int CAPTURE_BURST_PHOTO = 602;
public static final int CANCEL_CAPTURE_BURST_PHOTO = 603;
/* @} */
public static final int SET_SENSOR_SELF_SHOT_LISTENER = 711;
public static final int SET_PREVIEW_TEXTURE_ASYNC_WITHOUT_OPTIMIZE = 109;
public static final int SET_PREVIEW_DISPLAY_ASYNC_WITHOUT_OPTIMIZE = 110;
public static final int STOP_PREVIEW_WITHOUT_FLUSH = 111;
// SPRD:add for saving normal pic for HDR
public static final int CAPTURE_HDR_PHOTO = 701;
public static final int CAPTURE_PHOTO_WITH_THUMB = 702;
// SPRD: add for thumb resolution, release surface and flush preview buffer.
public static final int RELEASE_FOR_THUMB = 801;
public static final int SET_HDR_SCENE_LISTENER = 802;
public static final int START_VIDEO_RECORDER = 901;
public static final int CAPTURE_PHOTO_WITH_SNAP = 902;
public static final int SET_AI_SCENE_LISTENER = 803;
public static final int SET_AUTO3DNR_SCENE_LISTENER = 805;
public static final int SET_AUTO_CHASING_LISTENER = 804;
vendor/sprd/platform/packages/apps/DreamCamera2/portability/src/com/android/ex/camera2/portability/CameraActions.java
// Camera initialization/finalization
public static final int OPEN_CAMERA = 1;
public static final int RELEASE = 2;
public static final int RECONNECT = 3;
public static final int UNLOCK = 4;
public static final int LOCK = 5;
// Preview
public static final int SET_PREVIEW_TEXTURE_ASYNC = 101;
public static final int START_PREVIEW_ASYNC = 102;
public static final int STOP_PREVIEW = 103;
public static final int SET_PREVIEW_CALLBACK_WITH_BUFFER = 104;
public static final int ADD_CALLBACK_BUFFER = 105;
public static final int SET_PREVIEW_DISPLAY_ASYNC = 106;
public static final int SET_PREVIEW_CALLBACK = 107;
public static final int SET_ONE_SHOT_PREVIEW_CALLBACK = 108;
// Parameters
public static final int SET_PARAMETERS = 201;
public static final int GET_PARAMETERS = 202;
public static final int REFRESH_PARAMETERS = 203;
public static final int APPLY_SETTINGS = 204;
// Focus, Zoom
public static final int AUTO_FOCUS = 301;
public static final int CANCEL_AUTO_FOCUS = 302;
public static final int SET_AUTO_FOCUS_MOVE_CALLBACK = 303;
public static final int SET_ZOOM_CHANGE_LISTENER = 304;
public static final int CANCEL_AUTO_FOCUS_FINISH = 305;
// Face detection
public static final int SET_FACE_DETECTION_LISTENER = 461;
public static final int START_FACE_DETECTION = 462;
public static final int STOP_FACE_DETECTION = 463;
// Presentation
public static final int ENABLE_SHUTTER_SOUND = 501;
public static final int SET_DISPLAY_ORIENTATION = 502;
public static final int SET_JPEG_ORIENTATION = 503;
// Capture
public static final int CAPTURE_PHOTO = 601;
// Light portrait
public static final int SET_LIGHT_PORTRAIT_CALLBACK = 510;
每次手动去查太麻烦,于是写了一个Java程序用来解析
源码
public class Main{
public static void main(String[] args){
if (args.length <= 0) {
System.out.println("args length is 0");
return;
}
String arg = args[0];
String[] actions = arg.split("_");
StringBuilder builder = new StringBuilder();
for (String action : actions) {
switch (action) {
case "1":
builder.append("OPEN_CAMERA");
break;
case "2":
builder.append("RELEASE");
break;
case "3":
builder.append("RECONNECT");
break;
case "4":
builder.append("UNLOCK");
break;
case "5":
builder.append("LOCK");
break;
case "101":
builder.append("SET_PREVIEW_TEXTURE_ASYNC");
break;
case "102":
builder.append("START_PREVIEW_ASYNC");
break;
case "103":
builder.append("STOP_PREVIEW");
break;
case "104":
builder.append("SET_PREVIEW_CALLBACK_WITH_BUFFER");
break;
case "105":
builder.append("ADD_CALLBACK_BUFFER");
break;
case "106":
builder.append("SET_PREVIEW_DISPLAY_ASYNC");
break;
case "107":
builder.append("SET_PREVIEW_CALLBACK");
break;
case "108":
builder.append("SET_ONE_SHOT_PREVIEW_CALLBACK");
break;
case "109":
builder.append("SET_PREVIEW_TEXTURE_ASYNC_WITHOUT_OPTIMIZE");
break;
case "110":
builder.append("SET_PREVIEW_DISPLAY_ASYNC_WITHOUT_OPTIMIZE");
break;
case "111":
builder.append("STOP_PREVIEW_WITHOUT_FLUSH");
break;
case "201":
builder.append("SET_PARAMETERS");
break;
case "202":
builder.append("GET_PARAMETERS");
break;
case "203":
builder.append("REFRESH_PARAMETERS");
break;
case "204":
builder.append("APPLY_SETTINGS");
break;
case "301":
builder.append("AUTO_FOCUS");
break;
case "302":
builder.append("CANCEL_AUTO_FOCUS");
break;
case "303":
builder.append("SET_AUTO_FOCUS_MOVE_CALLBACK");
break;
case "304":
builder.append("SET_ZOOM_CHANGE_LISTENER");
break;
case "305":
builder.append("CANCEL_AUTO_FOCUS_FINISH");
break;
case "461":
builder.append("SET_FACE_DETECTION_LISTENER");
break;
case "462":
builder.append("START_FACE_DETECTION");
break;
case "463":
builder.append("STOP_FACE_DETECTION");
break;
case "501":
builder.append("ENABLE_SHUTTER_SOUND");
break;
case "502":
builder.append("SET_DISPLAY_ORIENTATION");
break;
case "503":
builder.append("SET_JPEG_ORIENTATION");
break;
case "510":
builder.append("SET_LIGHT_PORTRAIT_CALLBACK");
break;
case "601":
builder.append("CAPTURE_PHOTO");
break;
case "602":
builder.append("CAPTURE_BURST_PHOTO");
break;
case "603":
builder.append("CANCEL_CAPTURE_BURST_PHOTO");
break;
case "701":
builder.append("CAPTURE_HDR_PHOTO");
break;
case "702":
builder.append("CAPTURE_PHOTO_WITH_THUMB");
break;
case "711":
builder.append("SET_SENSOR_SELF_SHOT_LISTENER");
break;
case "801":
builder.append("RELEASE_FOR_THUMB");
break;
case "802":
builder.append("SET_HDR_SCENE_LISTENER");
break;
case "803":
builder.append("SET_AI_SCENE_LISTENER");
break;
case "804":
builder.append("SET_AUTO_CHASING_LISTENER");
break;
case "805":
builder.append("SET_AUTO3DNR_SCENE_LISTENER");
break;
case "901":
builder.append("START_VIDEO_RECORDER");
break;
case "902":
builder.append("CAPTURE_PHOTO_WITH_SNAP");
break;
default:
builder.append(action);
break;
}
builder.append("\n");
}
System.out.println("builder:" + builder.toString());
}
}
使用方法
javac Main.java && java Main HIST_ID38_-1_1_803_302_305_802_711_711_204_101_102_204_204_204_204_204_204_461_462_204_502_303_204_111_711_302_305_803_802_303_461_463_2_1_HEND