Skip to content
Snippets Groups Projects
Commit 3d2393d0 authored by Nicolas Pope's avatar Nicolas Pope
Browse files

Merge branch 'feature/203/pframeskip' into 'master'

Implements #203 skipping p-frames

Closes #203

See merge request nicolas.pope/ftl!130
parents 06089003 7cebc7f0
No related branches found
No related tags found
1 merge request!130Implements #203 skipping p-frames
Pipeline #15341 passed
#include "file_source.hpp"
#include <ftl/timer.hpp>
using ftl::rgbd::detail::FileSource;
using ftl::codecs::codec_t;
......@@ -23,6 +25,8 @@ FileSource::FileSource(ftl::rgbd::Source *s, ftl::codecs::Reader *r, int sid) :
decoders_[1] = nullptr;
cache_read_ = -1;
cache_write_ = 0;
realtime_ = host_->value("realtime", true);
timestamp_ = r->getStartTime();
r->onPacket(sid, [this](const ftl::codecs::StreamPacket &spkt, ftl::codecs::Packet &pkt) {
if (pkt.codec == codec_t::POSE) {
......@@ -34,6 +38,12 @@ FileSource::FileSource(ftl::rgbd::Source *s, ftl::codecs::Reader *r, int sid) :
params_ = *camera;
has_calibration_ = true;
} else {
if (pkt.codec == codec_t::HEVC) {
// Obtain NAL unit type
int nal_type = (pkt.data[4] >> 1) & 0x3F;
// A type of 32 = VPS unit, hence I-Frame in this case so skip past packets
if (nal_type == 32) _removeChannel(spkt.channel);
}
cache_[cache_write_].emplace_back();
auto &c = cache_[cache_write_].back();
......@@ -48,8 +58,23 @@ FileSource::~FileSource() {
}
void FileSource::_removeChannel(int channel) {
int c = 0;
for (auto i=cache_[cache_write_].begin(); i != cache_[cache_write_].end(); ++i) {
if ((*i).spkt.channel == channel) {
++c;
i = cache_[cache_write_].erase(i);
}
}
DLOG(INFO) << "Skipped " << c << " packets";
}
bool FileSource::capture(int64_t ts) {
timestamp_ = ts;
if (realtime_) {
timestamp_ = ts;
} else {
timestamp_ += ftl::timer::getInterval();
}
return true;
}
......
......@@ -41,6 +41,9 @@ class FileSource : public detail::Source {
ftl::codecs::Decoder *decoders_[2];
bool realtime_;
void _removeChannel(int channel);
void _createDecoder(int ix, const ftl::codecs::Packet &pkt);
};
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment