PipeWire  0.2.0
stream.h
Go to the documentation of this file.
1 /* PipeWire
2  * Copyright (C) 2015 Wim Taymans <wim.taymans@gmail.com>
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Library General Public
6  * License as published by the Free Software Foundation; either
7  * version 2 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  * Library General Public License for more details.
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this library; if not, write to the
16  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
17  * Boston, MA 02110-1301, USA.
18  */
19 
20 #ifndef __PIPEWIRE_STREAM_H__
21 #define __PIPEWIRE_STREAM_H__
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
147 struct pw_stream;
148 
149 #include <spa/buffer/buffer.h>
150 #include <spa/param/param.h>
151 
152 #include <pipewire/remote.h>
153 
164 };
165 
166 struct pw_buffer {
167  struct spa_buffer *buffer; /* the spa buffer */
168  void *user_data; /* user data attached to the buffer */
169 };
170 
173 #define PW_VERSION_STREAM_EVENTS 0
174  uint32_t version;
175 
176  void (*destroy) (void *data);
178  void (*state_changed) (void *data, enum pw_stream_state old,
179  enum pw_stream_state state, const char *error);
183  void (*format_changed) (void *data, const struct spa_pod *format);
184 
186  void (*add_buffer) (void *data, struct pw_buffer *buffer);
188  void (*remove_buffer) (void *data, struct pw_buffer *buffer);
189 
194  void (*process) (void *data);
195 };
196 
198 const char * pw_stream_state_as_string(enum pw_stream_state state);
199 
213 };
214 
217 struct pw_stream *
218 pw_stream_new(struct pw_remote *remote,
219  const char *name,
220  struct pw_properties *props );
221 
222 struct pw_stream *
223 pw_stream_new_simple(struct pw_loop *loop,
224  const char *name,
225  struct pw_properties *props,
226  const struct pw_stream_events *events,
227  void *data );
228 
230 void pw_stream_destroy(struct pw_stream *stream);
231 
232 void pw_stream_add_listener(struct pw_stream *stream,
233  struct spa_hook *listener,
234  const struct pw_stream_events *events,
235  void *data);
236 
237 enum pw_stream_state pw_stream_get_state(struct pw_stream *stream, const char **error);
238 
239 const char *pw_stream_get_name(struct pw_stream *stream);
240 
241 struct pw_remote *pw_stream_get_remote(struct pw_stream *stream);
242 
244 #define PW_STREAM_PROP_IS_LIVE "pipewire.latency.is-live"
245 
246 #define PW_STREAM_PROP_LATENCY_MIN "pipewire.latency.min"
247 
248 #define PW_STREAM_PROP_LATENCY_MAX "pipewire.latency.max"
249 
250 const struct pw_properties *pw_stream_get_properties(struct pw_stream *stream);
251 
257 int
258 pw_stream_connect(struct pw_stream *stream,
259  enum pw_direction direction,
260  const char *port_path,
262  enum pw_stream_flags flags,
263  const struct spa_pod **params,
266  uint32_t n_params );
267 
270 uint32_t
271 pw_stream_get_node_id(struct pw_stream *stream);
272 
274 int pw_stream_disconnect(struct pw_stream *stream);
275 
282 void
283 pw_stream_finish_format(struct pw_stream *stream,
284  int res,
285  const struct spa_pod **params,
288  uint32_t n_params );
289 
290 
292 #define PW_STREAM_CONTROL_VOLUME "volume"
293 
295 #define PW_STREAM_CONTROL_CONTRAST "contrast"
296 #define PW_STREAM_CONTROL_BRIGHTNESS "brightness"
297 #define PW_STREAM_CONTROL_HUE "hue"
298 #define PW_STREAM_CONTROL_SATURATION "saturation"
299 
301 int pw_stream_set_control(struct pw_stream *stream, const char *name, float value);
303 int pw_stream_get_control(struct pw_stream *stream, const char *name, float *value);
304 
306 int pw_stream_set_active(struct pw_stream *stream, bool active);
307 
309 struct pw_time {
310  int64_t now;
311  int64_t ticks;
312  struct spa_fraction rate;
313 };
315 int pw_stream_get_time(struct pw_stream *stream, struct pw_time *time);
316 
319 struct pw_buffer *pw_stream_dequeue_buffer(struct pw_stream *stream);
320 
322 int pw_stream_queue_buffer(struct pw_stream *stream, struct pw_buffer *buffer);
323 
324 
325 #ifdef __cplusplus
326 }
327 #endif
328 
329 #endif /* __PIPEWIRE_STREAM_H__ */
int pw_stream_queue_buffer(struct pw_stream *stream, struct pw_buffer *buffer)
Submit a buffer for playback or recycle a buffer for capture.
Definition: stream.c:1403
A collection of key/value pairs.
Definition: properties.h:38
int pw_stream_set_control(struct pw_stream *stream, const char *name, float value)
Set a control value.
Definition: stream.c:1379
int pw_stream_connect(struct pw_stream *stream, enum pw_direction direction, const char *port_path, enum pw_stream_flags flags, const struct spa_pod **params, uint32_t n_params)
Connect a stream for input or output on port_path.
Definition: stream.c:1258
require exclusive access to the device
Definition: stream.h:211
paused, fully configured but not processing data yet
Definition: stream.h:161
void(* format_changed)(void *data, const struct spa_pod *format)
when the format changed.
Definition: stream.h:183
try to automatically connect this stream
Definition: stream.h:203
const char * pw_stream_state_as_string(enum pw_stream_state state)
Convert a stream state to a readable string.
Definition: stream.c:354
int64_t now
the monotonic time
Definition: stream.h:310
PipeWire loop object provides an implementation of the spa loop interfaces.
Definition: loop.h:37
A time structure.
Definition: stream.h:309
void(* add_buffer)(void *data, struct pw_buffer *buffer)
when a new buffer was created for this stream
Definition: stream.h:186
Events for a stream.
Definition: stream.h:172
int pw_stream_get_control(struct pw_stream *stream, const char *name, float *value)
Get a control value.
Definition: stream.c:1384
pw_stream_state
The state of a stream.
Definition: stream.h:155
int64_t ticks
the ticks at now
Definition: stream.h:311
mmap the buffers
Definition: stream.h:206
struct spa_fraction rate
the rate of ticks
Definition: stream.h:312
stream is ready
Definition: stream.h:160
struct pw_stream * pw_stream_new(struct pw_remote *remote, const char *name, struct pw_properties *props)
Create a new unconneced pw_stream.
Definition: stream.c:375
int pw_stream_disconnect(struct pw_stream *stream)
Disconnect stream.
Definition: stream.c:1336
streaming
Definition: stream.h:163
PipeWire stream object class.
void pw_stream_destroy(struct pw_stream *stream)
Destroy a stream.
Definition: stream.c:531
enum pw_stream_state pw_stream_get_state(struct pw_stream *stream, const char **error)
Definition: stream.c:435
don&#39;t convert format
Definition: stream.h:210
uint32_t pw_stream_get_node_id(struct pw_stream *stream)
Get the node ID of the stream.
Definition: stream.c:1306
be a driver
Definition: stream.h:207
the strean is in error
Definition: stream.h:156
Represents a connection with a remote PipeWire instance.
struct pw_stream * pw_stream_new_simple(struct pw_loop *loop, const char *name, struct pw_properties *props, const struct pw_stream_events *events, void *data)
Definition: stream.c:429
void(* destroy)(void *data)
Definition: stream.h:176
int pw_stream_get_time(struct pw_stream *stream, struct pw_time *time)
Query the time on the stream.
Definition: stream.c:1362
struct pw_buffer * pw_stream_dequeue_buffer(struct pw_stream *stream)
Get a buffer that can be filled for playback streams or consumed for capture streams.
Definition: stream.c:1389
start the stream inactive
Definition: stream.h:205
const char * pw_stream_get_name(struct pw_stream *stream)
Definition: stream.c:442
const struct pw_properties * pw_stream_get_properties(struct pw_stream *stream)
Definition: stream.c:447
pw_stream_flags
Extra flags that can be used in pw_stream_connect()
Definition: stream.h:201
void pw_stream_add_listener(struct pw_stream *stream, struct spa_hook *listener, const struct pw_stream_events *events, void *data)
Definition: stream.c:452
void(* state_changed)(void *data, enum pw_stream_state old, enum pw_stream_state state, const char *error)
when the stream state changes
Definition: stream.h:178
void(* remove_buffer)(void *data, struct pw_buffer *buffer)
when a buffer was destroyed for this stream
Definition: stream.h:188
call process from the realtime thread
Definition: stream.h:208
struct spa_buffer * buffer
Definition: stream.h:167
void pw_stream_finish_format(struct pw_stream *stream, int res, const struct spa_pod **params, uint32_t n_params)
Complete the negotiation process with result code res.
Definition: stream.c:1312
int pw_stream_set_active(struct pw_stream *stream, bool active)
Activate or deactivate the stream.
Definition: stream.c:1355
connection is in progress
Definition: stream.h:158
Definition: stream.h:166
struct pw_remote * pw_stream_get_remote(struct pw_stream *stream)
Definition: stream.c:1300
void(* process)(void *data)
when a buffer can be queued (for playback streams) or dequeued (for capture streams).
Definition: stream.h:194
uint32_t version
Definition: stream.h:174
unconnected
Definition: stream.h:157
stream is being configured
Definition: stream.h:159
void * user_data
Definition: stream.h:168
no flags
Definition: stream.h:202
pw_direction
The direction of a port.
Definition: introspect.h:47