Commit ab1136d4 authored by Stefan Westerfeld's avatar Stefan Westerfeld

Always write/read up/down pairs in --mix.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent 300b492f
......@@ -22,7 +22,7 @@ namespace Params
static size_t frame_size = 1024;
static int frames_per_bit = 4;
static int block = 1;
static int bands_per_frame = 30;
static size_t bands_per_frame = 30;
static int max_band = 100;
static int min_band = 20;
static double water_delta = 0.015; // strength of the watermark
......@@ -463,22 +463,21 @@ add_watermark (const string& infile, const string& outfile, const string& bits)
{
struct MixEntry {
int frame;
int band;
int up;
int down;
};
vector<MixEntry> up_entries, down_entries;
vector<MixEntry> mix_entries;
for (int f = 0; f < Params::block * Params::frames_per_bit; f++)
{
vector<int> up;
vector<int> down;
get_up_down (f, up, down);
for (auto u : up)
up_entries.push_back ({ f, u });
for (auto d : down)
down_entries.push_back ({ f, d });
assert (up.size() == down.size());
for (size_t i = 0; i < up.size(); i++)
mix_entries.push_back ({ f, up[i], down[i] });
}
gen_shuffle2 (up_entries, /* seed */ 0);
gen_shuffle2 (down_entries, /* seed */ 1);
gen_shuffle2 (mix_entries, /* seed */ 0);
vector<vector<complex<float>>> fft_out;
vector<vector<complex<float>>> fft_delta_spect;
......@@ -520,17 +519,17 @@ add_watermark (const string& infile, const string& outfile, const string& bits)
const int data_bit = bitvec[(f / Params::frames_per_bit) % bitvec.size()];
const double data_bit_sign = data_bit > 0 ? 1 : -1;
const int u = up_entries[b].band;
const int u = mix_entries[b].up;
{
const float mag_factor = pow (abs (fft_out[up_entries[b].frame * wav_data.n_channels() + ch][u]), -Params::water_delta * data_bit_sign);
const float mag_factor = pow (abs (fft_out[mix_entries[b].frame * wav_data.n_channels() + ch][u]), -Params::water_delta * data_bit_sign);
fft_delta_spect[up_entries[b].frame * wav_data.n_channels() + ch][u] = fft_out[up_entries[b].frame * wav_data.n_channels() + ch][u] * (mag_factor - 1);
fft_delta_spect[mix_entries[b].frame * wav_data.n_channels() + ch][u] = fft_out[mix_entries[b].frame * wav_data.n_channels() + ch][u] * (mag_factor - 1);
}
const int d = down_entries[b].band;
const int d = mix_entries[b].down;
{
const float mag_factor = pow (abs (fft_out[down_entries[b].frame * wav_data.n_channels() + ch][d]), Params::water_delta * data_bit_sign);
const float mag_factor = pow (abs (fft_out[mix_entries[b].frame * wav_data.n_channels() + ch][d]), Params::water_delta * data_bit_sign);
fft_delta_spect[down_entries[b].frame * wav_data.n_channels() + ch][d] = fft_out[down_entries[b].frame * wav_data.n_channels() + ch][d] * (mag_factor - 1);
fft_delta_spect[mix_entries[b].frame * wav_data.n_channels() + ch][d] = fft_out[mix_entries[b].frame * wav_data.n_channels() + ch][d] * (mag_factor - 1);
}
}
}
......@@ -629,22 +628,21 @@ get_watermark (const string& infile, const string& orig_pattern)
{
struct MixEntry {
int frame;
int band;
int up;
int down;
};
vector<MixEntry> up_entries, down_entries;
vector<MixEntry> mix_entries;
for (int f = 0; f < Params::block * Params::frames_per_bit; f++)
{
vector<int> up;
vector<int> down;
get_up_down (f, up, down);
for (auto u : up)
up_entries.push_back ({ f, u });
for (auto d : down)
down_entries.push_back ({ f, d });
assert (up.size() == down.size());
for (size_t i = 0; i < up.size(); i++)
mix_entries.push_back ({ f, up[i], down[i] });
}
gen_shuffle2 (up_entries, /* seed */ 0);
gen_shuffle2 (down_entries, /* seed */ 1);
gen_shuffle2 (mix_entries, /* seed */ 0);
vector<vector<complex<float>>> fft_out;
for (int f = 0; f < Params::block * Params::frames_per_bit; f++)
......@@ -683,13 +681,13 @@ get_watermark (const string& infile, const string& orig_pattern)
int b = f * Params::bands_per_frame + frame_b;
const double min_db = -96;
const int u = up_entries[b].band;
const int u = mix_entries[b].up;
{
umag += db_from_factor (abs (fft_out[up_entries[b].frame * wav_data.n_channels() + ch][u]), min_db);
umag += db_from_factor (abs (fft_out[mix_entries[b].frame * wav_data.n_channels() + ch][u]), min_db);
}
const int d = down_entries[b].band;
const int d = mix_entries[b].down;
{
dmag += db_from_factor (abs (fft_out[down_entries[b].frame * wav_data.n_channels() + ch][d]), min_db);
dmag += db_from_factor (abs (fft_out[mix_entries[b].frame * wav_data.n_channels() + ch][d]), min_db);
}
}
}
......
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