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