You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.6 KiB
42 lines
1.6 KiB
3 years ago
|
#include <cassert>
|
||
2 years ago
|
#include "system/loggerd/encoder/encoder.h"
|
||
3 years ago
|
|
||
|
VideoEncoder::~VideoEncoder() {}
|
||
|
|
||
|
void VideoEncoder::publisher_init() {
|
||
|
// publish
|
||
|
service_name = this->type == DriverCam ? "driverEncodeData" :
|
||
|
(this->type == WideRoadCam ? "wideRoadEncodeData" :
|
||
|
(this->in_width == this->out_width ? "roadEncodeData" : "qRoadEncodeData"));
|
||
|
pm.reset(new PubMaster({service_name}));
|
||
|
}
|
||
|
|
||
|
void VideoEncoder::publisher_publish(VideoEncoder *e, int segment_num, uint32_t idx, VisionIpcBufExtra &extra,
|
||
|
unsigned int flags, kj::ArrayPtr<capnp::byte> header, kj::ArrayPtr<capnp::byte> dat) {
|
||
|
// broadcast packet
|
||
|
MessageBuilder msg;
|
||
|
auto event = msg.initEvent(true);
|
||
|
auto edat = (e->type == DriverCam) ? event.initDriverEncodeData() :
|
||
|
((e->type == WideRoadCam) ? event.initWideRoadEncodeData() :
|
||
|
(e->in_width == e->out_width ? event.initRoadEncodeData() : event.initQRoadEncodeData()));
|
||
|
auto edata = edat.initIdx();
|
||
3 years ago
|
struct timespec ts;
|
||
|
timespec_get(&ts, TIME_UTC);
|
||
|
edat.setUnixTimestampNanos((uint64_t)ts.tv_sec*1000000000 + ts.tv_nsec);
|
||
3 years ago
|
edata.setFrameId(extra.frame_id);
|
||
|
edata.setTimestampSof(extra.timestamp_sof);
|
||
|
edata.setTimestampEof(extra.timestamp_eof);
|
||
|
edata.setType(e->codec);
|
||
3 years ago
|
edata.setEncodeId(e->cnt++);
|
||
3 years ago
|
edata.setSegmentNum(segment_num);
|
||
|
edata.setSegmentId(idx);
|
||
|
edata.setFlags(flags);
|
||
|
edata.setLen(dat.size());
|
||
|
edat.setData(dat);
|
||
|
if (flags & V4L2_BUF_FLAG_KEYFRAME) edat.setHeader(header);
|
||
|
|
||
|
auto words = new kj::Array<capnp::word>(capnp::messageToFlatArray(msg));
|
||
|
auto bytes = words->asBytes();
|
||
|
e->pm->send(e->service_name, bytes.begin(), bytes.size());
|
||
|
}
|