refactor(device): change where define image info packet

This commit is contained in:
John Zhao 2018-12-23 21:11:12 +08:00
parent 104b3841d9
commit 3ed2d501c2
3 changed files with 93 additions and 93 deletions

View File

@ -22,31 +22,33 @@ MYNTEYE_BEGIN_NAMESPACE
namespace { namespace {
bool unpack_left_img_pixels( // image info
const void *data, const StreamRequest &request, Streams::frame_t *frame) {
CHECK_NOTNULL(frame);
CHECK_EQ(request.format, Format::YUYV);
CHECK_EQ(frame->format(), Format::GREY);
auto data_new = reinterpret_cast<const std::uint8_t *>(data);
std::size_t n = frame->width() * frame->height();
for (std::size_t i = 0; i < n; i++) {
frame->data()[i] = *(data_new + (i * 2));
}
return true;
}
bool unpack_right_img_pixels( #pragma pack(push, 1)
const void *data, const StreamRequest &request, Streams::frame_t *frame) { struct ImagePacket {
CHECK_NOTNULL(frame); std::uint8_t header;
CHECK_EQ(request.format, Format::YUYV); std::uint8_t size;
CHECK_EQ(frame->format(), Format::GREY); std::uint16_t frame_id;
auto data_new = reinterpret_cast<const std::uint8_t *>(data); std::uint32_t timestamp;
std::size_t n = frame->width() * frame->height(); std::uint16_t exposure_time;
for (std::size_t i = 0; i < n; i++) { std::uint8_t checksum;
frame->data()[i] = *(data_new + (i * 2 + 1));
ImagePacket() = default;
explicit ImagePacket(std::uint8_t *data) {
from_data(data);
} }
return true;
} void from_data(std::uint8_t *data) {
header = *data;
size = *(data + 1);
frame_id = (*(data + 2) << 8) | *(data + 3);
timestamp = (*(data + 4) << 24) | (*(data + 5) << 16) | (*(data + 6) << 8) |
*(data + 7);
exposure_time = (*(data + 8) << 8) | *(data + 9);
checksum = *(data + 10);
}
};
#pragma pack(pop)
bool unpack_stereo_img_data( bool unpack_stereo_img_data(
const void *data, const StreamRequest &request, ImgData *img) { const void *data, const StreamRequest &request, ImgData *img) {
@ -57,11 +59,11 @@ bool unpack_stereo_img_data(
request.width * request.height * bytes_per_pixel(request.format); request.width * request.height * bytes_per_pixel(request.format);
auto data_end = data_new + data_n; auto data_end = data_new + data_n;
std::size_t packet_n = sizeof(ImagePacketS1); std::size_t packet_n = sizeof(ImagePacket);
std::vector<std::uint8_t> packet(packet_n); std::vector<std::uint8_t> packet(packet_n);
std::reverse_copy(data_end - packet_n, data_end, packet.begin()); std::reverse_copy(data_end - packet_n, data_end, packet.begin());
ImagePacketS1 img_packet(packet.data()); ImagePacket img_packet(packet.data());
// LOG(INFO) << "ImagePacket: header=0x" << std::hex << // LOG(INFO) << "ImagePacket: header=0x" << std::hex <<
// static_cast<int>(img_packet.header) // static_cast<int>(img_packet.header)
// << ", size=0x" << std::hex << static_cast<int>(img_packet.size) // << ", size=0x" << std::hex << static_cast<int>(img_packet.size)
@ -97,6 +99,34 @@ bool unpack_stereo_img_data(
return true; return true;
} }
// image pixels
bool unpack_left_img_pixels(
const void *data, const StreamRequest &request, Streams::frame_t *frame) {
CHECK_NOTNULL(frame);
CHECK_EQ(request.format, Format::YUYV);
CHECK_EQ(frame->format(), Format::GREY);
auto data_new = reinterpret_cast<const std::uint8_t *>(data);
std::size_t n = frame->width() * frame->height();
for (std::size_t i = 0; i < n; i++) {
frame->data()[i] = *(data_new + (i * 2));
}
return true;
}
bool unpack_right_img_pixels(
const void *data, const StreamRequest &request, Streams::frame_t *frame) {
CHECK_NOTNULL(frame);
CHECK_EQ(request.format, Format::YUYV);
CHECK_EQ(frame->format(), Format::GREY);
auto data_new = reinterpret_cast<const std::uint8_t *>(data);
std::size_t n = frame->width() * frame->height();
for (std::size_t i = 0; i < n; i++) {
frame->data()[i] = *(data_new + (i * 2 + 1));
}
return true;
}
} // namespace } // namespace
StandardStreamsAdapter::StandardStreamsAdapter() { StandardStreamsAdapter::StandardStreamsAdapter() {

View File

@ -22,6 +22,42 @@ MYNTEYE_BEGIN_NAMESPACE
namespace { namespace {
// image info
#pragma pack(push, 1)
struct ImagePacket {
std::uint8_t header;
std::uint8_t size;
std::uint16_t frame_id;
std::uint64_t timestamp;
std::uint16_t exposure_time;
std::uint8_t checksum;
ImagePacket() = default;
explicit ImagePacket(std::uint8_t *data) {
from_data(data);
}
void from_data(std::uint8_t *data) {
std::uint32_t timestamp_l;
std::uint32_t timestamp_h;
header = *data;
size = *(data + 1);
frame_id = (*(data + 2) << 8) | *(data + 3);
timestamp_h = (*(data + 4) << 24) | (*(data + 5) << 16) |
(*(data + 6) << 8) | *(data + 7);
timestamp_l = (*(data + 8) << 24) | (*(data + 9) << 16) |
(*(data + 10) << 8) | *(data + 11);
timestamp = (static_cast<std::uint64_t>(timestamp_h) << 32) | timestamp_l;
exposure_time = (*(data + 12) << 8) | *(data + 13);
checksum = *(data + 14);
}
};
#pragma pack(pop)
// image pixels
bool unpack_left_img_pixels( bool unpack_left_img_pixels(
const void *data, const StreamRequest &request, Streams::frame_t *frame) { const void *data, const StreamRequest &request, Streams::frame_t *frame) {
CHECK_NOTNULL(frame); CHECK_NOTNULL(frame);
@ -75,11 +111,11 @@ bool unpack_stereo_img_data(
request.width * request.height * bytes_per_pixel(request.format); request.width * request.height * bytes_per_pixel(request.format);
auto data_end = data_new + data_n; auto data_end = data_new + data_n;
std::size_t packet_n = sizeof(ImagePacketS2); std::size_t packet_n = sizeof(ImagePacket);
std::vector<std::uint8_t> packet(packet_n); std::vector<std::uint8_t> packet(packet_n);
std::reverse_copy(data_end - packet_n, data_end, packet.begin()); std::reverse_copy(data_end - packet_n, data_end, packet.begin());
ImagePacketS2 img_packet(packet.data()); ImagePacket img_packet(packet.data());
// LOG(INFO) << "ImagePacket: header=0x" << std::hex << // LOG(INFO) << "ImagePacket: header=0x" << std::hex <<
// static_cast<int>(img_packet.header) // static_cast<int>(img_packet.header)
// << ", size=0x" << std::hex << static_cast<int>(img_packet.size) // << ", size=0x" << std::hex << static_cast<int>(img_packet.size)

View File

@ -138,72 +138,6 @@ struct MYNTEYE_API DeviceInfo {
std::uint16_t nominal_baseline; std::uint16_t nominal_baseline;
}; };
/**
* @ingroup datatypes
* Image packet for standard 2.
*/
#pragma pack(push, 1)
struct ImagePacketS2 {
std::uint8_t header;
std::uint8_t size;
std::uint16_t frame_id;
std::uint64_t timestamp;
std::uint16_t exposure_time;
std::uint8_t checksum;
ImagePacketS2() = default;
explicit ImagePacketS2(std::uint8_t *data) {
from_data(data);
}
void from_data(std::uint8_t *data) {
std::uint32_t timestamp_l;
std::uint32_t timestamp_h;
header = *data;
size = *(data + 1);
frame_id = (*(data + 2) << 8) | *(data + 3);
timestamp_h = (*(data + 4) << 24) | (*(data + 5) << 16) |
(*(data + 6) << 8) | *(data + 7);
timestamp_l = (*(data + 8) << 24) | (*(data + 9) << 16) |
(*(data + 10) << 8) | *(data + 11);
timestamp = (static_cast<std::uint64_t>(timestamp_h) << 32) | timestamp_l;
exposure_time = (*(data + 12) << 8) | *(data + 13);
checksum = *(data + 14);
}
};
#pragma pack(pop)
/**
* @ingroup datatypes
* Image packet for standard 1.
*/
#pragma pack(push, 1)
struct ImagePacketS1 {
std::uint8_t header;
std::uint8_t size;
std::uint16_t frame_id;
std::uint32_t timestamp;
std::uint16_t exposure_time;
std::uint8_t checksum;
ImagePacketS1() = default;
explicit ImagePacketS1(std::uint8_t *data) {
from_data(data);
}
void from_data(std::uint8_t *data) {
header = *data;
size = *(data + 1);
frame_id = (*(data + 2) << 8) | *(data + 3);
timestamp = (*(data + 4) << 24) | (*(data + 5) << 16) | (*(data + 6) << 8) |
*(data + 7);
exposure_time = (*(data + 8) << 8) | *(data + 9);
checksum = *(data + 10);
}
};
#pragma pack(pop)
/** /**
* @ingroup datatypes * @ingroup datatypes
* Imu request packet. * Imu request packet.