diff --git a/applications/player/src/main.cpp b/applications/player/src/main.cpp index 78d66a8db7e70a82759c8cd28826b09ba555077c..78a919a63f4668be19667a456a5567af7c7a3189 100644 --- a/applications/player/src/main.cpp +++ b/applications/player/src/main.cpp @@ -35,22 +35,26 @@ int main(int argc, char **argv) { LOG(INFO) << "Playing..."; - bool res = r.read(90000000000000, [](const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt) { + int current_stream = 0; + + bool res = r.read(90000000000000, [¤t_stream](const ftl::codecs::StreamPacket &spkt, const ftl::codecs::Packet &pkt) { if (spkt.channel & 0x1 > 0) return; + if (spkt.streamID == current_stream) { - LOG(INFO) << "Reading packet: (" << (int)spkt.streamID << "," << (int)spkt.channel << ") " << (int)pkt.codec << ", " << (int)pkt.definition; + LOG(INFO) << "Reading packet: (" << (int)spkt.streamID << "," << (int)spkt.channel << ") " << (int)pkt.codec << ", " << (int)pkt.definition; - cv::Mat frame(cv::Size(ftl::codecs::getWidth(pkt.definition),ftl::codecs::getHeight(pkt.definition)), CV_8UC3); - createDecoder(pkt); + cv::Mat frame(cv::Size(ftl::codecs::getWidth(pkt.definition),ftl::codecs::getHeight(pkt.definition)), CV_8UC3); + createDecoder(pkt); - try { - decoder->decode(pkt, frame); - } catch (std::exception &e) { - LOG(INFO) << "Decoder exception: " << e.what(); - } + try { + decoder->decode(pkt, frame); + } catch (std::exception &e) { + LOG(INFO) << "Decoder exception: " << e.what(); + } - if (!frame.empty()) { - cv::imshow("Player", frame); + if (!frame.empty()) { + cv::imshow("Player", frame); + } cv::waitKey(20); } }); diff --git a/applications/reconstruct/src/main.cpp b/applications/reconstruct/src/main.cpp index 3ee32ab4a693c12c280af59c3d1328b7b8eaeb30..7a391be6d598270560b9cf00f86ec7e7d94c9792 100644 --- a/applications/reconstruct/src/main.cpp +++ b/applications/reconstruct/src/main.cpp @@ -197,7 +197,7 @@ static void run(ftl::Configurable *root) { // ------------------------------------------------------------------------- stream->setLatency(5); // FIXME: This depends on source!? - stream->add(&group); + //stream->add(&group); stream->run(); bool busy = false; diff --git a/components/codecs/src/reader.cpp b/components/codecs/src/reader.cpp index 571feec84ec549284a3fd9752407b4db123c44e0..5c0d46909e2d7905860aefaa4bfffd598f19bdd6 100644 --- a/components/codecs/src/reader.cpp +++ b/components/codecs/src/reader.cpp @@ -39,9 +39,9 @@ bool Reader::read(int64_t ts, const std::function<void(const ftl::codecs::Stream bool partial = false; while (stream_->good() || buffer_.nonparsed_size() > 0) { - if (buffer_.nonparsed_size() == 0 || partial) { + if (buffer_.nonparsed_size() == 0 || (partial && buffer_.nonparsed_size() < 10000000)) { buffer_.reserve_buffer(10000000); - stream_->read(buffer_.buffer(), 10000000); + stream_->read(buffer_.buffer(), buffer_.buffer_capacity()); //if (stream_->bad()) return false; int bytes = stream_->gcount(); @@ -59,7 +59,14 @@ bool Reader::read(int64_t ts, const std::function<void(const ftl::codecs::Stream std::tuple<StreamPacket,Packet> data; msgpack::object obj = msg.get(); - obj.convert(data); + try { + obj.convert(data); + } catch (std::exception &e) { + LOG(INFO) << "Corrupt message: " << buffer_.nonparsed_size(); + //partial = true; + //continue; + return false; + } // Adjust timestamp get<0>(data).timestamp += timestart_; diff --git a/components/codecs/src/writer.cpp b/components/codecs/src/writer.cpp index 70c8647074144798917f7ee645fe020fbc84c1b3..2c19a01fd260e1549b01daef10c5600ea8c4b5a3 100644 --- a/components/codecs/src/writer.cpp +++ b/components/codecs/src/writer.cpp @@ -32,8 +32,9 @@ bool Writer::write(const ftl::codecs::StreamPacket &s, const ftl::codecs::Packet s2.timestamp -= timestart_; auto data = std::make_tuple(s2,p); - msgpack::pack(buffer_, data); - (*stream_).write(buffer_.data(), buffer_.size()); - buffer_.clear(); + msgpack::sbuffer buffer; + msgpack::pack(buffer, data); + (*stream_).write(buffer.data(), buffer.size()); + //buffer_.clear(); return true; } diff --git a/components/rgbd-sources/src/source.cpp b/components/rgbd-sources/src/source.cpp index db2dfa10848a6c56affc205092cb960bb3424a79..96335342eb1ba013fbc79acb921df340ab2c1312 100644 --- a/components/rgbd-sources/src/source.cpp +++ b/components/rgbd-sources/src/source.cpp @@ -157,6 +157,7 @@ ftl::codecs::Reader *Source::__createReader(const std::string &path) { auto *r = new ftl::codecs::Reader(*file); readers__[path] = r; + r->begin(); return r; }