Allow size-specific resizers
[jpcrr.git] / streamtools / resampler.hpp
blob1634b304766d2b916a2fe3568f1a0f26ca4cd893
1 #ifndef _resampler__hpp__included__
2 #define _resampler__hpp__included__
4 #include "digital-filter.hpp"
5 #include "newpacket.hpp"
7 uint64_t next_sample_time(uint64_t time, uint32_t rate);
9 struct resampler
11 virtual ~resampler();
12 virtual sample_number_t nextsample() = 0;
13 virtual void sendpacket(struct packet& p) = 0;
16 struct resampler_pcm : public resampler
18 resampler_pcm(uint32_t rate);
19 sample_number_t nextsample();
20 void sendpacket(struct packet& p);
21 private:
22 bool written;
23 uint32_t output_rate;
24 uint64_t last_read_time;
25 uint64_t last_write_time;
26 npair<int64_t> accumulator;
27 npair<short> current_levels;
30 struct resampler_fm : public resampler
32 resampler_fm(uint32_t rate);
33 sample_number_t nextsample();
34 void sendpacket(struct packet& p);
37 struct packet_demux
39 packet_demux(mixer& mix, uint32_t rate);
40 ~packet_demux();
41 sample_number_t nextsample();
42 void sendpacket(struct packet& p);
43 void sendoption(const std::string& option);
44 private:
45 void do_volume_change(struct packet& p);
46 mixer& use_mixer;
47 uint32_t used_rate;
48 std::map<uint32_t, resampler*> resamplers;
49 composite_filter* output_filter;
50 std::map<std::string, composite_filter*> input_filters;
53 void print_audio_resampler_help(const std::string& prefix);
54 void process_audio_resampler_options(packet_demux& d, const std::string& prefix, int argc, char** argv);
56 #endif