mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
4.1 KiB
161 lines
4.1 KiB
/******************************Module*Header*******************************\
|
|
* Module Name: mixer.h
|
|
*
|
|
* Internal header file for mixer.c
|
|
*
|
|
*
|
|
* Created: 27-10-93
|
|
* Author: Stephen Estrop [StephenE]
|
|
*
|
|
* Copyright (c) 1993-2001 Microsoft Corporation
|
|
\**************************************************************************/
|
|
#define UNICODE
|
|
#ifndef WIN32
|
|
#define WIN32
|
|
#endif
|
|
|
|
#include <stdlib.h>
|
|
#include <windows.h>
|
|
#include "mmsystem.h" // pick up the internal one
|
|
#include "mmsysp.h" // pick up the internal one
|
|
#include "mmddk.h"
|
|
#define NONEWWAVE
|
|
#include <mmreg.h>
|
|
#undef NONEWWAVE
|
|
|
|
//
|
|
// Avoid including msacm.h - in any case this define should be in mmreg.h
|
|
//
|
|
#ifndef DRVM_MAPPER_STATUS
|
|
#define DRVM_MAPPER_STATUS (0x2000)
|
|
#endif
|
|
|
|
#ifndef WIDM_MAPPER_STATUS
|
|
#define WIDM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0)
|
|
#define WAVEIN_MAPPER_STATUS_DEVICE 0
|
|
#define WAVEIN_MAPPER_STATUS_MAPPED 1
|
|
#endif
|
|
|
|
#ifndef WODM_MAPPER_STATUS
|
|
#define WODM_MAPPER_STATUS (DRVM_MAPPER_STATUS + 0)
|
|
#define WAVEOUT_MAPPER_STATUS_DEVICE 0
|
|
#define WAVEOUT_MAPPER_STATUS_MAPPED 1
|
|
#endif
|
|
|
|
#define MMDDKINC
|
|
#include "winmmi.h"
|
|
|
|
#define MIXMGR_ENTER EnterCriticalSection(&HandleListCritSec)
|
|
#define MIXMGR_LEAVE LeaveCriticalSection(&HandleListCritSec)
|
|
|
|
//typedef struct
|
|
//{
|
|
// HDRVR hdrvr; // handle to the module
|
|
// DRIVERMSGPROC drvMessage; // pointer to entry point
|
|
// BYTE bNumDevs; // number of devices supported
|
|
// BYTE bUsage; // usage count (number of handles open)
|
|
// DWORD cookie; // cookie used for WDM devices.
|
|
// CRITICAL_SECTION MixerCritSec; // Serialize use of mixer
|
|
// WCHAR wszDrvEntry[64]; // driver filename
|
|
//} MIXERDRV, *PMIXERDRV;
|
|
|
|
typedef struct tMIXERDEV
|
|
{
|
|
UINT uHandleType; // for parameter validation
|
|
|
|
struct tMIXERDEV *pmxdevNext; /* How quaint, a linked list... */
|
|
PMIXERDRV pmxdrv;
|
|
UINT wDevice;
|
|
DWORD_PTR dwDrvUser;
|
|
UINT uDeviceID;
|
|
|
|
DWORD fdwSupport; // from the driver's mixercaps
|
|
DWORD cDestinations; // from the driver's mixercaps
|
|
|
|
DWORD_PTR dwCallback; // client's callback and inst data
|
|
DWORD_PTR dwInstance;
|
|
|
|
DWORD fdwOpen; /* The open flags the caller used */
|
|
DWORD fdwHandle;
|
|
} MIXERDEV, *PMIXERDEV;
|
|
|
|
/* -------------------------------------------------------------------------
|
|
** internal function prototypes
|
|
** -------------------------------------------------------------------------
|
|
*/
|
|
BOOL CALLBACK MixerCallbackFunc(
|
|
HMIXER hmx,
|
|
UINT uMsg,
|
|
DWORD_PTR dwInstance,
|
|
DWORD_PTR dwParam1,
|
|
DWORD_PTR dwParam2
|
|
);
|
|
|
|
|
|
MMRESULT mixerReferenceDriverById(
|
|
IN UINT uId,
|
|
OUT PMIXERDRV *ppdrv OPTIONAL,
|
|
OUT UINT *pport OPTIONAL
|
|
);
|
|
|
|
DWORD NEAR PASCAL IMixerMessageHandle(
|
|
HMIXER hmx,
|
|
UINT uMsg,
|
|
DWORD_PTR dwP1,
|
|
DWORD_PTR dwP2
|
|
);
|
|
|
|
DWORD NEAR PASCAL IMixerMessageId(
|
|
UINT uDeviceID,
|
|
UINT uMsg,
|
|
DWORD_PTR dwParam1,
|
|
DWORD_PTR dwParam2
|
|
);
|
|
|
|
void
|
|
ConvertMIXERLINEWToMIXERLINEA(
|
|
PMIXERLINEA pmxlA,
|
|
PMIXERLINEW pmxlW
|
|
);
|
|
|
|
MMRESULT IMixerGetID(
|
|
HMIXEROBJ hmxobj,
|
|
PUINT puMxId,
|
|
LPMIXERLINE pmxl,
|
|
DWORD fdwId
|
|
);
|
|
|
|
|
|
/* -------------------------------------------------------------------------
|
|
** Loading and initialization functions
|
|
** -------------------------------------------------------------------------
|
|
*/
|
|
BOOL mmDrvInstallMixer(
|
|
HDRVR hdrvr,
|
|
DRIVERMSGPROC drvMessage,
|
|
UINT wFlags,
|
|
LPCTSTR tszDrvEntry
|
|
);
|
|
|
|
BOOL IMixerUnloadDrivers(
|
|
HDRVR hdrvrSelf
|
|
);
|
|
|
|
HDRVR mmDrvOpenMixer(
|
|
LPTSTR szAlias
|
|
);
|
|
|
|
BOOL IMixerLoadDrivers(
|
|
void
|
|
);
|
|
|
|
/* -------------------------------------------------------------------------
|
|
** Make sizeof return the number of chars when applied to a character array
|
|
** which may be unicoded.
|
|
** -------------------------------------------------------------------------
|
|
*/
|
|
#ifdef UNICODE
|
|
#define SIZEOF(x) (sizeof(x)/sizeof(WCHAR))
|
|
#else
|
|
#define SIZEOF(x) sizeof(x)
|
|
#endif
|