PipeWire  0.2.7
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  uint64_t size; /* For input streams, this field is set by pw_stream
170  with the duration of the buffer in ticks.
171  For output streams, this field is set by the user.
172  This field is added for all queued buffers and
173  returned in the time info. */
174 };
175 
178 #define PW_VERSION_STREAM_EVENTS 0
179  uint32_t version;
180 
181  void (*destroy) (void *data);
183  void (*state_changed) (void *data, enum pw_stream_state old,
184  enum pw_stream_state state, const char *error);
188  void (*format_changed) (void *data, const struct spa_pod *format);
189 
191  void (*add_buffer) (void *data, struct pw_buffer *buffer);
193  void (*remove_buffer) (void *data, struct pw_buffer *buffer);
194 
199  void (*process) (void *data);
200 };
201 
203 const char * pw_stream_state_as_string(enum pw_stream_state state);
204 
208  PW_STREAM_FLAG_AUTOCONNECT = (1 << 0),
213  PW_STREAM_FLAG_RT_PROCESS = (1 << 4),
216  PW_STREAM_FLAG_EXCLUSIVE = (1 << 6),
218 };
219 
222 struct pw_stream *
223 pw_stream_new(struct pw_remote *remote,
224  const char *name,
225  struct pw_properties *props );
226 
227 struct pw_stream *
228 pw_stream_new_simple(struct pw_loop *loop,
229  const char *name,
230  struct pw_properties *props,
231  const struct pw_stream_events *events,
232  void *data );
233 
235 void pw_stream_destroy(struct pw_stream *stream);
236 
237 void pw_stream_add_listener(struct pw_stream *stream,
238  struct spa_hook *listener,
239  const struct pw_stream_events *events,
240  void *data);
241 
242 enum pw_stream_state pw_stream_get_state(struct pw_stream *stream, const char **error);
243 
244 const char *pw_stream_get_name(struct pw_stream *stream);
245 
246 struct pw_remote *pw_stream_get_remote(struct pw_stream *stream);
247 
249 #define PW_STREAM_PROP_IS_LIVE "pipewire.latency.is-live"
250 
251 #define PW_STREAM_PROP_LATENCY_MIN "pipewire.latency.min"
252 
253 #define PW_STREAM_PROP_LATENCY_MAX "pipewire.latency.max"
254 
255 const struct pw_properties *pw_stream_get_properties(struct pw_stream *stream);
256 
262 int
263 pw_stream_connect(struct pw_stream *stream,
264  enum pw_direction direction,
265  const char *port_path,
267  enum pw_stream_flags flags,
268  const struct spa_pod **params,
271  uint32_t n_params );
272 
275 uint32_t
276 pw_stream_get_node_id(struct pw_stream *stream);
277 
279 int pw_stream_disconnect(struct pw_stream *stream);
280 
287 void
288 pw_stream_finish_format(struct pw_stream *stream,
289  int res,
290  const struct spa_pod **params,
293  uint32_t n_params );
294 
295 
297 #define PW_STREAM_CONTROL_VOLUME "volume"
298 
300 #define PW_STREAM_CONTROL_CONTRAST "contrast"
301 #define PW_STREAM_CONTROL_BRIGHTNESS "brightness"
302 #define PW_STREAM_CONTROL_HUE "hue"
303 #define PW_STREAM_CONTROL_SATURATION "saturation"
304 
306 int pw_stream_set_control(struct pw_stream *stream, const char *name, float value);
308 int pw_stream_get_control(struct pw_stream *stream, const char *name, float *value);
309 
311 int pw_stream_set_active(struct pw_stream *stream, bool active);
312 
314 struct pw_time {
315  int64_t now;
316  struct spa_fraction rate;
317  uint64_t ticks;
319  uint64_t delay;
322  uint64_t queued;
325 };
326 
328 int pw_stream_get_time(struct pw_stream *stream, struct pw_time *time);
329 
332 struct pw_buffer *pw_stream_dequeue_buffer(struct pw_stream *stream);
333 
335 int pw_stream_queue_buffer(struct pw_stream *stream, struct pw_buffer *buffer);
336 
337 
338 #ifdef __cplusplus
339 }
340 #endif
341 
342 #endif /* __PIPEWIRE_STREAM_H__ */
pw_map_range
parameters to map a memory range
Definition: mem.h:69
pw_buffer::user_data
void * user_data
Definition: stream.h:168
pw_array::pw_array_ensure_size
static bool pw_array_ensure_size(struct pw_array *arr, size_t size)
Make sure size bytes can be added to the array.
Definition: array.h:76
pw_stream_queue_buffer
SPA_EXPORT 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:1417
remote.h
pw_stream_add_listener
SPA_EXPORT void pw_stream_add_listener(struct pw_stream *stream, struct spa_hook *listener, const struct pw_stream_events *events, void *data)
Definition: stream.c:456
pw_stream_get_state
enum pw_stream_state pw_stream_get_state(struct pw_stream *stream, const char **error)
Definition: stream.c:436
pw_stream_events::destroy
void(* destroy)(void *data)
Definition: stream.h:181
pw_buffer
Definition: stream.h:166
PW_STREAM_FLAG_DRIVER
@ PW_STREAM_FLAG_DRIVER
be a driver
Definition: stream.h:212
pw_remote
Represents a connection with a remote PipeWire instance.
pw_stream_get_name
const char * pw_stream_get_name(struct pw_stream *stream)
Definition: stream.c:444
PW_STREAM_PROP_LATENCY_MIN
#define PW_STREAM_PROP_LATENCY_MIN
The minimum latency of the stream, int, default 0.
Definition: stream.h:251
pw_stream_get_properties
const struct pw_properties * pw_stream_get_properties(struct pw_stream *stream)
Definition: stream.c:450
PW_DIRECTION_INPUT
@ PW_DIRECTION_INPUT
an input port direction
Definition: introspect.h:48
pw_loop_add_io
#define pw_loop_add_io(l,...)
Definition: loop.h:60
interfaces.h
pw_stream_events::remove_buffer
void(* remove_buffer)(void *data, struct pw_buffer *buffer)
when a buffer was destroyed for this stream
Definition: stream.h:193
pw_stream_events::add_buffer
void(* add_buffer)(void *data, struct pw_buffer *buffer)
when a new buffer was created for this stream
Definition: stream.h:191
pw_stream::pw_stream_finish_format
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:1314
pw_loop
PipeWire loop object provides an implementation of the spa loop interfaces.
Definition: loop.h:37
PW_STREAM_FLAG_EXCLUSIVE
@ PW_STREAM_FLAG_EXCLUSIVE
require exclusive access to the device
Definition: stream.h:216
pw_stream_set_control
SPA_EXPORT int pw_stream_set_control(struct pw_stream *stream, const char *name, float value)
Set a control value.
Definition: stream.c:1390
pw_stream::pw_stream_set_active
int pw_stream_set_active(struct pw_stream *stream, bool active)
Activate or deactivate the stream.
Definition: stream.c:1357
pw_time
A time structure.
Definition: stream.h:314
pw_proxy::pw_proxy_destroy
SPA_EXPORT void pw_proxy_destroy(struct pw_proxy *proxy)
Destroy a proxy object.
Definition: proxy.c:124
impl
Definition: control.c:25
pw_proxy_events
Proxy events, use pw_proxy_add_listener.
Definition: proxy.h:102
pw_direction
pw_direction
The direction of a port.
Definition: introspect.h:47
pw_array_for_each
#define pw_array_for_each(pos, array)
Definition: array.h:56
PW_STREAM_STATE_PAUSED
@ PW_STREAM_STATE_PAUSED
paused, fully configured but not processing data yet
Definition: stream.h:161
pw_type
PipeWire type support struct.
Definition: type.h:51
array.h
PW_NODE_PROP_AUTOCONNECT
#define PW_NODE_PROP_AUTOCONNECT
Automatically connect this node to a compatible node.
Definition: node.h:104
pw_log::pw_log_info
void pw_log_info(const char *format,...)
Log an info message.
pw_time::ticks
uint64_t ticks
the ticks at now.
Definition: stream.h:317
pw_utils::pw_spa_pod_copy
static struct spa_pod * pw_spa_pod_copy(const struct spa_pod *pod)
Copy a pod structure
Definition: utils.h:52
pw_loop_update_timer
#define pw_loop_update_timer(l,...)
Definition: loop.h:67
pw_array
An array object.
Definition: array.h:36
pw_type::core
uint32_t core
Definition: type.h:54
pw_type::io
struct spa_type_io io
Definition: type.h:70
PW_MAP_RANGE_INIT
#define PW_MAP_RANGE_INIT
Definition: mem.h:75
PW_VERSION_PROXY_EVENTS
#define PW_VERSION_PROXY_EVENTS
Definition: proxy.h:103
PW_STREAM_STATE_ERROR
@ PW_STREAM_STATE_ERROR
the strean is in error
Definition: stream.h:156
pw_properties::pw_properties_setf
SPA_EXPORT int pw_properties_setf(struct pw_properties *properties, const char *key, const char *format,...)
Set a property value by format.
Definition: properties.c:338
pw_stream_events::format_changed
void(* format_changed)(void *data, const struct spa_pod *format)
when the format changed.
Definition: stream.h:188
utils.h
pw_log::pw_log_trace
void pw_log_trace(const char *format,...)
Log a trace message.
pw_buffer::size
uint64_t size
Definition: stream.h:169
pw_stream_get_remote
SPA_EXPORT struct pw_remote * pw_stream_get_remote(struct pw_stream *stream)
Definition: stream.c:1300
PW_NODE_PROP_TARGET_NODE
#define PW_NODE_PROP_TARGET_NODE
Try to connect the node to this node id.
Definition: node.h:106
pw_loop_destroy_source
#define pw_loop_destroy_source(l,...)
Definition: loop.h:69
pw_time::now
int64_t now
the monotonic time
Definition: stream.h:315
pw_stream_get_remote
struct pw_remote * pw_stream_get_remote(struct pw_stream *stream)
Definition: stream.c:1300
pw_stream_events::version
uint32_t version
Definition: stream.h:179
pw_proxy
Represents an object on the client side.
stream.h
pw_stream_get_properties
SPA_EXPORT const struct pw_properties * pw_stream_get_properties(struct pw_stream *stream)
Definition: stream.c:450
pw_stream_new_simple
SPA_EXPORT 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
PW_STREAM_FLAG_AUTOCONNECT
@ PW_STREAM_FLAG_AUTOCONNECT
try to automatically connect this stream
Definition: stream.h:208
PW_STREAM_FLAG_MAP_BUFFERS
@ PW_STREAM_FLAG_MAP_BUFFERS
mmap the buffers
Definition: stream.h:211
pw_stream::pw_stream_connect
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:1259
PW_STREAM_STATE_READY
@ PW_STREAM_STATE_READY
stream is ready
Definition: stream.h:160
PW_STREAM_STATE_CONFIGURE
@ PW_STREAM_STATE_CONFIGURE
stream is being configured
Definition: stream.h:159
pw_stream_dequeue_buffer
SPA_EXPORT 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:1402
pw_array::pw_array_add
static void * pw_array_add(struct pw_array *arr, size_t size)
Add ref size bytes to arr.
Definition: array.h:98
pw_stream_queue_buffer
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:1417
pw_properties::pw_properties_set
SPA_EXPORT int pw_properties_set(struct pw_properties *properties, const char *key, const char *value)
Set a property value.
Definition: properties.c:308
pw_core
the core PipeWire object
pw_time::delay
uint64_t delay
delay to device, add to ticks for INPUT streams and subtract from ticks for OUTPUT streams to get the...
Definition: stream.h:319
PW_STREAM_FLAG_RT_PROCESS
@ PW_STREAM_FLAG_RT_PROCESS
call process from the realtime thread
Definition: stream.h:213
PW_STREAM_STATE_STREAMING
@ PW_STREAM_STATE_STREAMING
streaming
Definition: stream.h:163
pw_stream_get_control
SPA_EXPORT int pw_stream_get_control(struct pw_stream *stream, const char *name, float *value)
Get a control value.
Definition: stream.c:1396
pw_stream::pw_stream_state_as_string
const char * pw_stream_state_as_string(enum pw_stream_state state)
Convert a stream state to a readable string.
Definition: stream.c:352
pw_stream_flags
pw_stream_flags
Extra flags that can be used in pw_stream_connect()
Definition: stream.h:206
pw_loop_add_timer
#define pw_loop_add_timer(l,...)
Definition: loop.h:66
pw_proxy_add_listener
void pw_proxy_add_listener(struct pw_proxy *proxy, struct spa_hook *listener, const struct pw_proxy_events *events, void *data)
Add an event listener to proxy.
Definition: proxy.c:98
pw_properties::pw_properties_get
SPA_EXPORT const char * pw_properties_get(const struct pw_properties *properties, const char *key)
Get a property.
Definition: properties.c:361
pw_stream::pw_stream_disconnect
int pw_stream_disconnect(struct pw_stream *stream)
Disconnect stream.
Definition: stream.c:1339
pw_loop_update_io
#define pw_loop_update_io(l,...)
Definition: loop.h:61
pw_stream_dequeue_buffer
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:1402
PW_STREAM_FLAG_INACTIVE
@ PW_STREAM_FLAG_INACTIVE
start the stream inactive
Definition: stream.h:210
pw_type::param
struct spa_type_param param
Definition: type.h:71
pw_stream_events::process
void(* process)(void *data)
when a buffer can be queued (for playback streams) or dequeued (for capture streams).
Definition: stream.h:199
pw_buffer::buffer
struct spa_buffer * buffer
Definition: stream.h:167
pw_stream_events::state_changed
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:183
impl::this
struct pw_control this
Definition: control.c:26
pw_stream_get_name
SPA_EXPORT const char * pw_stream_get_name(struct pw_stream *stream)
Definition: stream.c:444
pw_stream::pw_stream_destroy
void pw_stream_destroy(struct pw_stream *stream)
Destroy a stream.
Definition: stream.c:536
pw_stream_set_control
int pw_stream_set_control(struct pw_stream *stream, const char *name, float value)
Set a control value.
Definition: stream.c:1390
pw_stream_get_control
int pw_stream_get_control(struct pw_stream *stream, const char *name, float *value)
Get a control value.
Definition: stream.c:1396
pw_properties::pw_properties_new
SPA_EXPORT struct pw_properties * pw_properties_new(const char *key,...)
Make a new properties object.
Definition: properties.c:89
PW_STREAM_PROP_IS_LIVE
#define PW_STREAM_PROP_IS_LIVE
Indicates that the stream is live, boolean default false.
Definition: stream.h:249
pw_stream::pw_stream_new
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:374
PW_STREAM_FLAG_NONE
@ PW_STREAM_FLAG_NONE
no flags
Definition: stream.h:207
pw_log::pw_log_error
void pw_log_error(const char *format,...)
Log an error message.
pw_stream_state
pw_stream_state
The state of a stream.
Definition: stream.h:155
pw_type::data
struct spa_type_data data
Definition: type.h:73
pw_stream
PipeWire stream object class.
pipewire.h
pw_stream::pw_stream_get_node_id
uint32_t pw_stream_get_node_id(struct pw_stream *stream)
Get the node ID of the stream.
Definition: stream.c:1307
pw_stream_get_state
SPA_EXPORT enum pw_stream_state pw_stream_get_state(struct pw_stream *stream, const char **error)
Definition: stream.c:436
PW_STREAM_FLAG_NO_CONVERT
@ PW_STREAM_FLAG_NO_CONVERT
don't convert format
Definition: stream.h:215
PW_STREAM_STATE_CONNECTING
@ PW_STREAM_STATE_CONNECTING
connection is in progress
Definition: stream.h:158
pw_loop_invoke
#define pw_loop_invoke(l,...)
Definition: loop.h:52
pw_stream_add_listener
void pw_stream_add_listener(struct pw_stream *stream, struct spa_hook *listener, const struct pw_stream_events *events, void *data)
Definition: stream.c:456
pw_stream_new_simple
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
pw_time::rate
struct spa_fraction rate
the rate of ticks
Definition: stream.h:316
pw_log::pw_log_warn
void pw_log_warn(const char *format,...)
Log a warning message.
pw_log::pw_log_debug
void pw_log_debug(const char *format,...)
Log a debug message.
pw_stream::pw_stream_get_time
int pw_stream_get_time(struct pw_stream *stream, struct pw_time *time)
Query the time on the stream.
Definition: stream.c:1370
PW_STREAM_STATE_UNCONNECTED
@ PW_STREAM_STATE_UNCONNECTED
unconnected
Definition: stream.h:157
pw_properties
A collection of key/value pairs.
Definition: properties.h:38
pw_properties::pw_properties_free
SPA_EXPORT void pw_properties_free(struct pw_properties *properties)
Free a properties object.
Definition: properties.c:245
pw_time::queued
uint64_t queued
data queued in the stream, this is the sum of the size fields in the pw_buffer that are currently que...
Definition: stream.h:322
pw_array::pw_array_init
static void pw_array_init(struct pw_array *arr, size_t extend)
Initialize the array with given extend.
Definition: array.h:62
pw_type::spa_format
uint32_t spa_format
Definition: type.h:67
pw_stream_events
Events for a stream.
Definition: stream.h:177