📄 osdss.c
字号:
#include "winav.h"
#include "comdef.h"
#include "osd.h"
#include "utl.h"
#include "cc.h"
#include "linear.h"
#include "gdi.h"
#include "osdss.h"
#include "disp.h"
#include "setup.h"
#include "hal.h"
#include "srcfilter.h"
#include "osdnd.h"
// LLY2.51, include "romld.h" temporally since current JPEG address is get from romld
// And, can remove it after real saving JPEG within SPI flash feature is ok
#include "romld.h"
#ifdef CT950_STYLE//CoCo2.38
#include "clock.h"
#include "alarm.h"
#endif //CT950_STYLE
#ifdef SUPPORT_RADIO_TUNER
#include "radio.h"
#endif
#ifdef SUPPORT_CHAR_SUBPICTURE
#ifdef EX_SP_USE_SPU_BUFFER
#include "parser.h"
#include "subpict.h"
#endif
#endif
#include "thumb.h"
#include "char_subpict.h"
#include "jpegdec.h"
//WORD aSSDVDLOGOTest[] = {8, CHAR_C, CHAR_h, CHAR_e, CHAR_e, CHAR_r, CHAR_t, CHAR_e, CHAR_k};
#ifndef NO_SCREEN_SAVER
DWORD aOSDSSDVDLOGOPalette[] = {OSDSS_PALETTE_COLOR_DVD_LOGO_1, OSDSS_PALETTE_COLOR_DVD_LOGO_2, OSDSS_PALETTE_COLOR_DVD_LOGO_3, OSDSS_PALETTE_COLOR_DVD_LOGO_4,
OSDSS_PALETTE_COLOR_DVD_LOGO_5, OSDSS_PALETTE_COLOR_DVD_LOGO_6, OSDSS_PALETTE_COLOR_DVD_LOGO_7, OSDSS_PALETTE_COLOR_DVD_LOGO_8};
//CoCo1.06, define the bitmap and palette for screen saver.
DWORD _aSCRSaver[]={#ifndef NO_SCREEN_SAVER
#ifndef OSDSS_JPEG_SCREEN_SAVER#include "ScrSaver.txt"
#else
0x0, 0x00000002, 0x0, 0x0, // dummy, for no screen saver case. Set Size to 0, so no data will be download to DRAM#endif //OSDSS_JPEG_SCREEN_SAVER
#else0x0, 0x00000002, 0x0, 0x0, // dummy, for no screen saver case. Set Size to 0, so no data will be download to DRAM#endif};
DWORD * _aScrrenSaverBMPArray[1] = {_aSCRSaver};
DWORD Palette_ScreenSaver[]=
{
#ifndef OSDSS_JPEG_SCREEN_SAVER#include "PalScr.txt"
#endif //OSDSS_JPEG_SCREEN_SAVER
};
GDI_PALETTE_INFO __PaletteInfo_ScreenSaver = {95, PAL_ADDR, Palette_ScreenSaver};
#endif
PARM_DRAW_STRING _OSDSSStringAttr;
DWORD __dwOSDSSCheckTime = 0xFFFFFFFF;
DWORD __dwOSDServoCheckTime = 0xFFFFFFFF;
PARM_DRAW_BITMAP _OSDSSDrawBitmap;
POSITION _bOSDSSCurrentPos;
DWORD _dwOSDSSMoveTime;
DWORD _dwOSDSSColorChangeTime;
DWORD _dwOSDSSMixRatioChangeTime;
DWORD __dwOSDSSCheckNOData = 0xFFFFFFFF;
BYTE _bOSDSSScreenSaverMode = FALSE;
DWORD __dwOSDServoCheckNOData = 0xFFFFFFFF;
BYTE _bOSDSSInvertH;
BYTE _bOSDSSInvertV;
BYTE _bOSDSSMixRatioInvert;
BYTE _bOSDSSMixRatio;
BYTE _bSDSSColorChange;
extern BYTE __dwMMJPEGPreview;
extern BYTE _bOSDCurrentUI;
#ifdef SUPPORT_ENCODE_JPG_PICTURE
extern BYTE __bMMJPGEncodeNum;
// LLY2.55, add a variable to keep previous source index before switch to SPI path
// for screen saver w/ JPEG in SPI Flash
BYTE __bOldSrcIdx;
#endif //#ifdef SUPPORT_ENCODE_JPG_PICTURE
// LLY2.51, add a new variable to keep desired JPEG picture index, index from '1'
BYTE __bOSDSSPicIdx = 0;
BYTE _bOSDSSBackupCurrentUI;
#ifndef SUPPORT_ENCODE_JPG_PICTURE
#define OSDSS_MAX_PICTURE_NUM 2
#endif //SUPPORT_ENCODE_JPG_PICTURE
//CoCo2.38
// LLY2.51, remove __bLOGOIndex, since nobody reference it.
//extern BYTE __bLOGOIndex;
#ifdef CT950_STYLE
extern BYTE __bPOWERONMENUInitial;
#endif //CT950_STYLE
// LLY2.51, add a API to trigger each JPEG picture update.
// Notice: need do modification if JPEG saving in flash feature ok
// ***********************************************************************************
// Function : _OSDSS_PictureUpdate
// Description : Update JPEG picture base on desired index.
// Arguments : bIdx, specify the desired JPEG index
// Return : None
// **********************************************************************************
void _OSDSS_PictureUpdate(BYTE bIdx)
{
// extern BYTE __bMMEffectIdx;
#ifndef SUPPORT_ENCODE_JPG_PICTURE
PSECTION_ENTRY pLogoTbl;
volatile PDWORD pdwPtr;
DWORD dwSize;
switch(bIdx)
{
default:
case 0:
pLogoTbl = ROMLD_GetSectionByName(0, "LOG1");
break;
case 1:
pLogoTbl = ROMLD_GetSectionByName(0, "LOG2");
break;
}
pdwPtr = (PDWORD) pLogoTbl->dwRMA;
// Read-back total size from flash
dwSize = pdwPtr[0] & 0x0000FFFF;
// Set the pointer to logo data start address
// Notice: must /4, since pdwPtr is DWORD unit
pdwPtr += 8/4;
// wyc2.53-909P,
SrcFilter_Stop(__dwSFStreamID);
HAL_ControlParser(HAL_PARSER_STOP, 0);
// Set playback mode and attribute as JPEG first
__bModePlay = MODE_PLAYUNKNOW;
__bAttrPlayNew = ATTR_JPG;
// Disable thumbnail and JPEG preview mode first
// Since buffer mode configuration will reference it within
// UTL_SetPlayMode() --> UTL_Config_BufferMode(DUMP_BUFF_MM_VIDEO_ONLY_MODE)
__bThumbnailMode=0;
__dwMMJPEGPreview=0;
// Config playback mode as JPEG
UTL_SetPlayMode(MODE_PLAYVIDEO);
// Fill desired date to video buffer directly
HAL_FillVideoBuffer(HAL_VIDEOBUF_MM, pdwPtr, dwSize);
// Reset video decoder
HAL_ResetVideoDecoder(HAL_VIDEO_DECODER1|HAL_VIDEO_DECODER2 );
#else
// LLY2.55, must keep original source index before switch to SPI path
__bOldSrcIdx = __SF_SourceGBL[0].bSourceIndex;
// Switch source to SPI
__SF_SourceGBL[0].bSourceIndex = SOURCE_SPI;
// Start to playabck a Item configuration.
UTL_PlayItem(bIdx+1, 0);
#endif //SUPPORT_ENCODE_JPG_PICTURE
// LLY2.51, keep desired JPEG Effect mode for JPEG slide slow as screen save mode
// LLY2.52, if JPEG need effect feature it can't go single JPEG Slide patch
// ie. it must go _MM_ImageTrigger() since need two buffer.
//__bHALJPEGEffect= __bMMEffectIdx;
__bHALJPEGEffect= HALJPEG_EFFECT_NONE;
#ifdef JPG_SINGLE_FRAME_BUFFER
__HALJPEGSetting.bFrameBuffer = 0;
#else
//CoCo2.77
if (__wHALJPEGCurrentDisplayBuf)
{
__HALJPEGSetting.bFrameBuffer = 0;
}
else
{
__HALJPEGSetting.bFrameBuffer = 1;
}
//__HALJPEGSetting.bFrameBuffer = !__HALJPEGSetting.bFrameBuffer;
#endif //JPG_SINGLE_FRAME_BUFFER
// Do single JPEG Slide Show procedure.
if(UTL_ShowJPEG_Slide(JPEG_PARSE_TYPE_NORMAL, __HALJPEGSetting.bFrameBuffer))
{
// Clear __bLOGO as none since it has exist default LOGO mode.
__bLOGO=LOGO_NONE;
}
}
//********************************************************************************************************
// Function : OSDSS_Entry
// Abstract : This function is the entry for entering screen saver.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes :
//*********************************************************************************************************
void OSDSS_Entry(void)
{
#ifndef NO_SCREEN_SAVER
#ifdef OSDSS_JPEG_SCREEN_SAVER
#ifdef SUPPORT_ENCODE_JPG_PICTURE
if (__bMMJPGEncodeNum == 0)
return;
#else
__bOSDSSPicIdx = 0;
#endif //SUPPORT_ENCODE_JPG_PICTURE
#endif //OSDSS_JPEG_SCREEN_SAVER
_bOSDSSScreenSaverMode = TRUE;
_bOSDSSBackupCurrentUI = _bOSDCurrentUI;
//Tell OSD that screen saver enters.
OSD_ChangeUI(OSD_UI_SCREEN_SAVER, OSD_ENTER_UI);
#ifdef SUPPORT_CHAR_SUBPICTURE
#ifdef EX_SP_USE_SPU_BUFFER
// Damon2.56, clear SP display region, or SP will display in srceen saver.
if(__bAttrPlay == ATTR_AVI && __SP1.ESFormat == PARSER_ESFMT_TEXT_SP_EXT)
{
CHAR_SP_ClearRegion();
}
#endif
#endif
#ifdef OSDSS_JPEG_SCREEN_SAVER
OSDND_ConfigOSDRegion();
_dwOSDSSMoveTime = OS_GetSysTimer();
GDI_ClearRegion(0); //clear region 0
// LLY2.51, call _OSDSS_PictureUpdate() to change desired JPEG file
//__bLOGO = 0;
//__bLOGOIndex++;
//UTL_ShowLogo();
_OSDSS_PictureUpdate(__bOSDSSPicIdx);
#else
//Disable the main video.
DISP_DisplayCtrl(DISP_MAINVIDEO, FALSE);
//DISP_DisplayCtrl(DISP_PIP, FALSE); //CoCo1.10, don't disable PIP. If disable PIP then enable again, the PIP can't be displayed well.
HAL_Display(HAL_DISPLAY_SPST_DEC, FALSE);
GDI_ClearRegion(0); //clear region 0
GDI_DeactivateRegion();
GDI_InitialRegion(1); //Use region 1
_OSDSS_DVDLOGO_Initial();
#endif //OSDSS_JPEG_SCREEN_SAVER
#endif
}
//********************************************************************************************************
// Function : OSDSS_Monitor
// Abstract : This function monitors enter scrren saver or not.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes :
//*********************************************************************************************************
void OSDSS_Monitor(void)
{
if (__btPowerDown)
return;
//CoCo1.10, separate the servo stop from screen saver.
_OSDSS_Servo_Monitor();
#ifndef NO_SCREEN_SAVER
if (__dwOSDSSCheckTime == 0xFFFFFFFF)
{
__dwOSDSSCheckTime=OS_GetSysTimer();
__dwOSDSSCheckNOData = __dwTimeNow;
return;
}
else
{
if (!_bOSDSSScreenSaverMode)
{
if (__dwOSDSSCheckNOData == __dwTimeNow)
{
if ((OS_GetSysTimer()-__dwOSDSSCheckTime) > OSDSS_ENTER_TIME)
{
#ifdef OSDSS_JPEG_SCREEN_SAVER //CoCo2.38
#ifdef CT950_STYLE
if (__bPOWERONMENUInitial && (__bCLOCKShowClock == FALSE) && (__bAlarmState == ALARM_NONE))
{
//OSDND_ConfigOSDRegion();
OSDSS_Entry();
}
#ifdef SUPPORT_RADIO_TUNER
#ifndef SUPPORT_RADIO_RDS
else if (__bPlayRadio == TRUE)
{
OSDSS_Entry();
}
#endif
#endif //SUPPORT_RADIO_RDS
else
#endif //CT950_STYLE
{
OSDSS_ResetTime();
}
#else
if (__SetupInfo.bSCRControl == SETUP_SCREEN_SAVER_ON)
{
OSDSS_Entry();
}
#endif //
}
}
else
{
OSDSS_ResetTime();
}
}
}
#endif //NO_SCREEN_SAVER
}
//********************************************************************************************************
// Function : _OSDSS_Servo_Monitor
// Abstract : This function monitors when to stop the servo.
// Arguments : none.
// Return : none.
// Side Effect : none.
// Notes :
//*********************************************************************************************************
void _OSDSS_Servo_Monitor(void)
{
if (__dwOSDServoCheckTime == 0xFFFFFFFF)
{
__dwOSDServoCheckTime=OS_GetSysTimer();
__dwOSDServoCheckNOData = __dwTimeNow;
return;
}
else
{
if (__dwOSDServoCheckNOData == __dwTimeNow)
{
#ifdef RELEASE_SETTING
if ((OS_GetSysTimer()-__dwOSDServoCheckTime) > OSDSS_SERVO_STOP_TIME)
{
SrcFilter_PowerMode (SERVO_POWER_STOP);
}
#endif //
}
else
{
__dwOSDServoCheckNOData = __dwTimeNow;
__dwOSDServoCheckTime=OS_GetSysTimer();
}
}
}
//********************************************************************************************************
// Function : OSDSS_Trigger
// Abstract : This function will be called by OSD_Trigger().
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -