Skip to content

Commit c4ac493

Browse files
committed
Rely only only on loaded image size and pixel format; support logging compressed image formats
1 parent 7ab525a commit c4ac493

File tree

1 file changed

+21
-91
lines changed

1 file changed

+21
-91
lines changed

src/FramePlayer.cpp

Lines changed: 21 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,15 @@ namespace rerun_vrs {
4545

4646
rec_.set_time_seconds("timestamp", record.timestamp);
4747

48-
if (record.recordType == vrs::Record::Type::CONFIGURATION)
48+
if (record.recordType == vrs::Record::Type::CONFIGURATION) {
4949
// NOTE this is meta data from the sensor that doesn't change over time and only comes
5050
// in once in the beginning
5151
rec_.log_timeless(
5252
(entityPath_ + "/configuration").c_str(),
5353
rerun::TextDocument(layout_str)
5454
);
55+
return false;
56+
}
5557

5658
if (record.recordType == vrs::Record::Type::DATA) {
5759
auto& config = getExpectedLayout<FrameNumberDataLayout>(layout, blockIndex);
@@ -70,101 +72,29 @@ namespace rerun_vrs {
7072
const vrs::CurrentRecord& record, size_t /*blockIndex*/,
7173
const vrs::ContentBlock& contentBlock
7274
) {
73-
/* std::cout << "onImageRead" << std::endl; */
74-
/* std::cout << "onImageRead" << std::endl; */
75-
const auto& spec = contentBlock.image();
7675
std::shared_ptr<vrs::utils::PixelFrame> frame;
77-
const auto& imageFormat = spec.getImageFormat();
78-
const auto& imageFormatStr = spec.getImageFormatAsString();
79-
bool frameValid = false;
80-
/* std::cout << spec.getWidth() << "x" << spec.getHeight() << " " */
81-
/* << spec.getPixelFormatAsString() << " " << spec.getImageFormatAsString() */
82-
/* << std::endl; */
83-
84-
if (imageFormat == vrs::ImageFormat::RAW) {
85-
frameValid = vrs::utils::PixelFrame::readRawFrame(frame, record.reader, spec);
86-
if (frameValid) {
87-
// Log image to Rerun
88-
// NOTE currently we need to construct a vector to log an image, this will
89-
// change in the future, see https://github.com/rerun-io/rerun/issues/3794
90-
91-
rec_.log(
92-
add_quotes(id_.getName()).c_str(),
93-
rerun::Image(
94-
{spec.getHeight(), spec.getWidth(), spec.getChannelCountPerPixel()},
95-
std::move(frame->getBuffer())
96-
)
97-
);
98-
} else {
99-
std::cout << "Failed reading raw frame." << std::endl;
100-
}
101-
/* if (!firstImage_ && frameValid) { */
102-
/* job = make_unique<ImageJob>(vrs::ImageFormat::RAW); */
103-
/* } */
76+
bool frameValid = vrs::utils::PixelFrame::readFrame(frame, record.reader, contentBlock);
77+
78+
if (frameValid) {
79+
// Log image to Rerun
80+
// NOTE currently we need to construct a vector to log an image, this will
81+
// change in the future, see https://github.com/rerun-io/rerun/issues/3794
82+
rec_.log(
83+
add_quotes(id_.getName()).c_str(),
84+
rerun::Image(
85+
{frame->getHeight(),
86+
frame->getWidth(),
87+
frame->getSpec().getChannelCountPerPixel()},
88+
std::move(frame->getBuffer())
89+
)
90+
);
10491
} else {
105-
std::cout << "Image format \"" << imageFormatStr
106-
<< "\" not supported. Disabling player." << std::endl;
92+
std::cout << "Failed reading image with format \""
93+
<< contentBlock.image().getImageFormatAsString() << "\". Disabling player."
94+
<< std::endl;
10795
enabled_ = false;
10896
}
10997
return true; // read next blocks, if any
110-
111-
/* } else if (imageFormat_ == vrs::ImageFormat::VIDEO) { */
112-
/* // Video codec decompression happens here, but pixel format conversion is
113-
* asynchronous */
114-
/* PixelFrame::init(frame, contentBlock.image()); */
115-
/* frameValid = (tryToDecodeFrame(*frame, record, contentBlock) == 0); */
116-
/* if (!firstImage_ && frameValid) { */
117-
/* job = make_unique<ImageJob>(vrs::ImageFormat::VIDEO); */
118-
/* } */
119-
/* } else { */
120-
/* if (firstImage_) { */
121-
/* frameValid = PixelFrame::readFrame(frame, record.reader, contentBlock);
122-
*/
123-
/* } else { */
124-
/* // decoding & pixel format conversion happen asynchronously */
125-
/* job = make_unique<ImageJob>(imageFormat_); */
126-
/* job->buffer.resize(contentBlock.getBlockSize()); */
127-
/* frameValid = (record.reader->read(job->buffer) == 0); */
128-
/* } */
129-
/* } */
130-
/* if (frameValid && job) { */
131-
/* job->frame = std::move(frame); */
132-
/* imageJobs_.startThreadIfNeeded(&FramePlayer::imageJobsThreadActivity,
133-
* this); */
134-
/* imageJobs_.sendJob(std::move(job)); */
135-
/* return true; */
136-
/* } */
137-
/* if (firstImage_) { */
138-
/* fmt::print( */
139-
/* "Found '{} - {}': {}, {}", */
140-
/* record.streamId.getNumericName(), */
141-
/* record.streamId.getTypeName(), */
142-
/* getCurrentRecordFormatReader()->recordFormat.asString(), */
143-
/* spec.asString()); */
144-
/* if (frameValid && spec.getImageFormat() != vrs::ImageFormat::RAW) { */
145-
/* fmt::print(" - {}", frame->getSpec().asString()); */
146-
/* } */
147-
/* blankMode_ = false; */
148-
/* } */
149-
/* if (frameValid) { */
150-
/* convertFrame(frame); */
151-
/* if (firstImage_) { */
152-
/* if (needsConvertedFrame_) { */
153-
/* fmt::print(" -> {}", frame->getSpec().asString()); */
154-
/* } */
155-
/* if (estimatedFps_ != 0) { */
156-
/* fmt::print(", {} fps", estimatedFps_); */
157-
/* } */
158-
/* frame->blankFrame(); */
159-
/* blankMode_ = true; */
160-
/* } */
161-
/* widget_->swapImage(frame); */
162-
/* } */
163-
/* recycle(frame, !needsConvertedFrame_); */
164-
/* if (firstImage_) { */
165-
/* fmt::print("\n"); */
166-
/* firstImage_ = false; */
167-
/* } */
16898
}
16999

170100
void RerunFramePlayer::convertFrame(std::shared_ptr<vrs::utils::PixelFrame>& frame) {

0 commit comments

Comments
 (0)