devctxt.h
上传用户:qiulin1960
上传日期:2013-10-16
资源大小:2844k
文件大小:3k
源码类别:

Windows CE

开发平台:

Windows_Unix

  1. #pragma once
  2. // -----------------------------------------------------------------------------
  3. //
  4. //      THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
  5. //      ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
  6. //      THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
  7. //      PARTICULAR PURPOSE.
  8. //      Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved.
  9. //
  10. // -----------------------------------------------------------------------------
  11. #define SECONDARYGAINCLASSMAX 4
  12. // number of classes affected by the device gain
  13. #define SECONDARYDEVICEGAINCLASSMAX 2  
  14. class DeviceContext
  15. {
  16. public:
  17.     DeviceContext()
  18.     {
  19.         InitializeListHead(&m_StreamList);
  20.         m_dwGain = 0xFFFF;
  21.         m_dwDefaultStreamGain = 0xFFFF;
  22.         for (int i=0;i<SECONDARYGAINCLASSMAX;i++)
  23.         {
  24.             m_dwSecondaryGainLimit[i]=0xFFFF;
  25.         }
  26.     }
  27.     virtual BOOL IsSupportedFormat(LPWAVEFORMATEX lpFormat);
  28.     PBYTE TransferBuffer(PBYTE pBuffer, PBYTE pBufferEnd, DWORD *pNumStreams);
  29.     void NewStream(StreamContext *pStreamContext);
  30.     void DeleteStream(StreamContext *pStreamContext);
  31.     DWORD GetGain()
  32.     {
  33.         return m_dwGain;
  34.     }
  35.     DWORD SetGain(DWORD dwGain)
  36.     {
  37.         m_dwGain = dwGain;
  38.         RecalcAllGains();
  39.         return MMSYSERR_NOERROR;
  40.     }
  41.     DWORD GetDefaultStreamGain()
  42.     {
  43.         return m_dwDefaultStreamGain;
  44.     }
  45.     DWORD SetDefaultStreamGain(DWORD dwGain)
  46.     {
  47.         m_dwDefaultStreamGain = dwGain;
  48.         return MMSYSERR_NOERROR;
  49.     }
  50.     DWORD GetSecondaryGainLimit(DWORD GainClass)
  51.     {
  52.         return m_dwSecondaryGainLimit[GainClass];
  53.     }
  54.     DWORD SetSecondaryGainLimit(DWORD GainClass, DWORD Limit)
  55.     {
  56.         if (GainClass>=SECONDARYGAINCLASSMAX)
  57.         {
  58.             return MMSYSERR_ERROR;
  59.         }
  60.         m_dwSecondaryGainLimit[GainClass]=Limit;
  61.         RecalcAllGains();
  62.         return MMSYSERR_NOERROR;
  63.     }
  64.     void RecalcAllGains();
  65.     DWORD OpenStream(LPWAVEOPENDESC lpWOD, DWORD dwFlags, StreamContext **ppStreamContext);
  66.     virtual DWORD GetExtDevCaps(PVOID pCaps, DWORD dwSize)=0;
  67.     virtual DWORD GetDevCaps(PVOID pCaps, DWORD dwSize)=0;
  68.     virtual void StreamReadyToRender(StreamContext *pStreamContext)=0;
  69.     virtual StreamContext *CreateStream(LPWAVEOPENDESC lpWOD)=0;
  70. protected:
  71.     LIST_ENTRY  m_StreamList;         // List of streams rendering to/from this device
  72.     DWORD       m_dwGain;
  73.     DWORD       m_dwDefaultStreamGain;
  74.     DWORD m_dwSecondaryGainLimit[SECONDARYGAINCLASSMAX];
  75. };
  76. class InputDeviceContext : public DeviceContext
  77. {
  78. public:
  79.     StreamContext *CreateStream(LPWAVEOPENDESC lpWOD);
  80.     DWORD GetExtDevCaps(PVOID pCaps, DWORD dwSize);
  81.     DWORD GetDevCaps(PVOID pCaps, DWORD dwSize);
  82.     void StreamReadyToRender(StreamContext *pStreamContext);
  83. };
  84. class OutputDeviceContext : public DeviceContext
  85. {
  86. public:
  87.     BOOL IsSupportedFormat(LPWAVEFORMATEX lpFormat);
  88.     StreamContext *CreateStream(LPWAVEOPENDESC lpWOD);
  89.     DWORD GetExtDevCaps(PVOID pCaps, DWORD dwSize);
  90.     DWORD GetDevCaps(PVOID pCaps, DWORD dwSize);
  91.     void StreamReadyToRender(StreamContext *pStreamContext);
  92. };