1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
/**
* An opaque structure containing information about a thread that was promoted
* to real-time priority.
*/
;
;
extern size_t ATP_THREAD_INFO_SIZE;
extern "C" __linux__
/**
* Promotes a thread, possibly in another process, to real-time priority.
*
* thread_info: info on the thread to promote, gathered with
* `atp_get_current_thread_info()`, called on the thread itself.
* audio_buffer_frames: number of frames per audio buffer. If unknown, passing 0
* will choose an appropriate number, conservatively. If variable, either pass 0
* or an upper bound.
* audio_samplerate_hz: sample-rate for this audio stream, in Hz
*
* Returns an opaque handle in case of success, NULL otherwise.
*
* This is useful on Linux only, to promote a thread from another process or
* thread when the thread to promote cannot do so itself (for example because it
* is sandboxed).
*/
atp_handle *;
/**
* Demotes a thread, promoted to real-time priority via
* `atp_promote_thread_to_real_time`, back to its previous priority.
*
* Returns 0 in case of success, non-zero otherwise.
*
* This is useful on Linux only, to promote a thread from another process or
* thread when the thread to promote cannot do so itself (for example because it
* is sandboxed).
*/
int32_t ;
/**
* Gather information from the calling thread, to be able to promote it from
* another thread and/or process.
*
* Returns a non-null pointer to an `atp_thread_info` structure in case of
* success, to be freed later with `atp_free_thread_info`, and NULL otherwise.
*
* This is useful on Linux only, to promote a thread from another process or
* thread when the thread to promote cannot do so itself (for example because it
* is sandboxed).
*/
atp_thread_info *;
/**
* Free an `atp_thread_info` structure.
*
* Returns 0 in case of success, non-zero in case of error (because thread_info
* was NULL).
*/
int32_t ;
/**
* Serialize an `atp_thread_info` to a byte buffer that is
* sizeof(atp_thread_info) long.
*/
void ;
/**
* Deserialize a byte buffer of sizeof(atp_thread_info) to an `atp_thread_info`
* pointer. It can be then freed using atp_free_thread_info.
* */
atp_thread_info* ;
/**
* Set the real-time computation limit (RLIMIT_RTTIME) for the calling process.
*
* This is needed by the rtkit/D-Bus backend before a thread can be promoted
* from another process, and must be called from within that process (it can be
* done before a sandbox lockdown). Without the `dbus` feature no such limit is
* required and this is a no-op.
*
* This only sets the limit. For actually promoting the thread to a real-time
* scheduling class, see `atp_promote_thread_to_real_time`.
*/
int32_t ;
// __linux__
} // extern "C"
// __cplusplus
// AUDIO_THREAD_PRIORITY_H