windows-nt/Source/XPSP1/NT/drivers/wdm/audio/sysaudio/pni.h
2020-09-26 16:20:57 +08:00

119 lines
2.9 KiB
C++

//---------------------------------------------------------------------------
//
// Module: pni.h
//
// Description: Pin Node Instance Class
//
//
//@@BEGIN_MSINTERNAL
// Development Team:
// Mike McLaughlin
//
// History: Date Author Comment
//
//@@END_MSINTERNAL
//---------------------------------------------------------------------------
//
// 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.
//
// Copyright (c) 1996-1999 Microsoft Corporation. All Rights Reserved.
//
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
// Constants and Macros
//---------------------------------------------------------------------------
#define SETSTATE_FLAG_IGNORE_ERROR 0x00000001
#define SETSTATE_FLAG_SINK 0x00000002
#define SETSTATE_FLAG_SOURCE 0x00000004
#define MAX_STATES (KSSTATE_RUN+1)
// Enable temp fix for LEAKING the last portion of previous sound.
#define FIX_SOUND_LEAK 1
//---------------------------------------------------------------------------
// Classes
//---------------------------------------------------------------------------
#ifdef DEBUG
typedef class CPinNodeInstance : public CListMultiItem
#else
typedef class CPinNodeInstance : public CObj
#endif
{
private:
~CPinNodeInstance(
);
public:
static NTSTATUS
Create(
PPIN_NODE_INSTANCE *ppPinNodeInstance,
PFILTER_NODE_INSTANCE pFilterNodeInstance,
PPIN_NODE pPinNode,
PKSPIN_CONNECT pPinConnect,
BOOL fRender
#ifdef FIX_SOUND_LEAK
,BOOL fDirectConnection
#endif
);
VOID
Destroy(
)
{
if(this != NULL) {
Assert(this);
delete this;
}
};
NTSTATUS
SetState(
KSSTATE NewState,
KSSTATE PreviousState,
ULONG ulFlags
);
#ifdef DEBUG
ENUMFUNC Dump();
#endif
PPIN_NODE pPinNode;
PFILE_OBJECT pFileObject;
HANDLE hPin;
private:
KSSTATE CurrentState;
int cState[MAX_STATES];
PFILTER_NODE_INSTANCE pFilterNodeInstance;
BOOL fRender;
#ifdef FIX_SOUND_LEAK
BOOL fDirectConnection;
BOOL ForceRun;
#endif
public:
DefineSignature(0x20494E50); // PNI
} PIN_NODE_INSTANCE, *PPIN_NODE_INSTANCE;
//---------------------------------------------------------------------------
#ifdef DEBUG
typedef ListMulti<PIN_NODE_INSTANCE> LIST_PIN_NODE_INSTANCE;
typedef LIST_PIN_NODE_INSTANCE *PLIST_PIN_NODE_INSTANCE;
//---------------------------------------------------------------------------
// Globals
//---------------------------------------------------------------------------
extern PLIST_PIN_NODE_INSTANCE gplstPinNodeInstance;
#endif