source: roaraudio/roard/mixer.c @ 3212:3bfa4f5edb8c

Last change on this file since 3212:3bfa4f5edb8c was 3212:3bfa4f5edb8c, checked in by phi, 14 years ago

set mixer delay

File size: 2.0 KB
Line 
1//mixer.c:
2
3/*
4 *      Copyright (C) Philipp 'ph3-der-loewe' Schafft - 2008, 2009
5 *
6 *  This file is part of roard a part of RoarAudio,
7 *  a cross-platform sound system for both, home and professional use.
8 *  See README for details.
9 *
10 *  This file is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License version 3
12 *  as published by the Free Software Foundation.
13 *
14 *  RoarAudio is distributed in the hope that it will be useful,
15 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *  GNU General Public License for more details.
18 *
19 *  You should have received a copy of the GNU General Public License
20 *  along with this software; see the file COPYING.  If not, write to
21 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
22 *
23 */
24
25#include "roard.h"
26
27int need_vol_change  (int channels, struct roar_mixer_settings * set) {
28 int i;
29
30 if ( set == NULL || channels < 1 || channels > ROAR_MAX_CHANNELS )
31  return -1;
32
33 if ( set->rpg_mul != set->rpg_div )
34  return 1;
35
36 for (i = 0; i < channels; i++)
37  if ( set->mixer[i] != set->scale )
38   return 1;
39
40 return 0;
41}
42
43#define _err() streams_delete(stream); return -1
44int add_mixer (int subsys, char * name, struct roar_stream_server ** ss_ptr) {
45 struct roar_stream_server * ss;
46 int stream;
47
48 if ( (stream = streams_new()) == -1 )
49  return -1;
50
51 if ( streams_get(stream, &ss) == -1 ) {
52  _err();
53 }
54
55 if ( streams_set_name(stream, name) == -1 ) {
56  _err();
57 }
58
59 if ( client_stream_add(g_self_client, stream) == -1 ) {
60  _err();
61 }
62
63 if ( streams_set_dir(stream, ROAR_DIR_MIXING, 1) == -1 ) {
64  _err();
65 }
66
67 // the mixers are the most sync thing we have...
68 if ( streams_set_rawflag(stream, ROAR_FLAG_SYNC) == -1 ) {
69  _err();
70 }
71
72 if ( streams_set_flag(stream, ROAR_FLAG_IMMUTABLE) == -1 ) {
73  _err();
74 }
75
76 switch (subsys) {
77  case ROAR_SUBSYS_WAVEFORM:
78    ss->delay = _MEGA/ROAR_OUTPUT_CFREQ;
79   break;
80 }
81
82 if ( ss_ptr != NULL )
83  *ss_ptr = ss;
84
85 return stream;
86}
87
88//ll
Note: See TracBrowser for help on using the repository browser.