From a4f53e26f1f80d89a5503ca3b33dbd88ee28565e Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Thu, 5 Sep 2019 10:58:40 +0200 Subject: OutputFile: improve Metadata print --- src/OutputFile.cpp | 54 ++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 48 insertions(+), 6 deletions(-) (limited to 'src/OutputFile.cpp') diff --git a/src/OutputFile.cpp b/src/OutputFile.cpp index 46a9ec9..af32b33 100644 --- a/src/OutputFile.cpp +++ b/src/OutputFile.cpp @@ -27,11 +27,11 @@ #include "OutputFile.h" #include "PcDebug.h" #include "Log.h" -#include "TimestampDecoder.h" #include -#include +#include #include +#include using namespace std; @@ -53,7 +53,6 @@ OutputFile::OutputFile(const std::string& filename, bool show_metadata) : myFile.reset(fd); } - int OutputFile::process(Buffer* dataIn) { PDEBUG("OutputFile::process(%p)\n", dataIn); @@ -72,8 +71,18 @@ meta_vec_t OutputFile::process_metadata(const meta_vec_t& metadataIn) if (myShowMetadata) { stringstream ss; + frame_timestamp first_ts; + for (const auto& md : metadataIn) { if (md.ts) { + // The following code assumes TM I, where we get called every 96ms. + // Support for other transmission modes skipped because this is mostly + // debugging code. + + if (md.ts->fp == 0 or md.ts->fp == 4) { + first_ts = *md.ts; + } + ss << " FCT=" << md.ts->fct << " FP=" << (int)md.ts->fp; if (md.ts->timestamp_valid) { @@ -90,13 +99,46 @@ meta_vec_t OutputFile::process_metadata(const meta_vec_t& metadataIn) } } - if (metadataIn.empty()) { - etiLog.level(debug) << "Output File got no mdIn"; + if (myLastTimestamp.timestamp_valid) { + if (first_ts.timestamp_valid) { + uint32_t timestamp = myLastTimestamp.timestamp_pps; + timestamp += 96 << 14; // Shift 96ms by 14 to Timestamp level 2 + if (timestamp > 0xf9FFff) { + timestamp -= 0xfa0000; // Substract 16384000, corresponding to one second + myLastTimestamp.timestamp_sec += 1; + } + myLastTimestamp.timestamp_pps = timestamp; + + if (myLastTimestamp.timestamp_sec != first_ts.timestamp_sec or + myLastTimestamp.timestamp_pps != first_ts.timestamp_pps) { + ss << " TS wrong interval; "; + } + myLastTimestamp = first_ts; + } + else { + ss << " TS of FP=0 MISSING; "; + myLastTimestamp.timestamp_valid = false; + } } else { - etiLog.level(debug) << "Output File got metadata: " << ss.str(); + // Includes invalid and valid cases + myLastTimestamp = first_ts; } + if (metadataIn.empty()) { + etiLog.level(debug) << "Output File got no metadata"; + } + else { + using namespace std::chrono; + const auto now = system_clock::now(); + const int64_t ticks_now = duration_cast(now.time_since_epoch()).count(); + //const int64_t first_ts_ticks = first_ts.timestamp_sec * 1000 + first_ts.timestamp_pps / 16384; + const int64_t first_ts_ticks = std::llrint(first_ts.get_real_secs() * 1000); + + ss << " DELTA: " << first_ts_ticks - ticks_now << "ms;"; + + etiLog.level(debug) << "Output File metadata: " << ss.str(); + } } return {}; } -- cgit v1.2.3 From b536ace6b4f48f9f9a45b66881c6e2e024ed7d93 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Thu, 5 Sep 2019 11:17:58 +0200 Subject: Add missing cmath include in OutputFile --- src/OutputFile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/OutputFile.cpp') diff --git a/src/OutputFile.cpp b/src/OutputFile.cpp index af32b33..acaebad 100644 --- a/src/OutputFile.cpp +++ b/src/OutputFile.cpp @@ -32,7 +32,7 @@ #include #include #include - +#include using namespace std; -- cgit v1.2.3