Buffer Iterating
c
const int width = 640, height = 640, channels = 3;
const size_t frame_size = width * height * channels;
vector<char> frame_buffer(frame_size);
vector<float> input_tensor_values(1 * channels * height * width);
while (TRUE) {
cin.read(reinterpret_cast<char*>(frame_buffer.data()), frame_size);
size_t bytes_read = cin.gcount();
if (bytes_read == 0) break;
if (bytes_read != frame_size) {
cerr << "Error : " << frame_size << ",Read : " << bytes_read << endl;
break;
}
// ⇒ float ⇒ Normalization (HWC : Height-Width-Channel)
for (size_t i = 0; i < frame_buffer.size(); ++i) {
input_tensor_values[i] = static_cast<float>(static_cast<unsigned char>(frame_buffer[i])) / 255.0f;
}
// ⇒ CHW (CHW : Channel-Height-Width)
for (int c = 0; c < channels; ++c) {
for (int h = 0; h < height; ++h) {
for (int w = 0; w < width; ++w) {
int src_idx = (h * width + w) * channels + c;
int dst_idx = c * height * width + h * width + w;
input_tensor_values[dst_idx] = frame_buffer[src_idx];
}
}
}
// .T.B.D.
}