blob: 51ae129e27d6a9071dca3317cd2cd041af973933 [file] [log] [blame]
Parker Schuh6691f192017-01-14 17:01:02 -08001#include "aos/vision/blob/codec.h"
2
3namespace aos {
4namespace vision {
5
6size_t CalculateSize(const BlobList &blob_list) {
7 size_t count = Int16Codec::kSize;
8 for (const auto &blob : blob_list) {
9 count += 2 * Int16Codec::kSize;
10 for (int i = 0; i < static_cast<int>(blob.ranges().size()); ++i) {
11 count +=
12 Int16Codec::kSize + 2 * Int16Codec::kSize * blob.ranges()[i].size();
13 }
14 }
15 return count;
16}
17
18void SerializeBlob(const BlobList &blob_list, char *data) {
19 data = Int16Codec::Write(data, static_cast<uint16_t>(blob_list.size()));
20 for (const auto &blob : blob_list) {
21 data = Int16Codec::Write(data, static_cast<uint16_t>(blob.min_y()));
22 data = Int16Codec::Write(data, static_cast<uint16_t>(blob.ranges().size()));
23 for (int i = 0; i < (int)blob.ranges().size(); ++i) {
24 data = Int16Codec::Write(data,
25 static_cast<uint16_t>(blob.ranges()[i].size()));
26 for (const auto &range : blob.ranges()[i]) {
27 data = Int16Codec::Write(data, static_cast<uint16_t>(range.st));
28 data = Int16Codec::Write(data, static_cast<uint16_t>(range.ed));
29 }
30 }
31 }
32}
33
34const char *ParseBlobList(BlobList *blob_list, const char *data) {
35 int num_items = Int16Codec::Read(&data);
36 blob_list->clear();
37 blob_list->reserve(num_items);
38 for (int i = 0; i < num_items; ++i) {
39 std::vector<std::vector<ImageRange>> ranges_image;
40 int min_y = Int16Codec::Read(&data);
41 int num_ranges = Int16Codec::Read(&data);
42 ranges_image.reserve(num_ranges);
43 for (int j = 0; j < num_ranges; ++j) {
44 ranges_image.emplace_back();
45 auto &ranges = ranges_image.back();
46 int num_sub_ranges = Int16Codec::Read(&data);
47 for (int k = 0; k < num_sub_ranges; ++k) {
48 int st = Int16Codec::Read(&data);
49 int ed = Int16Codec::Read(&data);
50 ranges.emplace_back(st, ed);
51 }
52 }
53 blob_list->emplace_back(min_y, std::move(ranges_image));
54 }
55 return data;
56}
57
58} // namespace vision
59} // namespace aos