问题: HAL 返回结果是按 Request 顺序返回的吗?还是可以乱序?结论: 可以乱序返回,但有约束条件。HAL 通过两个回调返回结果:notify()(Shutter 事件)和processCaptureResult()(Metadata + Image Data)。它们的乱序规则如下:1. Shutter 顺序(notify 回调)同一个 Request 内的多次 notify 不保证顺序不同 Request 之间的 notify 必须严格按 Request 顺序返回— Request N 的 shutter 必须在 Request N+1 的 shutter 之前到达代码强制校验:Camera3OutputUtils.cpp:1202-1233中notifyShutter()对帧号做递增检查,乱序直接SET_ERR导致设备进入 ERROR 状态// Camera3OutputUtils.cpp:1225-1232if(msg.frame_numberstates.nextShutterFrameNum){SET_ERR(CAMERA_HAL_CALLBACK_ERROR,"Shutter notification out-of-order. Expected ""notification for frame %d, got frame %d",states.nextShutterFrameNum,msg.frame_number);return;}states.nextShutterFrameNum=msg.frame_number+1;
Android CameraServer 答疑4:Request返回顺序问题
问题: HAL 返回结果是按 Request 顺序返回的吗?还是可以乱序?结论: 可以乱序返回,但有约束条件。HAL 通过两个回调返回结果:notify()(Shutter 事件)和processCaptureResult()(Metadata + Image Data)。它们的乱序规则如下:1. Shutter 顺序(notify 回调)同一个 Request 内的多次 notify 不保证顺序不同 Request 之间的 notify 必须严格按 Request 顺序返回— Request N 的 shutter 必须在 Request N+1 的 shutter 之前到达代码强制校验:Camera3OutputUtils.cpp:1202-1233中notifyShutter()对帧号做递增检查,乱序直接SET_ERR导致设备进入 ERROR 状态// Camera3OutputUtils.cpp:1225-1232if(msg.frame_numberstates.nextShutterFrameNum){SET_ERR(CAMERA_HAL_CALLBACK_ERROR,"Shutter notification out-of-order. Expected ""notification for frame %d, got frame %d",states.nextShutterFrameNum,msg.frame_number);return;}states.nextShutterFrameNum=msg.frame_number+1;