⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wdmvdec.h

📁 传说中的 视频抓取驱动源码 啊啊啊啊啊啊啊啊啊啊啊啊啊
💻 H
字号:
#pragma once

//==========================================================================;
//
//	WDM Video Decoder common SRB dispatcher
//
//		$Date:   05 Aug 1998 11:22:30  $
//	$Revision:   1.0  $
//	  $Author:   Tashjian  $
//
// $Copyright:	(c) 1997 - 1998  ATI Technologies Inc.  All Rights Reserved.  $
//
//==========================================================================;


#include "CapStrm.h"
#include "VPStrm.h"
#include "CapVBI.h"
#include "CapVideo.h"
#include "decvport.h"

#include "ddkmapi.h"


typedef struct
{
	// Please don't move srbListEntry from its first place in the structure
	LIST_ENTRY					srbListEntry;

	PHW_STREAM_REQUEST_BLOCK	pSrb;
    KEVENT                      bufferDoneEvent;
    DDCAPBUFFINFO               ddCapBuffInfo;
} SRB_DATA_EXTENSION, * PSRB_DATA_EXTENSION;


class CWDMVideoDecoder
{
public:
	CWDMVideoDecoder( PPORT_CONFIGURATION_INFORMATION pConfigInfo, 
					  CVideoDecoderDevice* pDevice );
	virtual ~CWDMVideoDecoder();

	void * operator new(size_t size, void * pAllocation) { return(pAllocation);}
	void operator delete(void * pAllocation) {}

	void	ReceivePacket		(PHW_STREAM_REQUEST_BLOCK pSrb);
	void	CancelPacket		(PHW_STREAM_REQUEST_BLOCK pSrb);
	void	TimeoutPacket		(PHW_STREAM_REQUEST_BLOCK pSrb);

	void	SetTunerInfo		(PHW_STREAM_REQUEST_BLOCK pSrb);
    BOOL	GetTunerInfo		(KS_TVTUNER_CHANGE_INFO *);

	NTSTATUS
		EventProc				( IN PHW_EVENT_DESCRIPTOR pEventDescriptor);

	void	ResetEvents()		{ m_preEventOccurred = m_postEventOccurred = FALSE; }
	void	SetPreEvent()		{ m_preEventOccurred = TRUE; }
	void	SetPostEvent()		{ m_postEventOccurred = TRUE; }
	BOOL	PreEventOccurred()	{ return m_preEventOccurred; }

	CVideoDecoderDevice* GetDevice() { return m_pDevice; }
	CDecoderVideoPort*	GetVideoPort() { return &m_CDecoderVPort; }	// video port

	BOOL    IsVideoPortPinConnected()       { return( m_pVideoPortStream != NULL); }
private:
	// for serializing SRB arriving into driver synchronization
	BOOL				m_bSrbInProcess;
	LIST_ENTRY			m_srbQueue;
	KSPIN_LOCK			m_spinLock;

	CVideoDecoderDevice *		m_pDevice;
	CDecoderVideoPort			m_CDecoderVPort;	// video port

	PDEVICE_OBJECT				m_pDeviceObject;

    // Channel Change information
    KS_TVTUNER_CHANGE_INFO		m_TVTunerChangeInfo;
    BOOL						m_TVTunerChanged;
	PHW_STREAM_REQUEST_BLOCK	m_TVTunerChangedSrb;

    // shared between full-screen DOS and res changes
    BOOL						m_preEventOccurred;
    BOOL						m_postEventOccurred;

	// Streams
    UINT						m_OpenStreams;
    CWDMVideoPortStream *		m_pVideoPortStream;
    CWDMVBICaptureStream *		m_pVBICaptureStream;
    CWDMVideoCaptureStream *	m_pVideoCaptureStream;

	UINT						m_nMVDetectionEventCount;

	BOOL SrbInitializationComplete	(PHW_STREAM_REQUEST_BLOCK pSrb);
	BOOL SrbChangePowerState		(PHW_STREAM_REQUEST_BLOCK pSrb);
	BOOL SrbGetDataIntersection		(PHW_STREAM_REQUEST_BLOCK pSrb);
	void SrbGetStreamInfo			(PHW_STREAM_REQUEST_BLOCK pSrb);
	void SrbGetProperty				(PHW_STREAM_REQUEST_BLOCK pSrb);
	void SrbSetProperty				(PHW_STREAM_REQUEST_BLOCK pSrb);
	BOOL SrbOpenStream				(PHW_STREAM_REQUEST_BLOCK pSrb);
	BOOL SrbCloseStream				(PHW_STREAM_REQUEST_BLOCK pSrb);
};

const size_t streamDataExtensionSize = 
	max(
		max(sizeof(CWDMVideoStream), sizeof(CWDMVideoPortStream)), 
		max(sizeof(CWDMVideoCaptureStream), sizeof(CWDMVBICaptureStream))
	);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -