Leaked source code of windows server 2003
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.
 
 
 
 
 
 

116 lines
3.2 KiB

#pragma once
//==========================================================================;
//
// CWDMCaptureStream - Capture Stream base class declarations
//
// $Date: 22 Feb 1999 15:48:16 $
// $Revision: 1.1 $
// $Author: KLEBANOV $
//
// $Copyright: (c) 1997 - 1999 ATI Technologies Inc. All Rights Reserved. $
//
//==========================================================================;
#include "i2script.h"
#include "aticonfg.h"
#include "VidStrm.h"
typedef enum {
ChangeComplete,
Starting,
Closing,
Running,
Pausing,
Stopping,
Initializing
};
#define DD_OK 0
class CWDMCaptureStream : public CWDMVideoStream
{
public:
CWDMCaptureStream(PHW_STREAM_OBJECT pStreamObject,
CWDMVideoDecoder * pCWDMVideoDecoder,
PUINT puiErrorCode)
: CWDMVideoStream(pStreamObject, pCWDMVideoDecoder, puiErrorCode) {}
void Startup(PUINT puiErrorCode);
void Shutdown();
VOID STREAMAPI VideoReceiveDataPacket(IN PHW_STREAM_REQUEST_BLOCK pSrb);
void TimeoutPacket(IN OUT PHW_STREAM_REQUEST_BLOCK pSrb);
VOID VideoSetState(PHW_STREAM_REQUEST_BLOCK, BOOL bVPConnected, BOOL bVPVBIConnected);
VOID VideoGetProperty(PHW_STREAM_REQUEST_BLOCK);
VOID VideoStreamGetConnectionProperty (PHW_STREAM_REQUEST_BLOCK);
VOID VideoStreamGetDroppedFramesProperty(PHW_STREAM_REQUEST_BLOCK);
VOID DataLock(PKIRQL pIrql) {
KeAcquireSpinLock(&m_streamDataLock, pIrql);
}
VOID DataUnLock(KIRQL Irql) {
KeReleaseSpinLock(&m_streamDataLock, Irql);
}
void CloseCapture();
void CancelPacket( PHW_STREAM_REQUEST_BLOCK);
protected:
UINT m_stateChange;
KSPIN_LOCK m_streamDataLock;
// Incoming SRBs go here
LIST_ENTRY m_incomingDataSrbQueue;
// SRBs in DDraw-land are moved to this queue
LIST_ENTRY m_waitQueue;
// During some state transitions, we need to
// temporarily move SRBs here (purely for the
// purpose of reordering them) before being
// returned to the incomingDataSrbQueue.
LIST_ENTRY m_reversalQueue;
// for synchronizing state changes
KEVENT m_specialEvent;
KEVENT m_SrbAvailableEvent;
KEVENT m_stateTransitionEvent;
// We get this from Ddraw
HANDLE m_hCapture;
private:
BOOL FlushBuffers();
BOOL ResetFieldNumber();
BOOL ReleaseCaptureHandle();
VOID EmptyIncomingDataSrbQueue();
VOID HandleStateTransition();
void AddBuffersToDirectDraw();
BOOL AddBuffer(PHW_STREAM_REQUEST_BLOCK);
VOID HandleBusmasterCompletion(PHW_STREAM_REQUEST_BLOCK);
VOID TimeStampSrb(PHW_STREAM_REQUEST_BLOCK);
virtual void ResetFrameCounters() = 0;
virtual ULONG GetFrameSize() = 0;
virtual void GetDroppedFrames(PKSPROPERTY_DROPPEDFRAMES_CURRENT_S pDroppedFrames) = 0;
virtual BOOL GetCaptureHandle() = 0;
virtual ULONG GetFieldInterval() = 0;
virtual void SetFrameInfo(PHW_STREAM_REQUEST_BLOCK) = 0;
void ThreadProc();
static void ThreadStart(CWDMCaptureStream *pStream)
{ pStream->ThreadProc(); }
};