MCPcopy Create free account
hub / github.com/Audio4Linux/JDSP4Linux / on_process

Function on_process

src/audio/pipewire/PwBasePlugin.cpp:28–96  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

26namespace {
27
28void on_process(void* userdata, spa_io_position* position) {
29 auto* d = static_cast<PwPluginBase::data*>(userdata);
30
31 const auto& n_samples = position->clock.duration;
32 const auto& rate = position->clock.rate.denom;
33
34 if (n_samples == 0 || rate == 0) {
35 return;
36 }
37
38 if (rate != d->pb->rate || n_samples != d->pb->n_samples) {
39 d->pb->rate = rate;
40 d->pb->n_samples = n_samples;
41
42 d->pb->dummy_left.resize(n_samples);
43 d->pb->dummy_right.resize(n_samples);
44
45 std::ranges::fill(d->pb->dummy_left, 0.0F);
46 std::ranges::fill(d->pb->dummy_right, 0.0F);
47
48 d->pb->clock_start = std::chrono::system_clock::now();
49
50 d->pb->setup();
51 }
52
53 d->pb->delta_t = 0.001F * static_cast<float>(std::chrono::duration_cast<std::chrono::milliseconds>(
54 std::chrono::system_clock::now() - d->pb->clock_start)
55 .count());
56
57 d->pb->send_notifications = d->pb->delta_t >= d->pb->notification_time_window;
58
59
60 //util::warning("processing: " + std::to_string(n_samples));
61
62 auto* in_left = static_cast<float*>(pw_filter_get_dsp_buffer(d->in_left, n_samples));
63 auto* in_right = static_cast<float*>(pw_filter_get_dsp_buffer(d->in_right, n_samples));
64
65 if(in_left == nullptr || in_right == nullptr)
66 {
67 return;
68 }
69
70 auto* out_left = static_cast<float*>(pw_filter_get_dsp_buffer(d->out_left, n_samples));
71 auto* out_right = static_cast<float*>(pw_filter_get_dsp_buffer(d->out_right, n_samples));
72
73 if(out_left == nullptr || out_right == nullptr)
74 {
75 return;
76 }
77
78 if (!d->pb->enable_probe) {
79 d->pb->process(in_left, in_right, out_left, out_right, n_samples);
80 } else {
81 auto* probe_left = static_cast<float*>(pw_filter_get_dsp_buffer(d->probe_left, n_samples));
82 auto* probe_right = static_cast<float*>(pw_filter_get_dsp_buffer(d->probe_right, n_samples));
83
84 if (probe_left == nullptr || probe_right == nullptr) {
85 d->pb->process(in_left, in_right, out_left, out_right, d->pb->dummy_left.data(), d->pb->dummy_right.data(), n_samples);

Callers

nothing calls this directly

Calls 5

resizeMethod · 0.80
countMethod · 0.80
setupMethod · 0.45
processMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected