📄 devctxt.h
字号:
#pragma once
//-----------------------------------------------------------------------------
// Copyright (c) Wolfson Microelectronics plc. All rights reserved.
//
// This software as well as any related documentation is furnished under
// license and may only be used or copied in accordance with the terms of the
// license. The information in this file is furnished for informational use
// only, is subject to change without notice, and should not be construed as
// a commitment by Wolfson Microelectronics plc. Wolfson Microelectronics plc
// assumes no responsibility or liability for any errors or inaccuracies that
// may appear in this document or any software that may be provided in
// association with this document.
//
// Except as permitted by such license, no part of this document may be
// reproduced, stored in a retrieval system, or transmitted in any form or by
// any means without the express written consent of Wolfson Microelectronics plc.
//
// $Id: devctxt.h 2719 2006-02-08 13:13:48Z ian $
//
// This file declares the device context for the WaveDev2 driver for
// Wolfson codecs.
//
// Warning:
// This driver is specifically written for Wolfson Audio Codecs. It is
// not a general Audio CODEC device driver.
//-----------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
// -----------------------------------------------------------------------------
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// -----------------------------------------------------------------------------
#include <WMConfig.h>
#define SECONDARYGAINCLASSMAX 4
// number of classes affected by the device gain
#define SECONDARYDEVICEGAINCLASSMAX 2
#define HIFIINPUTSAMPLERATE 44100
#define HIFIOUTPUTSAMPLERATE 44100
#define VOICESAMPLERATE 8000
#define MONOSAMPLERATE 11025
#if defined(MONO_GAIN)
#define MAX_GAIN 0xFFFF
#else
#define MAX_GAIN 0xFFFFFFFF
#endif
class DeviceContext
{
public:
DeviceContext()
{
InitializeListHead(&m_StreamList);
m_dwGain = MAX_GAIN;
m_dwDefaultStreamGain = MAX_GAIN;
for (int i=0;i<SECONDARYGAINCLASSMAX;i++)
{
m_dwSecondaryGainLimit[i]=MAX_GAIN;
}
}
virtual BOOL IsSupportedFormat(LPWAVEFORMATEX lpFormat);
PBYTE TransferBuffer(PBYTE pBuffer, PBYTE pBufferEnd, DWORD *pNumStreams);
void NewStream(StreamContext *pStreamContext);
void DeleteStream(StreamContext *pStreamContext);
DWORD GetGain()
{
return m_dwGain;
}
DWORD SetGain(DWORD dwGain)
{
m_dwGain = dwGain;
RecalcAllGains();
return MMSYSERR_NOERROR;
}
DWORD GetDefaultStreamGain()
{
return m_dwDefaultStreamGain;
}
DWORD SetDefaultStreamGain(DWORD dwGain)
{
m_dwDefaultStreamGain = dwGain;
return MMSYSERR_NOERROR;
}
DWORD GetSecondaryGainLimit(DWORD GainClass)
{
return m_dwSecondaryGainLimit[GainClass];
}
DWORD SetSecondaryGainLimit(DWORD GainClass, DWORD Limit)
{
if (GainClass>=SECONDARYGAINCLASSMAX)
{
return MMSYSERR_ERROR;
}
m_dwSecondaryGainLimit[GainClass]=Limit;
RecalcAllGains();
return MMSYSERR_NOERROR;
}
void RecalcAllGains();
DWORD OpenStream(LPWAVEOPENDESC lpWOD, DWORD dwFlags, StreamContext **ppStreamContext);
virtual DWORD GetExtDevCaps(PVOID pCaps, DWORD dwSize)=0;
virtual DWORD GetDevCaps(PVOID pCaps, DWORD dwSize)=0;
virtual void StreamReadyToRender(StreamContext *pStreamContext)=0;
virtual StreamContext *CreateStream(LPWAVEOPENDESC lpWOD)=0;
BOOL IsStereo() const { return NumChannels() > 1; }
virtual unsigned int NumChannels() const = 0;
virtual unsigned int SampleRate() const = 0;
UINT32 InverseSampleRate() const { return m_invSampleRate; }
protected:
LIST_ENTRY m_StreamList; // List of streams rendering to/from this device
DWORD m_dwGain;
DWORD m_dwDefaultStreamGain;
DWORD m_dwSecondaryGainLimit[SECONDARYGAINCLASSMAX];
// Inverse sample rate, in .32 fixed format
UINT32 m_invSampleRate;
};
class HiFiInputDeviceContext : public DeviceContext
{
public:
StreamContext *CreateStream(LPWAVEOPENDESC lpWOD);
DWORD GetExtDevCaps(PVOID pCaps, DWORD dwSize);
DWORD GetDevCaps(PVOID pCaps, DWORD dwSize);
void StreamReadyToRender(StreamContext *pStreamContext);
virtual unsigned int NumChannels() const { return 2; } // Stereo
virtual unsigned int SampleRate() const { return HIFIINPUTSAMPLERATE; }
};
class HiFiOutputDeviceContext : public DeviceContext
{
public:
BOOL IsSupportedFormat(LPWAVEFORMATEX lpFormat);
StreamContext *CreateStream(LPWAVEOPENDESC lpWOD);
DWORD GetExtDevCaps(PVOID pCaps, DWORD dwSize);
DWORD GetDevCaps(PVOID pCaps, DWORD dwSize);
void StreamReadyToRender(StreamContext *pStreamContext);
virtual unsigned int NumChannels() const { return 2; } // Stereo
virtual unsigned int SampleRate() const { return HIFIOUTPUTSAMPLERATE; }
};
#if WM_VOICE
class VoiceOutputDeviceContext : public DeviceContext
{
public:
BOOL IsSupportedFormat(LPWAVEFORMATEX lpFormat);
StreamContext *CreateStream(LPWAVEOPENDESC lpWOD);
DWORD GetExtDevCaps(PVOID pCaps, DWORD dwSize);
DWORD GetDevCaps(PVOID pCaps, DWORD dwSize);
void StreamReadyToRender(StreamContext *pStreamContext);
virtual unsigned int NumChannels() const { return 1; } // Mono
virtual unsigned int SampleRate() const { return VOICESAMPLERATE; }
};
class VoiceInputDeviceContext : public DeviceContext
{
public:
StreamContext *CreateStream(LPWAVEOPENDESC lpWOD);
DWORD GetExtDevCaps(PVOID pCaps, DWORD dwSize);
DWORD GetDevCaps(PVOID pCaps, DWORD dwSize);
void StreamReadyToRender(StreamContext *pStreamContext);
virtual unsigned int NumChannels() const { return 1; } // Mono
virtual unsigned int SampleRate() const { return VOICESAMPLERATE; }
};
#endif /* WM_VOICE */
#if WM_MONODAC
class MonoOutputDeviceContext : public DeviceContext
{
public:
BOOL IsSupportedFormat(LPWAVEFORMATEX lpFormat);
StreamContext *CreateStream(LPWAVEOPENDESC lpWOD);
DWORD GetExtDevCaps(PVOID pCaps, DWORD dwSize);
DWORD GetDevCaps(PVOID pCaps, DWORD dwSize);
void StreamReadyToRender(StreamContext *pStreamContext);
virtual unsigned int NumChannels() const { return 1; } // Mono
virtual unsigned int SampleRate() const { return MONOSAMPLERATE; }
};
#endif // WM_MONODAC
//------------------------------- END OF FILE ----------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -