#include "CEchoGals.h"
#include "CDspCommObjectVmixer.h"
Construction and destruction
****************************************************************************/
CDspCommObjectVmixer::CDspCommObjectVmixer
(
PDWORD pdwRegBase,
PCOsSupport pOsSupport
) : CDspCommObject( pdwRegBase, pOsSupport )
{
}
CDspCommObjectVmixer::~CDspCommObjectVmixer()
{
}
Hardware setup and config
****************************************************************************/
ECHOSTATUS CDspCommObjectVmixer::GetAudioMeters
(
PECHOGALS_METERS pMeters
)
{
WORD i;
pMeters->iNumPipesIn = 0;
DWORD dwCh = 0;
pMeters->iNumBussesOut = (INT32) m_wNumBussesOut;
for (i = 0; i < m_wNumBussesOut; i++)
{
pMeters->iBusOutVU[i] =
DSP_TO_GENERIC( ((INT32) (char) m_pDspCommPage->VUMeter[ dwCh ]) );
pMeters->iBusOutPeak[i] =
DSP_TO_GENERIC( ((INT32) (char) m_pDspCommPage->PeakMeter[ dwCh ]) );
dwCh++;
}
pMeters->iNumBussesIn = (INT32) m_wNumBussesIn;
for (i = 0; i < m_wNumPipesIn; i++)
{
pMeters->iBusInVU[i] =
DSP_TO_GENERIC( ((INT32) (char) m_pDspCommPage->VUMeter[ dwCh ]) );
pMeters->iBusInPeak[i] =
DSP_TO_GENERIC( ((INT32) (char) m_pDspCommPage->PeakMeter[ dwCh ]) );
dwCh++;
}
pMeters->iNumPipesOut = (INT32) m_wNumPipesOut;
for (i = 0; i < m_wNumPipesOut; i++)
{
pMeters->iPipeOutVU[i] =
DSP_TO_GENERIC( ((INT32) (char) m_pDspCommPage->VUMeter[ dwCh ]) );
pMeters->iPipeOutPeak[i] =
DSP_TO_GENERIC( ((INT32) (char) m_pDspCommPage->PeakMeter[ dwCh ]) );
dwCh++;
}
return ECHOSTATUS_OK;
}
ECHOSTATUS CDspCommObjectVmixer::SetPipeOutGain
(
WORD wPipeOut,
WORD wBusOut,
INT32 iGain,
BOOL fImmediate
)
{
if (wPipeOut >= m_wNumPipesOut)
{
ECHO_DEBUGPRINTF( ("CDspCommObjectVmixer::SetPipeOutGain: Invalid out pipe "
"%d\n",
wPipeOut) );
return ECHOSTATUS_INVALID_CHANNEL;
}
iGain = GENERIC_TO_DSP(iGain);
if ( wBusOut < m_wNumBussesOut )
{
if ( !WaitForHandshake() )
return ECHOSTATUS_DSP_DEAD;
DWORD dwIndex = wBusOut * m_wNumPipesOut + wPipeOut;
m_pDspCommPage->byVmixerLevel[ dwIndex ] = (BYTE) iGain;
ECHO_DEBUGPRINTF( ("CDspCommObjectVmixer::SetPipeOutGain: Out pipe %d, "
"out bus %d = 0x%lx\n",
wPipeOut,
wBusOut,
iGain) );
*/
if (fImmediate)
{
return UpdateVmixerLevel();
}
return ECHOSTATUS_OK;
}
ECHO_DEBUGPRINTF( ("CDspCommObjectVmixer::SetPipeOutGain: Invalid out bus "
"%d\n",
wBusOut) );
return ECHOSTATUS_INVALID_CHANNEL;
}
ECHOSTATUS CDspCommObjectVmixer::GetPipeOutGain
(
WORD wPipeOut,
WORD wBusOut,
INT32 &iGain
)
{
if (wPipeOut >= m_wNumPipesOut)
{
ECHO_DEBUGPRINTF( ("CDspCommObjectVmixer::GetPipeOutGain: Invalid out pipe "
"%d\n",
wPipeOut) );
return ECHOSTATUS_INVALID_CHANNEL;
}
if (wBusOut < m_wNumBussesOut)
{
iGain = m_pDspCommPage->byVmixerLevel[ wBusOut * m_wNumPipesOut + wPipeOut ];
iGain = DSP_TO_GENERIC(iGain);
return ECHOSTATUS_OK;
}
ECHO_DEBUGPRINTF( ("CDspCommObjectVmixer::GetPipeOutGain: Invalid out bus "
"%d\n",
wBusOut) );
return ECHOSTATUS_INVALID_CHANNEL;
}
ECHOSTATUS CDspCommObjectVmixer::SetBusOutGain(WORD wBusOut,INT32 iGain)
{
if ( wBusOut < m_wNumBussesOut )
{
if ( !WaitForHandshake() )
return ECHOSTATUS_DSP_DEAD;
iGain = GENERIC_TO_DSP(iGain);
m_pDspCommPage->OutLineLevel[ wBusOut ] = (BYTE) iGain;
ECHO_DEBUGPRINTF( ("CDspCommObjectVmixer::SetBusOutGain: Out bus %d "
"= %lu\n",
wBusOut,
iGain) );
return UpdateAudioOutLineLevel();
}
ECHO_DEBUGPRINTF( ("CDspCommObjectVmixer::SetBusOutGain: Invalid out bus "
"%d\n",
wBusOut) );
return ECHOSTATUS_INVALID_CHANNEL;
}
ECHOSTATUS CDspCommObjectVmixer::UpdateVmixerLevel()
{
ClearHandshake();
return( SendVector( DSP_VC_SET_VMIXER_GAIN ) );
}