/*++
Copyright (c) 1998 G&G Lab Corporation
Module Name:
DvdMain.c
Copyright (c) 1998 G&G Lab Corporation. All Rights Reserved.
Some portions adapted with permission from code Copyright (c) 1997-1998 Toshiba Corporation
--*/
#include "strmini.h"
#include "ks.h"
#include <mmsystem.h>
#include "ksmedia.h"
#include "debug.h"
#include "DeviceInit.h"
#include "StreamQue.h"
#include "DvdToshHard.h" // header for DvdToshHard.lib routines hiding proprietary HW stuff
#include "DvdMain.h"
#include "StreamKS.h"
//#include "ddkmapi.h"
HANDLE hClk;
HANDLE hMaster;
BOOL fClkPause;
ULONGLONG LastSysTime = 0;
ULONGLONG PauseTime = 0;
static ULONGLONG LastStamp;
static ULONGLONG LastSys;
static BOOLEAN fValid;
extern BOOLEAN fProgrammed;
extern BOOLEAN fStarted;
BOOLEAN fProgrammed;
BOOLEAN fStarted;
static ULONGLONG StartSys;
KSPIN_MEDIUM VPMedium = {
STATIC_KSMEDIUMSETID_VPBus,
0,
0
};
VOID STREAMAPI AdapterCancelPacket( IN PHW_STREAM_REQUEST_BLOCK pSrb )
/*++
Routine Description:
routine to cancel a packet that may be in progress
Arguments:
pSrb - pointer to stream request block to be cancelled
Return Value:
none
--*/
{
PHW_DEVICE_EXTENSION pHwDevExt = (PHW_DEVICE_EXTENSION)pSrb->HwDeviceExtension;
DebugPrint(( DebugLevelVerbose, "DVDTOSHIS:AdapterCancelPacket\r\n" ));
DebugPrint(( DebugLevelVerbose, "DVDTOSHIS: pSrb = 0x%x\r\n", pSrb ));
if( pHwDevExt->pSrbDMA0 == pSrb ) {
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: pSrb == pSrbDMA0\r\n" ) );
pHwDevExt->pSrbDMA0 = NULL;
pHwDevExt->fSrbDMA0last = FALSE;
}
if( pHwDevExt->pSrbDMA1 == pSrb ) {
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: pSrb == pSrbDMA1\r\n" ) );
pHwDevExt->pSrbDMA1 = NULL;
pHwDevExt->fSrbDMA1last = FALSE;
}
pSrb->Status = STATUS_CANCELLED;
// need to find this packet, pull it off our queues, and cancel it
switch (pSrb->Flags & (SRB_HW_FLAGS_DATA_TRANSFER |
SRB_HW_FLAGS_STREAM_REQUEST)) {
//
// find all stream commands, and do stream notifications
//
case SRB_HW_FLAGS_STREAM_REQUEST | SRB_HW_FLAGS_DATA_TRANSFER:
DebugPrint(( DebugLevelVerbose, "DVDTOSHIS: SRB_HW_FLAGS_STREAM_REQUEST | SRB_HW_FLAGS_DATA_TRANSFER\r\n", pSrb ));
DeviceQueue_remove( pHwDevExt,pSrb );
CCQueue_remove( pHwDevExt, pSrb );
StreamClassStreamNotification( StreamRequestComplete,
pSrb->StreamObject,
pSrb);
break;
case SRB_HW_FLAGS_STREAM_REQUEST:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_HW_FLAGS_STREAM_REQUEST\r\n", pSrb ) );
StreamClassStreamNotification( ReadyForNextStreamControlRequest,
pSrb->StreamObject);
StreamClassStreamNotification( StreamRequestComplete,
pSrb->StreamObject,
pSrb);
break;
default:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: default\r\n", pSrb ) );
StreamClassDeviceNotification( ReadyForNextDeviceRequest,
pSrb->HwDeviceExtension );
StreamClassDeviceNotification( DeviceRequestComplete,
pSrb->HwDeviceExtension,
pSrb );
break;
}
}
/*
** AdapterTimeoutPacket()
*/
VOID STREAMAPI AdapterTimeoutPacket( IN PHW_STREAM_REQUEST_BLOCK pSrb )
{
PHW_DEVICE_EXTENSION pHwDevExt = (PHW_DEVICE_EXTENSION)pSrb->HwDeviceExtension;
DebugPrint( (DebugLevelTrace, "DVDTOSHIS:AdapterTimeoutPacket\r\n") );
if( decGetVideoPlayMode( pHwDevExt ) == PLAY_MODE_FREEZE ) {
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: pause mode\r\n") );
pSrb->TimeoutCounter = pSrb->TimeoutOriginal;
return;
}
TRAP;
// pSrb->TimeoutCounter = pSrb->TimeoutOriginal;
if( pHwDevExt->pSrbDMA0 ) {
DebugPrint(( DebugLevelTrace, "DVDTOSHIS: pSrbDMA0 exist\r\n" ));
pHwDevExt->pSrbDMA0 = NULL;
pHwDevExt->fSrbDMA0last = FALSE;
}
if( pHwDevExt->pSrbDMA1 ) {
DebugPrint(( DebugLevelTrace, "DVDTOSHIS: pSrbDMA1 exist\r\n" ));
pHwDevExt->pSrbDMA1 = NULL;
pHwDevExt->fSrbDMA1last = FALSE;
}
if( pHwDevExt->pstroVid ) {
StreamClassScheduleTimer(
pHwDevExt->pstroVid,
pHwDevExt,
0,
NULL,
pHwDevExt->pstroVid
);
}
if( pHwDevExt->pstroAud ) {
StreamClassScheduleTimer(
pHwDevExt->pstroAud,
pHwDevExt,
0,
NULL,
pHwDevExt->pstroAud
);
}
if( pHwDevExt->pstroSP ) {
StreamClassScheduleTimer(
pHwDevExt->pstroSP,
pHwDevExt,
0,
NULL,
pHwDevExt->pstroSP
);
}
// init the main and closed-caption SRB queues
DeviceQueue_init(pHwDevExt);
CCQueue_init(pHwDevExt);
pHwDevExt->pSrbCpp = NULL;
pHwDevExt->bDMAstop = FALSE;
StreamClassAbortOutstandingRequests( pHwDevExt, NULL, STATUS_CANCELLED );
}
/*
** AdapterReceivePacket()
*/
VOID STREAMAPI AdapterReceivePacket( IN PHW_STREAM_REQUEST_BLOCK pSrb )
{
PHW_DEVICE_EXTENSION pHwDevExt = (PHW_DEVICE_EXTENSION)pSrb->HwDeviceExtension;
// DWORD st, et;
DebugPrint( (DebugLevelTrace, "DVDTOSHIS:AdapterReceivePacket\r\n") );
switch( pSrb->Command ){
case SRB_GET_STREAM_INFO:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_GET_STREAM_INFO\r\n") );
AdapterStreamInfo( pSrb );
break;
case SRB_OPEN_STREAM:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_OPEN_STREAM\r\n") );
AdapterOpenStream( pSrb );
break;
case SRB_CLOSE_STREAM:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_CLOSE_STREAM\r\n") );
AdapterCloseStream( pSrb );
break;
case SRB_INITIALIZE_DEVICE:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_INITIALIZE_DEVICE\r\n") );
//
// schedule a low priority callback to get the config
// space. processing will continue when this runs.
//
StreamClassCallAtNewPriority(
NULL,
pSrb->HwDeviceExtension,
Low,
(PHW_PRIORITY_ROUTINE) GetPCIConfigSpace,
pSrb
);
return;
// st = GetCurrentTime_ms();
//
// HwInitialize( pSrb );
//
// et = GetCurrentTime_ms();
// DebugPrint( (DebugLevelTrace, "DVDTOSHIS:init %dms\r\n", et - st ) );
//
// break;
case SRB_OPEN_DEVICE_INSTANCE:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_OPEN_DEVICE_INSTANCE\r\n") );
pSrb->Status = STATUS_NOT_IMPLEMENTED;
break;
case SRB_CLOSE_DEVICE_INSTANCE:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_CLOSE_DEVICE_INSTANCE\r\n") );
pSrb->Status = STATUS_NOT_IMPLEMENTED;
break;
case SRB_GET_DEVICE_PROPERTY:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_GET_DEVICE_PROPERTY\r\n") );
TRAP;
pSrb->Status = STATUS_NOT_IMPLEMENTED;
break;
case SRB_SET_DEVICE_PROPERTY:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_SET_DEVICE_PROPERTY\r\n") );
TRAP;
pSrb->Status = STATUS_NOT_IMPLEMENTED;
break;
case SRB_CHANGE_POWER_STATE:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_CHANGE_POWER_STATE\r\n") );
if (pSrb->CommandData.DeviceState == PowerDeviceD0) {
//
// should turn power back on here if was off; we're not sleeping in this sample.
//
} else {
//
// disable interrupts.
//
decDisableInt( pHwDevExt );
}
pSrb->Status = STATUS_SUCCESS;
break;
case SRB_UNINITIALIZE_DEVICE:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_UNINITIALIZE_DEVICE\r\n") );
decDisableInt( pHwDevExt );
pSrb->Status = STATUS_SUCCESS;
break;
case SRB_UNKNOWN_DEVICE_COMMAND:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_UNKNOWN_DEVICE_COMMAND\r\n") );
pSrb->Status = STATUS_NOT_IMPLEMENTED;
break;
// case SRB_QUERY_UNLOAD:
// DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_QUERY_UNLOAD\r\n") );
// pSrb->Status = STATUS_NOT_IMPLEMENTED;
// break;
case SRB_PAGING_OUT_DRIVER:
DebugPrint( (DebugLevelTrace, "DVDTOSHIS: SRB_PAGING_OUT_DRIVER\r\n") );
decDisableInt( pHwDevExt );
pSrb->Status = STATUS_SUCCESS;
break;
case SRB_GET
没有合适的资源?快使用搜索试试~ 我知道了~
视频DVD解码器驱动C++源代码
共23个文件
h:7个
c:5个
opt:1个
需积分: 9 5 下载量 171 浏览量
2009-06-17
18:05:30
上传
评论
收藏 100KB RAR 举报
温馨提示
视频DVD解码器驱动C++源代码,很不错的学习资料
资源推荐
资源详情
资源评论
收起资源包目录
DVD解码器驱动.rar (23个子文件)
vc8254523524
DVD
sources 442B
StreamQue.h 2KB
resource.h 450B
DVD.opt 80KB
DvdToshHard.h 6KB
DvdMain.c 150KB
DVD.dsp 4KB
DVD.dsw 531B
DVD.plg 240B
DeviceInit.h 5KB
StreamKS.h 16KB
dvd.aps 36KB
HardInterrupt.c 5KB
makefile 269B
debug.c 6KB
dvd.rc 3KB
DeviceInit.c 12KB
DvdMain.h 6KB
StreamReqQue.c 5KB
DVD.ncb 57KB
debug.h 496B
DvdToshis.inf 4KB
lib
i386
DvdToshHard.lib 128KB
共 23 条
- 1
资源评论
udknight
- 粉丝: 17
- 资源: 111
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功