OBJS += glwidget.moc.o mainwindow.moc.o vumeter.moc.o lrameter.moc.o
# Mixer objects
-OBJS += h264encode.o mixer.o bmusb/bmusb.o pbo_frame_allocator.o context.o ref_counted_frame.o theme.o resampler.o httpd.o ebu_r128_proc.o flags.o image_input.o stereocompressor.o filter.o
+OBJS += h264encode.o mixer.o bmusb/bmusb.o pbo_frame_allocator.o context.o ref_counted_frame.o theme.o resampling_queue.o httpd.o ebu_r128_proc.o flags.o image_input.o stereocompressor.o filter.o
%.o: %.cpp
$(CXX) -MMD -MP $(CPPFLAGS) $(CXXFLAGS) -o $@ -c $<
[this]{
resource_pool->clean_context();
});
- card->resampler.reset(new Resampler(OUTPUT_FREQUENCY, OUTPUT_FREQUENCY, 2));
+ card->resampling_queue.reset(new ResamplingQueue(OUTPUT_FREQUENCY, OUTPUT_FREQUENCY, 2));
card->usb->configure_card();
}
if (dropped_frames > FPS * 2) {
fprintf(stderr, "Card %d lost more than two seconds (or time code jumping around), resetting resampler\n",
card_index);
- card->resampler.reset(new Resampler(OUTPUT_FREQUENCY, OUTPUT_FREQUENCY, 2));
+ card->resampling_queue.reset(new ResamplingQueue(OUTPUT_FREQUENCY, OUTPUT_FREQUENCY, 2));
} else if (dropped_frames > 0) {
// Insert silence as needed.
fprintf(stderr, "Card %d dropped %d frame(s) (before timecode 0x%04x), inserting silence.\n",
vector<float> silence;
silence.resize((OUTPUT_FREQUENCY / FPS) * 2);
for (int i = 0; i < dropped_frames; ++i) {
- card->resampler->add_input_samples((unwrapped_timecode - dropped_frames + i) / double(FPS), silence.data(), (OUTPUT_FREQUENCY / FPS));
+ card->resampling_queue->add_input_samples((unwrapped_timecode - dropped_frames + i) / double(FPS), silence.data(), (OUTPUT_FREQUENCY / FPS));
}
}
- card->resampler->add_input_samples(unwrapped_timecode / double(FPS), audio.data(), num_samples);
+ card->resampling_queue->add_input_samples(unwrapped_timecode / double(FPS), audio.data(), num_samples);
}
// Done with the audio, so release it.
for (unsigned card_index = 0; card_index < num_cards; ++card_index) {
input_frames.push_back(bmusb_current_rendering_frame[card_index]);
}
- const int64_t av_delay = TIMEBASE / 10; // Corresponds to the fixed delay in resampler.h. TODO: Make less hard-coded.
+ const int64_t av_delay = TIMEBASE / 10; // Corresponds to the fixed delay in resampling_queue.h. TODO: Make less hard-coded.
h264_encoder->end_frame(fence, pts_int + av_delay, input_frames);
++frame;
pts_int += TIMEBASE / FPS;
samples_card.resize((OUTPUT_FREQUENCY / FPS) * 2);
{
unique_lock<mutex> lock(cards[card_index].audio_mutex);
- if (!cards[card_index].resampler->get_output_samples(pts(), &samples_card[0], OUTPUT_FREQUENCY / FPS)) {
+ if (!cards[card_index].resampling_queue->get_output_samples(pts(), &samples_card[0], OUTPUT_FREQUENCY / FPS)) {
printf("Card %d reported previous underrun.\n", card_index);
}
}
#include "pbo_frame_allocator.h"
#include "ref_counted_frame.h"
#include "ref_counted_gl_sync.h"
-#include "resampler.h"
+#include "resampling_queue.h"
#include "theme.h"
#include "timebase.h"
#include "stereocompressor.h"
unsigned dropped_frames = 0; // Before new_frame.
std::mutex audio_mutex;
- std::unique_ptr<Resampler> resampler; // Under audio_mutex.
+ std::unique_ptr<ResamplingQueue> resampling_queue; // Under audio_mutex.
int last_timecode = -1; // Unwrapped.
};
CaptureCard cards[MAX_CARDS]; // protected by <bmusb_mutex>
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
-#include "resampler.h"
+#include "resampling_queue.h"
#include <math.h>
#include <stddef.h>
#include <string.h>
#include <zita-resampler/vresampler.h>
-Resampler::Resampler(unsigned freq_in, unsigned freq_out, unsigned num_channels)
+ResamplingQueue::ResamplingQueue(unsigned freq_in, unsigned freq_out, unsigned num_channels)
: freq_in(freq_in), freq_out(freq_out), num_channels(num_channels),
ratio(double(freq_out) / double(freq_in))
{
vresampler.process ();
}
-void Resampler::add_input_samples(double pts, const float *samples, ssize_t num_samples)
+void ResamplingQueue::add_input_samples(double pts, const float *samples, ssize_t num_samples)
{
if (first_input) {
// Synthesize a fake length.
}
}
-bool Resampler::get_output_samples(double pts, float *samples, ssize_t num_samples)
+bool ResamplingQueue::get_output_samples(double pts, float *samples, ssize_t num_samples)
{
double last_output_len;
if (first_output) {
-#ifndef _RESAMPLER_H
-#define _RESAMPLER_H 1
+#ifndef _RESAMPLING_QUEUE_H
+#define _RESAMPLING_QUEUE_H 1
// Takes in samples from an input source, possibly with jitter, and outputs a fixed number
// of samples every iteration. Used to a) change sample rates if needed, and b) deal with
#include <deque>
#include <memory>
-class Resampler {
+class ResamplingQueue {
public:
- Resampler(unsigned freq_in, unsigned freq_out, unsigned num_channels = 2);
+ ResamplingQueue(unsigned freq_in, unsigned freq_out, unsigned num_channels = 2);
// Note: pts is always in seconds.
void add_input_samples(double pts, const float *samples, ssize_t num_samples);
std::deque<float> buffer;
};
-#endif // !defined(_RESAMPLER_H)
+#endif // !defined(_RESAMPLING_QUEUE_H)