1 // ****************************************************************************
2 //
3 // CEchoGalsVmixer.cpp
4 //
5 // CEchoGalsVmixer is used to add virtual output mixing to the base
6 // CEchoGals class.
7 //
8 // Set editor tabs to 3 for your viewing pleasure.
9 //
10 // ----------------------------------------------------------------------------
11 //
12 // This file is part of Echo Digital Audio's generic driver library.
13 // Copyright Echo Digital Audio Corporation (c) 1998 - 2005
14 // All rights reserved
15 // www.echoaudio.com
16 //
17 // This library is free software; you can redistribute it and/or
18 // modify it under the terms of the GNU Lesser General Public
19 // License as published by the Free Software Foundation; either
20 // version 2.1 of the License, or (at your option) any later version.
21 //
22 // This library is distributed in the hope that it will be useful,
23 // but WITHOUT ANY WARRANTY; without even the implied warranty of
24 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
25 // Lesser General Public License for more details.
26 //
27 // You should have received a copy of the GNU Lesser General Public
28 // License along with this library; if not, write to the Free Software
29 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30 //
31 // ****************************************************************************
32
33 #include "CEchoGalsVmixer.h"
34
35
36 //****************************************************************************
37 //
38 // Constructor and destructor
39 //
40 //****************************************************************************
41
CEchoGalsVmixer(PCOsSupport pOsSupport)42 CEchoGalsVmixer::CEchoGalsVmixer( PCOsSupport pOsSupport )
43 : CEchoGals( pOsSupport )
44 {
45 ECHO_DEBUGPRINTF( ( "CEchoGalsVmixer::CEchoGalsVmixer() is born!\n" ) );
46
47 } // CEchoGalsVmixer::CEchoGalsVmixer()
48
49
~CEchoGalsVmixer()50 CEchoGalsVmixer::~CEchoGalsVmixer()
51 {
52 ECHO_DEBUGPRINTF( ( "CEchoGalsVmixer::~CEchoGalsVmixer() is toast!\n" ) );
53 } // CEchoGalsVmixer::~CEchoGalsVmixer()
54
55
56
57
58 //****************************************************************************
59 //
60 // Vmixer
61 //
62 //****************************************************************************
63
64 //===========================================================================
65 //
66 // Most of the cards don't have an actual output bus gain; they only
67 // have gain controls for output pipes; the output bus gain is implemented
68 // as a logical control. Vmixer cards work fifferently; it does have
69 // a physical output bus gain control, so just pass the gain down to the
70 // DSP comm object.
71 //
72 //===========================================================================
73
AdjustPipesOutForBusOut(WORD wBusOut,INT32 iBusOutGain)74 ECHOSTATUS CEchoGalsVmixer::AdjustPipesOutForBusOut(WORD wBusOut,INT32 iBusOutGain)
75 {
76 WORD wPipe;
77
78 ECHO_DEBUGPRINTF(("CEchoGalsVmixer::AdjustPipesOutForBusOut wBusOut %d iBusOutGain %ld\n",
79 wBusOut,
80 iBusOutGain));
81
82 wBusOut &= 0xfffe;
83 for (wPipe = 1; wPipe < GetNumPipesOut(); wPipe++)
84 {
85 m_PipeOutCtrl.SetGain( wPipe, wBusOut, ECHOGAIN_UPDATE, FALSE);
86 }
87
88 m_PipeOutCtrl.SetGain( 0, wBusOut, ECHOGAIN_UPDATE, TRUE);
89
90 return ECHOSTATUS_OK;
91
92 } // AdjustPipesOutForBusOut
93
94
95 //===========================================================================
96 //
97 // GetBaseCapabilities is used by the CEchoGals-derived classes to
98 // help fill out the ECHOGALS_CAPS struct. Override this here to add
99 // the vmixer stuff.
100 //
101 //===========================================================================
102
GetBaseCapabilities(PECHOGALS_CAPS pCapabilities)103 ECHOSTATUS CEchoGalsVmixer::GetBaseCapabilities
104 (
105 PECHOGALS_CAPS pCapabilities
106 )
107 {
108 DWORD i;
109 ECHOSTATUS Status;
110
111 //
112 // Base class
113 //
114 Status = CEchoGals::GetBaseCapabilities(pCapabilities);
115
116 //
117 // Add meters & pans to output pipes
118 //
119 for (i = 0 ; i < GetNumPipesOut(); i++)
120 {
121 pCapabilities->dwPipeOutCaps[i] |= ECHOCAPS_PEAK_METER |
122 ECHOCAPS_PAN;
123 }
124
125 return Status;
126
127 } // GetBaseCapabilities
128
129
130 //===========================================================================
131 //
132 // Adjust all the monitor levels for a particular output bus
133 //
134 // For vmixer cards, need to force the "update monitors" command
135 // for the DSP 'cos it doesn't get sent otherwise.
136 //
137 //===========================================================================
138
AdjustMonitorsForBusOut(WORD wBusOut)139 ECHOSTATUS CEchoGalsVmixer::AdjustMonitorsForBusOut(WORD wBusOut)
140 {
141 ECHOSTATUS Status;
142
143 //
144 // Call the base class
145 //
146 Status = CEchoGals::AdjustMonitorsForBusOut( wBusOut );
147 if (ECHOSTATUS_OK == Status)
148 {
149 GetDspCommObject()->UpdateAudioOutLineLevel();
150 }
151
152 return Status;
153
154 } // AdjustMonitorsForBusOut
155
156
157 // *** CEchoGalsVmixer.cpp ***
158