tici front/wide encodeIdx msgs (#2564)

* different msgs

* also add timestamps

* keep impatient log, remove the other

* meaningless
pull/2580/head
ZwX1616 4 years ago committed by GitHub
parent c68e8ec3fc
commit f244b7c7e1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      selfdrive/camerad/cameras/camera_common.cc
  2. 1
      selfdrive/camerad/cameras/camera_common.h
  3. 1
      selfdrive/camerad/main.cc
  4. 1
      selfdrive/common/visionipc.h
  5. 19
      selfdrive/loggerd/loggerd.cc

@ -213,7 +213,6 @@ void CameraBuf::stop() {
void fill_frame_data(cereal::FrameData::Builder &framed, const FrameMetadata &frame_data, uint32_t cnt) { void fill_frame_data(cereal::FrameData::Builder &framed, const FrameMetadata &frame_data, uint32_t cnt) {
framed.setFrameId(frame_data.frame_id); framed.setFrameId(frame_data.frame_id);
framed.setEncodeId(cnt);
framed.setTimestampEof(frame_data.timestamp_eof); framed.setTimestampEof(frame_data.timestamp_eof);
framed.setFrameLength(frame_data.frame_length); framed.setFrameLength(frame_data.frame_length);
framed.setIntegLines(frame_data.integ_lines); framed.setIntegLines(frame_data.integ_lines);

@ -63,6 +63,7 @@ typedef struct LogCameraInfo {
typedef struct FrameMetadata { typedef struct FrameMetadata {
uint32_t frame_id; uint32_t frame_id;
uint64_t timestamp_sof; // only set on tici
uint64_t timestamp_eof; uint64_t timestamp_eof;
unsigned int frame_length; unsigned int frame_length;
unsigned int integ_lines; unsigned int integ_lines;

@ -205,6 +205,7 @@ void* visionserver_client_thread(void* arg) {
stream_i == VISION_STREAM_YUV_WIDE) { stream_i == VISION_STREAM_YUV_WIDE) {
CameraBuf *b = get_camerabuf_by_type(s, (VisionStreamType)stream_i); CameraBuf *b = get_camerabuf_by_type(s, (VisionStreamType)stream_i);
rep.d.stream_acq.extra.frame_id = b->yuv_metas[idx].frame_id; rep.d.stream_acq.extra.frame_id = b->yuv_metas[idx].frame_id;
rep.d.stream_acq.extra.timestamp_sof = b->yuv_metas[idx].timestamp_sof;
rep.d.stream_acq.extra.timestamp_eof = b->yuv_metas[idx].timestamp_eof; rep.d.stream_acq.extra.timestamp_eof = b->yuv_metas[idx].timestamp_eof;
} }
vipc_send(fd, &rep); vipc_send(fd, &rep);

@ -57,6 +57,7 @@ typedef struct VisionStreamBufs {
typedef struct VIPCBufExtra { typedef struct VIPCBufExtra {
// only for yuv // only for yuv
uint32_t frame_id; uint32_t frame_id;
uint64_t timestamp_sof;
uint64_t timestamp_eof; uint64_t timestamp_eof;
} VIPCBufExtra; } VIPCBufExtra;

@ -67,7 +67,6 @@ LogCameraInfo cameras_logged[LOG_CAMERA_ID_MAX] = {
.stream_type = VISION_STREAM_YUV, .stream_type = VISION_STREAM_YUV,
.filename = "fcamera.hevc", .filename = "fcamera.hevc",
.frame_packet_name = "frame", .frame_packet_name = "frame",
.encode_idx_name = "encodeIdx",
.fps = MAIN_FPS, .fps = MAIN_FPS,
.bitrate = MAIN_BITRATE, .bitrate = MAIN_BITRATE,
.is_h265 = true, .is_h265 = true,
@ -78,7 +77,6 @@ LogCameraInfo cameras_logged[LOG_CAMERA_ID_MAX] = {
.stream_type = VISION_STREAM_YUV_FRONT, .stream_type = VISION_STREAM_YUV_FRONT,
.filename = "dcamera.hevc", .filename = "dcamera.hevc",
.frame_packet_name = "frontFrame", .frame_packet_name = "frontFrame",
.encode_idx_name = "frontEncodeIdx",
.fps = MAIN_FPS, // on EONs, more compressed this way .fps = MAIN_FPS, // on EONs, more compressed this way
.bitrate = DCAM_BITRATE, .bitrate = DCAM_BITRATE,
.is_h265 = true, .is_h265 = true,
@ -89,7 +87,6 @@ LogCameraInfo cameras_logged[LOG_CAMERA_ID_MAX] = {
.stream_type = VISION_STREAM_YUV_WIDE, .stream_type = VISION_STREAM_YUV_WIDE,
.filename = "ecamera.hevc", .filename = "ecamera.hevc",
.frame_packet_name = "wideFrame", .frame_packet_name = "wideFrame",
.encode_idx_name = "wideEncodeIdx",
.fps = MAIN_FPS, .fps = MAIN_FPS,
.bitrate = MAIN_BITRATE, .bitrate = MAIN_BITRATE,
.is_h265 = true, .is_h265 = true,
@ -235,9 +232,6 @@ void encoder_thread(RotateState *rotate_state, bool raw_clips, int cam_idx) {
s.num_encoder += 1; s.num_encoder += 1;
pthread_mutex_unlock(&s.rotate_lock); pthread_mutex_unlock(&s.rotate_lock);
PubSocket *idx_sock = PubSocket::create(s.ctx, cameras_logged[cam_idx].encode_idx_name);
assert(idx_sock != NULL);
LoggerHandle *lh = NULL; LoggerHandle *lh = NULL;
while (!do_exit) { while (!do_exit) {
@ -377,8 +371,12 @@ void encoder_thread(RotateState *rotate_state, bool raw_clips, int cam_idx) {
// publish encode index // publish encode index
MessageBuilder msg; MessageBuilder msg;
auto eidx = msg.initEvent().initEncodeIdx(); // this is really ugly
auto eidx = cam_idx == LOG_CAMERA_ID_DCAMERA ? msg.initEvent().initFrontEncodeIdx() :
(cam_idx == LOG_CAMERA_ID_ECAMERA ? msg.initEvent().initWideEncodeIdx() : msg.initEvent().initEncodeIdx());
eidx.setFrameId(extra.frame_id); eidx.setFrameId(extra.frame_id);
eidx.setTimestampSof(extra.timestamp_sof);
eidx.setTimestampEof(extra.timestamp_eof);
#ifdef QCOM2 #ifdef QCOM2
eidx.setType(cereal::EncodeIndex::Type::FULL_H_E_V_C); eidx.setType(cereal::EncodeIndex::Type::FULL_H_E_V_C);
#else #else
@ -390,9 +388,8 @@ void encoder_thread(RotateState *rotate_state, bool raw_clips, int cam_idx) {
eidx.setSegmentId(out_id); eidx.setSegmentId(out_id);
auto bytes = msg.toBytes(); auto bytes = msg.toBytes();
if (lh) {
if (idx_sock->send((char*)bytes.begin(), bytes.size()) < 0) { lh_log(lh, bytes.begin(), bytes.size(), false);
printf("err sending encodeIdx pkt: %s\n", strerror(errno));
} }
} }
@ -450,8 +447,6 @@ void encoder_thread(RotateState *rotate_state, bool raw_clips, int cam_idx) {
visionstream_destroy(&stream); visionstream_destroy(&stream);
} }
delete idx_sock;
if (encoder_inited) { if (encoder_inited) {
LOG("encoder destroy"); LOG("encoder destroy");
encoder_close(&encoder); encoder_close(&encoder);

Loading…
Cancel
Save