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
42CEchoGalsVmixer::CEchoGalsVmixer( PCOsSupport pOsSupport )
43		  : CEchoGals( pOsSupport )
44{
45	ECHO_DEBUGPRINTF( ( "CEchoGalsVmixer::CEchoGalsVmixer() is born!\n" ) );
46
47}	// CEchoGalsVmixer::CEchoGalsVmixer()
48
49
50CEchoGalsVmixer::~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
74ECHOSTATUS 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
103ECHOSTATUS 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
139ECHOSTATUS 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