PulseAudio  1.1
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 {
100 
102 #define PA_OPERATION_RUNNING PA_OPERATION_RUNNING
103 #define PA_OPERATION_DONE PA_OPERATION_DONE
104 #define PA_OPERATION_CANCELED PA_OPERATION_CANCELLED
105 #define PA_OPERATION_CANCELLED PA_OPERATION_CANCELLED
106 
109 #define PA_INVALID_INDEX ((uint32_t) -1)
110 
112 typedef enum pa_context_flags {
120 
122 /* Allow clients to check with #ifdef for those flags */
123 #define PA_CONTEXT_NOAUTOSPAWN PA_CONTEXT_NOAUTOSPAWN
124 #define PA_CONTEXT_NOFAIL PA_CONTEXT_NOFAIL
125 
128 typedef enum pa_device_type {
132 
134 #define PA_DEVICE_TYPE_SINK PA_DEVICE_TYPE_SINK
135 #define PA_DEVICE_TYPE_SOURCE PA_DEVICE_TYPE_SOURCE
136 
139 typedef enum pa_stream_direction {
145 
147 #define PA_STREAM_NODIRECTION PA_STREAM_NODIRECTION
148 #define PA_STREAM_PLAYBACK PA_STREAM_PLAYBACK
149 #define PA_STREAM_RECORD PA_STREAM_RECORD
150 #define PA_STREAM_UPLOAD PA_STREAM_UPLOAD
151 
154 typedef enum pa_stream_flags {
155 
156  PA_STREAM_NOFLAGS = 0x0000U,
309 
312 /* English is an evil language */
313 #define PA_STREAM_NOT_MONOTONOUS PA_STREAM_NOT_MONOTONIC
314 
315 /* Allow clients to check with #ifdef for those flags */
316 #define PA_STREAM_START_CORKED PA_STREAM_START_CORKED
317 #define PA_STREAM_INTERPOLATE_TIMING PA_STREAM_INTERPOLATE_TIMING
318 #define PA_STREAM_NOT_MONOTONIC PA_STREAM_NOT_MONOTONIC
319 #define PA_STREAM_AUTO_TIMING_UPDATE PA_STREAM_AUTO_TIMING_UPDATE
320 #define PA_STREAM_NO_REMAP_CHANNELS PA_STREAM_NO_REMAP_CHANNELS
321 #define PA_STREAM_NO_REMIX_CHANNELS PA_STREAM_NO_REMIX_CHANNELS
322 #define PA_STREAM_FIX_FORMAT PA_STREAM_FIX_FORMAT
323 #define PA_STREAM_FIX_RATE PA_STREAM_FIX_RATE
324 #define PA_STREAM_FIX_CHANNELS PA_STREAM_FIX_CHANNELS
325 #define PA_STREAM_DONT_MOVE PA_STREAM_DONT_MOVE
326 #define PA_STREAM_VARIABLE_RATE PA_STREAM_VARIABLE_RATE
327 #define PA_STREAM_PEAK_DETECT PA_STREAM_PEAK_DETECT
328 #define PA_STREAM_START_MUTED PA_STREAM_START_MUTED
329 #define PA_STREAM_ADJUST_LATENCY PA_STREAM_ADJUST_LATENCY
330 #define PA_STREAM_EARLY_REQUESTS PA_STREAM_EARLY_REQUESTS
331 #define PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND PA_STREAM_DONT_INHIBIT_AUTO_SUSPEND
332 #define PA_STREAM_START_UNMUTED PA_STREAM_START_UNMUTED
333 #define PA_STREAM_FAIL_ON_SUSPEND PA_STREAM_FAIL_ON_SUSPEND
334 #define PA_STREAM_RELATIVE_VOLUME PA_STREAM_RELATIVE_VOLUME
335 #define PA_STREAM_PASSTHROUGH PA_STREAM_PASSTHROUGH
336 
340 typedef struct pa_buffer_attr {
341  uint32_t maxlength;
346  uint32_t tlength;
364  uint32_t prebuf;
375  uint32_t minreq;
385  uint32_t fragsize;
400 
402 enum {
403  PA_OK = 0,
431 };
432 
434 #define PA_OK PA_OK
435 #define PA_ERR_ACCESS PA_ERR_ACCESS
436 #define PA_ERR_COMMAND PA_ERR_COMMAND
437 #define PA_ERR_INVALID PA_ERR_INVALID
438 #define PA_ERR_EXIST PA_ERR_EXIST
439 #define PA_ERR_NOENTITY PA_ERR_NOENTITY
440 #define PA_ERR_CONNECTIONREFUSED PA_ERR_CONNECTIONREFUSED
441 #define PA_ERR_PROTOCOL PA_ERR_PROTOCOL
442 #define PA_ERR_TIMEOUT PA_ERR_TIMEOUT
443 #define PA_ERR_AUTHKEY PA_ERR_AUTHKEY
444 #define PA_ERR_INTERNAL PA_ERR_INTERNAL
445 #define PA_ERR_CONNECTIONTERMINATED PA_ERR_CONNECTIONTERMINATED
446 #define PA_ERR_KILLED PA_ERR_KILLED
447 #define PA_ERR_INVALIDSERVER PA_ERR_INVALIDSERVER
448 #define PA_ERR_MODINITFAILED PA_ERR_MODINITFAILED
449 #define PA_ERR_BADSTATE PA_ERR_BADSTATE
450 #define PA_ERR_NODATA PA_ERR_NODATA
451 #define PA_ERR_VERSION PA_ERR_VERSION
452 #define PA_ERR_TOOLARGE PA_ERR_TOOLARGE
453 #define PA_ERR_NOTSUPPORTED PA_ERR_NOTSUPPORTED
454 #define PA_ERR_UNKNOWN PA_ERR_UNKNOWN
455 #define PA_ERR_NOEXTENSION PA_ERR_NOEXTENSION
456 #define PA_ERR_OBSOLETE PA_ERR_OBSOLETE
457 #define PA_ERR_NOTIMPLEMENTED PA_ERR_NOTIMPLEMENTED
458 #define PA_ERR_FORKED PA_ERR_FORKED
459 #define PA_ERR_MAX PA_ERR_MAX
460 
463 typedef enum pa_subscription_mask {
492  PA_SUBSCRIPTION_MASK_AUTOLOAD = 0x0100U,
502 
530  PA_SUBSCRIPTION_EVENT_AUTOLOAD = 0x0008U,
553 
555 #define pa_subscription_match_flags(m, t) (!!((m) & (1 << ((t) & PA_SUBSCRIPTION_EVENT_FACILITY_MASK))))
556 
558 #define PA_SUBSCRIPTION_MASK_NULL PA_SUBSCRIPTION_MASK_NULL
559 #define PA_SUBSCRIPTION_MASK_SINK PA_SUBSCRIPTION_MASK_SINK
560 #define PA_SUBSCRIPTION_MASK_SOURCE PA_SUBSCRIPTION_MASK_SOURCE
561 #define PA_SUBSCRIPTION_MASK_SINK_INPUT PA_SUBSCRIPTION_MASK_SINK_INPUT
562 #define PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT PA_SUBSCRIPTION_MASK_SOURCE_OUTPUT
563 #define PA_SUBSCRIPTION_MASK_MODULE PA_SUBSCRIPTION_MASK_MODULE
564 #define PA_SUBSCRIPTION_MASK_CLIENT PA_SUBSCRIPTION_MASK_CLIENT
565 #define PA_SUBSCRIPTION_MASK_SAMPLE_CACHE PA_SUBSCRIPTION_MASK_SAMPLE_CACHE
566 #define PA_SUBSCRIPTION_MASK_SERVER PA_SUBSCRIPTION_MASK_SERVER
567 #define PA_SUBSCRIPTION_MASK_AUTOLOAD PA_SUBSCRIPTION_MASK_AUTOLOAD
568 #define PA_SUBSCRIPTION_MASK_CARD PA_SUBSCRIPTION_MASK_CARD
569 #define PA_SUBSCRIPTION_MASK_ALL PA_SUBSCRIPTION_MASK_ALL
570 #define PA_SUBSCRIPTION_EVENT_SINK PA_SUBSCRIPTION_EVENT_SINK
571 #define PA_SUBSCRIPTION_EVENT_SOURCE PA_SUBSCRIPTION_EVENT_SOURCE
572 #define PA_SUBSCRIPTION_EVENT_SINK_INPUT PA_SUBSCRIPTION_EVENT_SINK_INPUT
573 #define PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT
574 #define PA_SUBSCRIPTION_EVENT_MODULE PA_SUBSCRIPTION_EVENT_MODULE
575 #define PA_SUBSCRIPTION_EVENT_CLIENT PA_SUBSCRIPTION_EVENT_CLIENT
576 #define PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE PA_SUBSCRIPTION_EVENT_SAMPLE_CACHE
577 #define PA_SUBSCRIPTION_EVENT_SERVER PA_SUBSCRIPTION_EVENT_SERVER
578 #define PA_SUBSCRIPTION_EVENT_AUTOLOAD PA_SUBSCRIPTION_EVENT_AUTOLOAD
579 #define PA_SUBSCRIPTION_EVENT_CARD PA_SUBSCRIPTION_EVENT_CARD
580 #define PA_SUBSCRIPTION_EVENT_FACILITY_MASK PA_SUBSCRIPTION_EVENT_FACILITY_MASK
581 #define PA_SUBSCRIPTION_EVENT_NEW PA_SUBSCRIPTION_EVENT_NEW
582 #define PA_SUBSCRIPTION_EVENT_CHANGE PA_SUBSCRIPTION_EVENT_CHANGE
583 #define PA_SUBSCRIPTION_EVENT_REMOVE PA_SUBSCRIPTION_EVENT_REMOVE
584 #define PA_SUBSCRIPTION_EVENT_TYPE_MASK PA_SUBSCRIPTION_EVENT_TYPE_MASK
585 
605 typedef struct pa_timing_info {
606  struct timeval timestamp;
629  int playing;
643  int64_t write_index;
649  int read_index_corrupt;
654  int64_t read_index;
666  int64_t since_underrun;
673 
681 typedef struct pa_spawn_api {
682  void (*prefork)(void);
686  void (*postfork)(void);
690  void (*atfork)(void);
696 } pa_spawn_api;
697 
699 typedef enum pa_seek_mode {
712 
714 #define PA_SEEK_RELATIVE PA_SEEK_RELATIVE
715 #define PA_SEEK_ABSOLUTE PA_SEEK_ABSOLUTE
716 #define PA_SEEK_RELATIVE_ON_READ PA_SEEK_RELATIVE_ON_READ
717 #define PA_SEEK_RELATIVE_END PA_SEEK_RELATIVE_END
718 
721 typedef enum pa_sink_flags {
722  PA_SINK_NOFLAGS = 0x0000U,
729  PA_SINK_LATENCY = 0x0002U,
732  PA_SINK_HARDWARE = 0x0004U,
736  PA_SINK_NETWORK = 0x0008U,
761 #ifdef __INCLUDED_FROM_PULSE_AUDIO
762 
763  /* PRIVATE: Server-side values -- do not try to use these at client-side.
764  * The server will filter out these flags anyway, so you should never see
765  * these flags in sinks. */
766 
767  PA_SINK_SHARE_VOLUME_WITH_MASTER = 0x1000000U,
771  PA_SINK_DEFERRED_VOLUME = 0x2000000U,
774 #endif
775 
777 
779 #define PA_SINK_HW_VOLUME_CTRL PA_SINK_HW_VOLUME_CTRL
780 #define PA_SINK_LATENCY PA_SINK_LATENCY
781 #define PA_SINK_HARDWARE PA_SINK_HARDWARE
782 #define PA_SINK_NETWORK PA_SINK_NETWORK
783 #define PA_SINK_HW_MUTE_CTRL PA_SINK_HW_MUTE_CTRL
784 #define PA_SINK_DECIBEL_VOLUME PA_SINK_DECIBEL_VOLUME
785 #define PA_SINK_FLAT_VOLUME PA_SINK_FLAT_VOLUME
786 #define PA_SINK_DYNAMIC_LATENCY PA_SINK_DYNAMIC_LATENCY
787 #define PA_SINK_SET_FORMATS PA_SINK_SET_FORMATS
788 #ifdef __INCLUDED_FROM_PULSE_AUDIO
789 #define PA_SINK_CLIENT_FLAGS_MASK 0xFFFFFF
790 #endif
791 
795 typedef enum pa_sink_state { /* enum serialized in u8 */
809  /* PRIVATE: Server-side values -- DO NOT USE THIS ON THE CLIENT
810  * SIDE! These values are *not* considered part of the official PA
811  * API/ABI. If you use them your application might break when PA
812  * is upgraded. Also, please note that these values are not useful
813  * on the client side anyway. */
814 
815  PA_SINK_INIT = -2,
818  PA_SINK_UNLINKED = -3
823 
825 static inline int PA_SINK_IS_OPENED(pa_sink_state_t x) {
826  return x == PA_SINK_RUNNING || x == PA_SINK_IDLE;
827 }
828 
830 #define PA_SINK_INVALID_STATE PA_SINK_INVALID_STATE
831 #define PA_SINK_RUNNING PA_SINK_RUNNING
832 #define PA_SINK_IDLE PA_SINK_IDLE
833 #define PA_SINK_SUSPENDED PA_SINK_SUSPENDED
834 #define PA_SINK_INIT PA_SINK_INIT
835 #define PA_SINK_UNLINKED PA_SINK_UNLINKED
836 #define PA_SINK_IS_OPENED PA_SINK_IS_OPENED
837 
840 typedef enum pa_source_flags {
841  PA_SOURCE_NOFLAGS = 0x0000U,
848  PA_SOURCE_LATENCY = 0x0002U,
855  PA_SOURCE_NETWORK = 0x0008U,
875 #ifdef __INCLUDED_FROM_PULSE_AUDIO
876 
877  /* PRIVATE: Server-side values -- do not try to use these at client-side.
878  * The server will filter out these flags anyway, so you should never see
879  * these flags in sources. */
880 
881  PA_SOURCE_SHARE_VOLUME_WITH_MASTER = 0x1000000U,
885  PA_SOURCE_DEFERRED_VOLUME = 0x2000000U,
887 #endif
889 
891 #define PA_SOURCE_HW_VOLUME_CTRL PA_SOURCE_HW_VOLUME_CTRL
892 #define PA_SOURCE_LATENCY PA_SOURCE_LATENCY
893 #define PA_SOURCE_HARDWARE PA_SOURCE_HARDWARE
894 #define PA_SOURCE_NETWORK PA_SOURCE_NETWORK
895 #define PA_SOURCE_HW_MUTE_CTRL PA_SOURCE_HW_MUTE_CTRL
896 #define PA_SOURCE_DECIBEL_VOLUME PA_SOURCE_DECIBEL_VOLUME
897 #define PA_SOURCE_DYNAMIC_LATENCY PA_SOURCE_DYNAMIC_LATENCY
898 #define PA_SOURCE_FLAT_VOLUME PA_SOURCE_FLAT_VOLUME
899 #ifdef __INCLUDED_FROM_PULSE_AUDIO
900 #define PA_SOURCE_CLIENT_FLAGS_MASK 0xFFFFFF
901 #endif
902 
906 typedef enum pa_source_state {
920  /* PRIVATE: Server-side values -- DO NOT USE THIS ON THE CLIENT
921  * SIDE! These values are *not* considered part of the official PA
922  * API/ABI. If you use them your application might break when PA
923  * is upgraded. Also, please note that these values are not useful
924  * on the client side anyway. */
925 
926  PA_SOURCE_INIT = -2,
929  PA_SOURCE_UNLINKED = -3
934 
936 static inline int PA_SOURCE_IS_OPENED(pa_source_state_t x) {
937  return x == PA_SOURCE_RUNNING || x == PA_SOURCE_IDLE;
938 }
939 
941 #define PA_SOURCE_INVALID_STATE PA_SOURCE_INVALID_STATE
942 #define PA_SOURCE_RUNNING PA_SOURCE_RUNNING
943 #define PA_SOURCE_IDLE PA_SOURCE_IDLE
944 #define PA_SOURCE_SUSPENDED PA_SOURCE_SUSPENDED
945 #define PA_SOURCE_INIT PA_SOURCE_INIT
946 #define PA_SOURCE_UNLINKED PA_SOURCE_UNLINKED
947 #define PA_SOURCE_IS_OPENED PA_SOURCE_IS_OPENED
948 
951 typedef void (*pa_free_cb_t)(void *p);
952 
956 #define PA_STREAM_EVENT_REQUEST_CORK "request-cork"
957 
961 #define PA_STREAM_EVENT_REQUEST_UNCORK "request-uncork"
962 
968 #define PA_STREAM_EVENT_FORMAT_LOST "format-lost"
969 
970 PA_C_DECL_END
971 
972 #endif