replay: get EncoderIndex from capnp::AnyStruct (#22518)

* get EncoderIndex from capnp::AnyStruct

* const
pull/22525/head
Dean Lee 4 years ago committed by GitHub
parent 3412388b8c
commit c801c65b9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      selfdrive/ui/replay/logreader.cc
  2. 25
      selfdrive/ui/replay/replay.cc

@ -14,17 +14,7 @@ Event::Event(const kj::ArrayPtr<const capnp::word> &amsg, bool frame) : reader(a
// 1) Send video data at t=timestampEof/timestampSof // 1) Send video data at t=timestampEof/timestampSof
// 2) Send encodeIndex packet at t=logMonoTime // 2) Send encodeIndex packet at t=logMonoTime
if (frame) { if (frame) {
cereal::EncodeIndex::Reader idx; auto idx = capnp::AnyStruct::Reader(event).getPointerSection()[0].getAs<cereal::EncodeIndex>();
if (which == cereal::Event::ROAD_ENCODE_IDX) {
idx = event.getRoadEncodeIdx();
} else if (which == cereal::Event::DRIVER_ENCODE_IDX) {
idx = event.getDriverEncodeIdx();
} else if (which == cereal::Event::WIDE_ROAD_ENCODE_IDX) {
idx = event.getWideRoadEncodeIdx();
} else {
assert(false);
}
// C2 only has eof set, and some older routes have neither // C2 only has eof set, and some older routes have neither
uint64_t sof = idx.getTimestampSof(); uint64_t sof = idx.getTimestampSof();
uint64_t eof = idx.getTimestampEof(); uint64_t eof = idx.getTimestampEof();

@ -187,19 +187,20 @@ void Replay::mergeSegments(const SegmentMap::iterator &begin, const SegmentMap::
} }
void Replay::publishFrame(const Event *e) { void Replay::publishFrame(const Event *e) {
auto publish = [=](CameraType cam_type, const cereal::EncodeIndex::Reader &eidx) { static const std::map<cereal::Event::Which, CameraType> cam_types{
int n = eidx.getSegmentNum(); {cereal::Event::ROAD_ENCODE_IDX, RoadCam},
bool segment_loaded = std::find(segments_merged_.begin(), segments_merged_.end(), n) != segments_merged_.end(); {cereal::Event::DRIVER_ENCODE_IDX, DriverCam},
if (segment_loaded && segments_[n]->frames[cam_type] && eidx.getType() == cereal::EncodeIndex::Type::FULL_H_E_V_C) { {cereal::Event::WIDE_ROAD_ENCODE_IDX, WideRoadCam},
camera_server_->pushFrame(cam_type, segments_[n]->frames[cam_type].get(), eidx);
}
}; };
if (e->which == cereal::Event::ROAD_ENCODE_IDX) { auto eidx = capnp::AnyStruct::Reader(e->event).getPointerSection()[0].getAs<cereal::EncodeIndex>();
publish(RoadCam, e->event.getRoadEncodeIdx()); if (std::find(segments_merged_.begin(), segments_merged_.end(), eidx.getSegmentNum()) == segments_merged_.end()) {
} else if (e->which == cereal::Event::DRIVER_ENCODE_IDX) { // eidx's segment is not loaded
publish(DriverCam, e->event.getDriverEncodeIdx()); return;
} else if (e->which == cereal::Event::WIDE_ROAD_ENCODE_IDX) { }
publish(WideRoadCam, e->event.getWideRoadEncodeIdx()); CameraType cam = cam_types.at(e->which);
auto &fr = segments_[eidx.getSegmentNum()]->frames[cam];
if (fr && eidx.getType() == cereal::EncodeIndex::Type::FULL_H_E_V_C) {
camera_server_->pushFrame(cam, fr.get(), eidx);
} }
} }

Loading…
Cancel
Save