encoder: reduce memory allocations and copying (#28704)

* reduce memory allocations and copying

* #include <vector>
old-commit-hash: a4179a7c230e687bebd15581ccdb3f7d34a690f4
This commit is contained in:
Dean Lee
2023-12-13 11:15:47 +08:00
committed by GitHub
parent ff8521a32e
commit 5ab1fc7674
2 changed files with 9 additions and 5 deletions
+7 -4
View File
@@ -27,8 +27,11 @@ void VideoEncoder::publisher_publish(VideoEncoder *e, int segment_num, uint32_t
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->encoder_info.publish_name, bytes.begin(), bytes.size());
delete words;
uint32_t bytes_size = capnp::computeSerializedSizeInWords(msg) * sizeof(capnp::word);
if (e->msg_cache.size() < bytes_size) {
e->msg_cache.resize(bytes_size);
}
kj::ArrayOutputStream output_stream(kj::ArrayPtr<capnp::byte>(e->msg_cache.data(), bytes_size));
capnp::writeMessage(output_stream, msg);
e->pm->send(e->encoder_info.publish_name, e->msg_cache.data(), bytes_size);
}