Commit 6843d599 authored by Stefan Westerfeld's avatar Stefan Westerfeld

Move zero frames at start to watermark generation.

Signed-off-by: Stefan Westerfeld's avatarStefan Westerfeld <stefan@space.twc.de>
parent 00c041ac
......@@ -323,16 +323,12 @@ mark_zexpand (WavData& wav_data, size_t zero_frames, const string& bits)
{
vector<float> samples;
samples = wav_data.samples();
samples.insert (samples.begin(), zero_frames * wav_data.n_channels(), /* value */ 0);
wav_data.set_samples (samples);
WDInputStream in_stream (&wav_data);
WavData wav_data_out ({ /* no samples */ }, wav_data.n_channels(), wav_data.sample_rate(), wav_data.bit_depth());
WDOutputStream out_stream (&wav_data_out);
int rc = add_stream_watermark (&in_stream, &out_stream, bits);
int rc = add_stream_watermark (&in_stream, &out_stream, bits, zero_frames);
if (rc != 0)
return rc;
......
......@@ -545,7 +545,7 @@ info_format (const string& label, const RawFormat& format)
}
int
add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream, const string& bits)
add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream, const string& bits, size_t zero_frames)
{
auto bitvec = bit_str_to_vec (bits);
if (bitvec.empty())
......@@ -614,9 +614,36 @@ add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream
size_t total_input_frames = 0;
size_t total_output_frames = 0;
Error err;
while (zero_frames >= Params::frame_size)
{
samples.assign (Params::frame_size * n_channels, 0);
total_input_frames += samples.size() / n_channels;
audio_buffer.write_frames (samples);
samples = wm_resampler.run (samples);
size_t to_read = samples.size() / n_channels;
vector<float> orig_samples = audio_buffer.read_frames (to_read);
assert (samples.size() == orig_samples.size());
samples = limiter.process (samples);
err = out_stream->write_frames (samples);
total_output_frames += samples.size() / n_channels;
zero_frames -= Params::frame_size;
}
while (true)
{
err = in_stream->read_frames (samples, Params::frame_size);
if (zero_frames > 0)
{
err = in_stream->read_frames (samples, Params::frame_size - zero_frames);
samples.insert (samples.begin(), zero_frames * n_channels, 0);
zero_frames = 0;
}
else
{
err = in_stream->read_frames (samples, Params::frame_size);
}
if (err)
{
error ("audiowmark: input stream read failed: %s\n", err.message());
......@@ -667,6 +694,7 @@ add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream
}
total_output_frames += samples.size() / n_channels;
}
#if 0
if (in_stream->n_frames() != AudioInputStream::N_FRAMES_UNKNOWN)
{
if (total_output_frames != in_stream->n_frames())
......@@ -675,6 +703,7 @@ add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream
return 1;
}
}
#endif
err = out_stream->close();
if (err)
......@@ -720,7 +749,7 @@ add_watermark (const string& infile, const string& outfile, const string& bits)
if (Params::output_format == Format::RAW)
info_format ("Raw Output", Params::raw_output_format);
return add_stream_watermark (in_stream.get(), out_stream.get(), bits);
return add_stream_watermark (in_stream.get(), out_stream.get(), bits, 0);
}
......@@ -160,7 +160,7 @@ randomize_bit_order (const std::vector<T>& bit_vec, bool encode)
return out_bits;
}
int add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream, const std::string& bits);
int add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream, const std::string& bits, size_t zero_frames);
int add_watermark (const std::string& infile, const std::string& outfile, const std::string& bits);
int get_watermark (const std::string& infile, const std::string& orig_pattern);
......
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