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.
845 lines
31 KiB
845 lines
31 KiB
//***************************************************************************
|
|
//
|
|
// FileName:
|
|
// $Workfile: DVDINIT.CPP $
|
|
//
|
|
// Author:
|
|
// TOSHIBA [PCS](PSY) Satoshi Watanabe
|
|
// Copyright (c) 1998 TOSHIBA CORPORATION
|
|
//
|
|
// Description:
|
|
// 1998.05.27 dvdwdm.cpp から分割
|
|
//
|
|
//***************************************************************************
|
|
// $Header: /DVD Drivers/ZIVA2PC.WDM/DVDINIT.CPP 29 99/07/14 10:31 K-ogi $
|
|
// $Modtime: 99/07/07 13:08 $
|
|
// $Nokeywords:$
|
|
//***************************************************************************
|
|
#include "includes.h"
|
|
|
|
#include "hal.h"
|
|
#include "wdmkserv.h"
|
|
#include "mpevent.h"
|
|
#include "classlib.h"
|
|
#include "ctime.h"
|
|
#include "schdat.h"
|
|
#include "ccque.h"
|
|
#include "ctvctrl.h"
|
|
#include "hlight.h"
|
|
#include "hwdevex.h"
|
|
#include "wdmbuff.h"
|
|
#include "dvdinit.h"
|
|
#include "dvdwdm.h"
|
|
#include "wrapdef.h"
|
|
#include "ssif.h"
|
|
|
|
//--- 98.05.27 S.Watanabe
|
|
BYTE PaletteY[256] = {
|
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
|
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
|
|
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
|
|
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
|
|
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
|
|
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
|
|
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
|
|
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
|
|
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
|
|
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
|
|
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
|
|
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
|
|
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
|
|
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
|
|
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
|
|
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfd, 0xfd,
|
|
};
|
|
BYTE PaletteCb[256] = {
|
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
|
0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x21,
|
|
0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
|
|
0x32, 0x33, 0x34, 0x35, 0x36, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x43,
|
|
0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52,
|
|
0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x63,
|
|
0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72,
|
|
0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x84,
|
|
0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93,
|
|
0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3,
|
|
0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2,
|
|
0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc3,
|
|
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2,
|
|
0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2,
|
|
0xe2, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
|
|
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfd, 0xfd,
|
|
};
|
|
BYTE PaletteCr[256] = {
|
|
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
|
0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x21,
|
|
0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
|
|
0x32, 0x33, 0x34, 0x35, 0x36, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41, 0x43,
|
|
0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52,
|
|
0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x60, 0x61, 0x63,
|
|
0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72,
|
|
0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 0x80, 0x81, 0x82, 0x84,
|
|
0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91, 0x92, 0x93,
|
|
0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1, 0xa2, 0xa3,
|
|
0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2,
|
|
0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc3,
|
|
0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xd0, 0xd1, 0xd2,
|
|
0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2,
|
|
0xe2, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xf0,
|
|
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfd, 0xfd,
|
|
};
|
|
//--- End.
|
|
|
|
NTSTATUS GetConfigValue(
|
|
IN PWSTR ValueName,
|
|
IN ULONG ValueType,
|
|
IN PVOID ValueData,
|
|
IN ULONG ValueLength,
|
|
IN PVOID Context,
|
|
IN PVOID EntryContext
|
|
);
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Public Functions
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
extern "C" NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath )
|
|
{
|
|
// DBG_BREAK();
|
|
|
|
HW_INITIALIZATION_DATA HwInitData;
|
|
|
|
// 1998.9.24 K.Ishizaki
|
|
RTL_QUERY_REGISTRY_TABLE queryRegistryTable[NUMBER_OF_REGISTRY_PARAMETERS + 1];
|
|
PWSTR parameterPath = NULL;
|
|
ULONG lengthOfPath = 0;
|
|
UNICODE_STRING parameters;
|
|
ULONG zero = 0;
|
|
ULONG breakOnEntry = 0;
|
|
|
|
RtlInitUnicodeString(¶meters, L"\\Parameters");
|
|
lengthOfPath = RegistryPath->Length + parameters.Length + sizeof(WCHAR);
|
|
parameterPath = (PWSTR)ExAllocatePool(NonPagedPool, lengthOfPath);
|
|
if (parameterPath) {
|
|
// Construct a path string.
|
|
RtlZeroMemory(parameterPath, lengthOfPath);
|
|
RtlCopyMemory(parameterPath, RegistryPath->Buffer, RegistryPath->Length);
|
|
RtlCopyMemory((BYTE *)parameterPath + RegistryPath->Length,
|
|
parameters.Buffer, parameters.Length);
|
|
|
|
// Query registry values.
|
|
RtlZeroMemory(queryRegistryTable, sizeof(queryRegistryTable));
|
|
queryRegistryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
|
queryRegistryTable[0].Name = L"EnablePrintf";
|
|
queryRegistryTable[0].EntryContext = &Dbg_Printf_Enable;
|
|
queryRegistryTable[0].DefaultType = REG_DWORD;
|
|
queryRegistryTable[0].DefaultData = &zero;
|
|
queryRegistryTable[0].DefaultLength = sizeof(ULONG);
|
|
queryRegistryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
|
queryRegistryTable[1].Name = L"EnableBreak";
|
|
queryRegistryTable[1].EntryContext = &Dbg_Break_Enable;
|
|
queryRegistryTable[1].DefaultType = REG_DWORD;
|
|
queryRegistryTable[1].DefaultData = &zero;
|
|
queryRegistryTable[1].DefaultLength = sizeof(ULONG);
|
|
queryRegistryTable[2].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
|
queryRegistryTable[2].Name = L"DebugLevel";
|
|
queryRegistryTable[2].EntryContext = &Dbg_Print_Level;
|
|
queryRegistryTable[2].DefaultType = REG_DWORD;
|
|
queryRegistryTable[2].DefaultData = &zero;
|
|
queryRegistryTable[2].DefaultLength = sizeof(ULONG);
|
|
queryRegistryTable[3].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
|
queryRegistryTable[3].Name = L"DebugFlags";
|
|
queryRegistryTable[3].EntryContext = &Dbg_Print_Flags;
|
|
queryRegistryTable[3].DefaultType = REG_DWORD;
|
|
queryRegistryTable[3].DefaultData = &zero;
|
|
queryRegistryTable[3].DefaultLength = sizeof(ULONG);
|
|
queryRegistryTable[4].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
|
queryRegistryTable[4].Name = L"BreakOnEntry";
|
|
queryRegistryTable[4].EntryContext = &breakOnEntry;
|
|
queryRegistryTable[4].DefaultType = REG_DWORD;
|
|
queryRegistryTable[4].DefaultData = &zero;
|
|
queryRegistryTable[4].DefaultLength = sizeof(ULONG);
|
|
#ifndef TVALD
|
|
queryRegistryTable[5].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
|
queryRegistryTable[5].Name = L"EnableTvald";
|
|
queryRegistryTable[5].EntryContext = &Dbg_Tvald;
|
|
queryRegistryTable[5].DefaultType = REG_DWORD;
|
|
queryRegistryTable[5].DefaultData = &zero;
|
|
queryRegistryTable[5].DefaultLength = sizeof(ULONG);
|
|
#endif TVALD
|
|
RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE, parameterPath,
|
|
queryRegistryTable, NULL, NULL);
|
|
|
|
ExFreePool(parameterPath);
|
|
}
|
|
if (breakOnEntry) {
|
|
__asm { int 3 }
|
|
}
|
|
// END
|
|
|
|
DBG_PRINTF( ("DVDWDM:TOSDVD02 DriverEntry\n\r") );
|
|
|
|
RtlZeroMemory( &HwInitData, sizeof(HW_INITIALIZATION_DATA) );
|
|
|
|
HwInitData.HwInitializationDataSize = sizeof( HwInitData );
|
|
HwInitData.HwInterrupt = (PHW_INTERRUPT)HwInterrupt;
|
|
HwInitData.HwReceivePacket = AdapterReceivePacket;
|
|
HwInitData.HwCancelPacket = AdapterCancelPacket;
|
|
HwInitData.HwRequestTimeoutHandler = AdapterTimeoutPacket;
|
|
HwInitData.DeviceExtensionSize = sizeof( HW_DEVICE_EXTENSION );
|
|
HwInitData.PerRequestExtensionSize = sizeof( SRB_EXTENSION );
|
|
HwInitData.PerStreamExtensionSize = sizeof( STREAMEX );
|
|
HwInitData.FilterInstanceExtensionSize = 0;
|
|
HwInitData.BusMasterDMA = TRUE;
|
|
HwInitData.Dma24BitAddresses = FALSE;
|
|
HwInitData.BufferAlignment = 4;
|
|
HwInitData.TurnOffSynchronization = FALSE;
|
|
HwInitData.DmaBufferSize = DMASIZE;
|
|
|
|
return( StreamClassRegisterMinidriver( (PVOID)DriverObject,
|
|
(PVOID)RegistryPath,
|
|
&HwInitData ) );
|
|
}
|
|
|
|
// Quiet compiler on bogus code: should use placement operator new instead
|
|
#pragma warning(push)
|
|
#pragma warning(disable:4701)
|
|
|
|
// Set vtbl into HW_DEVICE_EXTENSION.
|
|
BOOL InitialHwDevExt( PHW_DEVICE_EXTENSION pHwDevExt )
|
|
{
|
|
CMPEGBoardHAL temp1;
|
|
CMPEGBoard temp2;
|
|
CMPEGBoardState temp3;
|
|
CDVDStream temp4;
|
|
CTransfer temp5;
|
|
CWDMKernelService temp6;
|
|
CDataXferEvent temp7;
|
|
CTickTime pttime;
|
|
#ifdef REARRANGEMENT
|
|
CScheduleData pschd;
|
|
#endif REARRANGEMENT
|
|
CCQueue temp8;
|
|
CUserDataEvent temp9;
|
|
CVSyncEvent tempa;
|
|
CTVControl tempb;
|
|
HlightControl tempc;
|
|
|
|
#ifndef REARRANGEMENT
|
|
CScheduleData *pschd = new CScheduleData;
|
|
#endif REARRANGEMENT
|
|
|
|
pHwDevExt->m_InitComplete = FALSE;
|
|
|
|
RtlCopyMemory( &(pHwDevExt->mphal), &temp1, sizeof(CMPEGBoardHAL) );
|
|
RtlCopyMemory( &(pHwDevExt->mpboard), &temp2, sizeof(CMPEGBoard) );
|
|
RtlCopyMemory( &(pHwDevExt->mpbstate), &temp3, sizeof(CMPEGBoardState) );
|
|
RtlCopyMemory( &(pHwDevExt->dvdstrm), &temp4, sizeof(CDVDStream) );
|
|
RtlCopyMemory( &(pHwDevExt->transfer), &temp5, sizeof(CTransfer) );
|
|
RtlCopyMemory( &(pHwDevExt->kserv), &temp6, sizeof(CWDMKernelService) );
|
|
RtlCopyMemory( &(pHwDevExt->senddata), &temp7, sizeof(CDataXferEvent) );
|
|
RtlCopyMemory( &(pHwDevExt->ticktime), &pttime, sizeof(CTickTime) );
|
|
#ifndef REARRANGEMENT
|
|
RtlCopyMemory( &(pHwDevExt->scheduler), pschd, sizeof(CScheduleData) );
|
|
#else
|
|
RtlCopyMemory( &(pHwDevExt->scheduler), &pschd, sizeof(CScheduleData) );
|
|
#endif REARRANGEMENT
|
|
RtlCopyMemory( &(pHwDevExt->ccque), &temp8, sizeof(CCQueue) );
|
|
RtlCopyMemory( &(pHwDevExt->userdata), &temp9, sizeof(CUserDataEvent) );
|
|
RtlCopyMemory( &(pHwDevExt->vsync), &tempa, sizeof(CVSyncEvent) );
|
|
RtlCopyMemory( &(pHwDevExt->tvctrl), &tempb, sizeof(CTVControl) );
|
|
RtlCopyMemory( &(pHwDevExt->m_HlightControl), &tempc, sizeof(HlightControl) );
|
|
|
|
#ifndef REARRANGEMENT
|
|
delete pschd;
|
|
#endif REARRANGEMENT
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
#pragma warning(pop)
|
|
|
|
BOOL GetPCIConfigSpace( IN PHW_STREAM_REQUEST_BLOCK pSrb )
|
|
{
|
|
PPORT_CONFIGURATION_INFORMATION ConfigInfo = pSrb->CommandData.ConfigInfo;
|
|
PHW_DEVICE_EXTENSION pHwDevExt = (PHW_DEVICE_EXTENSION)ConfigInfo->HwDeviceExtension;
|
|
|
|
DBG_PRINTF( ("DVDWDM:HeDevExt=%08x\n\r", pHwDevExt ) );
|
|
if( !StreamClassReadWriteConfig( pSrb->HwDeviceExtension,
|
|
TRUE, (PVOID)&pHwDevExt->PciConfigSpace, 0, 64 ) ){ // Read
|
|
DBG_PRINTF( ( "DVDWDM:No PCI ConfigArea!!\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}else{
|
|
ULONG i, j;
|
|
for( i=0; i<64; ){
|
|
DBG_PRINTF( ( "DVDWDM:PCI Data: ") );
|
|
for( j=0;j<8 && i<64; j++,i++ ){
|
|
DBG_PRINTF( ( "0x%02x ", (UCHAR)*(((PUCHAR)&pHwDevExt->PciConfigSpace)+i)) );
|
|
}
|
|
DBG_PRINTF( ( "\n\r") );
|
|
}
|
|
}
|
|
|
|
DWORD Id = *(DWORD *)(&pHwDevExt->PciConfigSpace);
|
|
pHwDevExt->kserv.InitConfig( Id );
|
|
return( TRUE );
|
|
|
|
}
|
|
|
|
|
|
BOOL SetInitialize( IN PHW_STREAM_REQUEST_BLOCK pSrb )
|
|
{
|
|
PPORT_CONFIGURATION_INFORMATION ConfigInfo = pSrb->CommandData.ConfigInfo;
|
|
PHW_DEVICE_EXTENSION pHwDevExt = (PHW_DEVICE_EXTENSION)(ConfigInfo->HwDeviceExtension);
|
|
// NTSTATUS Status;
|
|
BOOL bTVct=FALSE;
|
|
|
|
if( ConfigInfo->NumberOfAccessRanges<1 ){
|
|
DBG_PRINTF( ( "DVDWDM:Illegal Config info\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
|
|
// Debug Dump ConfigInfo
|
|
DBG_PRINTF( ( "DVDWDM: Port = 0x%04x\n\r", ConfigInfo->AccessRanges[0].RangeStart.LowPart) );
|
|
DBG_PRINTF( ( "DVDWDM: Length = 0x%04x\n\r", ConfigInfo->AccessRanges[0].RangeLength) );
|
|
DBG_PRINTF( ( "DVDWDM: IRQ = 0x%04x\n\r", ConfigInfo->BusInterruptLevel) );
|
|
DBG_PRINTF( ( "DVDWDM: Vector = 0x%04x\n\r", ConfigInfo->BusInterruptVector) );
|
|
DBG_PRINTF( ( "DVDWDM: DMA = 0x%04x\n\r", ConfigInfo->DmaChannel) );
|
|
|
|
// Initialize the size of stream descriptor information.
|
|
ConfigInfo->StreamDescriptorSize =
|
|
STREAMNUM * sizeof(HW_STREAM_INFORMATION) + sizeof(HW_STREAM_HEADER);
|
|
|
|
pHwDevExt->ioBaseLocal = (PUCHAR)ConfigInfo->AccessRanges[0].RangeStart.LowPart;
|
|
pHwDevExt->Irq = ConfigInfo->BusInterruptLevel;
|
|
|
|
DBG_PRINTF( ("DVDWDM:I/O-Base = %08x\n\r", pHwDevExt->ioBaseLocal ) );
|
|
DBG_PRINTF( ("DVDWDM:Irq = %08x\n\r", pHwDevExt->Irq ) );
|
|
|
|
/********* 98.12.22 H.Yagi
|
|
// Read Machine information from Registry.
|
|
UNICODE_STRING RegPath;
|
|
UNICODE_STRING IdString;
|
|
|
|
ANSI_STRING AnsiRegPath;
|
|
ANSI_STRING AnsiIdString;
|
|
|
|
// BYTE IdByte[100];
|
|
|
|
RTL_QUERY_REGISTRY_TABLE Table[2];
|
|
|
|
// DBG_BREAK();
|
|
RtlInitUnicodeString( &RegPath, L"\\Registry\\Machine\\Enum\\Root\\*PNP0C01\\0000");
|
|
RtlInitAnsiString( &AnsiRegPath, "\\Registry\\Machine\\Enum\\Root\\*PNP0C01\\0000");
|
|
|
|
IdString.Length = 0;
|
|
IdString.MaximumLength = 200;
|
|
IdString.Buffer = (PWSTR)ExAllocatePool( PagedPool, IdString.MaximumLength);
|
|
if( IdString.Buffer==NULL ){
|
|
DBG_PRINTF( ("DVDINIT:Mem Alloc Error\n\r") );
|
|
DBG_BREAK();
|
|
}
|
|
|
|
AnsiIdString.Length = 0;
|
|
AnsiIdString.MaximumLength = 100;
|
|
AnsiIdString.Buffer = (PCHAR)ExAllocatePool( PagedPool, IdString.MaximumLength);
|
|
if( AnsiIdString.Buffer==NULL ){
|
|
DBG_PRINTF( ("DVDINIT:Mem Alloc Error\n\r") );
|
|
DBG_BREAK();
|
|
}
|
|
|
|
RtlZeroMemory( Table, sizeof(Table) );
|
|
Table[0].Flags = RTL_QUERY_REGISTRY_DIRECT |
|
|
RTL_QUERY_REGISTRY_REQUIRED;
|
|
Table[0].Name = L"BIOSVersion";
|
|
Table[0].EntryContext = &IdString;
|
|
Table[0].DefaultType = REG_SZ;
|
|
Table[0].DefaultData = &RegPath;
|
|
Table[0].DefaultLength = 0;
|
|
|
|
Status = RtlQueryRegistryValues( RTL_REGISTRY_ABSOLUTE,
|
|
RegPath.Buffer,
|
|
Table,
|
|
NULL,
|
|
NULL );
|
|
|
|
DBG_PRINTF( ("DVDINIT:Machine ID Check Status = 0x%08x\n\r", Status ) );
|
|
if( NT_SUCCESS( Status ) ){
|
|
RtlUnicodeStringToAnsiString( &AnsiIdString, &IdString, FALSE );
|
|
// DBG_PRINTF( ("DVDINIT:Machine ID(Unicode) = %s\n\r", IdString.Buffer ) );
|
|
DBG_PRINTF( ("DVDINIT:Machine ID(Ansi) = %s\n\r", AnsiIdString.Buffer ) );
|
|
}else{
|
|
// check NT5 Registry
|
|
RtlInitUnicodeString( &RegPath, L"\\Registry\\Machine\\HARDWARE\\DESCRIPTION\\System");
|
|
|
|
RtlZeroMemory( Table, sizeof(Table) );
|
|
Table[0].Flags = RTL_QUERY_REGISTRY_DIRECT |
|
|
RTL_QUERY_REGISTRY_REQUIRED;
|
|
Table[0].Name = L"SystemBiosVersion";
|
|
Table[0].EntryContext = &IdString;
|
|
Table[0].DefaultType = REG_MULTI_SZ;
|
|
Table[0].DefaultData = &RegPath;
|
|
Table[0].DefaultLength = 0;
|
|
|
|
Status = RtlQueryRegistryValues( RTL_REGISTRY_ABSOLUTE,
|
|
RegPath.Buffer,
|
|
Table,
|
|
NULL,
|
|
NULL );
|
|
DBG_PRINTF( ("DVDINIT:Binary Check Status = 0x%08x\n\r", Status ) );
|
|
if( NT_SUCCESS( Status ) ){
|
|
RtlUnicodeStringToAnsiString( &AnsiIdString, &IdString, FALSE );
|
|
// DBG_PRINTF( ("DVDINIT:Machine ID(Unicode) = %s\n\r", IdString.Buffer ) );
|
|
DBG_PRINTF( ("DVDINIT:Machine ID(Ansi) = %s\n\r", AnsiIdString.Buffer ) );
|
|
}else{
|
|
DBG_PRINTF( ("DVDINIT:Machine ID Read Error!\n\r") );
|
|
DBG_BREAK();
|
|
}
|
|
}
|
|
***********/
|
|
// Not checking Registry BIOSVersion, so we deal with Portege7000 as Tecra8000.
|
|
// Pass the string 'TECRA' to KernelService object.
|
|
ANSI_STRING AnsiIdString;
|
|
AnsiIdString.Buffer="TECRA\0";
|
|
|
|
//
|
|
if( !( pHwDevExt->mpboard.Init() ) ||
|
|
!( pHwDevExt->mpbstate.Init() ) ||
|
|
!( pHwDevExt->dvdstrm.Init() ) ||
|
|
!( pHwDevExt->transfer.Init() ) ){
|
|
DBG_PRINTF( ("DVDWDM:Initialize objects error!\n\r") );
|
|
// DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
|
|
pHwDevExt->mphal.Init( WrapperType_WDM ); // WrapperType
|
|
pHwDevExt->kserv.Init( (DWORD)(pHwDevExt->ioBaseLocal), pHwDevExt, AnsiIdString.Buffer );
|
|
|
|
// Setup kernel service object to hal object.
|
|
pHwDevExt->mphal.SetKernelService( &(pHwDevExt->kserv ) );
|
|
|
|
// Setup CMPEGBoard object.
|
|
pHwDevExt->mpboard.SetHALObjectInterface( &(pHwDevExt->mphal) );
|
|
pHwDevExt->mpboard.AddStreamObjectInterface( &(pHwDevExt->dvdstrm) );
|
|
|
|
// Setup CBaseStream objects.
|
|
pHwDevExt->dvdstrm.SetStateObject( &(pHwDevExt->mpbstate) );
|
|
pHwDevExt->dvdstrm.SetTransferObject( &(pHwDevExt->transfer) );
|
|
|
|
// Register data xfer event object to transfer object.
|
|
pHwDevExt->transfer.SetSink( &(pHwDevExt->senddata) );
|
|
|
|
// Register vsync event object to transfer object.
|
|
pHwDevExt->vsync.Init( pHwDevExt );
|
|
// pHwDevExt->mphal.SetSinkWrapper( &(pHwDevExt->vsync) ); // commented out this line,
|
|
// SetsinkWrapper and UnsetSinkWrapper
|
|
// dynamically, cause of MS bug?
|
|
|
|
// stream State init
|
|
pHwDevExt->StreamState = StreamState_Off;
|
|
|
|
// Clear CppFlagCount 99.01.07 H.Yagi
|
|
pHwDevExt->CppFlagCount = 0;
|
|
|
|
// Ask and Set DMA buffer address & size to HAL.
|
|
// DBG_BREAK();
|
|
STREAM_PHYSICAL_ADDRESS adr;
|
|
DWORD size, flag;
|
|
DWORD PAdr, LAdr;
|
|
ULONG Length;
|
|
pHwDevExt->mphal.QueryDMABufferSize( &size, &flag );
|
|
if( size>DMASIZE ){
|
|
DBG_PRINTF( ("DVDWDM:Not enough DMA memory\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE);
|
|
}
|
|
if( size!=0 ){
|
|
LAdr = (DWORD)StreamClassGetDmaBuffer( pHwDevExt );
|
|
adr = StreamClassGetPhysicalAddress( pHwDevExt, NULL, (PVOID)LAdr, DmaBuffer, &Length );
|
|
PAdr = (DWORD)adr.LowPart;
|
|
pHwDevExt->mphal.SetDMABuffer( LAdr, PAdr );
|
|
}
|
|
|
|
bTVct = pHwDevExt->tvctrl.Initialize( );
|
|
pHwDevExt->m_bTVct = bTVct;
|
|
pHwDevExt->m_HlightControl.Init( pHwDevExt );
|
|
|
|
/************** 98.12.22 H.Yagi
|
|
if( IdString.Buffer!=NULL){
|
|
ExFreePool( IdString.Buffer );
|
|
}
|
|
if( AnsiIdString.Buffer!=NULL){
|
|
ExFreePool( AnsiIdString.Buffer );
|
|
}
|
|
*********************/
|
|
|
|
pHwDevExt->m_InitComplete = TRUE;
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
|
|
BOOL HwInitialize( IN PHW_STREAM_REQUEST_BLOCK pSrb )
|
|
{
|
|
HALTYPE HType; // add by H.Yagi 1999.04.21
|
|
|
|
PHW_DEVICE_EXTENSION pHwDevExt = (PHW_DEVICE_EXTENSION)(pSrb->HwDeviceExtension);
|
|
|
|
// No procedure in this routine, because I will set PowerOn to ZiVA
|
|
// when Video stream is opend.
|
|
|
|
// Now I Check Vendr-ID & Device-ID using kserv method.
|
|
// Vender-ID
|
|
pHwDevExt->kserv.GetPCIConfigData( 0x00, &(pHwDevExt->VenderID) );
|
|
|
|
// Device-ID
|
|
pHwDevExt->kserv.GetPCIConfigData( 0x02, &(pHwDevExt->DeviceID) );
|
|
|
|
// Sub Vender-ID
|
|
pHwDevExt->kserv.GetPCIConfigData( 0x2C, &(pHwDevExt->SubVenderID) );
|
|
|
|
// Sub Device-ID
|
|
pHwDevExt->kserv.GetPCIConfigData( 0x2E, &(pHwDevExt->SubDeviceID) );
|
|
|
|
DBG_PRINTF( ("DVDWDM:Vender ID = 0x%04x\n\r", pHwDevExt->VenderID ) );
|
|
DBG_PRINTF( ("DVDWDM:Sub-Vender ID = 0x%04x\n\r", pHwDevExt->SubVenderID ) );
|
|
DBG_PRINTF( ("DVDWDM:Device ID = 0x%04x\n\r", pHwDevExt->DeviceID ) );
|
|
DBG_PRINTF( ("DVDWDM:Sub-Device ID = 0x%04x\n\r", pHwDevExt->SubDeviceID ) );
|
|
|
|
pHwDevExt->m_PCID = PC_TECRA750;
|
|
|
|
if( (pHwDevExt->VenderID==0x1179) && (pHwDevExt->DeviceID==0x0407) ){
|
|
switch( pHwDevExt->SubDeviceID ){
|
|
case 0x0001:
|
|
pHwDevExt->m_PCID = PC_TECRA750;
|
|
break;
|
|
case 0x0003:
|
|
pHwDevExt->m_PCID = PC_TECRA780;
|
|
break;
|
|
}
|
|
}else if( (pHwDevExt->VenderID==0x123f) && (pHwDevExt->DeviceID==0x8888) ){
|
|
switch( pHwDevExt->SubDeviceID ){
|
|
case 0x0001:
|
|
pHwDevExt->m_PCID = PC_TECRA8000;
|
|
break;
|
|
case 0x0002:
|
|
pHwDevExt->m_PCID = PC_PORTEGE7000;
|
|
break;
|
|
default:
|
|
pHwDevExt->m_PCID = PC_PORTEGE7000; // PC_TECRA8000 is also OK.
|
|
break;
|
|
}
|
|
}
|
|
|
|
// check HAL Type & driver itself.
|
|
pHwDevExt->mphal.GetHALType( &HType );
|
|
DBG_PRINTF( ("DVDWDM: HALTYPE = %d\n\r", HType ) );
|
|
// TECRA750/780 == HalType_ZIVA
|
|
if( pHwDevExt->m_PCID==PC_TECRA750 || pHwDevExt->m_PCID==PC_TECRA780 ){
|
|
DBG_PRINTF( ("DVDWDM: PC is TECRA750/780\n\r" ) );
|
|
if( HType!=HalType_ZIVA ){
|
|
return( FALSE );
|
|
}
|
|
}
|
|
// TECRA8000/Portege7000 == HalType_ZIVAPC
|
|
if( pHwDevExt->m_PCID==PC_PORTEGE7000 || pHwDevExt->m_PCID==PC_TECRA8000 ){
|
|
DBG_PRINTF( ("DVDWDM: PC is TECRA8000/Portege70000\n\r" ) );
|
|
if( HType!=HalType_ZIVAPC ){
|
|
return( FALSE );
|
|
}
|
|
}
|
|
|
|
// This setting is temporary.
|
|
// Note that this informations must be read from registry!!
|
|
// But there is no way to get registry information from minidriver.
|
|
// So, Now I set the default value directry.
|
|
pHwDevExt->m_AC3LowBoost = 0x80;
|
|
pHwDevExt->m_AC3HighCut = 0x80;
|
|
pHwDevExt->m_AC3OperateMode = 0x00;
|
|
|
|
if( !InitialSetting( pSrb ) ){ // Initial setting except
|
|
return( FALSE ); // H/W default value.
|
|
}
|
|
|
|
//// Check TVALD.sys is available or not( TECRA8000 or PORTEGE7000 only ).
|
|
//// If tvald.sys is not available, not start TOSDVD.sys. 99.03.01
|
|
#ifndef TVALD
|
|
if(Dbg_Tvald == 0)
|
|
{
|
|
if( (pHwDevExt->m_PCID==PC_TECRA8000) || (pHwDevExt->m_PCID==PC_PORTEGE7000) )
|
|
{
|
|
if( pHwDevExt->m_bTVct==FALSE ){
|
|
return( FALSE );
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
|
|
return( TRUE );
|
|
}
|
|
|
|
//--- 98.05.27 S.Watanabe
|
|
NTSTATUS GetConfigValue(
|
|
IN PWSTR ValueName,
|
|
IN ULONG ValueType,
|
|
IN PVOID ValueData,
|
|
IN ULONG ValueLength,
|
|
IN PVOID Context,
|
|
IN PVOID EntryContext
|
|
)
|
|
{
|
|
NTSTATUS ntStatus = STATUS_SUCCESS;
|
|
|
|
DBG_PRINTF(( "Type 0x%x, Length 0x%x\n\r", ValueType, ValueLength ));
|
|
|
|
switch( ValueType ) {
|
|
case REG_DWORD:
|
|
*(PVOID*)EntryContext = *(PVOID*)ValueData;
|
|
break;
|
|
|
|
case REG_BINARY:
|
|
RtlCopyMemory( EntryContext, ValueData, ValueLength );
|
|
break;
|
|
|
|
default:
|
|
ntStatus = STATUS_INVALID_PARAMETER;
|
|
}
|
|
return ntStatus;
|
|
}
|
|
//--- End.
|
|
|
|
BOOL InitialSetting( IN PHW_STREAM_REQUEST_BLOCK pSrb )
|
|
{
|
|
PHW_DEVICE_EXTENSION pHwDevExt = (PHW_DEVICE_EXTENSION)(pSrb->HwDeviceExtension);
|
|
|
|
DWORD AProp;
|
|
DWORD dProp1, dProp2, dProp3;
|
|
|
|
//--- 99.01.13 S.Watanabe
|
|
// // Display Device type
|
|
// // Currently I will set it directly, but I will read this setting
|
|
// // from registry and user will be able to change this setting in the
|
|
// // near future. 98.12.23 H.Yagi
|
|
// pHwDevExt->m_DisplayDevice = DisplayDevice_Wide; // LCD output take priority
|
|
//--- End.
|
|
|
|
// AC-3 Dynamic Range control
|
|
AProp = pHwDevExt->m_AC3LowBoost;
|
|
if( !pHwDevExt->dvdstrm.SetAudioProperty( AudioProperty_AC3DRangeLowBoost, &AProp ) ){
|
|
DBG_PRINTF( ("DVDWDM:AC3 Low Boost Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
|
|
AProp = pHwDevExt->m_AC3HighCut;
|
|
if( !pHwDevExt->dvdstrm.SetAudioProperty( AudioProperty_AC3DRangeHighCut, &AProp ) ){
|
|
DBG_PRINTF( ("DVDWDM:AC3 High Cut Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
|
|
// AC-3 Operational mode
|
|
AProp = pHwDevExt->m_AC3OperateMode;
|
|
if( !pHwDevExt->dvdstrm.SetAudioProperty( AudioProperty_AC3OperateMode, &AProp ) ){
|
|
DBG_PRINTF( ("DVDWDM:AC3 Operate Mode Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
|
|
//--- 98.05.27 S.Watanabe
|
|
|
|
Digital_Palette dp;
|
|
|
|
NTSTATUS status;
|
|
|
|
//--- 99.01.13 S.Watanabe
|
|
// RTL_QUERY_REGISTRY_TABLE Table[6];
|
|
RTL_QUERY_REGISTRY_TABLE Table[7];
|
|
//--- End.
|
|
|
|
DWORD TVOut = 0; // 99.02.03 H.Yagi
|
|
DWORD AudioOut = 0;
|
|
//--- 99.01.13 S.Watanabe
|
|
DWORD VOutDev = SSIF_DISPMODE_VGA;
|
|
//--- End.
|
|
|
|
DWORD defaultTVOut = 0; // 99.02.03 H.Yagi
|
|
DWORD defaultAudioOut = 0;
|
|
//--- 99.01.13 S.Watanabe
|
|
DWORD defaultVOutDev = SSIF_DISPMODE_VGA;
|
|
//--- End.
|
|
|
|
RtlZeroMemory( Table, sizeof(Table) );
|
|
|
|
Table[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
|
Table[0].Name = L"AnalogVideoOut";
|
|
Table[0].EntryContext = &TVOut;
|
|
Table[0].DefaultType = REG_DWORD;
|
|
Table[0].DefaultData = &defaultTVOut;
|
|
Table[0].DefaultLength = sizeof(DWORD);
|
|
|
|
Table[1].Flags = RTL_QUERY_REGISTRY_DIRECT;
|
|
Table[1].Name = L"DigitalAudioOut";
|
|
Table[1].EntryContext = &AudioOut;
|
|
Table[1].DefaultType = REG_DWORD;
|
|
Table[1].DefaultData = &defaultAudioOut;
|
|
Table[1].DefaultLength = sizeof(DWORD);
|
|
|
|
// DefaultType = REG_BINARY の場合、Flags = RTL_QUERY_REGISTRY_DIRECT で呼び出すと失敗する
|
|
// GetConfigValue コールバックルーチンを呼び出すようにし自分でデータコピーを行う
|
|
Table[2].QueryRoutine = GetConfigValue;
|
|
Table[2].Flags = 0;
|
|
Table[2].Name = L"PaletteY";
|
|
Table[2].EntryContext = PaletteY;
|
|
Table[2].DefaultType = REG_BINARY;
|
|
Table[2].DefaultData = PaletteY;
|
|
Table[2].DefaultLength = sizeof(PaletteY);
|
|
|
|
Table[3].QueryRoutine = GetConfigValue;
|
|
Table[3].Flags = 0;
|
|
Table[3].Name = L"PaletteCb";
|
|
Table[3].EntryContext = PaletteCb;
|
|
Table[3].DefaultType = REG_BINARY;
|
|
Table[3].DefaultData = PaletteCb;
|
|
Table[3].DefaultLength = sizeof(PaletteCb);
|
|
|
|
Table[4].QueryRoutine = GetConfigValue;
|
|
Table[4].Flags = 0;
|
|
Table[4].Name = L"PaletteCr";
|
|
Table[4].EntryContext = PaletteCr;
|
|
Table[4].DefaultType = REG_BINARY;
|
|
Table[4].DefaultData = PaletteCr;
|
|
Table[4].DefaultLength = sizeof(PaletteCr);
|
|
|
|
//--- 99.01.13 S.Watanabe
|
|
Table[5].QueryRoutine = GetConfigValue;
|
|
Table[5].Flags = 0;
|
|
Table[5].Name = L"PriorityDisplayMode";
|
|
Table[5].EntryContext = &VOutDev;
|
|
Table[5].DefaultType = REG_DWORD;
|
|
Table[5].DefaultData = &defaultVOutDev;
|
|
Table[5].DefaultLength = sizeof(VOutDev);
|
|
//--- End.
|
|
|
|
// Table[6] はすべて 0、終端
|
|
|
|
status = RtlQueryRegistryValues(
|
|
RTL_REGISTRY_SERVICES,
|
|
REGPATH_FOR_WDM,
|
|
Table,
|
|
NULL,
|
|
NULL
|
|
);
|
|
|
|
DBG_PRINTF(( "status : 0x%x\n\r", status ));
|
|
DBG_PRINTF(( "TVOut : %d, AudioOut : %d\n\r", TVOut, AudioOut ));
|
|
|
|
if( TVOut == 0 )
|
|
dProp1 = OutputSource_VGA;
|
|
else
|
|
dProp1 = OutputSource_DVD;
|
|
if( !pHwDevExt->dvdstrm.SetVideoProperty( VideoProperty_OutputSource, &dProp1 ) ) {
|
|
DBG_PRINTF( ("DVDWDM:Set VideoProperty_OutputSource Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
pHwDevExt->m_OutputSource = dProp1;
|
|
|
|
if( AudioOut == 2 )
|
|
dProp1 = AudioDigitalOut_On;
|
|
else if( AudioOut == 1 )
|
|
dProp1 = AudioDigitalOut_On;
|
|
else
|
|
dProp1 = AudioDigitalOut_Off;
|
|
if( !pHwDevExt->dvdstrm.SetAudioProperty( AudioProperty_DigitalOut, &dProp1 ) ) {
|
|
DBG_PRINTF( ("DVDWDM:Set AudioProperty_DigitalOut Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
pHwDevExt->m_AudioDigitalOut = dProp1;
|
|
|
|
if( AudioOut == 2 ) {
|
|
dProp1 = AudioOut_Decoded;
|
|
if( !pHwDevExt->dvdstrm.SetAudioProperty( AudioProperty_AudioOut, &dProp1 ) ) {
|
|
DBG_PRINTF( ("DVDWDM:Set AudioProperty_AudioOut Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
}
|
|
else if( AudioOut == 1 ) {
|
|
dProp1 = AudioOut_Encoded;
|
|
if( !pHwDevExt->dvdstrm.SetAudioProperty( AudioProperty_AudioOut, &dProp1 ) ) {
|
|
DBG_PRINTF( ("DVDWDM:Set AudioProperty_AudioOut Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
}
|
|
pHwDevExt->m_AudioEncode = dProp1;
|
|
|
|
dp.Select = Video_Palette_Y;
|
|
dp.pPalette = PaletteY;
|
|
if( !pHwDevExt->dvdstrm.SetVideoProperty( VideoProperty_DigitalPalette, &dp ) ) {
|
|
DBG_PRINTF( ("DVDWDM:Set VideoProperty_DigitalPalette(Y) Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
|
|
dp.Select = Video_Palette_Cb;
|
|
dp.pPalette = PaletteCb;
|
|
if( !pHwDevExt->dvdstrm.SetVideoProperty( VideoProperty_DigitalPalette, &dp ) ) {
|
|
DBG_PRINTF( ("DVDWDM:Set VideoProperty_DigitalPalette(Cb) Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
|
|
dp.Select = Video_Palette_Cr;
|
|
dp.pPalette = PaletteCr;
|
|
if( !pHwDevExt->dvdstrm.SetVideoProperty( VideoProperty_DigitalPalette, &dp ) ) {
|
|
DBG_PRINTF( ("DVDWDM:Set VideoProperty_DigitalPalette(Cr) Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
|
|
//--- End.
|
|
|
|
//--- 99.01.13 S.Watanabe
|
|
if( VOutDev == SSIF_DISPMODE_43TV )
|
|
pHwDevExt->m_DisplayDevice = DisplayDevice_NormalTV;
|
|
else if( VOutDev == SSIF_DISPMODE_169TV )
|
|
pHwDevExt->m_DisplayDevice = DisplayDevice_WideTV;
|
|
else
|
|
pHwDevExt->m_DisplayDevice = DisplayDevice_VGA;
|
|
//--- End.
|
|
|
|
/////////////////////////////////////////////
|
|
//--- 98.05.27 S.Watanabe
|
|
// dProp1 = OutputSource_DVD;
|
|
//--- End.
|
|
dProp2 = CompositeOut_On;
|
|
dProp3 = SVideoOut_On;
|
|
|
|
//--- 98.05.27 S.Watanabe
|
|
// if( !pHwDevExt->dvdstrm.SetVideoProperty( VideoProperty_OutputSource, &dProp1 ) ){
|
|
// DBG_PRINTF( ("DVDWDM:Set Video output Error\n\r") );
|
|
// DBG_BREAK();
|
|
// return( FALSE );
|
|
// }
|
|
//--- End.
|
|
if( !pHwDevExt->dvdstrm.SetVideoProperty( VideoProperty_CompositeOut, &dProp2 ) ){
|
|
DBG_PRINTF( ("DVDWDM:Set Composite Video output Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
pHwDevExt->m_CompositeOut = dProp2;
|
|
|
|
if( !pHwDevExt->dvdstrm.SetVideoProperty( VideoProperty_SVideoOut, &dProp3 ) ){
|
|
DBG_PRINTF( ("DVDWDM:Set S-Video output Error\n\r") );
|
|
DBG_BREAK();
|
|
return( FALSE );
|
|
}
|
|
pHwDevExt->m_SVideoOut = dProp3;
|
|
return( TRUE );
|
|
}
|