camerad: fix bps flush (#34758)

pull/34759/head
Adeeb Shihadeh 2 months ago committed by GitHub
parent a922b69239
commit a2bc5061e4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 30
      system/camerad/cameras/spectra.cc

@ -249,13 +249,6 @@ SpectraCamera::~SpectraCamera() {
} }
int SpectraCamera::clear_req_queue() { int SpectraCamera::clear_req_queue() {
struct cam_req_mgr_flush_info req_mgr_flush_request = {0};
req_mgr_flush_request.session_hdl = session_handle;
req_mgr_flush_request.link_hdl = link_handle;
req_mgr_flush_request.flush_type = CAM_REQ_MGR_FLUSH_TYPE_ALL;
int ret = do_cam_control(m->video0_fd, CAM_REQ_MGR_FLUSH_REQ, &req_mgr_flush_request, sizeof(req_mgr_flush_request));
LOGD("flushed all req: %d", ret);
if (icp_dev_handle > 0) { if (icp_dev_handle > 0) {
struct cam_flush_dev_cmd cmd = { struct cam_flush_dev_cmd cmd = {
.session_handle = session_handle, .session_handle = session_handle,
@ -264,8 +257,16 @@ int SpectraCamera::clear_req_queue() {
}; };
int err = do_cam_control(m->icp_fd, CAM_FLUSH_REQ, &cmd, sizeof(cmd)); int err = do_cam_control(m->icp_fd, CAM_FLUSH_REQ, &cmd, sizeof(cmd));
assert(err == 0); assert(err == 0);
LOGD("flushed bps: %d", err);
} }
struct cam_req_mgr_flush_info req_mgr_flush_request = {0};
req_mgr_flush_request.session_hdl = session_handle;
req_mgr_flush_request.link_hdl = link_handle;
req_mgr_flush_request.flush_type = CAM_REQ_MGR_FLUSH_TYPE_ALL;
int ret = do_cam_control(m->video0_fd, CAM_REQ_MGR_FLUSH_REQ, &req_mgr_flush_request, sizeof(req_mgr_flush_request));
LOGD("flushed all req: %d", ret);
for (int i = 0; i < MAX_IFE_BUFS; ++i) { for (int i = 0; i < MAX_IFE_BUFS; ++i) {
destroySyncObjectAt(i); destroySyncObjectAt(i);
} }
@ -938,16 +939,15 @@ bool SpectraCamera::enqueue_buffer(int i, uint64_t request_id) {
} }
} }
// all good, hand off frame
if (ret == 0) { if (ret == 0) {
// all good, hand off frame
frame_ready = true; frame_ready = true;
} destroySyncObjectAt(i);
} else {
if (ret != 0) { // need to start over on sync failures,
// otherwise future frames will tear
clear_req_queue(); clear_req_queue();
} }
destroySyncObjectAt(i);
} }
// create output fences // create output fences
@ -1378,14 +1378,14 @@ bool SpectraCamera::handle_camera_event(const cam_req_mgr_message *event_data) {
return false; return false;
} }
if (!enabled) return false;
// ID from the qcom camera request manager // ID from the qcom camera request manager
uint64_t request_id = event_data->u.frame_msg.request_id; uint64_t request_id = event_data->u.frame_msg.request_id;
// raw as opposed to our re-indexed frame ID // raw as opposed to our re-indexed frame ID
uint64_t frame_id_raw = event_data->u.frame_msg.frame_id; uint64_t frame_id_raw = event_data->u.frame_msg.frame_id;
//LOGD("handle cam %d, request id %lu -> %lu, frame id raw %lu", cc.camera_num, request_id_last, request_id, frame_id_raw);
if (request_id != 0) { // next ready if (request_id != 0) { // next ready
// check for skipped_last frames // check for skipped_last frames
if (frame_id_raw > frame_id_raw_last + 1 && !skipped_last) { if (frame_id_raw > frame_id_raw_last + 1 && !skipped_last) {

Loading…
Cancel
Save