|
|
|
@ -807,11 +807,6 @@ void cameras_init(MultiCameraState *s, cl_device_id device_id, cl_context ctx) { |
|
|
|
|
printf("wide initted \n"); |
|
|
|
|
camera_init(&s->front, CAMERA_ID_AR0231, 2, 20, device_id, ctx); |
|
|
|
|
printf("front initted \n"); |
|
|
|
|
#ifdef NOSCREEN |
|
|
|
|
zsock_t *rgb_sock = zsock_new_push("tcp://192.168.3.4:7768"); |
|
|
|
|
assert(rgb_sock); |
|
|
|
|
s->rgb_sock = rgb_sock; |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
s->sm = new SubMaster({"driverState"}); |
|
|
|
|
s->pm = new PubMaster({"frame", "frontFrame", "wideFrame", "thumbnail"}); |
|
|
|
@ -918,9 +913,7 @@ static void cameras_close(MultiCameraState *s) { |
|
|
|
|
camera_close(&s->rear); |
|
|
|
|
camera_close(&s->wide); |
|
|
|
|
camera_close(&s->front); |
|
|
|
|
#ifdef NOSCREEN |
|
|
|
|
zsock_destroy(&s->rgb_sock); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
delete s->sm; |
|
|
|
|
delete s->pm; |
|
|
|
|
} |
|
|
|
@ -1107,27 +1100,18 @@ static void* ae_thread(void* arg) { |
|
|
|
|
|
|
|
|
|
void camera_process_front(MultiCameraState *s, CameraState *c, int cnt) { |
|
|
|
|
common_camera_process_front(s->sm, s->pm, c, cnt); |
|
|
|
|
#ifdef NOSCREEN |
|
|
|
|
const CameraBuf *b = &c->buf; |
|
|
|
|
if (b->cur_frame_data.frame_id % 4 == 2) { |
|
|
|
|
sendrgb(s, (uint8_t *)b->cur_rgb_buf->addr, b->cur_rgb_buf->len, 2); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// called by processing_thread
|
|
|
|
|
void camera_process_frame(MultiCameraState *s, CameraState *c, int cnt) { |
|
|
|
|
const CameraBuf *b = &c->buf; |
|
|
|
|
|
|
|
|
|
#ifdef NOSCREEN |
|
|
|
|
if (b->cur_frame_data.frame_id % 4 == (c == &s->rear ? 1 : 0)) { |
|
|
|
|
sendrgb(s, (uint8_t *)b->cur_rgb_buf->addr, b->cur_rgb_buf->len, c == &s->rear ? 0 : 1); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
MessageBuilder msg; |
|
|
|
|
auto framed = c == &s->rear ? msg.initEvent().initFrame() : msg.initEvent().initWideFrame(); |
|
|
|
|
fill_frame_data(framed, b->cur_frame_data, cnt); |
|
|
|
|
if ((c == &s->rear && env_send_rear) || (c == &s->wide && env_send_wide)) { |
|
|
|
|
fill_frame_image(framed, (uint8_t*)b->cur_rgb_buf->addr, b->rgb_width, b->rgb_height, b->rgb_stride); |
|
|
|
|
} |
|
|
|
|
if (c == &s->rear) { |
|
|
|
|
framed.setTransform(kj::ArrayPtr<const float>(&b->yuv_transform.v[0], 9)); |
|
|
|
|
} |
|
|
|
@ -1224,32 +1208,3 @@ void cameras_run(MultiCameraState *s) { |
|
|
|
|
|
|
|
|
|
for (auto &t : threads) t.join(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef NOSCREEN |
|
|
|
|
void sendrgb(MultiCameraState *s, uint8_t* dat, int len, uint8_t cam_id) { |
|
|
|
|
int err, err2; |
|
|
|
|
int scale = 6; |
|
|
|
|
int old_width = FRAME_WIDTH; |
|
|
|
|
// int old_height = FRAME_HEIGHT;
|
|
|
|
|
int new_width = FRAME_WIDTH / scale; |
|
|
|
|
int new_height = FRAME_HEIGHT / scale; |
|
|
|
|
uint8_t resized_dat[new_width*new_height*3]; |
|
|
|
|
// int goff, loff;
|
|
|
|
|
// goff = ((old_width*(scale-1)*old_height/scale)/2);
|
|
|
|
|
memset(&resized_dat, cam_id, 3); |
|
|
|
|
for (uint32_t r=1;r<new_height;r++) { |
|
|
|
|
for (uint32_t c=1;c<new_width;c++) { |
|
|
|
|
resized_dat[(r*new_width+c)*3] = dat[(r*old_width + c)*3*scale]; |
|
|
|
|
resized_dat[(r*new_width+c)*3+1] = dat[(r*old_width + c)*3*scale+1]; |
|
|
|
|
resized_dat[(r*new_width+c)*3+2] = dat[(r*old_width + c)*3*scale+2]; |
|
|
|
|
// loff = r*old_width + c;
|
|
|
|
|
// resized_dat[(r*new_width+c)*3] = dat[(goff+loff)*3];
|
|
|
|
|
// resized_dat[(r*new_width+c)*3+1] = dat[(goff+loff)*3+1];
|
|
|
|
|
// resized_dat[(r*new_width+c)*3+2] = dat[(goff+loff)*3+2];
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
err = zmq_send(zsock_resolve(s->rgb_sock), &resized_dat, new_width*new_height*3, 0); |
|
|
|
|
err2 = zmq_errno(); |
|
|
|
|
//printf("zmq errcode %d, %d\n",err,err2);
|
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|