Skip to content

Commit c52e4d3

Browse files
committed
pipewire use pointer to struct instead of struct
1 parent 7b9d8c3 commit c52e4d3

File tree

1 file changed

+35
-34
lines changed

1 file changed

+35
-34
lines changed

input/pipewire.c

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -136,34 +136,32 @@ unsigned int next_power_of_2(unsigned int n) {
136136
}
137137

138138
void *input_pipewire(void *audiodata) {
139-
struct pw_data data = {
140-
0,
141-
};
139+
struct pw_data *data = (struct pw_data *)malloc(sizeof(struct pw_data));
142140

143-
data.cava_audio = (struct audio_data *)audiodata;
141+
data->cava_audio = (struct audio_data *)audiodata;
144142
const struct spa_pod *params[1];
145-
uint8_t buffer[data.cava_audio->input_buffer_size];
143+
uint8_t buffer[data->cava_audio->input_buffer_size];
146144
struct pw_properties *props;
147145
struct spa_pod_builder b = SPA_POD_BUILDER_INIT(buffer, sizeof(buffer));
148146
uint32_t nom;
149-
nom = next_power_of_2((512 * data.cava_audio->rate / 48000));
147+
nom = next_power_of_2((512 * data->cava_audio->rate / 48000));
150148
pw_init(0, 0);
151149

152-
data.loop = pw_main_loop_new(NULL);
153-
if (data.loop == NULL) {
154-
data.cava_audio->terminate = 1;
155-
sprintf(data.cava_audio->error_message,
150+
data->loop = pw_main_loop_new(NULL);
151+
if (data->loop == NULL) {
152+
data->cava_audio->terminate = 1;
153+
sprintf(data->cava_audio->error_message,
156154
__FILE__ ": Could not create main loop. Is your system running pipewire? Maybe try "
157155
"pulse input method instead.");
158156
return 0;
159157
}
160158

161-
data.timer = pw_loop_add_timer(pw_main_loop_get_loop(data.loop), on_timeout, &data);
159+
data->timer = pw_loop_add_timer(pw_main_loop_get_loop(data->loop), on_timeout, data);
162160

163161
props = pw_properties_new(PW_KEY_MEDIA_TYPE, "Audio", PW_KEY_MEDIA_CATEGORY, "Capture",
164162
PW_KEY_MEDIA_ROLE, "Music", NULL);
165163

166-
char *source = data.cava_audio->source;
164+
char *source = data->cava_audio->source;
167165
size_t sourcelength = strlen(source);
168166

169167
if (8 <= sourcelength && !strcmp(source + sourcelength - 8, ".monitor")) {
@@ -175,19 +173,19 @@ void *input_pipewire(void *audiodata) {
175173
} else if (strcmp(source, "auto_input") != 0) {
176174
pw_properties_set(props, PW_KEY_TARGET_OBJECT, source);
177175
}
178-
pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%u/%u", nom, data.cava_audio->rate);
176+
pw_properties_setf(props, PW_KEY_NODE_LATENCY, "%u/%u", nom, data->cava_audio->rate);
179177

180-
if (data.cava_audio->active)
178+
if (data->cava_audio->active)
181179
pw_properties_set(props, PW_KEY_NODE_ALWAYS_PROCESS, "true");
182180
else
183181
pw_properties_set(props, PW_KEY_NODE_PASSIVE, "true");
184182

185-
if (data.cava_audio->virtual_node)
183+
if (data->cava_audio->virtual_node)
186184
pw_properties_set(props, PW_KEY_NODE_VIRTUAL, "true");
187185

188186
enum spa_audio_format audio_format = SPA_AUDIO_FORMAT_S16;
189187

190-
switch (data.cava_audio->format) {
188+
switch (data->cava_audio->format) {
191189
case 8:
192190
audio_format = SPA_AUDIO_FORMAT_S8;
193191
break;
@@ -202,53 +200,56 @@ void *input_pipewire(void *audiodata) {
202200
break;
203201
};
204202

205-
if (data.cava_audio->remix) {
203+
if (data->cava_audio->remix) {
206204
pw_properties_set(props, PW_KEY_STREAM_DONT_REMIX, "false");
207205
pw_properties_set(props, "channelmix.upmix", "true");
208206

209-
if (data.cava_audio->channels < 2) {
207+
if (data->cava_audio->channels < 2) {
210208
// N to 1 with all channels shown
211209
params[0] = spa_format_audio_raw_build(
212210
&b, SPA_PARAM_EnumFormat,
213-
&SPA_AUDIO_INFO_RAW_INIT(.format = audio_format, .rate = data.cava_audio->rate,
214-
.channels = data.cava_audio->channels, ));
211+
&SPA_AUDIO_INFO_RAW_INIT(.format = audio_format, .rate = data->cava_audio->rate,
212+
.channels = data->cava_audio->channels, ));
215213
} else {
216214
// N to 2 with all channels shown
217215
params[0] = spa_format_audio_raw_build(
218216
&b, SPA_PARAM_EnumFormat,
219-
&SPA_AUDIO_INFO_RAW_INIT(.format = audio_format, .rate = data.cava_audio->rate,
220-
.channels = data.cava_audio->channels,
217+
&SPA_AUDIO_INFO_RAW_INIT(.format = audio_format, .rate = data->cava_audio->rate,
218+
.channels = data->cava_audio->channels,
221219
.position = {SPA_AUDIO_CHANNEL_FL,
222220
SPA_AUDIO_CHANNEL_FR}, ));
223221
}
224222
} else {
225223
// N to 2 with only FL and FR shown
226224
params[0] = spa_format_audio_raw_build(
227225
&b, SPA_PARAM_EnumFormat,
228-
&SPA_AUDIO_INFO_RAW_INIT(.format = audio_format, .rate = data.cava_audio->rate,
229-
.channels = data.cava_audio->channels, ));
226+
&SPA_AUDIO_INFO_RAW_INIT(.format = audio_format, .rate = data->cava_audio->rate,
227+
.channels = data->cava_audio->channels, ));
230228
}
231229

232-
data.stream = pw_stream_new_simple(pw_main_loop_get_loop(data.loop), "cava", props,
233-
&stream_events, &data);
230+
data->stream = pw_stream_new_simple(pw_main_loop_get_loop(data->loop), "cava", props,
231+
&stream_events, data);
234232

235-
int status = pw_stream_connect(data.stream, PW_DIRECTION_INPUT, PW_ID_ANY,
233+
int status = pw_stream_connect(data->stream, PW_DIRECTION_INPUT, PW_ID_ANY,
236234
PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_MAP_BUFFERS |
237235
PW_STREAM_FLAG_RT_PROCESS,
238236
params, 1);
239237

240238
if (status < 0) {
241-
data.cava_audio->terminate = 1;
242-
sprintf(data.cava_audio->error_message,
239+
data->cava_audio->terminate = 1;
240+
sprintf(data->cava_audio->error_message,
243241
__FILE__ ": Could not connect stream. Is your system running pipewire? Maybe try "
244242
"pulse input method instead.");
245-
return 0;
243+
goto error_free;
246244
}
247245

248-
pw_main_loop_run(data.loop);
249-
250-
pw_stream_destroy(data.stream);
251-
pw_main_loop_destroy(data.loop);
246+
pw_main_loop_run(data->loop);
247+
pw_stream_destroy(data->stream);
248+
error_free:
249+
pw_loop_destroy_source(pw_main_loop_get_loop(data->loop), data->timer);
250+
pw_main_loop_destroy(data->loop);
252251
pw_deinit();
252+
free(data);
253+
253254
return 0;
254255
}

0 commit comments

Comments
 (0)