Commit 304daee4 authored by Stefan Westerfeld's avatar Stefan Westerfeld

Use ThreadPool for refining sync results (performance).

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent d22ec9d5
......@@ -280,8 +280,8 @@ SyncFinder::sync_select_n_best (vector<Score>& sync_scores, size_t n)
void
SyncFinder::search_refine (const WavData& wav_data, Mode mode, KeyResult& key_result, const vector<vector<FrameBit>>& sync_bits)
{
vector<float> fft_db;
vector<char> have_frames;
ThreadPool thread_pool;
std::mutex result_mutex;
vector<Score> result_scores;
BitPosGen bit_pos_gen (key_result.key);
......@@ -300,6 +300,11 @@ SyncFinder::search_refine (const WavData& wav_data, Mode mode, KeyResult& key_re
for (const auto& score : key_result.sync_scores)
{
thread_pool.add_job ([this, score, total_frame_count,
&wav_data, &want_frames, &sync_bits, &result_scores, &result_mutex] ()
{
vector<float> fft_db;
vector<char> have_frames;
//printf ("%zd %s %f", score.index, find_closest_sync (score.index).c_str(), score.quality);
// refine match
......@@ -326,8 +331,13 @@ SyncFinder::search_refine (const WavData& wav_data, Mode mode, KeyResult& key_re
}
//printf (" => refined: %zd %s %f\n", best_index, find_closest_sync (best_index).c_str(), best_quality);
if (best_quality > Params::sync_threshold2)
{
std::lock_guard<std::mutex> lg (result_mutex);
result_scores.push_back (Score { best_index, best_quality, best_block_type });
}
});
}
thread_pool.wait_all();
key_result.sync_scores = result_scores;
}
......
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