/src/vlc/include/vlc_aout.h
Line | Count | Source |
1 | | /***************************************************************************** |
2 | | * vlc_aout.h : audio output interface |
3 | | ***************************************************************************** |
4 | | * Copyright (C) 2002-2011 VLC authors and VideoLAN |
5 | | * |
6 | | * Authors: Christophe Massiot <massiot@via.ecp.fr> |
7 | | * |
8 | | * This program is free software; you can redistribute it and/or modify it |
9 | | * under the terms of the GNU Lesser General Public License as published by |
10 | | * the Free Software Foundation; either version 2.1 of the License, or |
11 | | * (at your option) any later version. |
12 | | * |
13 | | * This program is distributed in the hope that it will be useful, |
14 | | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | | * GNU Lesser General Public License for more details. |
17 | | * |
18 | | * You should have received a copy of the GNU Lesser General Public License |
19 | | * along with this program; if not, write to the Free Software Foundation, |
20 | | * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. |
21 | | *****************************************************************************/ |
22 | | |
23 | | #ifndef VLC_AOUT_H |
24 | | #define VLC_AOUT_H 1 |
25 | | |
26 | | #include <assert.h> |
27 | | #include <vlc_list.h> |
28 | | #include <vlc_es.h> |
29 | | #include <vlc_threads.h> |
30 | | |
31 | | /* FIXME to remove once aout.h is cleaned a bit more */ |
32 | | #include <vlc_block.h> |
33 | | |
34 | | /** |
35 | | * \defgroup audio_output Audio output |
36 | | * \ingroup output |
37 | | * @{ |
38 | | * \file |
39 | | * Audio output modules interface |
40 | | */ |
41 | | |
42 | | /* Buffers which arrive in advance of more than AOUT_MAX_ADVANCE_TIME |
43 | | * will be considered as bogus and be trashed */ |
44 | | #define AOUT_MAX_ADVANCE_TIME (AOUT_MAX_PREPARE_TIME + VLC_TICK_FROM_SEC(1)) |
45 | | |
46 | | /* Buffers which arrive in advance of more than AOUT_MAX_PREPARE_TIME |
47 | | * will cause the calling thread to sleep */ |
48 | | #define AOUT_MAX_PREPARE_TIME VLC_TICK_FROM_SEC(2) |
49 | | |
50 | | /* Buffers which arrive after pts - AOUT_MIN_PREPARE_TIME will be trashed |
51 | | * to avoid too heavy resampling */ |
52 | | #define AOUT_MIN_PREPARE_TIME AOUT_MAX_PTS_ADVANCE |
53 | | |
54 | | /* Tolerance values from EBU Recommendation 37 */ |
55 | | /** Maximum advance of actual audio playback time to coded PTS, |
56 | | * above which downsampling will be performed */ |
57 | 0 | #define AOUT_MAX_PTS_ADVANCE VLC_TICK_FROM_MS(40) |
58 | | |
59 | | /** Maximum delay of actual audio playback time from coded PTS, |
60 | | * above which upsampling will be performed */ |
61 | 0 | #define AOUT_MAX_PTS_DELAY VLC_TICK_FROM_MS(60) |
62 | | |
63 | | /* Max acceptable resampling (in %) */ |
64 | | #define AOUT_MAX_RESAMPLING 10 |
65 | | |
66 | 0 | #define AOUT_FMTS_IDENTICAL( p_first, p_second ) ( \ |
67 | 0 | ((p_first)->i_format == (p_second)->i_format) \ |
68 | 0 | && AOUT_FMTS_SIMILAR(p_first, p_second) ) |
69 | | |
70 | | /* Check if i_rate == i_rate and i_channels == i_channels */ |
71 | 0 | #define AOUT_FMTS_SIMILAR( p_first, p_second ) ( \ |
72 | 0 | ((p_first)->i_rate == (p_second)->i_rate) \ |
73 | 0 | && ((p_first)->channel_type == (p_second)->channel_type) \ |
74 | 0 | && ((p_first)->i_physical_channels == (p_second)->i_physical_channels)\ |
75 | 0 | && ((p_first)->i_chan_mode == (p_second)->i_chan_mode) ) |
76 | | |
77 | | #define AOUT_FMT_LINEAR( p_format ) \ |
78 | 0 | (aout_BitsPerSample((p_format)->i_format) != 0) |
79 | | |
80 | 361k | #define VLC_CODEC_SPDIFL VLC_FOURCC('s','p','d','i') |
81 | 361k | #define VLC_CODEC_SPDIFB VLC_FOURCC('s','p','d','b') |
82 | | |
83 | | #define AOUT_FMT_SPDIF( p_format ) \ |
84 | | ( ((p_format)->i_format == VLC_CODEC_SPDIFL) \ |
85 | | || ((p_format)->i_format == VLC_CODEC_SPDIFB) \ |
86 | | || ((p_format)->i_format == VLC_CODEC_A52) \ |
87 | | || ((p_format)->i_format == VLC_CODEC_DTS) ) |
88 | | |
89 | | #define AOUT_FMT_HDMI( p_format ) \ |
90 | | ( (p_format)->i_format == VLC_CODEC_EAC3 \ |
91 | | ||(p_format)->i_format == VLC_CODEC_DTSHD \ |
92 | | ||(p_format)->i_format == VLC_CODEC_TRUEHD \ |
93 | | ||(p_format)->i_format == VLC_CODEC_MLP \ |
94 | | ) |
95 | | |
96 | | /* Values used for the audio-channels object variable */ |
97 | 0 | #define AOUT_VAR_CHAN_UNSET 0 /* must be zero */ |
98 | 0 | #define AOUT_VAR_CHAN_STEREO 1 |
99 | 0 | #define AOUT_VAR_CHAN_RSTEREO 2 |
100 | 0 | #define AOUT_VAR_CHAN_LEFT 3 |
101 | 0 | #define AOUT_VAR_CHAN_RIGHT 4 |
102 | 0 | #define AOUT_VAR_CHAN_DOLBYS 5 |
103 | | /* deprecated: AOUT_VAR_CHAN_HEADPHONES 6, use AOUT_MIX_MODE_BINAURAL */ |
104 | 0 | #define AOUT_VAR_CHAN_MONO 7 |
105 | | |
106 | 0 | #define AOUT_MIX_MODE_UNSET 0 |
107 | 0 | #define AOUT_MIX_MODE_STEREO 1 |
108 | 0 | #define AOUT_MIX_MODE_BINAURAL 2 |
109 | 0 | #define AOUT_MIX_MODE_4_0 3 |
110 | 0 | #define AOUT_MIX_MODE_5_1 4 |
111 | 0 | #define AOUT_MIX_MODE_7_1 5 |
112 | | |
113 | | /***************************************************************************** |
114 | | * Main audio output structures |
115 | | *****************************************************************************/ |
116 | | |
117 | | /* Size of a frame for S/PDIF output. */ |
118 | | #define AOUT_SPDIF_SIZE 6144 |
119 | | |
120 | | /* Number of samples in an A/52 frame. */ |
121 | | #define A52_FRAME_NB 1536 |
122 | | |
123 | | /** |
124 | | * \defgroup audio_output_module Audio output modules |
125 | | * @{ |
126 | | */ |
127 | | |
128 | | struct vlc_audio_output_events { |
129 | | void (*timing_report)(audio_output_t *, vlc_tick_t system_ts, vlc_tick_t audio_ts); |
130 | | void (*drained_report)(audio_output_t *); |
131 | | void (*volume_report)(audio_output_t *, float); |
132 | | void (*mute_report)(audio_output_t *, bool); |
133 | | void (*policy_report)(audio_output_t *, bool); |
134 | | void (*device_report)(audio_output_t *, const char *); |
135 | | void (*hotplug_report)(audio_output_t *, const char *, const char *); |
136 | | void (*restart_request)(audio_output_t *, bool); |
137 | | int (*gain_request)(audio_output_t *, float); |
138 | | }; |
139 | | |
140 | | /** Audio output object |
141 | | * |
142 | | * The audio output object is the abstraction for rendering decoded |
143 | | * (or pass-through) audio samples. In addition to playing samples, |
144 | | * the abstraction exposes controls for pause/resume, flush/drain, |
145 | | * changing the volume or mut flag, and listing and changing output device. |
146 | | * |
147 | | * An audio output can be in one of three different states: |
148 | | * stopped, playing or paused. |
149 | | * The audio output is always created in stopped state and is always destroyed |
150 | | * in that state also. It is moved from stopped to playing state by start(), |
151 | | * and from playing or paused states back to stopped state by stop(). |
152 | | **/ |
153 | | struct audio_output |
154 | | { |
155 | | struct vlc_object_t obj; |
156 | | |
157 | | void *sys; /**< Private data for callbacks */ |
158 | | |
159 | | int (*start)(audio_output_t *, audio_sample_format_t * restrict fmt); |
160 | | /**< Starts a new stream (mandatory, cannot be NULL). |
161 | | * |
162 | | * This callback changes the audio output from stopped to playing state |
163 | | * (if successful). After the callback returns, play(), |
164 | | * pause(), flush() and eventually stop() callbacks may be called. |
165 | | * |
166 | | * \param fmt input stream sample format upon entry, |
167 | | * output stream sample format upon return [IN/OUT] |
168 | | * \return VLC_SUCCESS on success, non-zero on failure |
169 | | * |
170 | | * \note This callback can only be called while the audio output is in |
171 | | * stopped state. There can be only one stream per audio output at a time. |
172 | | * |
173 | | * \note This callbacks needs not be reentrant. |
174 | | */ |
175 | | |
176 | | void (*stop)(audio_output_t *); |
177 | | /**< Stops the existing stream (mandatory, cannot be NULL). |
178 | | * |
179 | | * This callback terminates the current audio stream, |
180 | | * and returns the audio output to stopped state. |
181 | | * |
182 | | * \note This callback needs not be reentrant. |
183 | | */ |
184 | | |
185 | | void (*play)(audio_output_t *, block_t *block, vlc_tick_t date); |
186 | | /**< Queues a block of samples for playback (mandatory, cannot be NULL). |
187 | | * |
188 | | * The first play() date (after a flush()/start()) will be most likely in |
189 | | * the future. They can play a silence buffer with 'length = date - now()', |
190 | | * or configure their render callback to start at the given date. |
191 | | * |
192 | | * \param block block of audio samples |
193 | | * \param date intended system time to render the first sample |
194 | | * |
195 | | * \note This callback cannot be called in stopped state. |
196 | | */ |
197 | | |
198 | | void (*pause)( audio_output_t *, bool pause, vlc_tick_t date); |
199 | | /**< Pauses or resumes playback (can be NULL). |
200 | | * |
201 | | * This callback pauses or resumes audio playback as quickly as possible. |
202 | | * When pausing, it is desirable to stop producing sound immediately, but |
203 | | * retain already queued audio samples in the buffer to play when later |
204 | | * when resuming. |
205 | | * |
206 | | * If pausing is impossible, the core will flush the module. |
207 | | * |
208 | | * \param pause pause if true, resume from pause if false |
209 | | * \param date timestamp when the pause or resume was requested |
210 | | * |
211 | | * \note This callback cannot be called in stopped state. |
212 | | */ |
213 | | |
214 | | void (*flush)( audio_output_t *); |
215 | | /**< Flushes the playback buffers (mandatory, cannot be NULL). |
216 | | * |
217 | | * \note This callback cannot be called in stopped state. |
218 | | */ |
219 | | |
220 | | void (*drain)(audio_output_t *); |
221 | | /**< Drain the playback buffers asynchronously (can be NULL). |
222 | | * |
223 | | * A drain operation can be cancelled by aout->flush() or aout->stop(). |
224 | | * |
225 | | * It is legal to continue playback after a drain_async, if flush() is |
226 | | * called before the next play(). |
227 | | * |
228 | | * Call aout_DrainedReport() to notify that the stream is drained. |
229 | | * |
230 | | * If NULL, the caller will wait for the delay reported by timing_report |
231 | | * before calling stop(). |
232 | | */ |
233 | | |
234 | | int (*volume_set)(audio_output_t *, float volume); |
235 | | /**< Changes playback volume (optional, may be NULL). |
236 | | * |
237 | | * \param volume requested volume (0. = mute, 1. = nominal) |
238 | | * |
239 | | * \note The volume is always a positive number. |
240 | | * |
241 | | * \warning A stream may or may not have been started when called. |
242 | | * \warning This callback may be called concurrently with |
243 | | * play(), pause() or flush(). |
244 | | * It will however be protected against concurrent calls to |
245 | | * start(), stop(), volume_set(), mute_set() or device_select(). |
246 | | */ |
247 | | |
248 | | int (*mute_set)(audio_output_t *, bool mute); |
249 | | /**< Changes muting (optional, may be NULL). |
250 | | * |
251 | | * \param mute true to mute, false to unmute |
252 | | * \warning The same constraints apply as with volume_set(). |
253 | | */ |
254 | | |
255 | | int (*device_select)(audio_output_t *, const char *id); |
256 | | /**< Selects an audio output device (optional, may be NULL). |
257 | | * |
258 | | * \param id nul-terminated device unique identifier. |
259 | | * \return 0 on success, non-zero on failure. |
260 | | * |
261 | | * \warning The same constraints apply as with volume_set(). |
262 | | */ |
263 | | |
264 | | struct { |
265 | | bool headphones; /**< Default to false, set it to true if the current |
266 | | sink is using headphones */ |
267 | | } current_sink_info; |
268 | | /**< Current sink information set by the module from the start() function */ |
269 | | |
270 | | const struct vlc_audio_output_events *events; |
271 | | }; |
272 | | |
273 | | /** |
274 | | * Report a new timing point |
275 | | * |
276 | | * It is important to report the first point as soon as possible (and the |
277 | | * following points if the audio delay take some time to be stabilized). Once |
278 | | * the audio is stabilized, it is recommended to report timing points every |
279 | | * seconds. |
280 | | * |
281 | | * This function can be called from the play() callback or from any threads |
282 | | * after the first play(). This should not be called after a flush(), a stop(), |
283 | | * a drain() or while paused. After a flush(), play() need to be called again |
284 | | * before reporting a new timing. In that case, audio_ts should start again at |
285 | | * 0 (for the first sample played). |
286 | | * |
287 | | * \param aout the audio output instance |
288 | | * \param system_ts system timestamp when audio_ts is played, based on |
289 | | * vlc_tick_now(), can be now, in the past or in the future. |
290 | | * \param audio_pts audio timestamp played at system_ts, starts at block->i_pts |
291 | | * for the first sample played. |
292 | | */ |
293 | | static inline void aout_TimingReport(audio_output_t *aout, vlc_tick_t system_ts, |
294 | | vlc_tick_t audio_pts) |
295 | 0 | { |
296 | 0 | aout->events->timing_report(aout, system_ts, audio_pts); |
297 | 0 | } Unexecuted instantiation: aiff.c:aout_TimingReport Unexecuted instantiation: avi.c:aout_TimingReport Unexecuted instantiation: dts_header.c:aout_TimingReport Unexecuted instantiation: mp4.c:aout_TimingReport Unexecuted instantiation: fragments.c:aout_TimingReport Unexecuted instantiation: attachments.c:aout_TimingReport Unexecuted instantiation: heif.c:aout_TimingReport Unexecuted instantiation: essetup.c:aout_TimingReport Unexecuted instantiation: meta.c:aout_TimingReport Unexecuted instantiation: libmp4.c:aout_TimingReport Unexecuted instantiation: wav.c:aout_TimingReport Unexecuted instantiation: mpegaudio.c:aout_TimingReport Unexecuted instantiation: mkv.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: util.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: virtual_segment.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: matroska_segment.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: matroska_segment_parse.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: demux.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: events.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: Ebml_parser.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: chapters.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: chapter_command.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: chapter_command_dvd.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: chapter_command_script.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: chapter_command_script_common.cpp:aout_TimingReport(audio_output*, long, long) Unexecuted instantiation: araw.c:aout_TimingReport Unexecuted instantiation: g711.c:aout_TimingReport Unexecuted instantiation: lpcm.c:aout_TimingReport Unexecuted instantiation: spdif.c:aout_TimingReport Unexecuted instantiation: flac.c:aout_TimingReport Unexecuted instantiation: opus.c:aout_TimingReport Unexecuted instantiation: vorbis.c:aout_TimingReport Unexecuted instantiation: mpg123.c:aout_TimingReport Unexecuted instantiation: faad.c:aout_TimingReport Unexecuted instantiation: encoder.c:aout_TimingReport Unexecuted instantiation: audio.c:aout_TimingReport Unexecuted instantiation: libvlc.c:aout_TimingReport Unexecuted instantiation: content.c:aout_TimingReport Unexecuted instantiation: control.c:aout_TimingReport Unexecuted instantiation: notify.c:aout_TimingReport Unexecuted instantiation: player.c:aout_TimingReport Unexecuted instantiation: playlist.c:aout_TimingReport Unexecuted instantiation: preparse.c:aout_TimingReport Unexecuted instantiation: decoder.c:aout_TimingReport Unexecuted instantiation: input.c:aout_TimingReport Unexecuted instantiation: timer.c:aout_TimingReport Unexecuted instantiation: track.c:aout_TimingReport Unexecuted instantiation: title.c:aout_TimingReport Unexecuted instantiation: aout.c:aout_TimingReport Unexecuted instantiation: vout.c:aout_TimingReport Unexecuted instantiation: osd.c:aout_TimingReport Unexecuted instantiation: medialib.c:aout_TimingReport Unexecuted instantiation: resource.c:aout_TimingReport Unexecuted instantiation: common.c:aout_TimingReport Unexecuted instantiation: dec.c:aout_TimingReport Unexecuted instantiation: filters.c:aout_TimingReport Unexecuted instantiation: meter.c:aout_TimingReport Unexecuted instantiation: output.c:aout_TimingReport Unexecuted instantiation: volume.c:aout_TimingReport Unexecuted instantiation: strings.c:aout_TimingReport Unexecuted instantiation: objects.c:aout_TimingReport Unexecuted instantiation: vlm.c:aout_TimingReport Unexecuted instantiation: vlm_event.c:aout_TimingReport Unexecuted instantiation: vlmshell.c:aout_TimingReport Unexecuted instantiation: libvlc-module.c:aout_TimingReport Unexecuted instantiation: clock.c:aout_TimingReport Unexecuted instantiation: es_out.c:aout_TimingReport |
298 | | |
299 | | /** |
300 | | * Report than the stream is drained (after a call to aout->drain_async) |
301 | | */ |
302 | | static inline void aout_DrainedReport(audio_output_t *aout) |
303 | 0 | { |
304 | 0 | aout->events->drained_report(aout); |
305 | 0 | } Unexecuted instantiation: aiff.c:aout_DrainedReport Unexecuted instantiation: avi.c:aout_DrainedReport Unexecuted instantiation: dts_header.c:aout_DrainedReport Unexecuted instantiation: mp4.c:aout_DrainedReport Unexecuted instantiation: fragments.c:aout_DrainedReport Unexecuted instantiation: attachments.c:aout_DrainedReport Unexecuted instantiation: heif.c:aout_DrainedReport Unexecuted instantiation: essetup.c:aout_DrainedReport Unexecuted instantiation: meta.c:aout_DrainedReport Unexecuted instantiation: libmp4.c:aout_DrainedReport Unexecuted instantiation: wav.c:aout_DrainedReport Unexecuted instantiation: mpegaudio.c:aout_DrainedReport Unexecuted instantiation: mkv.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: util.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: virtual_segment.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: matroska_segment.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: matroska_segment_parse.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: demux.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: events.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: Ebml_parser.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: chapters.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: chapter_command.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: chapter_command_dvd.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: chapter_command_script.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: chapter_command_script_common.cpp:aout_DrainedReport(audio_output*) Unexecuted instantiation: araw.c:aout_DrainedReport Unexecuted instantiation: g711.c:aout_DrainedReport Unexecuted instantiation: lpcm.c:aout_DrainedReport Unexecuted instantiation: spdif.c:aout_DrainedReport Unexecuted instantiation: flac.c:aout_DrainedReport Unexecuted instantiation: opus.c:aout_DrainedReport Unexecuted instantiation: vorbis.c:aout_DrainedReport Unexecuted instantiation: mpg123.c:aout_DrainedReport Unexecuted instantiation: faad.c:aout_DrainedReport Unexecuted instantiation: encoder.c:aout_DrainedReport Unexecuted instantiation: audio.c:aout_DrainedReport Unexecuted instantiation: libvlc.c:aout_DrainedReport Unexecuted instantiation: content.c:aout_DrainedReport Unexecuted instantiation: control.c:aout_DrainedReport Unexecuted instantiation: notify.c:aout_DrainedReport Unexecuted instantiation: player.c:aout_DrainedReport Unexecuted instantiation: playlist.c:aout_DrainedReport Unexecuted instantiation: preparse.c:aout_DrainedReport Unexecuted instantiation: decoder.c:aout_DrainedReport Unexecuted instantiation: input.c:aout_DrainedReport Unexecuted instantiation: timer.c:aout_DrainedReport Unexecuted instantiation: track.c:aout_DrainedReport Unexecuted instantiation: title.c:aout_DrainedReport Unexecuted instantiation: aout.c:aout_DrainedReport Unexecuted instantiation: vout.c:aout_DrainedReport Unexecuted instantiation: osd.c:aout_DrainedReport Unexecuted instantiation: medialib.c:aout_DrainedReport Unexecuted instantiation: resource.c:aout_DrainedReport Unexecuted instantiation: common.c:aout_DrainedReport Unexecuted instantiation: dec.c:aout_DrainedReport Unexecuted instantiation: filters.c:aout_DrainedReport Unexecuted instantiation: meter.c:aout_DrainedReport Unexecuted instantiation: output.c:aout_DrainedReport Unexecuted instantiation: volume.c:aout_DrainedReport Unexecuted instantiation: strings.c:aout_DrainedReport Unexecuted instantiation: objects.c:aout_DrainedReport Unexecuted instantiation: vlm.c:aout_DrainedReport Unexecuted instantiation: vlm_event.c:aout_DrainedReport Unexecuted instantiation: vlmshell.c:aout_DrainedReport Unexecuted instantiation: libvlc-module.c:aout_DrainedReport Unexecuted instantiation: clock.c:aout_DrainedReport Unexecuted instantiation: es_out.c:aout_DrainedReport |
306 | | |
307 | | /** |
308 | | * Report change of configured audio volume to the core and UI. |
309 | | */ |
310 | | static inline void aout_VolumeReport(audio_output_t *aout, float volume) |
311 | 0 | { |
312 | 0 | aout->events->volume_report(aout, volume); |
313 | 0 | } Unexecuted instantiation: aiff.c:aout_VolumeReport Unexecuted instantiation: avi.c:aout_VolumeReport Unexecuted instantiation: dts_header.c:aout_VolumeReport Unexecuted instantiation: mp4.c:aout_VolumeReport Unexecuted instantiation: fragments.c:aout_VolumeReport Unexecuted instantiation: attachments.c:aout_VolumeReport Unexecuted instantiation: heif.c:aout_VolumeReport Unexecuted instantiation: essetup.c:aout_VolumeReport Unexecuted instantiation: meta.c:aout_VolumeReport Unexecuted instantiation: libmp4.c:aout_VolumeReport Unexecuted instantiation: wav.c:aout_VolumeReport Unexecuted instantiation: mpegaudio.c:aout_VolumeReport Unexecuted instantiation: mkv.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: util.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: virtual_segment.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: matroska_segment.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: matroska_segment_parse.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: demux.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: events.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: Ebml_parser.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: chapters.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: chapter_command.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: chapter_command_dvd.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: chapter_command_script.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: chapter_command_script_common.cpp:aout_VolumeReport(audio_output*, float) Unexecuted instantiation: araw.c:aout_VolumeReport Unexecuted instantiation: g711.c:aout_VolumeReport Unexecuted instantiation: lpcm.c:aout_VolumeReport Unexecuted instantiation: spdif.c:aout_VolumeReport Unexecuted instantiation: flac.c:aout_VolumeReport Unexecuted instantiation: opus.c:aout_VolumeReport Unexecuted instantiation: vorbis.c:aout_VolumeReport Unexecuted instantiation: mpg123.c:aout_VolumeReport Unexecuted instantiation: faad.c:aout_VolumeReport Unexecuted instantiation: encoder.c:aout_VolumeReport Unexecuted instantiation: audio.c:aout_VolumeReport Unexecuted instantiation: libvlc.c:aout_VolumeReport Unexecuted instantiation: content.c:aout_VolumeReport Unexecuted instantiation: control.c:aout_VolumeReport Unexecuted instantiation: notify.c:aout_VolumeReport Unexecuted instantiation: player.c:aout_VolumeReport Unexecuted instantiation: playlist.c:aout_VolumeReport Unexecuted instantiation: preparse.c:aout_VolumeReport Unexecuted instantiation: decoder.c:aout_VolumeReport Unexecuted instantiation: input.c:aout_VolumeReport Unexecuted instantiation: timer.c:aout_VolumeReport Unexecuted instantiation: track.c:aout_VolumeReport Unexecuted instantiation: title.c:aout_VolumeReport Unexecuted instantiation: aout.c:aout_VolumeReport Unexecuted instantiation: vout.c:aout_VolumeReport Unexecuted instantiation: osd.c:aout_VolumeReport Unexecuted instantiation: medialib.c:aout_VolumeReport Unexecuted instantiation: resource.c:aout_VolumeReport Unexecuted instantiation: common.c:aout_VolumeReport Unexecuted instantiation: dec.c:aout_VolumeReport Unexecuted instantiation: filters.c:aout_VolumeReport Unexecuted instantiation: meter.c:aout_VolumeReport Unexecuted instantiation: output.c:aout_VolumeReport Unexecuted instantiation: volume.c:aout_VolumeReport Unexecuted instantiation: strings.c:aout_VolumeReport Unexecuted instantiation: objects.c:aout_VolumeReport Unexecuted instantiation: vlm.c:aout_VolumeReport Unexecuted instantiation: vlm_event.c:aout_VolumeReport Unexecuted instantiation: vlmshell.c:aout_VolumeReport Unexecuted instantiation: libvlc-module.c:aout_VolumeReport Unexecuted instantiation: clock.c:aout_VolumeReport Unexecuted instantiation: es_out.c:aout_VolumeReport |
314 | | |
315 | | /** |
316 | | * Report change of muted flag to the core and UI. |
317 | | */ |
318 | | static inline void aout_MuteReport(audio_output_t *aout, bool mute) |
319 | 0 | { |
320 | 0 | aout->events->mute_report(aout, mute); |
321 | 0 | } Unexecuted instantiation: aiff.c:aout_MuteReport Unexecuted instantiation: avi.c:aout_MuteReport Unexecuted instantiation: dts_header.c:aout_MuteReport Unexecuted instantiation: mp4.c:aout_MuteReport Unexecuted instantiation: fragments.c:aout_MuteReport Unexecuted instantiation: attachments.c:aout_MuteReport Unexecuted instantiation: heif.c:aout_MuteReport Unexecuted instantiation: essetup.c:aout_MuteReport Unexecuted instantiation: meta.c:aout_MuteReport Unexecuted instantiation: libmp4.c:aout_MuteReport Unexecuted instantiation: wav.c:aout_MuteReport Unexecuted instantiation: mpegaudio.c:aout_MuteReport Unexecuted instantiation: mkv.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: util.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: virtual_segment.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: matroska_segment.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: matroska_segment_parse.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: demux.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: events.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: Ebml_parser.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: chapters.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: chapter_command.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: chapter_command_dvd.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: chapter_command_script.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: chapter_command_script_common.cpp:aout_MuteReport(audio_output*, bool) Unexecuted instantiation: araw.c:aout_MuteReport Unexecuted instantiation: g711.c:aout_MuteReport Unexecuted instantiation: lpcm.c:aout_MuteReport Unexecuted instantiation: spdif.c:aout_MuteReport Unexecuted instantiation: flac.c:aout_MuteReport Unexecuted instantiation: opus.c:aout_MuteReport Unexecuted instantiation: vorbis.c:aout_MuteReport Unexecuted instantiation: mpg123.c:aout_MuteReport Unexecuted instantiation: faad.c:aout_MuteReport Unexecuted instantiation: encoder.c:aout_MuteReport Unexecuted instantiation: audio.c:aout_MuteReport Unexecuted instantiation: libvlc.c:aout_MuteReport Unexecuted instantiation: content.c:aout_MuteReport Unexecuted instantiation: control.c:aout_MuteReport Unexecuted instantiation: notify.c:aout_MuteReport Unexecuted instantiation: player.c:aout_MuteReport Unexecuted instantiation: playlist.c:aout_MuteReport Unexecuted instantiation: preparse.c:aout_MuteReport Unexecuted instantiation: decoder.c:aout_MuteReport Unexecuted instantiation: input.c:aout_MuteReport Unexecuted instantiation: timer.c:aout_MuteReport Unexecuted instantiation: track.c:aout_MuteReport Unexecuted instantiation: title.c:aout_MuteReport Unexecuted instantiation: aout.c:aout_MuteReport Unexecuted instantiation: vout.c:aout_MuteReport Unexecuted instantiation: osd.c:aout_MuteReport Unexecuted instantiation: medialib.c:aout_MuteReport Unexecuted instantiation: resource.c:aout_MuteReport Unexecuted instantiation: common.c:aout_MuteReport Unexecuted instantiation: dec.c:aout_MuteReport Unexecuted instantiation: filters.c:aout_MuteReport Unexecuted instantiation: meter.c:aout_MuteReport Unexecuted instantiation: output.c:aout_MuteReport Unexecuted instantiation: volume.c:aout_MuteReport Unexecuted instantiation: strings.c:aout_MuteReport Unexecuted instantiation: objects.c:aout_MuteReport Unexecuted instantiation: vlm.c:aout_MuteReport Unexecuted instantiation: vlm_event.c:aout_MuteReport Unexecuted instantiation: vlmshell.c:aout_MuteReport Unexecuted instantiation: libvlc-module.c:aout_MuteReport Unexecuted instantiation: clock.c:aout_MuteReport Unexecuted instantiation: es_out.c:aout_MuteReport |
322 | | |
323 | | /** |
324 | | * Report audio policy status. |
325 | | * \param aout the audio output instance reporting the cork policy |
326 | | * \param cork true to request a cork, false to undo any pending cork. |
327 | | */ |
328 | | static inline void aout_PolicyReport(audio_output_t *aout, bool cork) |
329 | 0 | { |
330 | 0 | aout->events->policy_report(aout, cork); |
331 | 0 | } Unexecuted instantiation: aiff.c:aout_PolicyReport Unexecuted instantiation: avi.c:aout_PolicyReport Unexecuted instantiation: dts_header.c:aout_PolicyReport Unexecuted instantiation: mp4.c:aout_PolicyReport Unexecuted instantiation: fragments.c:aout_PolicyReport Unexecuted instantiation: attachments.c:aout_PolicyReport Unexecuted instantiation: heif.c:aout_PolicyReport Unexecuted instantiation: essetup.c:aout_PolicyReport Unexecuted instantiation: meta.c:aout_PolicyReport Unexecuted instantiation: libmp4.c:aout_PolicyReport Unexecuted instantiation: wav.c:aout_PolicyReport Unexecuted instantiation: mpegaudio.c:aout_PolicyReport Unexecuted instantiation: mkv.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: util.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: virtual_segment.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: matroska_segment.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: matroska_segment_parse.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: demux.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: events.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: Ebml_parser.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: chapters.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: chapter_command.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: chapter_command_dvd.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: chapter_command_script.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: chapter_command_script_common.cpp:aout_PolicyReport(audio_output*, bool) Unexecuted instantiation: araw.c:aout_PolicyReport Unexecuted instantiation: g711.c:aout_PolicyReport Unexecuted instantiation: lpcm.c:aout_PolicyReport Unexecuted instantiation: spdif.c:aout_PolicyReport Unexecuted instantiation: flac.c:aout_PolicyReport Unexecuted instantiation: opus.c:aout_PolicyReport Unexecuted instantiation: vorbis.c:aout_PolicyReport Unexecuted instantiation: mpg123.c:aout_PolicyReport Unexecuted instantiation: faad.c:aout_PolicyReport Unexecuted instantiation: encoder.c:aout_PolicyReport Unexecuted instantiation: audio.c:aout_PolicyReport Unexecuted instantiation: libvlc.c:aout_PolicyReport Unexecuted instantiation: content.c:aout_PolicyReport Unexecuted instantiation: control.c:aout_PolicyReport Unexecuted instantiation: notify.c:aout_PolicyReport Unexecuted instantiation: player.c:aout_PolicyReport Unexecuted instantiation: playlist.c:aout_PolicyReport Unexecuted instantiation: preparse.c:aout_PolicyReport Unexecuted instantiation: decoder.c:aout_PolicyReport Unexecuted instantiation: input.c:aout_PolicyReport Unexecuted instantiation: timer.c:aout_PolicyReport Unexecuted instantiation: track.c:aout_PolicyReport Unexecuted instantiation: title.c:aout_PolicyReport Unexecuted instantiation: aout.c:aout_PolicyReport Unexecuted instantiation: vout.c:aout_PolicyReport Unexecuted instantiation: osd.c:aout_PolicyReport Unexecuted instantiation: medialib.c:aout_PolicyReport Unexecuted instantiation: resource.c:aout_PolicyReport Unexecuted instantiation: common.c:aout_PolicyReport Unexecuted instantiation: dec.c:aout_PolicyReport Unexecuted instantiation: filters.c:aout_PolicyReport Unexecuted instantiation: meter.c:aout_PolicyReport Unexecuted instantiation: output.c:aout_PolicyReport Unexecuted instantiation: volume.c:aout_PolicyReport Unexecuted instantiation: strings.c:aout_PolicyReport Unexecuted instantiation: objects.c:aout_PolicyReport Unexecuted instantiation: vlm.c:aout_PolicyReport Unexecuted instantiation: vlm_event.c:aout_PolicyReport Unexecuted instantiation: vlmshell.c:aout_PolicyReport Unexecuted instantiation: libvlc-module.c:aout_PolicyReport Unexecuted instantiation: clock.c:aout_PolicyReport Unexecuted instantiation: es_out.c:aout_PolicyReport |
332 | | |
333 | | /** |
334 | | * Report change of output device. |
335 | | */ |
336 | | static inline void aout_DeviceReport(audio_output_t *aout, const char *id) |
337 | 0 | { |
338 | 0 | aout->events->device_report(aout, id); |
339 | 0 | } Unexecuted instantiation: aiff.c:aout_DeviceReport Unexecuted instantiation: avi.c:aout_DeviceReport Unexecuted instantiation: dts_header.c:aout_DeviceReport Unexecuted instantiation: mp4.c:aout_DeviceReport Unexecuted instantiation: fragments.c:aout_DeviceReport Unexecuted instantiation: attachments.c:aout_DeviceReport Unexecuted instantiation: heif.c:aout_DeviceReport Unexecuted instantiation: essetup.c:aout_DeviceReport Unexecuted instantiation: meta.c:aout_DeviceReport Unexecuted instantiation: libmp4.c:aout_DeviceReport Unexecuted instantiation: wav.c:aout_DeviceReport Unexecuted instantiation: mpegaudio.c:aout_DeviceReport Unexecuted instantiation: mkv.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: util.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: virtual_segment.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: matroska_segment.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: matroska_segment_parse.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: demux.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: events.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: Ebml_parser.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: chapters.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: chapter_command.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: chapter_command_dvd.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: chapter_command_script.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: chapter_command_script_common.cpp:aout_DeviceReport(audio_output*, char const*) Unexecuted instantiation: araw.c:aout_DeviceReport Unexecuted instantiation: g711.c:aout_DeviceReport Unexecuted instantiation: lpcm.c:aout_DeviceReport Unexecuted instantiation: spdif.c:aout_DeviceReport Unexecuted instantiation: flac.c:aout_DeviceReport Unexecuted instantiation: opus.c:aout_DeviceReport Unexecuted instantiation: vorbis.c:aout_DeviceReport Unexecuted instantiation: mpg123.c:aout_DeviceReport Unexecuted instantiation: faad.c:aout_DeviceReport Unexecuted instantiation: encoder.c:aout_DeviceReport Unexecuted instantiation: audio.c:aout_DeviceReport Unexecuted instantiation: libvlc.c:aout_DeviceReport Unexecuted instantiation: content.c:aout_DeviceReport Unexecuted instantiation: control.c:aout_DeviceReport Unexecuted instantiation: notify.c:aout_DeviceReport Unexecuted instantiation: player.c:aout_DeviceReport Unexecuted instantiation: playlist.c:aout_DeviceReport Unexecuted instantiation: preparse.c:aout_DeviceReport Unexecuted instantiation: decoder.c:aout_DeviceReport Unexecuted instantiation: input.c:aout_DeviceReport Unexecuted instantiation: timer.c:aout_DeviceReport Unexecuted instantiation: track.c:aout_DeviceReport Unexecuted instantiation: title.c:aout_DeviceReport Unexecuted instantiation: aout.c:aout_DeviceReport Unexecuted instantiation: vout.c:aout_DeviceReport Unexecuted instantiation: osd.c:aout_DeviceReport Unexecuted instantiation: medialib.c:aout_DeviceReport Unexecuted instantiation: resource.c:aout_DeviceReport Unexecuted instantiation: common.c:aout_DeviceReport Unexecuted instantiation: dec.c:aout_DeviceReport Unexecuted instantiation: filters.c:aout_DeviceReport Unexecuted instantiation: meter.c:aout_DeviceReport Unexecuted instantiation: output.c:aout_DeviceReport Unexecuted instantiation: volume.c:aout_DeviceReport Unexecuted instantiation: strings.c:aout_DeviceReport Unexecuted instantiation: objects.c:aout_DeviceReport Unexecuted instantiation: vlm.c:aout_DeviceReport Unexecuted instantiation: vlm_event.c:aout_DeviceReport Unexecuted instantiation: vlmshell.c:aout_DeviceReport Unexecuted instantiation: libvlc-module.c:aout_DeviceReport Unexecuted instantiation: clock.c:aout_DeviceReport Unexecuted instantiation: es_out.c:aout_DeviceReport |
340 | | |
341 | | /** |
342 | | * Report a device hot-plug event. |
343 | | * @param aout the audio output instance reporting the new device |
344 | | * @param id device ID |
345 | | * @param name human-readable device name (NULL for hot unplug) |
346 | | */ |
347 | | static inline void aout_HotplugReport(audio_output_t *aout, |
348 | | const char *id, const char *name) |
349 | 0 | { |
350 | 0 | aout->events->hotplug_report(aout, id, name); |
351 | 0 | } Unexecuted instantiation: aiff.c:aout_HotplugReport Unexecuted instantiation: avi.c:aout_HotplugReport Unexecuted instantiation: dts_header.c:aout_HotplugReport Unexecuted instantiation: mp4.c:aout_HotplugReport Unexecuted instantiation: fragments.c:aout_HotplugReport Unexecuted instantiation: attachments.c:aout_HotplugReport Unexecuted instantiation: heif.c:aout_HotplugReport Unexecuted instantiation: essetup.c:aout_HotplugReport Unexecuted instantiation: meta.c:aout_HotplugReport Unexecuted instantiation: libmp4.c:aout_HotplugReport Unexecuted instantiation: wav.c:aout_HotplugReport Unexecuted instantiation: mpegaudio.c:aout_HotplugReport Unexecuted instantiation: mkv.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: util.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: virtual_segment.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: matroska_segment.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: matroska_segment_parse.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: demux.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: events.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: Ebml_parser.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: chapters.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: chapter_command.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: chapter_command_dvd.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: chapter_command_script.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: chapter_command_script_common.cpp:aout_HotplugReport(audio_output*, char const*, char const*) Unexecuted instantiation: araw.c:aout_HotplugReport Unexecuted instantiation: g711.c:aout_HotplugReport Unexecuted instantiation: lpcm.c:aout_HotplugReport Unexecuted instantiation: spdif.c:aout_HotplugReport Unexecuted instantiation: flac.c:aout_HotplugReport Unexecuted instantiation: opus.c:aout_HotplugReport Unexecuted instantiation: vorbis.c:aout_HotplugReport Unexecuted instantiation: mpg123.c:aout_HotplugReport Unexecuted instantiation: faad.c:aout_HotplugReport Unexecuted instantiation: encoder.c:aout_HotplugReport Unexecuted instantiation: audio.c:aout_HotplugReport Unexecuted instantiation: libvlc.c:aout_HotplugReport Unexecuted instantiation: content.c:aout_HotplugReport Unexecuted instantiation: control.c:aout_HotplugReport Unexecuted instantiation: notify.c:aout_HotplugReport Unexecuted instantiation: player.c:aout_HotplugReport Unexecuted instantiation: playlist.c:aout_HotplugReport Unexecuted instantiation: preparse.c:aout_HotplugReport Unexecuted instantiation: decoder.c:aout_HotplugReport Unexecuted instantiation: input.c:aout_HotplugReport Unexecuted instantiation: timer.c:aout_HotplugReport Unexecuted instantiation: track.c:aout_HotplugReport Unexecuted instantiation: title.c:aout_HotplugReport Unexecuted instantiation: aout.c:aout_HotplugReport Unexecuted instantiation: vout.c:aout_HotplugReport Unexecuted instantiation: osd.c:aout_HotplugReport Unexecuted instantiation: medialib.c:aout_HotplugReport Unexecuted instantiation: resource.c:aout_HotplugReport Unexecuted instantiation: common.c:aout_HotplugReport Unexecuted instantiation: dec.c:aout_HotplugReport Unexecuted instantiation: filters.c:aout_HotplugReport Unexecuted instantiation: meter.c:aout_HotplugReport Unexecuted instantiation: output.c:aout_HotplugReport Unexecuted instantiation: volume.c:aout_HotplugReport Unexecuted instantiation: strings.c:aout_HotplugReport Unexecuted instantiation: objects.c:aout_HotplugReport Unexecuted instantiation: vlm.c:aout_HotplugReport Unexecuted instantiation: vlm_event.c:aout_HotplugReport Unexecuted instantiation: vlmshell.c:aout_HotplugReport Unexecuted instantiation: libvlc-module.c:aout_HotplugReport Unexecuted instantiation: clock.c:aout_HotplugReport Unexecuted instantiation: es_out.c:aout_HotplugReport |
352 | | |
353 | | /** |
354 | | * Request a change of software audio amplification. |
355 | | * \param aout the audio output instance requesting software gain |
356 | | * \param gain linear amplitude gain (must be positive) |
357 | | * \warning Values in excess 1.0 may cause overflow and distortion. |
358 | | */ |
359 | | static inline int aout_GainRequest(audio_output_t *aout, float gain) |
360 | 0 | { |
361 | 0 | return aout->events->gain_request(aout, gain); |
362 | 0 | } Unexecuted instantiation: aiff.c:aout_GainRequest Unexecuted instantiation: avi.c:aout_GainRequest Unexecuted instantiation: dts_header.c:aout_GainRequest Unexecuted instantiation: mp4.c:aout_GainRequest Unexecuted instantiation: fragments.c:aout_GainRequest Unexecuted instantiation: attachments.c:aout_GainRequest Unexecuted instantiation: heif.c:aout_GainRequest Unexecuted instantiation: essetup.c:aout_GainRequest Unexecuted instantiation: meta.c:aout_GainRequest Unexecuted instantiation: libmp4.c:aout_GainRequest Unexecuted instantiation: wav.c:aout_GainRequest Unexecuted instantiation: mpegaudio.c:aout_GainRequest Unexecuted instantiation: mkv.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: util.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: virtual_segment.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: matroska_segment.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: matroska_segment_parse.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: demux.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: events.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: Ebml_parser.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: chapters.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: chapter_command.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: chapter_command_dvd.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: chapter_command_script.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: chapter_command_script_common.cpp:aout_GainRequest(audio_output*, float) Unexecuted instantiation: araw.c:aout_GainRequest Unexecuted instantiation: g711.c:aout_GainRequest Unexecuted instantiation: lpcm.c:aout_GainRequest Unexecuted instantiation: spdif.c:aout_GainRequest Unexecuted instantiation: flac.c:aout_GainRequest Unexecuted instantiation: opus.c:aout_GainRequest Unexecuted instantiation: vorbis.c:aout_GainRequest Unexecuted instantiation: mpg123.c:aout_GainRequest Unexecuted instantiation: faad.c:aout_GainRequest Unexecuted instantiation: encoder.c:aout_GainRequest Unexecuted instantiation: audio.c:aout_GainRequest Unexecuted instantiation: libvlc.c:aout_GainRequest Unexecuted instantiation: content.c:aout_GainRequest Unexecuted instantiation: control.c:aout_GainRequest Unexecuted instantiation: notify.c:aout_GainRequest Unexecuted instantiation: player.c:aout_GainRequest Unexecuted instantiation: playlist.c:aout_GainRequest Unexecuted instantiation: preparse.c:aout_GainRequest Unexecuted instantiation: decoder.c:aout_GainRequest Unexecuted instantiation: input.c:aout_GainRequest Unexecuted instantiation: timer.c:aout_GainRequest Unexecuted instantiation: track.c:aout_GainRequest Unexecuted instantiation: title.c:aout_GainRequest Unexecuted instantiation: aout.c:aout_GainRequest Unexecuted instantiation: vout.c:aout_GainRequest Unexecuted instantiation: osd.c:aout_GainRequest Unexecuted instantiation: medialib.c:aout_GainRequest Unexecuted instantiation: resource.c:aout_GainRequest Unexecuted instantiation: common.c:aout_GainRequest Unexecuted instantiation: dec.c:aout_GainRequest Unexecuted instantiation: filters.c:aout_GainRequest Unexecuted instantiation: meter.c:aout_GainRequest Unexecuted instantiation: output.c:aout_GainRequest Unexecuted instantiation: volume.c:aout_GainRequest Unexecuted instantiation: strings.c:aout_GainRequest Unexecuted instantiation: objects.c:aout_GainRequest Unexecuted instantiation: vlm.c:aout_GainRequest Unexecuted instantiation: vlm_event.c:aout_GainRequest Unexecuted instantiation: vlmshell.c:aout_GainRequest Unexecuted instantiation: libvlc-module.c:aout_GainRequest Unexecuted instantiation: clock.c:aout_GainRequest Unexecuted instantiation: es_out.c:aout_GainRequest |
363 | | |
364 | | static inline void aout_RestartRequest(audio_output_t *aout, bool restart_dec) |
365 | 0 | { |
366 | 0 | aout->events->restart_request(aout, restart_dec); |
367 | 0 | } Unexecuted instantiation: aiff.c:aout_RestartRequest Unexecuted instantiation: avi.c:aout_RestartRequest Unexecuted instantiation: dts_header.c:aout_RestartRequest Unexecuted instantiation: mp4.c:aout_RestartRequest Unexecuted instantiation: fragments.c:aout_RestartRequest Unexecuted instantiation: attachments.c:aout_RestartRequest Unexecuted instantiation: heif.c:aout_RestartRequest Unexecuted instantiation: essetup.c:aout_RestartRequest Unexecuted instantiation: meta.c:aout_RestartRequest Unexecuted instantiation: libmp4.c:aout_RestartRequest Unexecuted instantiation: wav.c:aout_RestartRequest Unexecuted instantiation: mpegaudio.c:aout_RestartRequest Unexecuted instantiation: mkv.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: util.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: virtual_segment.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: matroska_segment.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: matroska_segment_parse.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: demux.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: events.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: Ebml_parser.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: chapters.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: chapter_command.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: chapter_command_dvd.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: chapter_command_script.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: chapter_command_script_common.cpp:aout_RestartRequest(audio_output*, bool) Unexecuted instantiation: araw.c:aout_RestartRequest Unexecuted instantiation: g711.c:aout_RestartRequest Unexecuted instantiation: lpcm.c:aout_RestartRequest Unexecuted instantiation: spdif.c:aout_RestartRequest Unexecuted instantiation: flac.c:aout_RestartRequest Unexecuted instantiation: opus.c:aout_RestartRequest Unexecuted instantiation: vorbis.c:aout_RestartRequest Unexecuted instantiation: mpg123.c:aout_RestartRequest Unexecuted instantiation: faad.c:aout_RestartRequest Unexecuted instantiation: encoder.c:aout_RestartRequest Unexecuted instantiation: audio.c:aout_RestartRequest Unexecuted instantiation: libvlc.c:aout_RestartRequest Unexecuted instantiation: content.c:aout_RestartRequest Unexecuted instantiation: control.c:aout_RestartRequest Unexecuted instantiation: notify.c:aout_RestartRequest Unexecuted instantiation: player.c:aout_RestartRequest Unexecuted instantiation: playlist.c:aout_RestartRequest Unexecuted instantiation: preparse.c:aout_RestartRequest Unexecuted instantiation: decoder.c:aout_RestartRequest Unexecuted instantiation: input.c:aout_RestartRequest Unexecuted instantiation: timer.c:aout_RestartRequest Unexecuted instantiation: track.c:aout_RestartRequest Unexecuted instantiation: title.c:aout_RestartRequest Unexecuted instantiation: aout.c:aout_RestartRequest Unexecuted instantiation: vout.c:aout_RestartRequest Unexecuted instantiation: osd.c:aout_RestartRequest Unexecuted instantiation: medialib.c:aout_RestartRequest Unexecuted instantiation: resource.c:aout_RestartRequest Unexecuted instantiation: common.c:aout_RestartRequest Unexecuted instantiation: dec.c:aout_RestartRequest Unexecuted instantiation: filters.c:aout_RestartRequest Unexecuted instantiation: meter.c:aout_RestartRequest Unexecuted instantiation: output.c:aout_RestartRequest Unexecuted instantiation: volume.c:aout_RestartRequest Unexecuted instantiation: strings.c:aout_RestartRequest Unexecuted instantiation: objects.c:aout_RestartRequest Unexecuted instantiation: vlm.c:aout_RestartRequest Unexecuted instantiation: vlm_event.c:aout_RestartRequest Unexecuted instantiation: vlmshell.c:aout_RestartRequest Unexecuted instantiation: libvlc-module.c:aout_RestartRequest Unexecuted instantiation: clock.c:aout_RestartRequest Unexecuted instantiation: es_out.c:aout_RestartRequest |
368 | | |
369 | | /** @} */ |
370 | | |
371 | | /** |
372 | | * \defgroup audio_format Audio formats |
373 | | * @{ |
374 | | */ |
375 | | /** |
376 | | * It describes the audio channel order VLC expect. |
377 | | */ |
378 | | static const uint32_t pi_vlc_chan_order_wg4[] = |
379 | | { |
380 | | AOUT_CHAN_LEFT, AOUT_CHAN_RIGHT, |
381 | | AOUT_CHAN_MIDDLELEFT, AOUT_CHAN_MIDDLERIGHT, |
382 | | AOUT_CHAN_REARLEFT, AOUT_CHAN_REARRIGHT, AOUT_CHAN_REARCENTER, |
383 | | AOUT_CHAN_CENTER, AOUT_CHAN_LFE, 0 |
384 | | }; |
385 | | |
386 | | /** |
387 | | * This function computes the reordering needed to go from pi_chan_order_in to |
388 | | * pi_chan_order_out. |
389 | | * If pi_chan_order_in or pi_chan_order_out is NULL, it will assume that vlc |
390 | | * internal (WG4) order is requested. |
391 | | */ |
392 | | VLC_API unsigned aout_CheckChannelReorder( const uint32_t *, const uint32_t *, |
393 | | uint32_t mask, uint8_t *table ); |
394 | | |
395 | | /** |
396 | | * Reorders audio samples within a block of linear audio interleaved samples. |
397 | | * \param ptr start address of the block of samples |
398 | | * \param bytes size of the block in bytes (must be a multiple of the product |
399 | | * of the channels count and the sample size) |
400 | | * \param channels channels count (also length of the chans_table table) |
401 | | * \param chans_table permutation table to reorder the channels |
402 | | * (usually computed by aout_CheckChannelReorder()) |
403 | | * \param fourcc sample format (must be a linear sample format) |
404 | | * \note The samples must be naturally aligned in memory. |
405 | | */ |
406 | | VLC_API void aout_ChannelReorder(void *ptr, size_t bytes, uint8_t channels, |
407 | | const uint8_t *chans_table, |
408 | | vlc_fourcc_t fourcc); |
409 | | |
410 | | /** |
411 | | * This function will compute the extraction parameter into pi_selection to go |
412 | | * from i_channels with their type given by pi_order_src[] into the order |
413 | | * describe by pi_order_dst. |
414 | | * It will also set : |
415 | | * - *pi_channels as the number of channels that will be extracted which is |
416 | | * lower (in case of non understood channels type) or equal to i_channels. |
417 | | * - the layout of the channels (*pi_layout). |
418 | | * |
419 | | * It will return true if channel extraction is really needed, in which case |
420 | | * aout_ChannelExtract must be used |
421 | | * |
422 | | * XXX It must be used when the source may have channel type not understood |
423 | | * by VLC. In this case the channel type pi_order_src[] must be set to 0. |
424 | | * XXX It must also be used if multiple channels have the same type. |
425 | | */ |
426 | | VLC_API bool aout_CheckChannelExtraction( int *pi_selection, uint32_t *pi_layout, int *pi_channels, const uint32_t pi_order_dst[AOUT_CHAN_MAX], const uint32_t *pi_order_src, int i_channels ); |
427 | | |
428 | | /** |
429 | | * Do the actual channels extraction using the parameters created by |
430 | | * aout_CheckChannelExtraction. |
431 | | * |
432 | | * XXX this function does not work in place (p_dst and p_src must not overlap). |
433 | | * XXX Only 8, 16, 32, 64 bits per sample are supported. |
434 | | */ |
435 | | VLC_API void aout_ChannelExtract( void *p_dst, int i_dst_channels, const void *p_src, int i_src_channels, int i_sample_count, const int *pi_selection, int i_bits_per_sample ); |
436 | | |
437 | | VLC_API void aout_Interleave(void *dst, const void *const *planes, |
438 | | unsigned samples, unsigned channels, |
439 | | vlc_fourcc_t fourcc); |
440 | | VLC_API void aout_Deinterleave(void *dst, const void *src, unsigned samples, |
441 | | unsigned channels, vlc_fourcc_t fourcc); |
442 | | |
443 | | /* */ |
444 | | static inline unsigned aout_FormatNbChannels(const audio_sample_format_t *fmt) |
445 | 2.88M | { |
446 | 2.88M | return vlc_popcount(fmt->i_physical_channels); |
447 | 2.88M | } Unexecuted instantiation: aiff.c:aout_FormatNbChannels Unexecuted instantiation: avi.c:aout_FormatNbChannels Unexecuted instantiation: dts_header.c:aout_FormatNbChannels Unexecuted instantiation: mp4.c:aout_FormatNbChannels Unexecuted instantiation: fragments.c:aout_FormatNbChannels Unexecuted instantiation: attachments.c:aout_FormatNbChannels Unexecuted instantiation: heif.c:aout_FormatNbChannels Unexecuted instantiation: essetup.c:aout_FormatNbChannels Unexecuted instantiation: meta.c:aout_FormatNbChannels Unexecuted instantiation: libmp4.c:aout_FormatNbChannels Unexecuted instantiation: wav.c:aout_FormatNbChannels Unexecuted instantiation: mpegaudio.c:aout_FormatNbChannels Unexecuted instantiation: mkv.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: util.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: virtual_segment.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: matroska_segment.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: matroska_segment_parse.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: matroska_segment_seeker.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: demux.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: events.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: Ebml_parser.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: chapters.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: chapter_command.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: chapter_command_dvd.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: chapter_command_script.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: chapter_command_script_common.cpp:aout_FormatNbChannels(audio_format_t const*) Unexecuted instantiation: araw.c:aout_FormatNbChannels Unexecuted instantiation: g711.c:aout_FormatNbChannels Unexecuted instantiation: lpcm.c:aout_FormatNbChannels Unexecuted instantiation: spdif.c:aout_FormatNbChannels Unexecuted instantiation: flac.c:aout_FormatNbChannels Unexecuted instantiation: opus.c:aout_FormatNbChannels Unexecuted instantiation: vorbis.c:aout_FormatNbChannels Unexecuted instantiation: mpg123.c:aout_FormatNbChannels Unexecuted instantiation: faad.c:aout_FormatNbChannels Unexecuted instantiation: encoder.c:aout_FormatNbChannels Unexecuted instantiation: audio.c:aout_FormatNbChannels Unexecuted instantiation: libvlc.c:aout_FormatNbChannels Unexecuted instantiation: content.c:aout_FormatNbChannels Unexecuted instantiation: control.c:aout_FormatNbChannels Unexecuted instantiation: notify.c:aout_FormatNbChannels Unexecuted instantiation: player.c:aout_FormatNbChannels Unexecuted instantiation: playlist.c:aout_FormatNbChannels Unexecuted instantiation: preparse.c:aout_FormatNbChannels Unexecuted instantiation: decoder.c:aout_FormatNbChannels Unexecuted instantiation: input.c:aout_FormatNbChannels Unexecuted instantiation: timer.c:aout_FormatNbChannels Unexecuted instantiation: track.c:aout_FormatNbChannels Unexecuted instantiation: title.c:aout_FormatNbChannels Unexecuted instantiation: aout.c:aout_FormatNbChannels Unexecuted instantiation: vout.c:aout_FormatNbChannels Unexecuted instantiation: osd.c:aout_FormatNbChannels Unexecuted instantiation: medialib.c:aout_FormatNbChannels Unexecuted instantiation: resource.c:aout_FormatNbChannels common.c:aout_FormatNbChannels Line | Count | Source | 445 | 2.88M | { | 446 | 2.88M | return vlc_popcount(fmt->i_physical_channels); | 447 | 2.88M | } |
Unexecuted instantiation: dec.c:aout_FormatNbChannels Unexecuted instantiation: filters.c:aout_FormatNbChannels Unexecuted instantiation: meter.c:aout_FormatNbChannels Unexecuted instantiation: output.c:aout_FormatNbChannels Unexecuted instantiation: volume.c:aout_FormatNbChannels Unexecuted instantiation: strings.c:aout_FormatNbChannels Unexecuted instantiation: objects.c:aout_FormatNbChannels Unexecuted instantiation: vlm.c:aout_FormatNbChannels Unexecuted instantiation: vlm_event.c:aout_FormatNbChannels Unexecuted instantiation: vlmshell.c:aout_FormatNbChannels Unexecuted instantiation: libvlc-module.c:aout_FormatNbChannels Unexecuted instantiation: clock.c:aout_FormatNbChannels Unexecuted instantiation: es_out.c:aout_FormatNbChannels |
448 | | |
449 | | VLC_API unsigned int aout_BitsPerSample( vlc_fourcc_t i_format ) VLC_USED; |
450 | | VLC_API void aout_FormatPrepare( audio_sample_format_t * p_format ); |
451 | | |
452 | | /** |
453 | | * Prints an audio sample format in a human-readable form. |
454 | | */ |
455 | | VLC_API void aout_FormatPrint(vlc_object_t *, const char *, |
456 | | const audio_sample_format_t *); |
457 | 0 | #define aout_FormatPrint(o, t, f) aout_FormatPrint(VLC_OBJECT(o), t, f) |
458 | | |
459 | | VLC_API const char * aout_FormatPrintChannels( const audio_sample_format_t * ) VLC_USED; |
460 | | |
461 | | /** @} */ |
462 | | |
463 | 0 | #define AOUT_VOLUME_DEFAULT 256 |
464 | 0 | #define AOUT_VOLUME_MAX 512 |
465 | | |
466 | | /** |
467 | | * Gets the volume of the audio output stream (independent of mute). |
468 | | * \return Current audio volume (0. = silent, 1. = nominal), |
469 | | * or a strictly negative value if undefined. |
470 | | */ |
471 | | VLC_API float aout_VolumeGet (audio_output_t *); |
472 | | |
473 | | /** |
474 | | * Sets the volume of the audio output stream. |
475 | | * \note The mute status is not changed. |
476 | | * \return 0 on success, -1 on failure. |
477 | | */ |
478 | | VLC_API int aout_VolumeSet (audio_output_t *, float); |
479 | | |
480 | | /** |
481 | | * Adjusts the volume. |
482 | | * \param aout the audio output to update the volume for |
483 | | * \param value how much to increase (> 0) or decrease (< 0) the volume |
484 | | * \param volp if non-NULL, will contain contain the resulting volume |
485 | | */ |
486 | | VLC_API int aout_VolumeUpdate (audio_output_t *aout, int value, |
487 | | float *volp); |
488 | | |
489 | | /** |
490 | | * Gets the audio output stream mute flag. |
491 | | * \return 0 if not muted, 1 if muted, -1 if undefined. |
492 | | */ |
493 | | VLC_API int aout_MuteGet (audio_output_t *); |
494 | | |
495 | | /** |
496 | | * Sets the audio output stream mute flag. |
497 | | * \return 0 on success, -1 on failure. |
498 | | */ |
499 | | VLC_API int aout_MuteSet (audio_output_t *, bool); |
500 | | |
501 | | /** |
502 | | * Gets the currently selected device. |
503 | | * \return the selected device ID (caller must free() it) |
504 | | * NULL if no device is selected or in case of error. |
505 | | */ |
506 | | VLC_API char *aout_DeviceGet (audio_output_t *); |
507 | | |
508 | | /** |
509 | | * Selects an audio output device. |
510 | | * \param aout the audio output to set the device for |
511 | | * \param id device ID to select, or NULL for the default device |
512 | | * \return zero on success, non-zero on error. |
513 | | */ |
514 | | VLC_API int aout_DeviceSet (audio_output_t *aout, const char *id); |
515 | | |
516 | | /** |
517 | | * Enumerates possible audio output devices. |
518 | | * |
519 | | * The function will heap-allocate two tables of heap-allocated strings; |
520 | | * the caller is responsible for freeing all strings and both tables. |
521 | | * |
522 | | * \param aout the audio output to get the device list from |
523 | | * \param ids pointer to a table of device identifiers [OUT] |
524 | | * \param names pointer to a table of device human-readable descriptions [OUT] |
525 | | * \return the number of devices, or negative on error. |
526 | | * \note In case of error, *ids and *names are undefined. |
527 | | */ |
528 | | VLC_API int aout_DevicesList (audio_output_t *aout, char ***ids, |
529 | | char ***names); |
530 | | |
531 | | /** @} */ |
532 | | |
533 | | /** |
534 | | * \defgroup audio_filters Audio filters |
535 | | * \ingroup filters |
536 | | * @{ |
537 | | */ |
538 | | |
539 | | /** |
540 | | * Enable or disable an audio filter ("audio-filter") |
541 | | * |
542 | | * \param aout a valid audio output |
543 | | * \param name a valid filter name |
544 | | * \param add true to add the filter, false to remove it |
545 | | * \return 0 on success, non-zero on failure. |
546 | | */ |
547 | | VLC_API int aout_EnableFilter(audio_output_t *aout, const char *name, bool add); |
548 | | |
549 | | typedef enum |
550 | | { |
551 | | AOUT_CHANIDX_DISABLE = -1, |
552 | | AOUT_CHANIDX_LEFT, |
553 | | AOUT_CHANIDX_RIGHT, |
554 | | AOUT_CHANIDX_MIDDLELEFT, |
555 | | AOUT_CHANIDX_MIDDLERIGHT, |
556 | | AOUT_CHANIDX_REARLEFT, |
557 | | AOUT_CHANIDX_REARRIGHT, |
558 | | AOUT_CHANIDX_REARCENTER, |
559 | | AOUT_CHANIDX_CENTER, |
560 | | AOUT_CHANIDX_LFE, |
561 | | AOUT_CHANIDX_MAX |
562 | | } vlc_chan_order_idx_t; |
563 | | |
564 | | static_assert(AOUT_CHANIDX_MAX == AOUT_CHAN_MAX, "channel count mismatch"); |
565 | | |
566 | 0 | #define AOUT_CHAN_REMAP_INIT { \ |
567 | 0 | AOUT_CHANIDX_LEFT, \ |
568 | 0 | AOUT_CHANIDX_RIGHT, \ |
569 | 0 | AOUT_CHANIDX_MIDDLELEFT, \ |
570 | 0 | AOUT_CHANIDX_MIDDLERIGHT, \ |
571 | 0 | AOUT_CHANIDX_REARLEFT, \ |
572 | 0 | AOUT_CHANIDX_REARRIGHT, \ |
573 | 0 | AOUT_CHANIDX_REARCENTER, \ |
574 | 0 | AOUT_CHANIDX_CENTER, \ |
575 | 0 | AOUT_CHANIDX_LFE, \ |
576 | 0 | } |
577 | | |
578 | | typedef struct |
579 | | { |
580 | | /** |
581 | | * If the remap order differs from the WG4 order, a remap audio filter will |
582 | | * be inserted to remap channels according to this array. |
583 | | */ |
584 | | int remap[AOUT_CHANIDX_MAX]; |
585 | | /** |
586 | | * If true, a filter will be inserted to add a headphones effect (like a |
587 | | * binauralizer audio filter). |
588 | | */ |
589 | | bool headphones; |
590 | | } aout_filters_cfg_t; |
591 | | |
592 | 0 | #define AOUT_FILTERS_CFG_INIT (aout_filters_cfg_t) \ |
593 | 0 | { .remap = AOUT_CHAN_REMAP_INIT, \ |
594 | 0 | .headphones = false, \ |
595 | 0 | }; |
596 | | |
597 | | typedef struct aout_filters aout_filters_t; |
598 | | |
599 | | VLC_API aout_filters_t *aout_FiltersNew(vlc_object_t *, |
600 | | const audio_sample_format_t *, |
601 | | const audio_sample_format_t *, |
602 | | const aout_filters_cfg_t *cfg) VLC_USED; |
603 | | #define aout_FiltersNew(o,inf,outf,remap) \ |
604 | | aout_FiltersNew(VLC_OBJECT(o),inf,outf,remap) |
605 | | VLC_API void aout_FiltersDelete(vlc_object_t *, aout_filters_t *); |
606 | | #define aout_FiltersDelete(o,f) \ |
607 | 0 | aout_FiltersDelete(VLC_OBJECT(o),f) |
608 | | VLC_API bool aout_FiltersAdjustResampling(aout_filters_t *, int); |
609 | | VLC_API block_t *aout_FiltersPlay(aout_filters_t *, block_t *, float rate); |
610 | | VLC_API block_t *aout_FiltersDrain(aout_filters_t *); |
611 | | VLC_API void aout_FiltersFlush(aout_filters_t *); |
612 | | VLC_API void aout_FiltersChangeViewpoint(aout_filters_t *, const vlc_viewpoint_t *vp); |
613 | | |
614 | | /** |
615 | | * Create a vout from an "visualization" audio filter. |
616 | | * |
617 | | * @warning Can only be called once, from the probe function (Open). |
618 | | * |
619 | | * @return a valid vout or NULL in case of error, the returned vout should not |
620 | | * be freed via vout_Close(). |
621 | | */ |
622 | | VLC_API vout_thread_t *aout_filter_GetVout(filter_t *, const video_format_t *); |
623 | | |
624 | | /** @} */ |
625 | | |
626 | | /** |
627 | | * @defgroup audio_output_meter Audio meter API |
628 | | * \ingroup audio_output |
629 | | * @{ |
630 | | */ |
631 | | |
632 | | /** |
633 | | * Audio loudness measurement |
634 | | */ |
635 | | struct vlc_audio_loudness |
636 | | { |
637 | | /** Momentary loudness (last 400 ms), in LUFS */ |
638 | | double loudness_momentary; |
639 | | /** Short term loudness (last 3seconds), in LUFS */ |
640 | | double loudness_shortterm; |
641 | | /** Integrated loudness (global), in LUFS */ |
642 | | double loudness_integrated; |
643 | | /** Loudness range, in LU */ |
644 | | double loudness_range; |
645 | | /** True Peak, in dBTP */ |
646 | | double truepeak; |
647 | | }; |
648 | | |
649 | | /** |
650 | | * Audio meter callback |
651 | | * |
652 | | * Triggered from vlc_audio_meter_Process() and vlc_audio_meter_Flush(). |
653 | | */ |
654 | | struct vlc_audio_meter_cbs |
655 | | { |
656 | | /** |
657 | | * Called when new loudness measurements are available |
658 | | * |
659 | | * @param date absolute date (likely in the future) of this measurement |
660 | | * @param loudness pointer to the loudness measurement |
661 | | * @param opaque pointer set by vlc_audio_meter_AddPlugin(). |
662 | | */ |
663 | | void (*on_loudness)(vlc_tick_t date, const struct vlc_audio_loudness *loudness, void *data); |
664 | | }; |
665 | | |
666 | | /** |
667 | | * Audio meter plugin opaque structure |
668 | | * |
669 | | * This opaque structure is returned by vlc_audio_meter_AddPlugin(). |
670 | | */ |
671 | | typedef struct vlc_audio_meter_plugin vlc_audio_meter_plugin; |
672 | | |
673 | | /** |
674 | | * Audio meter plugin owner structure |
675 | | * |
676 | | * Used to setup callbacks and private data |
677 | | * |
678 | | * Can be registered with vlc_audio_meter_AddPlugin(). |
679 | | */ |
680 | | struct vlc_audio_meter_plugin_owner |
681 | | { |
682 | | const struct vlc_audio_meter_cbs *cbs; |
683 | | void *sys; |
684 | | }; |
685 | | |
686 | | /** |
687 | | * Audio meter structure |
688 | | * |
689 | | * Initialise with vlc_audio_meter_Init() |
690 | | * |
691 | | * @warning variables of this struct should not be used directly |
692 | | */ |
693 | | struct vlc_audio_meter |
694 | | { |
695 | | vlc_mutex_t lock; |
696 | | vlc_object_t *parent; |
697 | | const audio_sample_format_t *fmt; |
698 | | |
699 | | struct vlc_list plugins; |
700 | | }; |
701 | | |
702 | | /** |
703 | | * Initialize the audio meter structure |
704 | | * |
705 | | * @param meter allocated audio meter structure |
706 | | * @param parent object that will be used to create audio filters |
707 | | */ |
708 | | VLC_API void |
709 | | vlc_audio_meter_Init(struct vlc_audio_meter *meter, vlc_object_t *parent); |
710 | 0 | #define vlc_audio_meter_Init(a,b) vlc_audio_meter_Init(a, VLC_OBJECT(b)) |
711 | | |
712 | | /** |
713 | | * Free allocated resource from the audio meter structure |
714 | | * |
715 | | * @param meter allocated audio meter structure |
716 | | */ |
717 | | VLC_API void |
718 | | vlc_audio_meter_Destroy(struct vlc_audio_meter *meter); |
719 | | |
720 | | /** |
721 | | * Set or reset the audio format |
722 | | * |
723 | | * This will reload all plugins added with vlc_audio_meter_AddPlugin() |
724 | | * |
725 | | * @param meter audio meter structure |
726 | | * @param fmt NULL to unload all plugins or a valid pointer to an audio format, |
727 | | * must stay valid during the lifetime of the audio meter (until |
728 | | * vlc_audio_meter_Reset() or vlc_audio_meter_Destroy() are called) |
729 | | * |
730 | | * @return VLC_SUCCESS on success, VLC_EGENERIC if a plugin failed to load |
731 | | */ |
732 | | VLC_API int |
733 | | vlc_audio_meter_Reset(struct vlc_audio_meter *meter, const audio_sample_format_t *fmt); |
734 | | |
735 | | /** |
736 | | * Add an "audio meter" plugin |
737 | | * |
738 | | * The module to be loaded if meter->fmt is valid, otherwise, the module |
739 | | * will be loaded from a next call to vlc_audio_meter_Reset() |
740 | | * |
741 | | * @param meter audio meter structure |
742 | | * @param chain name of the module, can contain specific module options using |
743 | | * the following chain convention:"name{option1=a,option2=b}" |
744 | | * @param owner pointer to a vlc_audio_meter_plugin_owner structure, the |
745 | | * structure must stay valid during the lifetime of the plugin |
746 | | * @return a valid audio meter plugin, or NULL in case of error |
747 | | */ |
748 | | VLC_API vlc_audio_meter_plugin * |
749 | | vlc_audio_meter_AddPlugin(struct vlc_audio_meter *meter, const char *chain, |
750 | | const struct vlc_audio_meter_plugin_owner *owner); |
751 | | |
752 | | /** |
753 | | * Remove an "audio meter" plugin |
754 | | * |
755 | | * @param meter audio meter structure |
756 | | * @param plugin plugin returned by vlc_audio_meter_AddPlugin() |
757 | | */ |
758 | | VLC_API void |
759 | | vlc_audio_meter_RemovePlugin(struct vlc_audio_meter *meter, vlc_audio_meter_plugin *plugin); |
760 | | |
761 | | /** |
762 | | * Process an audio block |
763 | | * |
764 | | * vlc_audio_meter_events callbacks can be triggered from this function. |
765 | | * |
766 | | * @param meter audio meter structure |
767 | | * @param block pointer to a block, this block won't be released of modified |
768 | | * from this function |
769 | | * @param date absolute date (likely in the future) when this block should be rendered |
770 | | */ |
771 | | VLC_API void |
772 | | vlc_audio_meter_Process(struct vlc_audio_meter *meter, block_t *block, vlc_tick_t date); |
773 | | |
774 | | /** |
775 | | * Flush all "audio meter" plugins |
776 | | * |
777 | | * vlc_audio_meter_events callbacks can be triggered from this function. |
778 | | * |
779 | | * @param meter audio meter structure |
780 | | */ |
781 | | VLC_API void |
782 | | vlc_audio_meter_Flush(struct vlc_audio_meter *meter); |
783 | | |
784 | | /** @} */ |
785 | | |
786 | | #endif /* VLC_AOUT_H */ |