camera_qcom: cleanup main() (#19805)

* cleanup main

* continue

* remove last_t from CameraState

* cleanup
pull/20101/head
Dean Lee 2021-02-17 08:25:46 +08:00 committed by GitHub
parent 4c2efb4e7e
commit 139470f033
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 53 deletions

View File

@ -1685,7 +1685,6 @@ void cameras_run(MultiCameraState *s) {
while (!do_exit) {
struct pollfd fds[2] = {{.fd = cameras[0]->isp_fd, .events = POLLPRI},
{.fd = cameras[1]->isp_fd, .events = POLLPRI}};
int ret = poll(fds, ARRAYSIZE(fds), 1000);
if (ret < 0) {
if (errno == EINTR || errno == EAGAIN) continue;
@ -1701,71 +1700,43 @@ void cameras_run(MultiCameraState *s) {
struct v4l2_event ev = {};
ret = ioctl(c->isp_fd, VIDIOC_DQEVENT, &ev);
struct msm_isp_event_data *isp_event_data = (struct msm_isp_event_data *)ev.u.data;
unsigned int event_type = ev.type;
uint64_t timestamp = (isp_event_data->mono_timestamp.tv_sec*1000000000ULL
+ isp_event_data->mono_timestamp.tv_usec*1000);
int buf_idx = isp_event_data->u.buf_done.buf_idx;
int stream_id = isp_event_data->u.buf_done.stream_id;
int buffer = (stream_id&0xFFFF) - 1;
uint64_t t = nanos_since_boot();
/*if (i == 1) {
printf("%10.2f: VIDIOC_DQEVENT: %d type:%X (%s)\n", t*1.0/1e6, ret, event_type, get_isp_event_name(event_type));
}*/
// printf("%d: %s\n", i, get_isp_event_name(event_type));
switch (event_type) {
case ISP_EVENT_BUF_DIVERT:
/*if (c->is_samsung) {
printf("write %d\n", c->frame_size);
FILE *f = fopen("/tmp/test", "wb");
fwrite((void*)c->camera_bufs[i].addr, 1, c->frame_size, f);
fclose(f);
}*/
//printf("divert: %d %d %d\n", i, buffer, buf_idx);
const msm_isp_event_data *isp_event_data = (const msm_isp_event_data *)ev.u.data;
if (ev.type == ISP_EVENT_BUF_DIVERT) {
const int buf_idx = isp_event_data->u.buf_done.buf_idx;
const int buffer = (isp_event_data->u.buf_done.stream_id & 0xFFFF) - 1;
if (buffer == 0) {
c->buf.camera_bufs_metadata[buf_idx] = get_frame_metadata(c, isp_event_data->frame_id);
c->buf.queue(buf_idx);
} else {
uint8_t *d = (uint8_t*)(c->ss[buffer].bufs[buf_idx].addr);
auto &ss = c->ss[buffer];
if (buffer == 1) {
parse_autofocus(c, d);
parse_autofocus(c, (uint8_t *)(ss.bufs[buf_idx].addr));
}
c->ss[buffer].qbuf_info[buf_idx].dirty_buf = 1;
ioctl(c->isp_fd, VIDIOC_MSM_ISP_ENQUEUE_BUF, &c->ss[buffer].qbuf_info[buf_idx]);
ss.qbuf_info[buf_idx].dirty_buf = 1;
ioctl(c->isp_fd, VIDIOC_MSM_ISP_ENQUEUE_BUF, &ss.qbuf_info[buf_idx]);
}
break;
case ISP_EVENT_EOF:
// printf("ISP_EVENT_EOF delta %f\n", (t-last_t)/1e6);
c->last_t = t;
} else if (ev.type == ISP_EVENT_EOF) {
const uint64_t timestamp = (isp_event_data->mono_timestamp.tv_sec * 1000000000ULL + isp_event_data->mono_timestamp.tv_usec * 1000);
pthread_mutex_lock(&c->frame_info_lock);
c->frame_metadata[c->frame_metadata_idx] = (FrameMetadata){
.frame_id = isp_event_data->frame_id,
.timestamp_eof = timestamp,
.frame_length = (unsigned int)c->cur_frame_length,
.integ_lines = (unsigned int)c->cur_integ_lines,
.global_gain = (unsigned int)c->cur_gain,
.lens_pos = c->cur_lens_pos,
.lens_sag = c->last_sag_acc_z,
.lens_err = c->focus_err,
.lens_true_pos = c->lens_true_pos,
.gain_frac = c->cur_gain_frac,
.frame_id = isp_event_data->frame_id,
.timestamp_eof = timestamp,
.frame_length = (unsigned int)c->cur_frame_length,
.integ_lines = (unsigned int)c->cur_integ_lines,
.global_gain = (unsigned int)c->cur_gain,
.lens_pos = c->cur_lens_pos,
.lens_sag = c->last_sag_acc_z,
.lens_err = c->focus_err,
.lens_true_pos = c->lens_true_pos,
.gain_frac = c->cur_gain_frac,
};
c->frame_metadata_idx = (c->frame_metadata_idx+1)%METADATA_BUF_COUNT;
c->frame_metadata_idx = (c->frame_metadata_idx + 1) % METADATA_BUF_COUNT;
pthread_mutex_unlock(&c->frame_info_lock);
break;
case ISP_EVENT_ERROR:
} else if (ev.type == ISP_EVENT_ERROR) {
LOGE("ISP_EVENT_ERROR! err type: 0x%08x", isp_event_data->u.error_info.err_type);
break;
}
}
}

View File

@ -91,8 +91,6 @@ typedef struct CameraState {
StreamState ss[3];
uint64_t last_t;
camera_apply_exposure_func apply_exposure;
int16_t focus[NUM_FOCUS];