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) ...@@ -323,16 +323,12 @@ mark_zexpand (WavData& wav_data, size_t zero_frames, const string& bits)
{ {
vector<float> samples; 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); WDInputStream in_stream (&wav_data);
WavData wav_data_out ({ /* no samples */ }, wav_data.n_channels(), wav_data.sample_rate(), wav_data.bit_depth()); WavData wav_data_out ({ /* no samples */ }, wav_data.n_channels(), wav_data.sample_rate(), wav_data.bit_depth());
WDOutputStream out_stream (&wav_data_out); 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) if (rc != 0)
return rc; return rc;
......
...@@ -545,7 +545,7 @@ info_format (const string& label, const RawFormat& format) ...@@ -545,7 +545,7 @@ info_format (const string& label, const RawFormat& format)
} }
int 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); auto bitvec = bit_str_to_vec (bits);
if (bitvec.empty()) if (bitvec.empty())
...@@ -614,9 +614,36 @@ add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream ...@@ -614,9 +614,36 @@ add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream
size_t total_input_frames = 0; size_t total_input_frames = 0;
size_t total_output_frames = 0; size_t total_output_frames = 0;
Error err; 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) 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) if (err)
{ {
error ("audiowmark: input stream read failed: %s\n", err.message()); error ("audiowmark: input stream read failed: %s\n", err.message());
...@@ -667,6 +694,7 @@ add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream ...@@ -667,6 +694,7 @@ add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream
} }
total_output_frames += samples.size() / n_channels; total_output_frames += samples.size() / n_channels;
} }
#if 0
if (in_stream->n_frames() != AudioInputStream::N_FRAMES_UNKNOWN) if (in_stream->n_frames() != AudioInputStream::N_FRAMES_UNKNOWN)
{ {
if (total_output_frames != in_stream->n_frames()) if (total_output_frames != in_stream->n_frames())
...@@ -675,6 +703,7 @@ add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream ...@@ -675,6 +703,7 @@ add_stream_watermark (AudioInputStream *in_stream, AudioOutputStream *out_stream
return 1; return 1;
} }
} }
#endif
err = out_stream->close(); err = out_stream->close();
if (err) if (err)
...@@ -720,7 +749,7 @@ add_watermark (const string& infile, const string& outfile, const string& bits) ...@@ -720,7 +749,7 @@ add_watermark (const string& infile, const string& outfile, const string& bits)
if (Params::output_format == Format::RAW) if (Params::output_format == Format::RAW)
info_format ("Raw Output", Params::raw_output_format); 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) ...@@ -160,7 +160,7 @@ randomize_bit_order (const std::vector<T>& bit_vec, bool encode)
return out_bits; 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 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); 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