Commit 3c68c329 authored by Stefan Westerfeld's avatar Stefan Westerfeld

Print out key names in json output.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent 5939bb3c
...@@ -140,6 +140,7 @@ public: ...@@ -140,6 +140,7 @@ public:
enum class Type { BLOCK, CLIP, ALL }; enum class Type { BLOCK, CLIP, ALL };
struct Pattern struct Pattern
{ {
Key key;
double time = 0; double time = 0;
vector<int> bit_vec; vector<int> bit_vec;
float decode_error = 0; float decode_error = 0;
...@@ -159,12 +160,13 @@ public: ...@@ -159,12 +160,13 @@ public:
speed_pattern = sp; speed_pattern = sp;
} }
void void
add_pattern (double time, SyncFinder::Score sync_score, const vector<int>& bit_vec, float decode_error, Type pattern_type) add_pattern (const Key& key, double time, SyncFinder::Score sync_score, const vector<int>& bit_vec, float decode_error, Type pattern_type)
{ {
/* add_pattern can be called by any thread (safe to use from ThreadPool jobs) */ /* add_pattern can be called by any thread (safe to use from ThreadPool jobs) */
std::lock_guard<std::mutex> lg (pattern_mutex); std::lock_guard<std::mutex> lg (pattern_mutex);
Pattern p; Pattern p;
p.key = key;
p.time = time; p.time = time;
p.sync_score = sync_score; p.sync_score = sync_score;
p.bit_vec = bit_vec; p.bit_vec = bit_vec;
...@@ -233,7 +235,8 @@ public: ...@@ -233,7 +235,8 @@ public:
const int seconds = pattern.time; const int seconds = pattern.time;
fprintf (outfile, " { \"pos\": \"%d:%02d\", \"bits\": \"%s\", \"quality\": %.5f, \"error\": %.6f, \"type\": \"%s\" }", fprintf (outfile, " { \"key:\": \"%s\", \"pos\": \"%d:%02d\", \"bits\": \"%s\", \"quality\": %.5f, \"error\": %.6f, \"type\": \"%s\" }",
pattern.key.name().c_str(),
seconds / 60, seconds % 60, seconds / 60, seconds % 60,
bit_vec_to_str (pattern.bit_vec).c_str(), bit_vec_to_str (pattern.bit_vec).c_str(),
pattern.sync_score.quality, pattern.decode_error, pattern.sync_score.quality, pattern.decode_error,
...@@ -372,13 +375,13 @@ public: ...@@ -372,13 +375,13 @@ public:
/* ---- deal with this pattern ---- */ /* ---- deal with this pattern ---- */
const double time = double (sync_score.index) / wav_data.sample_rate(); const double time = double (sync_score.index) / wav_data.sample_rate();
thread_pool.add_job ([sync_score, raw_bit_vec, time, &result_set]() thread_pool.add_job ([key, sync_score, raw_bit_vec, time, &result_set]()
{ {
float decode_error = 0; float decode_error = 0;
vector<int> bit_vec = code_decode_soft (sync_score.block_type, normalize_soft_bits (raw_bit_vec), &decode_error); vector<int> bit_vec = code_decode_soft (sync_score.block_type, normalize_soft_bits (raw_bit_vec), &decode_error);
if (!bit_vec.empty()) if (!bit_vec.empty())
result_set.add_pattern (time, sync_score, bit_vec, decode_error, ResultSet::Type::BLOCK); result_set.add_pattern (key, time, sync_score, bit_vec, decode_error, ResultSet::Type::BLOCK);
}); });
total_count += 1; total_count += 1;
...@@ -403,7 +406,7 @@ public: ...@@ -403,7 +406,7 @@ public:
ab_bits[i * 2] = ab_raw_bit_vec[0][i]; ab_bits[i * 2] = ab_raw_bit_vec[0][i];
ab_bits[i * 2 + 1] = ab_raw_bit_vec[1][i]; ab_bits[i * 2 + 1] = ab_raw_bit_vec[1][i];
} }
thread_pool.add_job ([sync_score, ab_bits, ab_quality, time, &result_set]() thread_pool.add_job ([key, sync_score, ab_bits, ab_quality, time, &result_set]()
{ {
float decode_error = 0; float decode_error = 0;
vector<int> bit_vec = code_decode_soft (ConvBlockType::ab, normalize_soft_bits (ab_bits), &decode_error); vector<int> bit_vec = code_decode_soft (ConvBlockType::ab, normalize_soft_bits (ab_bits), &decode_error);
...@@ -413,7 +416,7 @@ public: ...@@ -413,7 +416,7 @@ public:
SyncFinder::Score score_ab { 0, 0, ConvBlockType::ab }; SyncFinder::Score score_ab { 0, 0, ConvBlockType::ab };
score_ab.index = sync_score.index; score_ab.index = sync_score.index;
score_ab.quality = (ab_quality[0] + ab_quality[1]) / 2; score_ab.quality = (ab_quality[0] + ab_quality[1]) / 2;
result_set.add_pattern (time, score_ab, bit_vec, decode_error, ResultSet::Type::BLOCK); result_set.add_pattern (key, time, score_ab, bit_vec, decode_error, ResultSet::Type::BLOCK);
} }
}); });
} }
...@@ -431,13 +434,13 @@ public: ...@@ -431,13 +434,13 @@ public:
vector<float> soft_bit_vec = normalize_soft_bits (raw_bit_vec_all); vector<float> soft_bit_vec = normalize_soft_bits (raw_bit_vec_all);
thread_pool.add_job ([score_all, soft_bit_vec, &result_set]() thread_pool.add_job ([key, score_all, soft_bit_vec, &result_set]()
{ {
float decode_error = 0; float decode_error = 0;
vector<int> bit_vec = code_decode_soft (ConvBlockType::ab, soft_bit_vec, &decode_error); vector<int> bit_vec = code_decode_soft (ConvBlockType::ab, soft_bit_vec, &decode_error);
if (!bit_vec.empty()) if (!bit_vec.empty())
result_set.add_pattern (/* time */ 0.0, score_all, bit_vec, decode_error, ResultSet::Type::ALL); result_set.add_pattern (key, /* time */ 0.0, score_all, bit_vec, decode_error, ResultSet::Type::ALL);
}); });
} }
} }
...@@ -554,13 +557,13 @@ class ClipDecoder ...@@ -554,13 +557,13 @@ class ClipDecoder
SyncFinder::Score sync_score_nopad = sync_score; SyncFinder::Score sync_score_nopad = sync_score;
sync_score_nopad.index = time_offset_sec * wav_data.sample_rate(); sync_score_nopad.index = time_offset_sec * wav_data.sample_rate();
thread_pool.add_job ([raw_bit_vec, sync_score_nopad, time_offset_sec, &result_set]() thread_pool.add_job ([key, raw_bit_vec, sync_score_nopad, time_offset_sec, &result_set]()
{ {
float decode_error = 0; float decode_error = 0;
vector<int> bit_vec = code_decode_soft (ConvBlockType::ab, normalize_soft_bits (raw_bit_vec), &decode_error); vector<int> bit_vec = code_decode_soft (ConvBlockType::ab, normalize_soft_bits (raw_bit_vec), &decode_error);
if (!bit_vec.empty()) if (!bit_vec.empty())
result_set.add_pattern (time_offset_sec, sync_score_nopad, bit_vec, decode_error, ResultSet::Type::CLIP); result_set.add_pattern (key, time_offset_sec, sync_score_nopad, bit_vec, decode_error, ResultSet::Type::CLIP);
}); });
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment