Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

2118 lines
52 KiB

//***************************************************************************
//
// FileName:
// $Workfile: brdprop.cpp $
//
// Author:
// TOSHIBA [PCS](PSY) Seiichi Nakamura
// Copyright (c) 1997 TOSHIBA CORPORATION
//
// Description:
//
//***************************************************************************
// $Header: /DVD Drivers/ZiVA.WDM/brdprop.cpp 58 98/12/03 6:08p Yagi $
// $Modtime: 98/12/03 4:53p $
// $Nokeywords:$
//***************************************************************************
// Date | Author | Description
// -----------+--------------+--------------------------------------------
// 1998.03.27 | Hideki Yagi | Buugfix about Digital Palette setting.
// 1998.05.01 | Hideki Yagi | Add SubpicProperty_FlushBuff.
//
#include "includes.h"
#include "timeout.h"
#include "ioif.h"
#include "adv.h"
#include "zivachip.h"
#include "mixhal.h"
// by oka
#include "userdata.h"
#include "zivabrd.h"
//***************************************************************************
// ZiVA Board Class
//***************************************************************************
//---------------------------------------------------------------------------
// IClassLibHAL SetVideoProperty
//---------------------------------------------------------------------------
HALRESULT CMPEGBoardHAL::SetVideoProperty( VIDEOPROPTYPE PropertyType, VOID *pData )
{
BOOL rc = FALSE;
switch( PropertyType )
{
case VideoProperty_TVSystem:
rc = SetVideoProperty_TVSystem( pData );
break;
case VideoProperty_AspectRatio:
rc = SetVideoProperty_AspectRatio( pData );
break;
case VideoProperty_DisplayMode:
rc = SetVideoProperty_DisplayMode( pData );
break;
case VideoProperty_Resolution:
rc = SetVideoProperty_Resolution( pData );
break;
case VideoProperty_DigitalOut:
rc = SetVideoProperty_DigitalOut( pData );
break;
case VideoProperty_DigitalPalette:
rc = SetVideoProperty_DigitalPalette( pData );
break;
case VideoProperty_APS:
rc = SetVideoProperty_APS( pData );
break;
case VideoProperty_ClosedCaption:
rc = SetVideoProperty_ClosedCaption( pData );
break;
case VideoProperty_OutputSource:
rc = SetVideoProperty_OutputSource( pData );
break;
case VideoProperty_CompositeOut:
rc = SetVideoProperty_CompositeOut( pData );
break;
case VideoProperty_SVideoOut:
rc = SetVideoProperty_SVideoOut( pData );
break;
case VideoProperty_SkipFieldControl:
rc = SetVideoProperty_SkipFieldControl( pData );
break;
case VideoProperty_FilmCamera:
rc = SetVideoProperty_FilmCamera( pData );
break;
// by oka
case VideoProperty_Digest:
rc = SetVideoProperty_Digest( pData );
break;
case VideoProperty_OSDData:
rc = SetVideoProperty_OSDData( pData );
break;
case VideoProperty_OSDSwitch:
rc = SetVideoProperty_OSDSwitch( pData );
break;
case VideoProperty_Magnify:
rc = SetVideoProperty_Magnify( pData );
break;
case VideoProperty_ClosedCaptionData:
rc = SetVideoProperty_ClosedCaptionData( pData );
break;
// end
default:
return HAL_INVALID_PARAM;
};
if( rc == TRUE )
return HAL_SUCCESS;
DBG_BREAK();
return HAL_ERROR;
};
//---------------------------------------------------------------------------
// IClassLibHAL GetVideoProperty
//---------------------------------------------------------------------------
HALRESULT CMPEGBoardHAL::GetVideoProperty( VIDEOPROPTYPE PropertyType, VOID *pData )
{
BOOL rc = FALSE;
switch( PropertyType )
{
case VideoProperty_TVSystem:
rc = GetVideoProperty_TVSystem( pData );
break;
case VideoProperty_AspectRatio:
rc = GetVideoProperty_AspectRatio( pData );
break;
case VideoProperty_DisplayMode:
rc = GetVideoProperty_DisplayMode( pData );
break;
case VideoProperty_Resolution:
rc = GetVideoProperty_Resolution( pData );
break;
case VideoProperty_DigitalOut:
rc = GetVideoProperty_DigitalOut( pData );
break;
case VideoProperty_DigitalPalette:
rc = GetVideoProperty_DigitalPalette( pData );
break;
case VideoProperty_APS:
rc = GetVideoProperty_APS( pData );
break;
case VideoProperty_ClosedCaption:
rc = GetVideoProperty_ClosedCaption( pData );
break;
case VideoProperty_OutputSource:
rc = GetVideoProperty_OutputSource( pData );
break;
case VideoProperty_CompositeOut:
rc = GetVideoProperty_CompositeOut( pData );
break;
case VideoProperty_SVideoOut:
rc = GetVideoProperty_SVideoOut( pData );
break;
case VideoProperty_SkipFieldControl:
rc = GetVideoProperty_SkipFieldControl( pData );
break;
case VideoProperty_FilmCamera:
rc = GetVideoProperty_FilmCamera( pData );
break;
// by oka
case VideoProperty_Digest:
rc = GetVideoProperty_Digest( pData );
break;
case VideoProperty_OSDData:
rc = GetVideoProperty_OSDData( pData );
break;
case VideoProperty_OSDSwitch:
rc = GetVideoProperty_OSDSwitch( pData );
break;
case VideoProperty_Magnify:
rc = GetVideoProperty_Magnify( pData );
break;
case VideoProperty_ClosedCaptionData:
rc = GetVideoProperty_ClosedCaptionData( pData );
break;
// end
default:
return HAL_INVALID_PARAM;
};
if( rc == TRUE )
return HAL_SUCCESS;
DBG_BREAK();
return HAL_ERROR;
};
//---------------------------------------------------------------------------
// IClassLibHAL SetAudioProperty
//---------------------------------------------------------------------------
HALRESULT CMPEGBoardHAL::SetAudioProperty( AUDIOPROPTYPE PropertyType, VOID *pData )
{
BOOL rc = FALSE;
switch( PropertyType )
{
case AudioProperty_Type:
rc = SetAudioProperty_Type( pData );
break;
case AudioProperty_Number:
rc = SetAudioProperty_Number( pData );
break;
case AudioProperty_Volume:
rc = SetAudioProperty_Volume( pData );
break;
case AudioProperty_Sampling:
rc = SetAudioProperty_Sampling( pData );
break;
case AudioProperty_Channel:
rc = SetAudioProperty_Channel( pData );
break;
case AudioProperty_Quant:
rc = SetAudioProperty_Quant( pData );
break;
case AudioProperty_AudioOut:
rc = SetAudioProperty_AudioOut( pData );
break;
case AudioProperty_Cgms:
rc = SetAudioProperty_Cgms( pData );
break;
case AudioProperty_AnalogOut:
rc = SetAudioProperty_AnalogOut( pData );
break;
case AudioProperty_DigitalOut:
rc = SetAudioProperty_DigitalOut( pData );
break;
case AudioProperty_AC3DRangeLowBoost:
rc = SetAudioProperty_AC3DRangeLowBoost( pData );
break;
case AudioProperty_AC3DRangeHighCut:
rc = SetAudioProperty_AC3DRangeHighCut( pData );
break;
case AudioProperty_AC3OperateMode:
rc = SetAudioProperty_AC3OperateMode( pData );
break;
case AudioProperty_AC3OutputMode:
rc = SetAudioProperty_AC3OutputMode( pData );
break;
default:
return HAL_INVALID_PARAM;
};
if( rc == TRUE )
return HAL_SUCCESS;
DBG_BREAK();
return HAL_ERROR;
};
//---------------------------------------------------------------------------
// IClassLibHAL GetAudioProperty
//---------------------------------------------------------------------------
HALRESULT CMPEGBoardHAL::GetAudioProperty( AUDIOPROPTYPE PropertyType, VOID *pData )
{
BOOL rc = FALSE;
switch( PropertyType )
{
case AudioProperty_Type:
rc = GetAudioProperty_Type( pData );
break;
case AudioProperty_Number:
rc = GetAudioProperty_Number( pData );
break;
case AudioProperty_Volume:
rc = GetAudioProperty_Volume( pData );
break;
case AudioProperty_Sampling:
rc = GetAudioProperty_Sampling( pData );
break;
case AudioProperty_Channel:
rc = GetAudioProperty_Channel( pData );
break;
case AudioProperty_Quant:
rc = GetAudioProperty_Quant( pData );
break;
case AudioProperty_AudioOut:
rc = GetAudioProperty_AudioOut( pData );
break;
case AudioProperty_Cgms:
rc = GetAudioProperty_Cgms( pData );
break;
case AudioProperty_AnalogOut:
rc = GetAudioProperty_AnalogOut( pData );
break;
case AudioProperty_DigitalOut:
rc = GetAudioProperty_DigitalOut( pData );
break;
case AudioProperty_AC3DRangeLowBoost:
rc = GetAudioProperty_AC3DRangeLowBoost( pData );
break;
case AudioProperty_AC3DRangeHighCut:
rc = GetAudioProperty_AC3DRangeHighCut( pData );
break;
case AudioProperty_AC3OperateMode:
rc = GetAudioProperty_AC3OperateMode( pData );
break;
case AudioProperty_AC3OutputMode:
rc = GetAudioProperty_AC3OutputMode( pData );
break;
default:
return HAL_INVALID_PARAM;
};
if( rc == TRUE )
return HAL_SUCCESS;
DBG_BREAK();
return HAL_ERROR;
};
//---------------------------------------------------------------------------
// IClassLibHAL SetSubpicProperty
//---------------------------------------------------------------------------
HALRESULT CMPEGBoardHAL::SetSubpicProperty( SUBPICPROPTYPE PropertyType, VOID *pData )
{
BOOL rc = FALSE;
switch( PropertyType )
{
case SubpicProperty_Number:
rc = SetSubpicProperty_Number( pData );
break;
case SubpicProperty_Palette:
rc = SetSubpicProperty_Palette( pData );
break;
case SubpicProperty_Hilight:
rc = SetSubpicProperty_Hilight( pData );
break;
case SubpicProperty_State:
rc = SetSubpicProperty_State( pData );
break;
// by oka
case SubpicProperty_HilightButton:
rc = SetSubpicProperty_HilightButton( pData );
break;
case SubpicProperty_FlushBuff:
rc = SetSubpicProperty_FlushBuff( pData );
break;
default:
return HAL_INVALID_PARAM;
};
if( rc == TRUE )
return HAL_SUCCESS;
DBG_BREAK();
return HAL_ERROR;
};
//---------------------------------------------------------------------------
// IClassLibHAL GetSubpicProperty
//---------------------------------------------------------------------------
HALRESULT CMPEGBoardHAL::GetSubpicProperty( SUBPICPROPTYPE PropertyType, VOID *pData )
{
BOOL rc = FALSE;
switch( PropertyType )
{
case SubpicProperty_Number:
rc = GetSubpicProperty_Number( pData );
break;
case SubpicProperty_Palette:
rc = GetSubpicProperty_Palette( pData );
break;
case SubpicProperty_Hilight:
rc = GetSubpicProperty_Hilight( pData );
break;
case SubpicProperty_State:
rc = GetSubpicProperty_State( pData );
break;
// by oka
case SubpicProperty_HilightButton:
rc = GetSubpicProperty_HilightButton( pData );
break;
case SubpicProperty_FlushBuff:
rc = GetSubpicProperty_FlushBuff( pData );
break;
default:
return HAL_INVALID_PARAM;
};
if( rc == TRUE )
return HAL_SUCCESS;
DBG_BREAK();
return HAL_ERROR;
};
//***************************************************************************
// Video Property Functions( Set Series )
//***************************************************************************
BOOL CMPEGBoardHAL::SetVideoProperty_TVSystem( PVOID pData )
{
VideoProperty_TVSystem_Value *pValue = (VideoProperty_TVSystem_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
if( *pValue != m_VideoProp.m_TVSystem )
{
// 98.12.03 H.Yagi start
// Abort Command send to ZiVA
m_pKernelObj->DisableHwInt();
ziva.INT_MASK = ZIVA_INT_ENDC;
ClearENDCEvent();
m_pKernelObj->EnableHwInt();
ziva.Abort( 1 );
// WaitENDC interrupt
if( WaitENDC() == FALSE ){
DBG_PRINTF( ("brdprop: Abort Error\n\r") );
DBG_BREAK();
return( FALSE );
}
// 98.12.03 H.Yagi end
switch( *pValue )
{
case TV_NTSC:
ziva.VIDEO_ENV_CHANGE = 0x01; // 98.10.29 H.Yagi
m_VideoProp.m_TVSystem = *pValue; // 98.10.29 H.Yagi
break;
case TV_PALB: case TV_PALD: case TV_PALG:
case TV_PALH: case TV_PALI: case TV_PALM:
DBG_PRINTF( ( "DVDPROP: Change TVSystem from %d to %d\n", m_VideoProp.m_TVSystem, *pValue ));
ziva.VIDEO_ENV_CHANGE = 0x02; // 98.10.29 H.Yagi
m_VideoProp.m_TVSystem = *pValue; // 98.10.29 H.Yagi
// SetPowerState( POWERSTATE_OFF );
// SetPowerState( POWERSTATE_ON );
break;
case TV_PALN: // NON SUPPORT!
DBG_BREAK();
return FALSE;
default:
DBG_BREAK();
return FALSE;
};
ziva.NewPlayMode(); // 98.10.29 H.Yagi
};
switch( *pValue )
{
case TV_NTSC:
if( adv==NULL )
{
DBG_PRINTF(("DVDPROP:adv object is NULL! LINE=%d\n", __LINE__ ));
DBG_BREAK();
return( FALSE );
}
adv->SetNTSC();
break;
case TV_PALB: case TV_PALD: case TV_PALG:
case TV_PALH: case TV_PALI:
if( adv==NULL )
{
DBG_PRINTF(("DVDPROP:adv object is NULL! LINE=%d\n", __LINE__ ));
DBG_BREAK();
return( FALSE );
}
adv->SetPAL( 0 ); // PAL B,D,G,H,I
break;
case TV_PALM:
if( adv==NULL )
{
DBG_PRINTF(("DVDPROP:adv object is NULL! LINE=%d\n", __LINE__ ));
DBG_BREAK();
return( FALSE );
}
adv->SetPAL( 1 ); // PAL M
break;
case TV_PALN: // NON SUPPORT!
DBG_BREAK();
return FALSE;
default:
DBG_BREAK();
return FALSE;
};
};
m_VideoProp.m_TVSystem = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_AspectRatio( PVOID pData )
{
VideoProperty_AspectRatio_Value *pValue = (VideoProperty_AspectRatio_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case Aspect_04_03:
DBG_PRINTF( ( "DVDPROP: Aspect_04_03\n"));
ziva.FORCE_CODED_ASPECT_RATIO = 2;
break;
case Aspect_16_09:
DBG_PRINTF( ( "DVDPROP: Aspect_16_09\n"));
ziva.FORCE_CODED_ASPECT_RATIO = 3;
break;
default:
DBG_BREAK();
return FALSE;
};
};
m_VideoProp.m_AspectRatio = *pValue;
return SetVideoProperty_DisplayMode( (PVOID)&(m_VideoProp.m_DisplayMode) );
};
BOOL CMPEGBoardHAL::SetVideoProperty_DisplayMode( PVOID pData )
{
VideoProperty_DisplayMode_Value *pValue = (VideoProperty_DisplayMode_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
// パラメータチェック
if( *pValue != Display_Original && *pValue != Display_PanScan && *pValue != Display_LetterBox )
{
DBG_BREAK();
return FALSE;
};
// 1998.8.18 seichan
// PICVの割り込みが発生したときに設定するように変更
/******/
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case Display_Original:
DBG_PRINTF( ( "DVDPROP: Display Original\n"));
if( m_VideoProp.m_AspectRatio == Aspect_04_03 )
{
ziva.DISPLAY_ASPECT_RATIO = 0x00;
ziva.ASPECT_RATIO_MODE = 0x01;
ioif.luke2.AVCONT = (WORD)((ioif.luke2.AVCONT & 0xfcff) | 0x0300); // S2 = H, S1 = H
}
else
{
ziva.DISPLAY_ASPECT_RATIO = 0x02;
ziva.ASPECT_RATIO_MODE = 0x01;
ioif.luke2.AVCONT = (WORD)((ioif.luke2.AVCONT & 0xfcff) | 0x0200); // S2 = H, S1 = L
};
break;
case Display_PanScan:
DBG_PRINTF( ( "DVDPROP: Display Panscan\n"));
if( m_VideoProp.m_AspectRatio == Aspect_04_03 )
{
ziva.DISPLAY_ASPECT_RATIO = 0x00;
ziva.ASPECT_RATIO_MODE = 0x01;
ziva.PAN_SCAN_SOURCE = 0x00;
ioif.luke2.AVCONT = (WORD)((ioif.luke2.AVCONT & 0xfcff) | 0x0300); // S2 = H, S1 = H
}
else
{
ziva.DISPLAY_ASPECT_RATIO = 0x00;
ziva.ASPECT_RATIO_MODE = 0x01;
ziva.PAN_SCAN_SOURCE = 0x00;
ioif.luke2.AVCONT = (WORD)((ioif.luke2.AVCONT & 0xfcff) | 0x0300); // S2 = H, S1 = H
};
break;
case Display_LetterBox:
DBG_PRINTF( ( "DVDPROP: Display LetterBox\n"));
if( m_VideoProp.m_AspectRatio == Aspect_04_03 )
{
ziva.DISPLAY_ASPECT_RATIO = 0x00;
ziva.ASPECT_RATIO_MODE = 0x01;
ioif.luke2.AVCONT = (WORD)((ioif.luke2.AVCONT & 0xfcff) | 0x0300); // S2 = H, S1 = H
}
else
{
ziva.DISPLAY_ASPECT_RATIO = 0x00;
ziva.ASPECT_RATIO_MODE = 0x02;
ioif.luke2.AVCONT = (WORD)((ioif.luke2.AVCONT & 0xfcff) | 0x0100); // S2 = L, S1 = H
};
break;
default:
DBG_BREAK();
return FALSE;
};
};
/*******/
m_VideoProp.m_DisplayMode = *pValue;
// 1998.8.18 seichan
// ZiVAのPICVで設定を行うためのフラグをセット
// m_SetVideoProperty_DisplayMode_Event = TRUE;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_Resolution( PVOID pData )
{
VideoSizeStruc *pValue = (VideoSizeStruc *)pData;
m_VideoProp.m_Size = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_DigitalOut( PVOID pData )
{
VideoProperty_DigitalOut_Value *pValue = (VideoProperty_DigitalOut_Value *)pData;
BYTE Data;
// if( m_VideoProp.m_DigitalOut != DigitalOut_Off && *pValue != DigitalOut_Off )
// {
// return FALSE;
// };
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case DigitalOut_Off:
// ZV off
if( m_VideoProp.m_DigitalOut == DigitalOut_ZV )
{
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
Data = (BYTE)( Data & 0xfe );
m_pKernelObj->SetPCIConfigData( 0x44, Data );
};
ioif.luke2.IO_VMODE = 0x00;
ioif.luke2.IO_HSCNT = 0x00;
ioif.luke2.IO_VPCNT = 0x00;
break;
case DigitalOut_ZV:
ioif.luke2.IO_VMODE = 0x00;
ioif.luke2.IO_HSCNT = 0x00;
ioif.luke2.IO_VPCNT = 0x00;
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
Data = (BYTE)( Data | 0x01 );
m_pKernelObj->SetPCIConfigData( 0x44, Data );
break;
case DigitalOut_LPB08:
ioif.luke2.IO_VMODE = 0x04;
ioif.luke2.IO_HSCNT = 0x70;
ioif.luke2.IO_VPCNT = 0x02;
break;
case DigitalOut_LPB16:
ioif.luke2.IO_VMODE = 0x08;
ioif.luke2.IO_HSCNT = 0x00;
ioif.luke2.IO_VPCNT = 0x00;
break;
case DigitalOut_VMI:
ioif.luke2.IO_VMODE = 0x06;
ioif.luke2.IO_HSCNT = 0x00;
ioif.luke2.IO_VPCNT = 0x00;
break;
case DigitalOut_AMCbt:
ioif.luke2.IO_VMODE = 0x07;
ioif.luke2.IO_HSCNT = 0x00;
ioif.luke2.IO_VPCNT = 0x00;
break;
case DigitalOut_AMC656:
ioif.luke2.IO_VMODE = 0x09;
ioif.luke2.IO_HSCNT = 0x00;
ioif.luke2.IO_VPCNT = 0x00;
break;
case DigitalOut_DAV2:
ioif.luke2.IO_VMODE = 0x01;
ioif.luke2.IO_HSCNT = 0x00;
ioif.luke2.IO_VPCNT = 0x00;
break;
case DigitalOut_CIRRUS:
ioif.luke2.IO_VMODE = 0x05;
ioif.luke2.IO_HSCNT = 0x00;
ioif.luke2.IO_VPCNT = 0x00;
break;
default:
DBG_BREAK();
return FALSE;
};
};
m_VideoProp.m_DigitalOut = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_DigitalPalette( PVOID pData )
{
Digital_Palette *pValue = (Digital_Palette *)pData;
BYTE CpCtl;
CpCtl = 0x04; // 98.03.27 H.Yagi
ioif.luke2.IO_CPCNT = CpCtl;
switch( pValue->Select )
{
case Palette_Y: CpCtl = 0x01; break;
case Palette_Cb: CpCtl = 0x02; break;
case Palette_Cr: CpCtl = 0x03; break;
default:
DBG_BREAK();
return FALSE;
};
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
// Select Palette and Clear Counter.
ioif.luke2.IO_CPCNT = CpCtl;
// Set Palette value
for ( int i = 0 ; i < 256; i ++ )
ioif.luke2.IO_CPLT = pValue->pPalette[i];
};
for ( int i = 0 ; i < 256; i ++ )
m_VideoProp.m_DigitalPalette[ pValue->Select ][i] = pValue->pPalette[i];
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_APS( PVOID pData )
{
VideoAPSStruc *pValue = (VideoAPSStruc *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
if( adv==NULL )
{
DBG_PRINTF(("DVDPROP:adv object is NULL! LINE=%d\n", __LINE__ ));
DBG_BREAK();
return( FALSE );
}
BOOL rc;
rc = adv->SetMacroVision( pValue->APSType );
if( rc == FALSE )
return FALSE;
rc = adv->SetCgmsType( pValue->CgmsType, m_VideoProp );
if( rc == FALSE )
return FALSE;
};
m_VideoProp.m_APS = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_ClosedCaption( PVOID pData )
{
VideoProperty_ClosedCaption_Value *pValue = (VideoProperty_ClosedCaption_Value *)pData;
switch( *pValue )
{
case ClosedCaption_On:
// by oka
m_CCRingBufferStart = 0xFFFFFFFF;
m_CCDataPoint = m_CCDataNumber = m_CCRingBufferNumber = 0;
m_CCsend_point = m_CCpending = m_CCnumber = 0;
adv->SetClosedCaptionOn( TRUE );
// by oka
if (!SetEventIntMask( ZIVA_INT_USR | ZIVA_INT_VSYNC ))
{
DBG_BREAK();
return HAL_ERROR;
}
// ziva.INT_MASK = GetEventIntMask(); // No need
break;
case ClosedCaption_Off:
// by oka
if (!UnsetEventIntMask( ZIVA_INT_USR | ZIVA_INT_VSYNC ))
{
DBG_BREAK();
return HAL_ERROR;
}
// ziva.INT_MASK = GetEventIntMask(); // No need.
m_CCRingBufferStart = 0xFFFFFFFF;
m_CCDataPoint = m_CCDataNumber = m_CCRingBufferNumber = 0;
m_CCsend_point = m_CCpending = m_CCnumber = 0;
adv->SetClosedCaptionData( 0x0000942C );
adv->SetClosedCaptionData( 0x0000942C );
adv->SetClosedCaptionOn( FALSE );
break;
default:
DBG_BREAK();
return FALSE;
};
m_VideoProp.m_ClosedCaption = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_OutputSource( PVOID pData )
{
VideoProperty_OutputSource_Value *pValue = (VideoProperty_OutputSource_Value *)pData;
BYTE Data;
switch( *pValue )
{
case OutputSource_VGA:
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
Data = (BYTE)( Data & 0xfd );
m_pKernelObj->SetPCIConfigData( 0x44, Data );
break;
case OutputSource_DVD:
m_pKernelObj->GetPCIConfigData( 0x44, &Data );
Data = (BYTE)( Data | 0x02 );
m_pKernelObj->SetPCIConfigData( 0x44, Data );
break;
default:
DBG_BREAK();
return FALSE;
};
m_VideoProp.m_OutputSource = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_CompositeOut( PVOID pData )
{
VideoProperty_CompositeOut_Value *pValue = (VideoProperty_CompositeOut_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case CompositeOut_On:
if( adv==NULL )
{
DBG_PRINTF(("DVDPROP:adv object is NULL! LINE=%d\n", __LINE__ ));
DBG_BREAK();
return( FALSE );
}
adv->SetCompPowerOn( TRUE );
break;
case CompositeOut_Off:
if( adv==NULL )
{
DBG_PRINTF(("DVDPROP:adv object is NULL! LINE=%d\n", __LINE__ ));
DBG_BREAK();
return( FALSE );
}
adv->SetCompPowerOn( FALSE );
break;
default:
DBG_BREAK();
return FALSE;
};
};
m_VideoProp.m_CompositeOut = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_SVideoOut( PVOID pData )
{
VideoProperty_SVideoOut_Value *pValue = (VideoProperty_SVideoOut_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case SVideoOut_On:
if( adv==NULL )
{
DBG_PRINTF(("DVDPROP:adv object is NULL! LINE=%d\n", __LINE__ ));
DBG_BREAK();
return( FALSE );
}
adv->SetSVideoPowerOn( TRUE );
break;
case SVideoOut_Off:
if( adv==NULL )
{
DBG_PRINTF(("DVDPROP:adv object is NULL! LINE=%d\n", __LINE__ ));
DBG_BREAK();
return( FALSE );
}
adv->SetSVideoPowerOn( FALSE );
break;
default:
DBG_BREAK();
return FALSE;
};
};
m_VideoProp.m_SVideoOut = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_SkipFieldControl( PVOID pData )
{
VideoProperty_SkipFieldControl_Value *pValue = (VideoProperty_SkipFieldControl_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case SkipFieldControl_On:
ioif.luke2.AVCONT |= 0x04;
break;
case SkipFieldControl_Off:
ioif.luke2.AVCONT &= 0xfffd;
break;
default:
DBG_BREAK();
return FALSE;
};
};
m_VideoProp.m_SkipFieldControl = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetVideoProperty_FilmCamera( PVOID pData )
{
VideoProperty_FilmCamera_Value *pValue = (VideoProperty_FilmCamera_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case Source_Camera:
break;
case Source_Film:
break;
default:
DBG_BREAK();
return FALSE;
};
};
m_VideoProp.m_FilmCamera = *pValue;
return TRUE;
};
// by oka
BOOL CMPEGBoardHAL::SetVideoProperty_Digest( PVOID pData )
{
DWORD ret = ZIVARESULT_NOERROR;;
VideoDigestStruc *pValue = (VideoDigestStruc *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
ret = ziva.Digest( pValue->dmX,
pValue->dmY,
pValue->dmSkip,
pValue->dmDecimation,
pValue->dmThreshold
// pValue->dmStart
);
};
// m_SubpicProp.m_HlightButton = *pValue;
if (ret == ZIVARESULT_NOERROR)
return TRUE;
else
return FALSE;
};
// by oka
BOOL CMPEGBoardHAL::SetVideoProperty_OSDData( PVOID pData )
{
DWORD OSDSize;
BYTE * OSDData;
DWORD ret = ZIVARESULT_NOERROR;
OsdDataStruc *pValue = (OsdDataStruc *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
if (m_VideoProp.m_OSDSwitch == Video_OSD_On)
{
ziva.OSD_EVEN_FIELD.Set( 0 );
ziva.OSD_ODD_FIELD.Set( 0 );
}
ASSERT((m_OSDStartAddr % 4) == 0);
if ((m_OSDStartAddr % 4) != 0)
{
DBG_BREAK();
//RETAILMSG(ZONE_ERROR,(TEXT("OSD_BUFFER_START address Error!!\r\n")));
return FALSE;
}
DWORD OSDStartAddrPointer, NextDataHeader;
OSDStartAddrPointer = m_OSDStartAddr;
NextDataHeader = 0;
// loop to Next=NULL;
while (pValue != NULL)
{
OSDSize = pValue->dwOsdSize;
OSDData = (BYTE *)pValue->pData;
// check data size
if((m_OSDEndAddr - OSDStartAddrPointer) < OSDSize)
{
DBG_BREAK();
//RETAILMSG(ZONE_ERROR,(TEXT("OSDSize too big!!\r\n")));
return FALSE;
}
// Next Header Address
if (pValue->pNextData != NULL)
{
NextDataHeader = OSDStartAddrPointer + OSDSize;
// for 32bit boundary
NextDataHeader += (NextDataHeader % 4);
// Even
OSDData[1] = (BYTE)((NextDataHeader >> 16) & 0xff);
OSDData[2] = (BYTE)((NextDataHeader >> 8) & 0xff);
OSDData[3] = (BYTE)((NextDataHeader) & 0xff);
// Odd
OSDData[1+32] = (BYTE)(((NextDataHeader+32) >> 16) & 0xff);
OSDData[2+32] = (BYTE)(((NextDataHeader+32) >> 8) & 0xff);
OSDData[3+32] = (BYTE)((NextDataHeader+32) & 0xff);
} else {
NextDataHeader = 0;
// Even
OSDData[1] = 0;
OSDData[2] = 0;
OSDData[3] = 0;
// Odd
OSDData[1+32] = 0;
OSDData[2+32] = 0;
OSDData[3+32] = 0;
}
// change address
DWORD EvenBmpAddr,OddBmpAddr;
DWORD EvenPltAddr,OddPltAddr;
DWORD PelType;
PelType = (((DWORD)OSDData[18]<<1) & 0x2)
+ (((DWORD)OSDData[19]>>8) & 0x80);
EvenBmpAddr = (((DWORD)OSDData[13] << 16) & 0xff0000)
+ (((DWORD)OSDData[14] << 8 ) & 0xff00)
+ ((DWORD)OSDData[15] & 0xff);
OddBmpAddr = (((DWORD)OSDData[13+32] << 16) & 0xff0000)
+ (((DWORD)OSDData[14+32] << 8 ) & 0xff00)
+ ((DWORD)OSDData[15+32] & 0xff);
EvenPltAddr = (((DWORD)OSDData[29] << 16) & 0xff0000)
+ (((DWORD)OSDData[30] << 8 ) & 0xff00)
+ ((DWORD)OSDData[31] & 0xff);
OddPltAddr = (((DWORD)OSDData[29+32] << 16) & 0xff0000)
+ (((DWORD)OSDData[30+32] << 8 ) & 0xff00)
+ ((DWORD)OSDData[31+32] & 0xff);
// 以下の計算式はPltAddrがOSDData[64]から始まるという前提で作られている
DWORD PltSize;
if (PelType == 3)
PltSize = 16;
else
PltSize = 64;
EvenBmpAddr = EvenBmpAddr - EvenPltAddr + OSDStartAddrPointer + PltSize;
OddBmpAddr = OddBmpAddr - OddPltAddr + OSDStartAddrPointer + PltSize;
EvenPltAddr = OSDStartAddrPointer + PltSize;
OddPltAddr = OSDStartAddrPointer + PltSize;
// EvenBmpAddr
OSDData[13]=(BYTE)((EvenBmpAddr & 0x00ff0000)>>16);
OSDData[14]=(BYTE)((EvenBmpAddr & 0x0000ff00)>>8);
OSDData[15]=(BYTE)(EvenBmpAddr & 0x000000fc);
// OddBmpAddr
OSDData[13+32]=(BYTE)((OddBmpAddr & 0x00ff0000)>>16);
OSDData[14+32]=(BYTE)((OddBmpAddr & 0x0000ff00)>>8);
OSDData[15+32]=(BYTE)(OddBmpAddr & 0x000000fc);
// EvenPltAddr
OSDData[29]=(BYTE)((EvenPltAddr & 0x00ff0000)>>16);
OSDData[30]=(BYTE)((EvenPltAddr & 0x0000ff00)>>8);
OSDData[31]=(BYTE)(EvenPltAddr & 0x000000fc);
// OddPltAddr
OSDData[29+32]=(BYTE)((OddPltAddr & 0x00ff0000)>>16);
OSDData[30+32]=(BYTE)((OddPltAddr & 0x0000ff00)>>8);
OSDData[31+32]=(BYTE)(OddPltAddr & 0x000000fc);
// transfer data
for( DWORD i = 0 ; i < OSDSize ; i += 4 )
{
ret = ziva.ZiVAWriteMemory( OSDStartAddrPointer + i, (DWORD)OSDData[i+0] << 24
| (DWORD)OSDData[i+1] << 16
| (DWORD)OSDData[i+2] << 8
| (DWORD)OSDData[i+3] );
};
// Next OSD Data
pValue = (OsdDataStruc *)pValue->pNextData;
OSDStartAddrPointer = NextDataHeader;
}
if (m_VideoProp.m_OSDSwitch == Video_OSD_On)
{
ziva.OSD_EVEN_FIELD.Set( m_OSDStartAddr );
ziva.OSD_ODD_FIELD.Set( m_OSDStartAddr + 32 );
}
};
if (ret == ZIVARESULT_NOERROR)
return TRUE;
else
return FALSE;
};
// by oka
BOOL CMPEGBoardHAL::SetVideoProperty_OSDSwitch( PVOID pData )
{
VideoProperty_OSD_Switch_Value *pValue = (VideoProperty_OSD_Switch_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
if (*pValue == Video_OSD_On && m_VideoProp.m_OSDSwitch == Video_OSD_Off)
{
ziva.OSD_EVEN_FIELD.Set( m_OSDStartAddr );
ziva.OSD_ODD_FIELD.Set( m_OSDStartAddr + 32 );
m_VideoProp.m_OSDSwitch = Video_OSD_On;
}
if (*pValue == Video_OSD_Off && m_VideoProp.m_OSDSwitch == Video_OSD_On)
{
ziva.OSD_EVEN_FIELD.Set( 0 );
ziva.OSD_ODD_FIELD.Set( 0 );
m_VideoProp.m_OSDSwitch = Video_OSD_Off;
}
};
return TRUE;
};
// by oka
BOOL CMPEGBoardHAL::SetVideoProperty_Magnify( PVOID pData )
{
VideoMagnifyStruc *pValue = (VideoMagnifyStruc *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
ziva.Magnify(pValue->dwX, pValue->dwY, pValue->dwFactor);
};
return TRUE;
};
// by oka
BOOL CMPEGBoardHAL::SetVideoProperty_ClosedCaptionData( PVOID pData )
{
return FALSE;
}
//***************************************************************************
// Video Property Functions( Get Series )
//***************************************************************************
BOOL CMPEGBoardHAL::GetVideoProperty_TVSystem( PVOID pData )
{
VideoProperty_TVSystem_Value *pValue = (VideoProperty_TVSystem_Value *)pData;
*pValue = m_VideoProp.m_TVSystem;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_AspectRatio( PVOID pData )
{
VideoProperty_AspectRatio_Value *pValue = (VideoProperty_AspectRatio_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( (DWORD)ziva.DISPLAY_ASPECT_RATIO )
{
case 0x00:
*pValue = Aspect_04_03;
break;
case 0x01:
*pValue = Aspect_16_09;
break;
default:
DBG_BREAK();
return FALSE;
};
m_VideoProp.m_AspectRatio = *pValue;
return TRUE;
};
*pValue = m_VideoProp.m_AspectRatio;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_DisplayMode( PVOID pData )
{
VideoProperty_DisplayMode_Value *pValue = (VideoProperty_DisplayMode_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( (DWORD)ziva.ASPECT_RATIO_MODE )
{
case 0x00: *pValue = Display_Original; break;
case 0x01: *pValue = Display_PanScan; break;
case 0x02: *pValue = Display_LetterBox; break;
default:
DBG_BREAK();
return FALSE;
};
m_VideoProp.m_DisplayMode = *pValue;
return TRUE;
};
*pValue = m_VideoProp.m_DisplayMode;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_Resolution( PVOID pData )
{
VideoSizeStruc *pValue = (VideoSizeStruc *)pData;
m_VideoProp.m_Size = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_DigitalOut( PVOID pData )
{
VideoProperty_DigitalOut_Value *pValue = (VideoProperty_DigitalOut_Value *)pData;
*pValue = m_VideoProp.m_DigitalOut;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_DigitalPalette( PVOID pData )
{
Digital_Palette *pValue = (Digital_Palette *)pData;
BYTE CpCtl;
switch( pValue->Select )
{
case Video_Palette_Y: CpCtl = 0x05; break;
case Video_Palette_Cb: CpCtl = 0x06; break;
case Video_Palette_Cr: CpCtl = 0x07; break;
default:
DBG_BREAK();
return FALSE;
};
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
// Select Palette and Clear Counter.
ioif.luke2.IO_CPCNT = CpCtl;
for ( int i = 0 ; i < 256; i ++ )
{
// Get Palette value
pValue->pPalette[i] = ioif.luke2.IO_CPLT;
m_VideoProp.m_DigitalPalette[ pValue->Select ][i] = pValue->pPalette[i];
};
return TRUE;
};
for ( int i = 0 ; i < 256; i ++ )
pValue->pPalette[i] = m_VideoProp.m_DigitalPalette[ pValue->Select ][i];
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_APS( PVOID pData )
{
VideoAPSStruc *pValue = (VideoAPSStruc *)pData;
*pValue = m_VideoProp.m_APS;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_ClosedCaption( PVOID pData )
{
VideoProperty_ClosedCaption_Value *pValue = (VideoProperty_ClosedCaption_Value *)pData;
*pValue = m_VideoProp.m_ClosedCaption;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_OutputSource( PVOID pData )
{
VideoProperty_OutputSource_Value *pValue = (VideoProperty_OutputSource_Value *)pData;
*pValue = m_VideoProp.m_OutputSource;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_CompositeOut( PVOID pData )
{
VideoProperty_CompositeOut_Value *pValue = (VideoProperty_CompositeOut_Value *)pData;
*pValue = m_VideoProp.m_CompositeOut;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_SVideoOut( PVOID pData )
{
VideoProperty_SVideoOut_Value *pValue = (VideoProperty_SVideoOut_Value *)pData;
*pValue = m_VideoProp.m_SVideoOut;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_SkipFieldControl( PVOID pData )
{
VideoProperty_SkipFieldControl_Value *pValue = (VideoProperty_SkipFieldControl_Value *)pData;
*pValue = m_VideoProp.m_SkipFieldControl;
return TRUE;
};
BOOL CMPEGBoardHAL::GetVideoProperty_FilmCamera( PVOID pData )
{
VideoProperty_FilmCamera_Value *pValue = (VideoProperty_FilmCamera_Value *)pData;
*pValue = m_VideoProp.m_FilmCamera;
return TRUE;
};
// by oka
BOOL CMPEGBoardHAL::GetVideoProperty_Digest( PVOID pData )
{
return FALSE;
}
// by oka
BOOL CMPEGBoardHAL::GetVideoProperty_OSDData( PVOID pData )
{
return FALSE;
}
// by oka
BOOL CMPEGBoardHAL::GetVideoProperty_OSDSwitch( PVOID pData )
{
VideoProperty_OSD_Switch_Value *pValue = (VideoProperty_OSD_Switch_Value *)pData;
*pValue = m_VideoProp.m_OSDSwitch;
return TRUE;
}
// by oka
BOOL CMPEGBoardHAL::GetVideoProperty_Magnify( PVOID pData )
{
return FALSE;
}
// by oka
BOOL CMPEGBoardHAL::GetVideoProperty_ClosedCaptionData( PVOID pData )
{
return FALSE;
}
//***************************************************************************
// Audio property private functions( Set series )
//***************************************************************************
BOOL CMPEGBoardHAL::SetAudioProperty_Type( PVOID pData )
{
AudioProperty_Type_Value *pValue = (AudioProperty_Type_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case AudioType_AC3:
ziva.SelectStream( 2, m_AudioProp.m_StreamNo );
break;
case AudioType_PCM:
ziva.SelectStream( 4, m_AudioProp.m_StreamNo );
break;
case AudioType_MPEG1:
ziva.SelectStream( 3, m_AudioProp.m_StreamNo );
break;
case AudioType_MPEG2:
ziva.SelectStream( 3, m_AudioProp.m_StreamNo );
break;
default:
DBG_BREAK();
return FALSE;
};
DWORD Quant;
GetAudioProperty_Quant( (PVOID)&Quant );
SetAudioProperty_Quant( (PVOID)&Quant );
};
m_AudioProp.m_Type = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_Number( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
ASSERT( *pValue <= 7 );
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( m_AudioProp.m_Type )
{
case AudioType_AC3:
ziva.SelectStream( 2, *pValue );
break;
case AudioType_PCM:
ziva.SelectStream( 4, *pValue );
break;
case AudioType_MPEG1:
ziva.SelectStream( 3, *pValue );
break;
case AudioType_MPEG2:
ziva.SelectStream( 3, *pValue );
break;
default:
DBG_BREAK();
return FALSE;
};
};
m_AudioProp.m_StreamNo = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_Volume( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
ASSERT( *pValue <= 100 );
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
ziva.AUDIO_ATTENUATION = (9600 - (*pValue) * 96) /100;
m_AudioProp.m_Volume = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_Sampling( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case 32000: /* ziva.NEW_AUDIO_MODE = 0x7;*/ break; // 32 kHz
case 96000: /* ziva.NEW_AUDIO_MODE = 0x3;*/ break; // 96 kHz
case 48000: /* ziva.NEW_AUDIO_MODE = 0x2;*/ break; // 48 kHz
case 44100: /* ziva.NEW_AUDIO_MODE = 0x1;*/ break; // 44.1 kHz
default:
DBG_BREAK();
return FALSE;
};
};
m_AudioProp.m_Sampling = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_Channel( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
ASSERT( 1 <= *pValue && *pValue <= 8 );
// ZiVA -DS chip has 2 chanel.
if( *pValue != 2 )
{
DBG_BREAK();
return FALSE;
};
m_AudioProp.m_ChannelNo = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_Quant( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
ioif.luke2.IO_CONT = (ioif.luke2.IO_CONT & 0xfffff8) | 0x72000000;
};
m_AudioProp.m_Quant = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_AudioOut( PVOID pData )
{
AudioProperty_AudioOut_Value *pValue = (AudioProperty_AudioOut_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( *pValue != AudioOut_Encoded && *pValue != AudioOut_Decoded )
{
DBG_BREAK();
return FALSE;
};
if( PowerState == POWERSTATE_ON )
{
if( ( ziva.AUDIO_CONFIG & 0x02 ) != 0 )
{
switch( *pValue )
{
case AudioOut_Encoded:
ziva.AUDIO_CONFIG &= 0xfffffffe;
break;
case AudioOut_Decoded:
ziva.AUDIO_CONFIG |= 0x01;
break;
default:
DBG_BREAK();
return FALSE;
};
CTimeOut TimeOut( 1000, 1, m_pKernelObj ); // wait 1s, sleep 1ms
ziva.NEW_AUDIO_CONFIG = 0x01;
while( TRUE )
{
if( 0 == ziva.NEW_AUDIO_CONFIG )
break;
TimeOut.Sleep();
if( TimeOut.CheckTimeOut()==TRUE )
{
DBG_BREAK();
return FALSE;
};
}
}
else // ziva micro code bug.
{
if( *pValue == AudioOut_Encoded )
{
ziva.AUDIO_CONFIG = (ziva.AUDIO_CONFIG & 0xfffffffc) | 0x02;
CTimeOut TimeOut( 1000, 1, m_pKernelObj ); // wait 1s, sleep 1ms
ziva.NEW_AUDIO_CONFIG = 0x01;
while( TRUE )
{
if( 0 == ziva.NEW_AUDIO_CONFIG )
break;
TimeOut.Sleep();
if( TimeOut.CheckTimeOut()==TRUE )
{
DBG_BREAK();
return FALSE;
};
}
ziva.AUDIO_CONFIG = (ziva.AUDIO_CONFIG & 0xfffffffc) | 0x00;
CTimeOut TimeOut2( 1000, 1, m_pKernelObj ); // wait 1s, sleep 1ms
ziva.NEW_AUDIO_CONFIG = 0x01;
while( TRUE )
{
if( 0 == ziva.NEW_AUDIO_CONFIG )
break;
TimeOut2.Sleep();
if( TimeOut2.CheckTimeOut()==TRUE )
{
DBG_BREAK();
return FALSE;
};
}
};
if( *pValue == AudioOut_Decoded )
{
ziva.AUDIO_CONFIG = (ziva.AUDIO_CONFIG & 0xfffffffc) | 0x03;
CTimeOut TimeOut( 1000, 1, m_pKernelObj ); // wait 1s, sleep 1ms
ziva.NEW_AUDIO_CONFIG = 0x01;
while( TRUE )
{
if( 0 == ziva.NEW_AUDIO_CONFIG )
break;
TimeOut.Sleep();
if( TimeOut.CheckTimeOut()==TRUE )
{
DBG_BREAK();
return FALSE;
};
}
ziva.AUDIO_CONFIG = (ziva.AUDIO_CONFIG & 0xfffffffc) | 0x01;
CTimeOut TimeOut2( 1000, 1, m_pKernelObj ); // wait 1s, sleep 1ms
ziva.NEW_AUDIO_CONFIG = 0x01;
while( TRUE )
{
if( 0 == ziva.NEW_AUDIO_CONFIG )
break;
TimeOut2.Sleep();
if( TimeOut2.CheckTimeOut()==TRUE )
{
DBG_BREAK();
return FALSE;
};
}
};
};
};
m_AudioProp.m_OutType = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_Cgms( PVOID pData )
{
AudioProperty_Cgms_Value *pValue = (AudioProperty_Cgms_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case AudioCgms_Off:
ziva.IEC_958_CHANNEL_STATUS_BITS = ( ziva.IEC_958_CHANNEL_STATUS_BITS & 0xfffffffc ) | 0x01;
break;
case AudioCgms_1:
ziva.IEC_958_CHANNEL_STATUS_BITS = ( ziva.IEC_958_CHANNEL_STATUS_BITS & 0xfffffffc ) | 0x00;
break;
case AudioCgms_On:
ziva.IEC_958_CHANNEL_STATUS_BITS = ( ziva.IEC_958_CHANNEL_STATUS_BITS & 0xfffffffc ) | 0x02;
break;
default:
DBG_BREAK();
return FALSE;
};
CTimeOut TimeOut( 1000, 1, m_pKernelObj ); // wait 1s, sleep 1ms
ziva.NEW_AUDIO_CONFIG = 0x01;
while( TRUE )
{
if( 0 == ziva.NEW_AUDIO_CONFIG )
break;
TimeOut.Sleep();
if( TimeOut.CheckTimeOut()==TRUE )
{
DBG_BREAK();
return FALSE;
};
}
};
m_AudioProp.m_Cgms = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_AnalogOut( PVOID pData )
{
AudioProperty_AnalogOut_Value *pValue = (AudioProperty_AnalogOut_Value *)pData;
m_AudioProp.m_AnalogOut = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_DigitalOut( PVOID pData )
{
AudioProperty_DigitalOut_Value *pValue = (AudioProperty_DigitalOut_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case AudioDigitalOut_On:
ziva.AUDIO_CONFIG = ziva.AUDIO_CONFIG | 0x02; // IEC_958 on
ioif.luke2.IO_CONT = (( ioif.luke2.IO_CONT & 0xfffffff8 ) | 0x40 ); // optical out on only for SanJose
break;
case AudioDigitalOut_Off:
ziva.AUDIO_CONFIG = ziva.AUDIO_CONFIG & 0xfffffffd; // IEC_958 off
ioif.luke2.IO_CONT = (( ioif.luke2.IO_CONT & 0xfffffff8 ) &
0xffffffbf); // optical out off only for SanJose
break;
default:
return FALSE;
};
CTimeOut TimeOut( 1000, 1, m_pKernelObj ); // wait 1s, sleep 1ms
ziva.NEW_AUDIO_CONFIG = 0x01;
while( TRUE )
{
if( 0 == ziva.NEW_AUDIO_CONFIG )
break;
TimeOut.Sleep();
if( TimeOut.CheckTimeOut()==TRUE )
{
DBG_BREAK();
return FALSE;
};
}
};
m_AudioProp.m_DigitalOut = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_AC3DRangeLowBoost( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
if( *pValue > 128 )
return FALSE;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
ziva.AC3_LOW_BOOST = *pValue;
m_AudioProp.m_AC3DRangeLowBoost = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_AC3DRangeHighCut( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
if( *pValue > 128 )
return FALSE;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
ziva.AC3_HIGH_CUT = *pValue;
m_AudioProp.m_AC3DRangeHighCut = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_AC3OperateMode( PVOID pData )
{
AudioProperty_AC3OperateMode_Value *pValue = (AudioProperty_AC3OperateMode_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case AC3OperateLine: ziva.AC3_OPERATIONAL_MODE = 0; break;
case AC3OperateRF: ziva.AC3_OPERATIONAL_MODE = 1; break;
case AC3OperateCustom0: ziva.AC3_OPERATIONAL_MODE = 2; break;
case AC3OperateCustom1: ziva.AC3_OPERATIONAL_MODE = 3; break;
default:
return FALSE;
};
};
m_AudioProp.m_AC3OperateMode = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetAudioProperty_AC3OutputMode( PVOID pData )
{
AudioProperty_AC3OutputMode_Value *pValue = (AudioProperty_AC3OutputMode_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case AC3Output_Default: ziva.AC3_OUTPUT_MODE = 0; break;
case AC3Output_Karaoke: ziva.AC3_OUTPUT_MODE = 2; break;
case AC3Output_Surround: ziva.AC3_OUTPUT_MODE = 0; break;
default:
return FALSE;
};
};
m_AudioProp.m_AC3OutputMode = *pValue;
return TRUE;
};
//***************************************************************************
// Audio property private functions( Get series )
//***************************************************************************
BOOL CMPEGBoardHAL::GetAudioProperty_Type( PVOID pData )
{
AudioProperty_Type_Value *pValue = (AudioProperty_Type_Value *)pData;
*pValue = m_AudioProp.m_Type;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_Number( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
*pValue = m_AudioProp.m_StreamNo;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_Volume( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
*pValue = m_AudioProp.m_Volume;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_Sampling( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
*pValue = m_AudioProp.m_Sampling;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_Channel( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
*pValue = m_AudioProp.m_ChannelNo;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_Quant( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
*pValue = m_AudioProp.m_Quant;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_AudioOut( PVOID pData )
{
AudioProperty_AudioOut_Value *pValue = (AudioProperty_AudioOut_Value *)pData;
*pValue = m_AudioProp.m_OutType;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_Cgms( PVOID pData )
{
AudioProperty_Cgms_Value *pValue = (AudioProperty_Cgms_Value *)pData;
*pValue = m_AudioProp.m_Cgms;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_AnalogOut( PVOID pData )
{
AudioProperty_AnalogOut_Value *pValue = (AudioProperty_AnalogOut_Value *)pData;
*pValue = m_AudioProp.m_AnalogOut;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_DigitalOut( PVOID pData )
{
AudioProperty_DigitalOut_Value *pValue = (AudioProperty_DigitalOut_Value *)pData;
*pValue = m_AudioProp.m_DigitalOut;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_AC3DRangeLowBoost( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
*pValue = m_AudioProp.m_AC3DRangeLowBoost;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_AC3DRangeHighCut( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
*pValue = m_AudioProp.m_AC3DRangeHighCut;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_AC3OperateMode( PVOID pData )
{
AudioProperty_AC3OperateMode_Value *pValue = (AudioProperty_AC3OperateMode_Value *)pData;
*pValue = m_AudioProp.m_AC3OperateMode;
return TRUE;
};
BOOL CMPEGBoardHAL::GetAudioProperty_AC3OutputMode( PVOID pData )
{
AudioProperty_AC3OutputMode_Value *pValue = (AudioProperty_AC3OutputMode_Value *)pData;
*pValue = m_AudioProp.m_AC3OutputMode;
return TRUE;
};
//***************************************************************************
// Subpic property private functions( Set series )
//***************************************************************************
BOOL CMPEGBoardHAL::SetSubpicProperty_Number( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
ASSERT( *pValue <= 31 );
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
ziva.SelectStream( 1, *pValue );
m_SubpicProp.m_StreamNo = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetSubpicProperty_Palette( PVOID pData )
{
UCHAR *pValue = (UCHAR *)pData;
DWORD Addr,Data;
int i;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
Addr = ziva.SUB_PICTURE_PALETTE_START;
for( i = 0 ; i < 16 ; i ++ )
{
Data = (DWORD)(pValue[i*3]) * 0x10000 + (DWORD)(pValue[i*3 +1]) * 0x100 + (DWORD)(pValue[i*3 +2]);
ziva.ZiVAWriteMemory( Addr + i*4, Data );
};
ziva.NEW_SUBPICTURE_PALETTE = 0x01;
};
for( i = 0 ; i < sizeof( m_SubpicProp.m_Palette ) ; i ++ )
m_SubpicProp.m_Palette[ i ] = pValue[ i ];
return TRUE;
};
BOOL CMPEGBoardHAL::SetSubpicProperty_Hilight( PVOID pData )
{
SubpHlightStruc *pValue = (SubpHlightStruc *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( pValue->Hlight_Switch )
{
case Hlight_On:
// m_pKernelObj->Sleep( 40 ); // wait 40msec
ziva.HighLight2( pValue->Hlight_Contrast, pValue->Hlight_Color,
( pValue->Hlight_StartY << 12 ) | pValue->Hlight_EndY,
( pValue->Hlight_StartX << 12 ) | pValue->Hlight_EndX );
break;
case Hlight_Off:
ziva.HighLight2( 0, 0, 0, 0 );
break;
default:
DBG_BREAK();
return FALSE;
};
};
m_SubpicProp.m_Hlight = *pValue;
return TRUE;
};
BOOL CMPEGBoardHAL::SetSubpicProperty_State( PVOID pData )
{
SubpicProperty_State_Value *pValue = (SubpicProperty_State_Value *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
switch( *pValue )
{
case Subpic_On:
ziva.SUBPICTURE_ENABLE = 0x01;
break;
case Subpic_Off:
ziva.SUBPICTURE_ENABLE = 0x00;
break;
default:
DBG_BREAK();
return FALSE;
};
};
m_SubpicProp.m_OutType = *pValue;
return TRUE;
};
// by oka
BOOL CMPEGBoardHAL::SetSubpicProperty_HilightButton( PVOID pData )
{
DWORD ret = ZIVARESULT_NOERROR;
SubpHlightButtonStruc *pValue = (SubpHlightButtonStruc *)pData;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON )
{
ret = ziva.HighLight( pValue->Hlight_Button,
pValue->Hlight_Action );
};
m_SubpicProp.m_HlightButton = *pValue;
if (ret == ZIVARESULT_NOERROR)
return TRUE;
else
return FALSE;
};
BOOL CMPEGBoardHAL::SetSubpicProperty_FlushBuff( PVOID pData )
{
DWORD dwValue = m_SubpicProp.m_StreamNo;
POWERSTATE PowerState;
GetPowerState( &PowerState );
if( PowerState == POWERSTATE_ON ){
ziva.SelectStream( 1, 0xffff ); // 0xffff : discard
ziva.SelectStream( 1, dwValue );
}
return TRUE;
};
//***************************************************************************
// Subpic property private functions( Get series )
//***************************************************************************
BOOL CMPEGBoardHAL::GetSubpicProperty_Number( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
*pValue = m_SubpicProp.m_StreamNo;
return TRUE;
};
BOOL CMPEGBoardHAL::GetSubpicProperty_Palette( PVOID pData )
{
UCHAR *pValue = (UCHAR *)pData;
for( int i = 0 ; i < sizeof( m_SubpicProp.m_Palette ) ; i ++ )
pValue[ i ] = m_SubpicProp.m_Palette[ i ];
return TRUE;
};
BOOL CMPEGBoardHAL::GetSubpicProperty_Hilight( PVOID pData )
{
SubpHlightStruc *pValue = (SubpHlightStruc *)pData;
*pValue = m_SubpicProp.m_Hlight;
return TRUE;
};
BOOL CMPEGBoardHAL::GetSubpicProperty_State( PVOID pData )
{
SubpicProperty_State_Value *pValue = (SubpicProperty_State_Value *)pData;
*pValue = m_SubpicProp.m_OutType;
return TRUE;
};
// by oka
BOOL CMPEGBoardHAL::GetSubpicProperty_HilightButton( PVOID pData )
{
SubpHlightButtonStruc *pValue = (SubpHlightButtonStruc *)pData;
*pValue = m_SubpicProp.m_HlightButton;
return TRUE;
};
BOOL CMPEGBoardHAL::GetSubpicProperty_FlushBuff( PVOID pData )
{
DWORD *pValue = (DWORD *)pData;
*pValue = m_SubpicProp.m_StreamNo;
return TRUE;
};
//***************************************************************************
// End of
//***************************************************************************