encoderd: refactor VideoEncoder::publisher_publish to standardize member variable access (#34342)

remove redundant pointer parameter
pull/34332/head
Dean Lee 3 months ago committed by GitHub
parent 1068779294
commit 47b13f54f6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 22
      system/loggerd/encoder/encoder.cc
  2. 2
      system/loggerd/encoder/encoder.h
  3. 2
      system/loggerd/encoder/ffmpeg_encoder.cc
  4. 2
      system/loggerd/encoder/v4l_encoder.cc

@ -14,12 +14,12 @@ VideoEncoder::VideoEncoder(const EncoderInfo &encoder_info, int in_width, int in
pm.reset(new PubMaster(pubs)); pm.reset(new PubMaster(pubs));
} }
void VideoEncoder::publisher_publish(VideoEncoder *e, int segment_num, uint32_t idx, VisionIpcBufExtra &extra, void VideoEncoder::publisher_publish(int segment_num, uint32_t idx, VisionIpcBufExtra &extra,
unsigned int flags, kj::ArrayPtr<capnp::byte> header, kj::ArrayPtr<capnp::byte> dat) { unsigned int flags, kj::ArrayPtr<capnp::byte> header, kj::ArrayPtr<capnp::byte> dat) {
// broadcast packet // broadcast packet
MessageBuilder msg; MessageBuilder msg;
auto event = msg.initEvent(true); auto event = msg.initEvent(true);
auto edat = (event.*(e->encoder_info.init_encode_data_func))(); auto edat = (event.*(encoder_info.init_encode_data_func))();
auto edata = edat.initIdx(); auto edata = edat.initIdx();
struct timespec ts; struct timespec ts;
timespec_get(&ts, TIME_UTC); timespec_get(&ts, TIME_UTC);
@ -27,8 +27,8 @@ void VideoEncoder::publisher_publish(VideoEncoder *e, int segment_num, uint32_t
edata.setFrameId(extra.frame_id); edata.setFrameId(extra.frame_id);
edata.setTimestampSof(extra.timestamp_sof); edata.setTimestampSof(extra.timestamp_sof);
edata.setTimestampEof(extra.timestamp_eof); edata.setTimestampEof(extra.timestamp_eof);
edata.setType(e->encoder_info.encode_type); edata.setType(encoder_info.encode_type);
edata.setEncodeId(e->cnt++); edata.setEncodeId(cnt++);
edata.setSegmentNum(segment_num); edata.setSegmentNum(segment_num);
edata.setSegmentId(idx); edata.setSegmentId(idx);
edata.setFlags(flags); edata.setFlags(flags);
@ -39,21 +39,21 @@ void VideoEncoder::publisher_publish(VideoEncoder *e, int segment_num, uint32_t
if (flags & V4L2_BUF_FLAG_KEYFRAME) edat.setHeader(header); if (flags & V4L2_BUF_FLAG_KEYFRAME) edat.setHeader(header);
uint32_t bytes_size = capnp::computeSerializedSizeInWords(msg) * sizeof(capnp::word); uint32_t bytes_size = capnp::computeSerializedSizeInWords(msg) * sizeof(capnp::word);
if (e->msg_cache.size() < bytes_size) { if (msg_cache.size() < bytes_size) {
e->msg_cache.resize(bytes_size); msg_cache.resize(bytes_size);
} }
kj::ArrayOutputStream output_stream(kj::ArrayPtr<capnp::byte>(e->msg_cache.data(), bytes_size)); kj::ArrayOutputStream output_stream(kj::ArrayPtr<capnp::byte>(msg_cache.data(), bytes_size));
capnp::writeMessage(output_stream, msg); capnp::writeMessage(output_stream, msg);
e->pm->send(e->encoder_info.publish_name, e->msg_cache.data(), bytes_size); pm->send(encoder_info.publish_name, msg_cache.data(), bytes_size);
// Publish keyframe thumbnail // Publish keyframe thumbnail
if ((flags & V4L2_BUF_FLAG_KEYFRAME) && e->encoder_info.thumbnail_name != NULL) { if ((flags & V4L2_BUF_FLAG_KEYFRAME) && encoder_info.thumbnail_name != NULL) {
MessageBuilder tm; MessageBuilder tm;
auto thumbnail = tm.initEvent().initThumbnail(); auto thumbnail = tm.initEvent().initThumbnail();
thumbnail.setFrameId(extra.frame_id); thumbnail.setFrameId(extra.frame_id);
thumbnail.setTimestampEof(extra.timestamp_eof); thumbnail.setTimestampEof(extra.timestamp_eof);
thumbnail.setThumbnail(dat); thumbnail.setThumbnail(dat);
thumbnail.setEncoding(cereal::Thumbnail::Encoding::KEYFRAME); thumbnail.setEncoding(cereal::Thumbnail::Encoding::KEYFRAME);
pm->send(e->encoder_info.thumbnail_name, tm); pm->send(encoder_info.thumbnail_name, tm);
} }
} }

@ -27,7 +27,7 @@ public:
virtual void encoder_open(const char* path) = 0; virtual void encoder_open(const char* path) = 0;
virtual void encoder_close() = 0; virtual void encoder_close() = 0;
void 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); void publisher_publish(int segment_num, uint32_t idx, VisionIpcBufExtra &extra, unsigned int flags, kj::ArrayPtr<capnp::byte> header, kj::ArrayPtr<capnp::byte> dat);
protected: protected:
void publish_thumbnail(uint32_t frame_id, uint64_t timestamp_eof, kj::ArrayPtr<capnp::byte> dat); void publish_thumbnail(uint32_t frame_id, uint64_t timestamp_eof, kj::ArrayPtr<capnp::byte> dat);

@ -138,7 +138,7 @@ int FfmpegEncoder::encode_frame(VisionBuf* buf, VisionIpcBufExtra *extra) {
printf("%20s got %8d bytes flags %8x idx %4d id %8d\n", encoder_info.publish_name, pkt.size, pkt.flags, counter, extra->frame_id); printf("%20s got %8d bytes flags %8x idx %4d id %8d\n", encoder_info.publish_name, pkt.size, pkt.flags, counter, extra->frame_id);
} }
publisher_publish(this, segment_num, counter, *extra, publisher_publish(segment_num, counter, *extra,
(pkt.flags & AV_PKT_FLAG_KEY) ? V4L2_BUF_FLAG_KEYFRAME : 0, (pkt.flags & AV_PKT_FLAG_KEY) ? V4L2_BUF_FLAG_KEYFRAME : 0,
kj::arrayPtr<capnp::byte>(pkt.data, (size_t)0), // TODO: get the header kj::arrayPtr<capnp::byte>(pkt.data, (size_t)0), // TODO: get the header
kj::arrayPtr<capnp::byte>(pkt.data, pkt.size)); kj::arrayPtr<capnp::byte>(pkt.data, pkt.size));

@ -133,7 +133,7 @@ void V4LEncoder::dequeue_handler(V4LEncoder *e) {
assert(extra.timestamp_eof/1000 == ts); // stay in sync assert(extra.timestamp_eof/1000 == ts); // stay in sync
frame_id = extra.frame_id; frame_id = extra.frame_id;
++idx; ++idx;
e->publisher_publish(e, e->segment_num, idx, extra, flags, header, kj::arrayPtr<capnp::byte>(buf, bytesused)); e->publisher_publish(e->segment_num, idx, extra, flags, header, kj::arrayPtr<capnp::byte>(buf, bytesused));
} }
if (env_debug_encoder) { if (env_debug_encoder) {

Loading…
Cancel
Save