Coverage Report

Created: 2026-06-09 09:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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 */