]> git.sesse.net Git - vlc/blob - include/vlc_aout_mixer.h
Merge branch 'master' into lpcm_encoder
[vlc] / include / vlc_aout_mixer.h
1 /*****************************************************************************
2  * vlc_aout_mixer.h : audio output mixer interface
3  *****************************************************************************
4  * Copyright (C) 2002-2009 the VideoLAN team
5  * $Id$
6  *
7  * Authors: Christophe Massiot <massiot@via.ecp.fr>
8  *          Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23  *****************************************************************************/
24
25 #ifndef VLC_AOUT_MIXER_H
26 #define VLC_AOUT_MIXER_H 1
27
28 /**
29  * \file
30  * This file defines functions, structures and macros for audio output mixer object
31  */
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
37 //#include <vlc_aout.h>
38
39 /* */
40 typedef struct aout_mixer_sys_t aout_mixer_sys_t;
41 typedef struct aout_mixer_t aout_mixer_t;
42
43 typedef struct {
44     /* Is the input to be ignored while mixing */
45     bool        is_invalid;
46
47     /* */
48     aout_fifo_t fifo;
49
50     /* Pointer on the first byte of data to mix.
51      *
52      * It points in the first buffer of fifo
53      */
54     uint8_t     *begin;
55
56     /* Software multiplier */
57     float       multiplier;
58 } aout_mixer_input_t;
59
60 /** 
61  * audio output mixer
62  */
63 struct aout_mixer_t {
64     VLC_COMMON_MEMBERS
65
66     /* Module */
67     module_t *module;
68
69     /* Mixer format.
70      *
71      * You cannot modify it.
72      */
73     audio_sample_format_t fmt;
74
75     /* Mixer output buffer allocation method.
76      *
77      * You can override it in the open function only.
78      */
79     aout_alloc_t          allocation;
80
81     /* Multiplier used to raise or lower the volume of the sound in
82      * software.
83      */
84     float                 multiplier;
85
86     /* Array of mixer inputs */
87     unsigned              input_count;
88     aout_mixer_input_t    **input;
89
90     /* Mix input into the given buffer (mandatory) */
91     void (*mix)(aout_mixer_t *, aout_buffer_t *);
92
93     /* Private place holder for the aout_mixer_t module (optional)
94      *
95      * A module is free to use it as it wishes.
96      */
97     aout_mixer_sys_t *sys;
98 };
99
100 #ifdef __cplusplus
101 }
102 #endif
103
104 #endif