replay: get EncoderIndex from capnp::AnyStruct (#22518)
* get EncoderIndex from capnp::AnyStruct * const
This commit is contained in:
parent
3412388b8c
commit
c801c65b9d
|
@ -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
|
||||
// 2) Send encodeIndex packet at t=logMonoTime
|
||||
if (frame) {
|
||||
cereal::EncodeIndex::Reader idx;
|
||||
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);
|
||||
}
|
||||
|
||||
auto idx = capnp::AnyStruct::Reader(event).getPointerSection()[0].getAs<cereal::EncodeIndex>();
|
||||
// C2 only has eof set, and some older routes have neither
|
||||
uint64_t sof = idx.getTimestampSof();
|
||||
uint64_t eof = idx.getTimestampEof();
|
||||
|
|
|
@ -187,19 +187,20 @@ void Replay::mergeSegments(const SegmentMap::iterator &begin, const SegmentMap::
|
|||
}
|
||||
|
||||
void Replay::publishFrame(const Event *e) {
|
||||
auto publish = [=](CameraType cam_type, const cereal::EncodeIndex::Reader &eidx) {
|
||||
int n = eidx.getSegmentNum();
|
||||
bool segment_loaded = std::find(segments_merged_.begin(), segments_merged_.end(), n) != segments_merged_.end();
|
||||
if (segment_loaded && segments_[n]->frames[cam_type] && eidx.getType() == cereal::EncodeIndex::Type::FULL_H_E_V_C) {
|
||||
camera_server_->pushFrame(cam_type, segments_[n]->frames[cam_type].get(), eidx);
|
||||
}
|
||||
static const std::map<cereal::Event::Which, CameraType> cam_types{
|
||||
{cereal::Event::ROAD_ENCODE_IDX, RoadCam},
|
||||
{cereal::Event::DRIVER_ENCODE_IDX, DriverCam},
|
||||
{cereal::Event::WIDE_ROAD_ENCODE_IDX, WideRoadCam},
|
||||
};
|
||||
if (e->which == cereal::Event::ROAD_ENCODE_IDX) {
|
||||
publish(RoadCam, e->event.getRoadEncodeIdx());
|
||||
} else if (e->which == cereal::Event::DRIVER_ENCODE_IDX) {
|
||||
publish(DriverCam, e->event.getDriverEncodeIdx());
|
||||
} else if (e->which == cereal::Event::WIDE_ROAD_ENCODE_IDX) {
|
||||
publish(WideRoadCam, e->event.getWideRoadEncodeIdx());
|
||||
auto eidx = capnp::AnyStruct::Reader(e->event).getPointerSection()[0].getAs<cereal::EncodeIndex>();
|
||||
if (std::find(segments_merged_.begin(), segments_merged_.end(), eidx.getSegmentNum()) == segments_merged_.end()) {
|
||||
// eidx's segment is not loaded
|
||||
return;
|
||||
}
|
||||
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…
Reference in a new issue