PulseAudio  4.0-186-ga89ca
def.h
Go to the documentation of this file.
1 #ifndef foodefhfoo
2 #define foodefhfoo
3 
4 /***
5  This file is part of PulseAudio.
6 
7  Copyright 2004-2006 Lennart Poettering
8  Copyright 2006 Pierre Ossman <ossman@cendio.se> for Cendio AB
9 
10  PulseAudio is free software; you can redistribute it and/or modify
11  it under the terms of the GNU Lesser General Public License as
12  published by the Free Software Foundation; either version 2.1 of the
13  License, or (at your option) any later version.
14 
15  PulseAudio is distributed in the hope that it will be useful, but
16  WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  Lesser General Public License for more details.
19 
20  You should have received a copy of the GNU Lesser General Public
21  License along with PulseAudio; if not, write to the Free Software
22  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
23  USA.
24 ***/
25 
26 #include <inttypes.h>
27 #include <sys/time.h>
28 
29 #include <pulse/cdecl.h>
30 #include <pulse/sample.h>
31 #include <pulse/version.h>
32 
36 PA_C_DECL_BEGIN
37 
39 typedef enum pa_context_state {
48 
50 static inline int PA_CONTEXT_IS_GOOD(pa_context_state_t x) {
51  return
52  x == PA_CONTEXT_CONNECTING ||
55  x == PA_CONTEXT_READY;
56 }
57 
59 #define PA_CONTEXT_UNCONNECTED PA_CONTEXT_UNCONNECTED
60 #define PA_CONTEXT_CONNECTING PA_CONTEXT_CONNECTING
61 #define PA_CONTEXT_AUTHORIZING PA_CONTEXT_AUTHORIZING
62 #define PA_CONTEXT_SETTING_NAME PA_CONTEXT_SETTING_NAME
63 #define PA_CONTEXT_READY PA_CONTEXT_READY
64 #define PA_CONTEXT_FAILED PA_CONTEXT_FAILED
65 #define PA_CONTEXT_TERMINATED PA_CONTEXT_TERMINATED
66 #define PA_CONTEXT_IS_GOOD PA_CONTEXT_IS_GOOD
67 
70 typedef enum pa_stream_state {
77 
79 static inline int PA_STREAM_IS_GOOD(pa_stream_state_t x) {
80  return
81  x == PA_STREAM_CREATING ||
82  x == PA_STREAM_READY;
83 }
84 
86 #define PA_STREAM_UNCONNECTED PA_STREAM_UNCONNECTED
87 #define PA_STREAM_CREATING PA_STREAM_CREATING
88 #define PA_STREAM_READY PA_STREAM_READY
89 #define PA_STREAM_FAILED PA_STREAM_FAILED
90 #define PA_STREAM_TERMINATED PA_STREAM_TERMINATED
91 #define PA_STREAM_IS_GOOD PA_STREAM_IS_GOOD
92 
95 typedef enum pa_operation_state {
105 
107 #define PA_OPERATION_RUNNING PA_OPERATION_RUNNING
108 #define PA_OPERATION_DONE PA_OPERATION_DONE
109 #define PA_OPERATION_CANCELED PA_OPERATION_CANCELLED
110 #define PA_OPERATION_CANCELLED PA_OPERATION_CANCELLED
111 
114 #define PA_INVALID_INDEX ((uint32_t) -1)
115 
117 typedef enum pa_context_flags {
125 
127 /* Allow clients to check with #ifdef for those flags */
128 #define PA_CONTEXT_NOAUTOSPAWN PA_CONTEXT_NOAUTOSPAWN
129 #define PA_CONTEXT_NOFAIL PA_CONTEXT_NOFAIL
130 
136 typedef enum pa_direction {
140 
142 #define PA_DIRECTION_OUTPUT PA_DIRECTION_OUTPUT
143 #define PA_DIRECTION_INPUT PA_DIRECTION_INPUT
144 
147 typedef enum pa_device_type {
151 
153 #define PA_DEVICE_TYPE_SINK PA_DEVICE_TYPE_SINK
154 #define PA_DEVICE_TYPE_SOURCE PA_DEVICE_TYPE_SOURCE
155 
158 typedef enum pa_stream_direction {
164 
166 #define PA_STREAM_NODIRECTION PA_STREAM_NODIRECTION
167 #define PA_STREAM_PLAYBACK PA_STREAM_PLAYBACK
168 #define PA_STREAM_RECORD PA_STREAM_RECORD
169 #define PA_STREAM_UPLOAD PA_STREAM_UPLOAD
170 
173 typedef enum pa_stream_flags {
174 
175  PA_STREAM_NOFLAGS = 0x0000U,
328 
331 /* English is an evil language */
332 #define PA_STREAM_NOT_MONOTONOUS PA_STREAM_NOT_MONOTONIC
333 
334 /* Allow clients to check with #ifdef for those flags */
335 #define PA_STREAM_START_CORKED PA_STREAM_START_CORKED
336 #define PA_STREAM_INTERPOLATE_TIMING PA_STREAM_INTERPOLATE_TIMING
337 #define PA_STREAM_NOT_MONOTONIC PA_STREAM_NOT_MONOTONIC
338 #define PA_STREAM_AUTO_TIMING_UPDATE PA_STREAM_AUTO_TIMING_UPDATE
339 #define PA_STREAM_NO_REMAP_CHANNELS PA_STREAM_NO_REMAP_CHANNELS
340 #define PA_STREAM_NO_REMIX_CHANNELS PA_STREAM_NO_REMIX_CHANNELS
341 #define PA_STREAM_FIX_FORMAT PA_STREAM_FIX_FORMAT
342 #define PA_STREAM_FIX_RATE PA_STREAM_FIX_RATE
343 #define PA_STREAM_FIX_CHANNELS PA_STREAM_FIX_CHANNELS
344 #define PA_STREAM_DONT_MOVE PA_STREAM_DONT_MOVE
345 #define PA_STREAM_VARIABLE_RATE PA_STREAM_VARIABLE_RATE
346 #define PA_STREAM_PEAK_DETECT PA_STREAM_PEAK_DETECT
347 #define PA_STREAM_START_MUTED PA_STREAM_START_MUTED
348 #define PA_STREAM_ADJUST_LATENCY PA_STREAM_ADJUST_LATENCY
349 #define PA_STREAM_EARLY_REQUESTS PA_STREAM_EARLY_REQUESTS
350 #define PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND
351 #define PA_STREAM_START_UNMUTED PA_STREAM_START_UNMUTED
352 #define PA_STREAM_FAIL_ON_SUSPEND PA_STREAM_FAIL_ON_SUSPEND
353 #define PA_STREAM_RELATIVE_VOLUME PA_STREAM_RELATIVE_VOLUME
354 #define PA_STREAM_PASSTHROUGH PA_STREAM_PASSTHROUGH
355 
359 typedef struct pa_buffer_attr {
360  uint32_t maxlength;
371  uint32_t tlength;
389  uint32_t prebuf;
400  uint32_t minreq;
410  uint32_t fragsize;
425 
427 typedef enum pa_error_code {
428  PA_OK = 0,
457 
459 #define PA_OK PA_OK
460 #define PA_ERR_ACCESS PA_ERR_ACCESS
461 #define PA_ERR_COMMAND PA_ERR_COMMAND
462 #define PA_ERR_INVALID PA_ERR_INVALID
463 #define PA_ERR_EXIST PA_ERR_EXIST
464 #define PA_ERR_NOENTITY PA_ERR_NOENTITY
465 #define PA_ERR_CONNECTIONREFUSED PA_ERR_CONNECTIONREFUSED
466 #define PA_ERR_PROTOCOL PA_ERR_PROTOCOL
467 #define PA_ERR_TIMEOUT PA_ERR_TIMEOUT
468 #define PA_ERR_AUTHKEY PA_ERR_AUTHKEY
469 #define PA_ERR_INTERNAL PA_ERR_INTERNAL
470 #define PA_ERR_CONNECTIONTERMINATED PA_ERR_CONNECTIONTERMINATED
471 #define PA_ERR_KILLED PA_ERR_KILLED
472 #define PA_ERR_INVALIDSERVER PA_ERR_INVALIDSERVER
473 #define PA_ERR_MODINITFAILED PA_ERR_MODINITFAILED
474 #define PA_ERR_BADSTATE PA_ERR_BADSTATE
475 #define PA_ERR_NODATA PA_ERR_NODATA
476 #define PA_ERR_VERSION PA_ERR_VERSION
477 #define PA_ERR_TOOLARGE PA_ERR_TOOLARGE
478 #define PA_ERR_NOTSUPPORTED PA_ERR_NOTSUPPORTED
479 #define PA_ERR_UNKNOWN PA_ERR_UNKNOWN
480 #define PA_ERR_NOEXTENSION PA_ERR_NOEXTENSION
481 #define PA_ERR_OBSOLETE PA_ERR_OBSOLETE
482 #define PA_ERR_NOTIMPLEMENTED PA_ERR_NOTIMPLEMENTED
483 #define PA_ERR_FORKED PA_ERR_FORKED
484 #define PA_ERR_MAX PA_ERR_MAX
485 
488 typedef enum pa_subscription_mask {
517  PA_SUBSCRIPTION_MASK_AUTOLOAD = 0x0100U,
527 
555  PA_SUBSCRIPTION_EVENT_AUTOLOAD = 0x0008U,
578 
580 #define pa_subscription_match_flags(m, t) (!!((m) & (1 << ((t) & PA_SUBSCRIPTION_EVENT_FACILITY_MASK))))
581 
583 #define PA_SUBSCRIPTION_MASK_NULL PA_SUBSCRIPTION_MASK_NULL
584 #define PA_SUBSCRIPTION_MASK_SINK PA_SUBSCRIPTION_MASK_SINK
585 #define PA_SUBSCRIPTION_MASK_SOURCE PA_SUBSCRIPTION_MASK_SOURCE
586 #define PA_SUBSCRIPTION_MASK_SINK_INPUT PA_SUBSCRIPTION_MASK_SINK_INPUT
587 #define PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT
588 #define PA_SUBSCRIPTION_MASK_MODULE PA_SUBSCRIPTION_MASK_MODULE
589 #define PA_SUBSCRIPTION_MASK_CLIENT PA_SUBSCRIPTION_MASK_CLIENT
590 #define PA_SUBSCRIPTION_MASK_SAMPLE_CACHE PA_SUBSCRIPTION_MASK_SAMPLE_CACHE
591 #define PA_SUBSCRIPTION_MASK_SERVER PA_SUBSCRIPTION_MASK_SERVER
592 #define PA_SUBSCRIPTION_MASK_AUTOLOAD PA_SUBSCRIPTION_MASK_AUTOLOAD
593 #define PA_SUBSCRIPTION_MASK_CARD PA_SUBSCRIPTION_MASK_CARD
594 #define PA_SUBSCRIPTION_MASK_ALL PA_SUBSCRIPTION_MASK_ALL
595 #define PA_SUBSCRIPTION_EVENT_SINK PA_SUBSCRIPTION_EVENT_SINK
596 #define PA_SUBSCRIPTION_EVENT_SOURCE PA_SUBSCRIPTION_EVENT_SOURCE
597 #define PA_SUBSCRIPTION_EVENT_SINK_INPUT PA_SUBSCRIPTION_EVENT_SINK_INPUT
598 #define PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT
599 #define PA_SUBSCRIPTION_EVENT_MODULE PA_SUBSCRIPTION_EVENT_MODULE
600 #define PA_SUBSCRIPTION_EVENT_CLIENT PA_SUBSCRIPTION_EVENT_CLIENT
601 #define PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE
602 #define PA_SUBSCRIPTION_EVENT_SERVER PA_SUBSCRIPTION_EVENT_SERVER
603 #define PA_SUBSCRIPTION_EVENT_AUTOLOAD PA_SUBSCRIPTION_EVENT_AUTOLOAD
604 #define PA_SUBSCRIPTION_EVENT_CARD PA_SUBSCRIPTION_EVENT_CARD
605 #define PA_SUBSCRIPTION_EVENT_FACILITY_MASK PA_SUBSCRIPTION_EVENT_FACILITY_MASK
606 #define PA_SUBSCRIPTION_EVENT_NEW PA_SUBSCRIPTION_EVENT_NEW
607 #define PA_SUBSCRIPTION_EVENT_CHANGE PA_SUBSCRIPTION_EVENT_CHANGE
608 #define PA_SUBSCRIPTION_EVENT_REMOVE PA_SUBSCRIPTION_EVENT_REMOVE
609 #define PA_SUBSCRIPTION_EVENT_TYPE_MASK PA_SUBSCRIPTION_EVENT_TYPE_MASK
610 
630 typedef struct pa_timing_info {
631  struct timeval timestamp;
654  int playing;
668  int64_t write_index;
679  int64_t read_index;
691  int64_t since_underrun;
698 
706 typedef struct pa_spawn_api {
707  void (*prefork)(void);
711  void (*postfork)(void);
715  void (*atfork)(void);
721 } pa_spawn_api;
722 
724 typedef enum pa_seek_mode {
737 
739 #define PA_SEEK_RELATIVE PA_SEEK_RELATIVE
740 #define PA_SEEK_ABSOLUTE PA_SEEK_ABSOLUTE
741 #define PA_SEEK_RELATIVE_ON_READ PA_SEEK_RELATIVE_ON_READ
742 #define PA_SEEK_RELATIVE_END PA_SEEK_RELATIVE_END
743 
746 typedef enum pa_sink_flags {
747  PA_SINK_NOFLAGS = 0x0000U,
754  PA_SINK_LATENCY = 0x0002U,
757  PA_SINK_HARDWARE = 0x0004U,
761  PA_SINK_NETWORK = 0x0008U,
786 #ifdef __INCLUDED_FROM_PULSE_AUDIO
787 
788  /* PRIVATE: Server-side values -- do not try to use these at client-side.
789  * The server will filter out these flags anyway, so you should never see
790  * these flags in sinks. */
791 
792  PA_SINK_SHARE_VOLUME_WITH_MASTER = 0x1000000U,
796  PA_SINK_DEFERRED_VOLUME = 0x2000000U,
799 #endif
800 
802 
804 #define PA_SINK_HW_VOLUME_CTRL PA_SINK_HW_VOLUME_CTRL
805 #define PA_SINK_LATENCY PA_SINK_LATENCY
806 #define PA_SINK_HARDWARE PA_SINK_HARDWARE
807 #define PA_SINK_NETWORK PA_SINK_NETWORK
808 #define PA_SINK_HW_MUTE_CTRL PA_SINK_HW_MUTE_CTRL
809 #define PA_SINK_DECIBEL_VOLUME PA_SINK_DECIBEL_VOLUME
810 #define PA_SINK_FLAT_VOLUME PA_SINK_FLAT_VOLUME
811 #define PA_SINK_DYNAMIC_LATENCY PA_SINK_DYNAMIC_LATENCY
812 #define PA_SINK_SET_FORMATS PA_SINK_SET_FORMATS
813 #ifdef __INCLUDED_FROM_PULSE_AUDIO
814 #define PA_SINK_CLIENT_FLAGS_MASK 0xFFFFFF
815 #endif
816 
820 typedef enum pa_sink_state { /* enum serialized in u8 */
834  /* PRIVATE: Server-side values -- DO NOT USE THIS ON THE CLIENT
835  * SIDE! These values are *not* considered part of the official PA
836  * API/ABI. If you use them your application might break when PA
837  * is upgraded. Also, please note that these values are not useful
838  * on the client side anyway. */
839 
840  PA_SINK_INIT = -2,
843  PA_SINK_UNLINKED = -3
848 
850 static inline int PA_SINK_IS_OPENED(pa_sink_state_t x) {
851  return x == PA_SINK_RUNNING || x == PA_SINK_IDLE;
852 }
853 
855 static inline int PA_SINK_IS_RUNNING(pa_sink_state_t x) {
856  return x == PA_SINK_RUNNING;
857 }
858 
860 #define PA_SINK_INVALID_STATE PA_SINK_INVALID_STATE
861 #define PA_SINK_RUNNING PA_SINK_RUNNING
862 #define PA_SINK_IDLE PA_SINK_IDLE
863 #define PA_SINK_SUSPENDED PA_SINK_SUSPENDED
864 #define PA_SINK_INIT PA_SINK_INIT
865 #define PA_SINK_UNLINKED PA_SINK_UNLINKED
866 #define PA_SINK_IS_OPENED PA_SINK_IS_OPENED
867 
870 typedef enum pa_source_flags {
871  PA_SOURCE_NOFLAGS = 0x0000U,
878  PA_SOURCE_LATENCY = 0x0002U,
885  PA_SOURCE_NETWORK = 0x0008U,
905 #ifdef __INCLUDED_FROM_PULSE_AUDIO
906 
907  /* PRIVATE: Server-side values -- do not try to use these at client-side.
908  * The server will filter out these flags anyway, so you should never see
909  * these flags in sources. */
910 
911  PA_SOURCE_SHARE_VOLUME_WITH_MASTER = 0x1000000U,
915  PA_SOURCE_DEFERRED_VOLUME = 0x2000000U,
917 #endif
919 
921 #define PA_SOURCE_HW_VOLUME_CTRL PA_SOURCE_HW_VOLUME_CTRL
922 #define PA_SOURCE_LATENCY PA_SOURCE_LATENCY
923 #define PA_SOURCE_HARDWARE PA_SOURCE_HARDWARE
924 #define PA_SOURCE_NETWORK PA_SOURCE_NETWORK
925 #define PA_SOURCE_HW_MUTE_CTRL PA_SOURCE_HW_MUTE_CTRL
926 #define PA_SOURCE_DECIBEL_VOLUME PA_SOURCE_DECIBEL_VOLUME
927 #define PA_SOURCE_DYNAMIC_LATENCY PA_SOURCE_DYNAMIC_LATENCY
928 #define PA_SOURCE_FLAT_VOLUME PA_SOURCE_FLAT_VOLUME
929 #ifdef __INCLUDED_FROM_PULSE_AUDIO
930 #define PA_SOURCE_CLIENT_FLAGS_MASK 0xFFFFFF
931 #endif
932 
936 typedef enum pa_source_state {
950  /* PRIVATE: Server-side values -- DO NOT USE THIS ON THE CLIENT
951  * SIDE! These values are *not* considered part of the official PA
952  * API/ABI. If you use them your application might break when PA
953  * is upgraded. Also, please note that these values are not useful
954  * on the client side anyway. */
955 
956  PA_SOURCE_INIT = -2,
959  PA_SOURCE_UNLINKED = -3
964 
966 static inline int PA_SOURCE_IS_OPENED(pa_source_state_t x) {
967  return x == PA_SOURCE_RUNNING || x == PA_SOURCE_IDLE;
968 }
969 
971 static inline int PA_SOURCE_IS_RUNNING(pa_source_state_t x) {
972  return x == PA_SOURCE_RUNNING;
973 }
974 
976 #define PA_SOURCE_INVALID_STATE PA_SOURCE_INVALID_STATE
977 #define PA_SOURCE_RUNNING PA_SOURCE_RUNNING
978 #define PA_SOURCE_IDLE PA_SOURCE_IDLE
979 #define PA_SOURCE_SUSPENDED PA_SOURCE_SUSPENDED
980 #define PA_SOURCE_INIT PA_SOURCE_INIT
981 #define PA_SOURCE_UNLINKED PA_SOURCE_UNLINKED
982 #define PA_SOURCE_IS_OPENED PA_SOURCE_IS_OPENED
983 
986 typedef void (*pa_free_cb_t)(void *p);
987 
991 #define PA_STREAM_EVENT_REQUEST_CORK "request-cork"
992 
996 #define PA_STREAM_EVENT_REQUEST_UNCORK "request-uncork"
997 
1003 #define PA_STREAM_EVENT_FORMAT_LOST "format-lost"
1004 
1005 #ifndef __INCLUDED_FROM_PULSE_AUDIO
1006 
1008 typedef enum pa_port_available {
1013 
1015 #define PA_PORT_AVAILABLE_UNKNOWN PA_PORT_AVAILABLE_UNKNOWN
1016 #define PA_PORT_AVAILABLE_NO PA_PORT_AVAILABLE_NO
1017 #define PA_PORT_AVAILABLE_YES PA_PORT_AVAILABLE_YES
1018 
1020 #endif
1021 
1022 PA_C_DECL_END
1023 
1024 #endif