Commit 35b5e8be authored by Stefan Westerfeld's avatar Stefan Westerfeld

Write data bits, doesn't work yet.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent 4a606c33
...@@ -533,6 +533,19 @@ mark_data (const WavData& wav_data, int start_frame, const vector<vector<complex ...@@ -533,6 +533,19 @@ mark_data (const WavData& wav_data, int start_frame, const vector<vector<complex
} }
} }
void
mark_data_stream (int frame_number, const vector<vector<complex<float>>>& frame_fft, vector<vector<complex<float>>>& fft_delta_spect,
const vector<int>& bitvec)
{
assert (bitvec.size() == mark_data_frame_count() / Params::frames_per_bit);
int n_channels = frame_fft.size();
for (int ch = 0; ch < n_channels; ch++)
{
mark_bit_linear (frame_number, frame_fft[ch], fft_delta_spect[ch], bitvec[frame_number / Params::frames_per_bit], Random::Stream::data_up_down);
}
}
size_t size_t
mark_sync_frame_count() mark_sync_frame_count()
{ {
...@@ -729,6 +742,8 @@ add_watermark (const string& infile, const string& outfile, const string& bits) ...@@ -729,6 +742,8 @@ add_watermark (const string& infile, const string& outfile, const string& bits)
if (state == State::SYNC) if (state == State::SYNC)
mark_sync_stream (frame_number, fft_out, fft_delta_spect, ab); mark_sync_stream (frame_number, fft_out, fft_delta_spect, ab);
if (state == State::DATA)
mark_data_stream (frame_number, fft_out, fft_delta_spect, ab ? bitvec_b : bitvec_a);
for (int ch = 0; ch < wav_data.n_channels(); ch++) for (int ch = 0; ch < wav_data.n_channels(); ch++)
{ {
...@@ -746,23 +761,22 @@ add_watermark (const string& infile, const string& outfile, const string& bits) ...@@ -746,23 +761,22 @@ add_watermark (const string& infile, const string& outfile, const string& bits)
if (frame_number++ == frame_bound) if (frame_number++ == frame_bound)
{ {
frame_number = 0;
if (state == PAD) if (state == PAD)
{ {
state = SYNC; state = SYNC;
frame_number = 0;
frame_bound = mark_sync_frame_count(); frame_bound = mark_sync_frame_count();
} }
else if (state == SYNC) else if (state == SYNC)
{ {
state = DATA; state = DATA;
frame_number = 0;
frame_bound = mark_data_frame_count(); frame_bound = mark_data_frame_count();
} }
else if (state == DATA) else if (state == DATA)
{ {
state = SYNC; state = SYNC;
ab = (ab + 1) & 1; // write A|B|A|B|... ab = (ab + 1) & 1; // write A|B|A|B|...
frame_number = 0;
frame_bound = mark_sync_frame_count(); frame_bound = mark_sync_frame_count();
} }
} }
......
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