📄 thumb.c
字号:
#include "winav.h"#include "ctkav.h"#include "osd.h"#include "fontindex.h" //++CoCo2.37P#include "cc.h"#include "linear.h"#include "utl.h"#include "setup.h"#include "hal.h"// wyc0.50-909, make infofilter.h before Mmanager.h because of Mmanager.h need to reference some information defined in infofilter.h#include "infofilter.h"#include "SrcFilter.h"#include "mmanager.h"#include "haljpeg.h"#include "osdnd.h"#include "input.h"#include "thumb.h"#include "haljpeg.h"#include "comutl.h"#include "jpegdec.h"#include "parser.h"#include "notransl.h"#include "osdmm.h"#include "osdss.h"
#include "romld.h"#ifdef SUPPORT_POWERON_MENU#include "poweronmenu.h"#endif //SUPPORT_POWERON_MENU#define THUMB_MAIN_FILE//#include "string.lan"#include "OSDString\\strextrn.h"BYTE THUMBButtonGeneralMode[] = {THUMB_BUTTON_ROTATE, THUMB_BUTTON_GENERAL_SLIDESHOW};BYTE THUMBButtonRotateMode[] = {THUMB_BUTTON_RESET, THUMB_BUTTON_ROTATE_RETURN};BYTE THUMBButtonProgramMode[] = {THUMB_BUTTON_PROGRAM_SLIDESHOW, THUMB_BUTTON_PROGRAMLIST};BYTE THUMBButtonProgramListMode[] = {THUMB_BUTTON_PROGRAMLIST_SLIDESHOW, THUMB_BUTTON_PROGRAMLIST_RETURN};BYTE THUMBButtonEditMode[] = {THUMB_BUTTON_EDIT_DELETE, THUMB_BUTTON_EDIT_SORT};#ifdef THUMB_NO_EDIT_MODEBYTE THUMBButtonDeleteMode[] = {THUMB_BUTTON_DELETE_DELETEALL, THUMB_BUTTON_EDIT_SORT};#elseBYTE THUMBButtonDeleteMode[] = {THUMB_BUTTON_DELETE_DELETEALL, THUMB_BUTTON_DELETE_RETURN};#endif //THUMB_NO_EDIT_MODEBYTE THUMBButtonSortMode[] = {THUMB_BUTTON_SORT_RETURN, THUMB_BUTTON_SORT_PLAY};#ifdef THUMB_NO_EDIT_MODEBYTE *THUMBButton[] = {THUMBButtonGeneralMode, THUMBButtonRotateMode, THUMBButtonProgramMode, THUMBButtonProgramListMode, THUMBButtonDeleteMode, THUMBButtonSortMode};#elseBYTE *THUMBButton[] = {THUMBButtonGeneralMode, THUMBButtonRotateMode, THUMBButtonProgramMode, THUMBButtonProgramListMode, THUMBButtonEditMode, THUMBButtonDeleteMode, THUMBButtonSortMode};#endif //THUMB_NO_EDIT_MODE//delcare global variablesBYTE __bThumbnailMode;WORD _wTHUMBIndex; //current index that user want to playWORD _wTHUMBPlayIndex;BYTE _bTHUMBStop;BYTE _bTHUMBTemp;WORD _wTHUMBTemp, _wTHUMBTemp1, _wTHUMBTemp2;BYTE _bTHUMBStage;BYTE _bTHUMBRetryTimes;WORD _wTHUMBTotalFiles;WORD _wTHUMBStartPlayItem; //Use it to record the first JPEG in this folder.DWORD _wTHUMBStartTime;DWORD _dwTHUMBCheckTime;DWORD _dwTHUMBTemp;BYTE _bTHUMBCursorType;BYTE _bTHUMBButtonIndex;BYTE _bTHUMBSubMode;BYTE _bTHUMBDecodeMode;BYTE _bTHUMBTuneFrame_H;BYTE _bTHUMBTuneFrame_V;WORD _wTHUMBHStartPos;WORD _wTHUMBVStartPos;BYTE _bTHUMBTuneOSDOffset_H;BYTE _bTHUMBTuneOSDOffset_V;BYTE _bTHUMBTuneOSDDistance_H;BYTE _bTHUMBTuneOSDDistance_V;BYTE _bTHUMBPageNO;BYTE _bTHUMBProgramListPageNo;PARM_FRAME _THUMBFrame;PARM_DRAW_STRING _THUMBStringAttr;PARM_RECT _THUMBRect;PARM_DRAW_BITMAP _THUMBDrawBitmap;URECT _THUMBPSFBRect;JPEG_INFO _JPEGInfo[THUMB_TOTAL_NUM_IN_PAGE];DWORD _dwTHUMBFrameColor;BYTE _bTHUMBFrameThickness;DWORD _dwTHUMBFlashTime;BYTE _dwTHUMBFlash;BYTE __bTHUMBMainMode = THUMB_MAIN_MODE_GENERAL;BYTE _bTHUMBStartSort = FALSE;#ifdef SUPPORT_DELETE_FILE_IN_THUMB_UIBYTE _bTHUMBSortFileStartIndex;BYTE _bTHUMBSortFileEndIndex;extern BYTE __bMMJPGEncodeNum;#endif //SUPPORT_DELETE_FILE_IN_THUMB_UI#ifdef CT950_STYLEWORD _wTHUMBPlayItemInFolder;WORD _wTHUMBTotalFiles;#endif //CT950_STYLE
#ifdef SUPPORT_JPEG_BACKGROUND
char cBackgoundName[4] = "";
#endif //SUPPORT_JPEG_BACKGROUNDextern BYTE __bZoomFactor;extern BYTE __bTVType; // keep the current TV typeextern WORD __wJPEGFMTExifImageWidth;extern WORD __wJPEGFMTExifImageHeight;extern CHAR __cJPEGFMTExifDate[11];extern BYTE __bSETUPUIStyleChanged;//The palette for thumbnail's backgroundDWORD _dwTHUMBPalette[THUMB_BACKGROUND_PALETTE_NUM] = {0x003687,0x003A91, 0x003E9B, 0x0042A5, 0x0046AF, 0x004AB9, 0x004EC3, 0x0052CD, 0x0056D7, 0x005AE1, 0x005EEB, 0x0062F5, 0x0066FF, 0x0A6CFF, 0x1472FF, 0x1E78FF, 0x287EFF, 0x3284FF, 0x3C8AFF, 0x4690FF, 0x5096FF, 0x5A9CFF, 0x64A2FF, 0x6EA8FF, 0x78AEFF, 0x78AEFF, 0x6EA8FF, 0x64A2FF, 0x5A9CFF, 0x5096FF, 0x4690FF, 0x3C8AFF, 0x3284FF, 0x287EFF, 0x1E78FF, 0x1472FF, 0x0A6CFF, 0x0066FF, 0x0062F5, 0x005EEB, 0x005AE1, 0x0056D7, 0x0052CD, 0x004EC3, 0x004AB9, 0x0046AF, 0x0042A5, 0x003E9B, 0x003A91, 0x003687};//Define the background colorDWORD _dwTHUMBBtnEnableColor[] = {THUMB_PALETTE_COLOR_BUTTON_ENABLE_BACKGROUND_1, THUMB_PALETTE_COLOR_BUTTON_ENABLE_BACKGROUND_2, THUMB_PALETTE_COLOR_BUTTON_ENABLE_BACKGROUND_3, THUMB_PALETTE_COLOR_BUTTON_ENABLE_BACKGROUND_4};DWORD _dwTHUMBBtnHighlightColor[] = {THUMB_PALETTE_COLOR_BUTTON_HIGHLIGHT_BACKGROUND_1, THUMB_PALETTE_COLOR_BUTTON_HIGHLIGHT_BACKGROUND_2, THUMB_PALETTE_COLOR_BUTTON_HIGHLIGHT_BACKGROUND_3, THUMB_PALETTE_COLOR_BUTTON_HIGHLIGHT_BACKGROUND_4};DWORD _dwTHUMBHelpRegionColor[] = {THUMB_PALETTE_COLOR_HELP_REGION_BACKGROUND_1, THUMB_PALETTE_COLOR_HELP_REGION_BACKGROUND_2, THUMB_PALETTE_COLOR_HELP_REGION_BACKGROUND_3, THUMB_PALETTE_COLOR_HELP_REGION_BACKGROUND_4};DWORD _dwTHUMBSelectFrameColor[] = {THUMB_FRAME_SELECT_COLOR_1, THUMB_FRAME_SELECT_COLOR_2, THUMB_FRAME_SELECT_COLOR_3, THUMB_FRAME_SELECT_COLOR_4};DWORD _dwTHUMBTitleStringColor[] = {THUMB_PALETTE_COLOR_TITLE_STRING_1, THUMB_PALETTE_COLOR_TITLE_STRING_2, THUMB_PALETTE_COLOR_TITLE_STRING_3, THUMB_PALETTE_COLOR_TITLE_STRING_4};DWORD _dwTHUMBPageStringColor[] = {THUMB_PALETTE_COLOR_PAGE_STRING_1, THUMB_PALETTE_COLOR_PAGE_STRING_2, THUMB_PALETTE_COLOR_PAGE_STRING_3, THUMB_PALETTE_COLOR_PAGE_STRING_4};//*********************************************************************************************************// Function : THUMB_Entry// Abstract : Call this function to enter thumbnail mode.// Arguments : none.// Return : none.// Side Effect : none.// Notes ://*********************************************************************************************************void THUMB_Entry(void){ DWORD dwSaveInt; if( !(OS_PeekFlag(&__fThreadInit) & INIT_DEC_THREAD_JPEG_DONE) ) { INITIAL_ThreadInit(THREAD_JPEG_DECODER); OS_YieldThread(); OS_TimedWaitFlag( &__fThreadInit, INIT_DEC_THREAD_JPEG_DONE, FLAG_WAITMODE_AND, (COUNT_100_MSEC) ); }
//CoCo1.07, fix the bug about "The thumbnails will be zoom in if slide show with effect (before the effect is completed)." HALJPEG_CompleteEffectImmediately(__HALJPEGSetting.bFrameBuffer); DISP_DelayVSYNC(1); //If it is a zoom mode, recover it to normal state.#ifdef SUPPORT_GRAPH_ZOOM __bZoomFactor = VIEW_NORMAL; OSD_Output ( MSG_ZOOM, (WORD)__bZoomFactor, 0x3 ); //Clear PIP and OSD#endif //Tell OSD that thumbnail UI enters OSD_ChangeUI(OSD_UI_THUMBNAIL, OSD_ENTER_UI); //Need to stop JPEG decoder before configure buffer. HALJPEG_Reset(); //initialize some global variables when entering thumbnail first time. _THUMB_Initial(); HALJPEG_Initial(); //CoCo2.38, must put it after UTL_Config_BufferMode HALJPEG_Reset(); //__bAttrPlayNew = ATTR_JPG; //--CoCo0.72 //Thumbnail always use frame buffer 0.// wyc2.17-909S, need to ise frame buffer 0 when single buffer mode. Because frame 1 set to thumb buffer in single buffer mode.#ifdef JPG_SINGLE_FRAME_BUFFER __HALJPEGSetting.bFrameBuffer = 1;#else __HALJPEGSetting.bFrameBuffer = 0;#endif // _THUMB_ClearScreen(); //CoCo2.35, force to enable the display. HAL_DISABLE_INTERRUPTS( dwSaveInt ); __dwVideo_en |= DISP_VIDEO_READY; HAL_RESTORE_INTERRUPTS( dwSaveInt ); //Reset the "clip region". HALJPEG_Display(__HALJPEGSetting.bFrameBuffer); //HAL_Display(HAL_DISPLAY_VIDEO, TRUE); //Should enable video always to prevent from entering thumbnail mode when first JPEG slide show is not decoded OK and the video is disabled. //Initialize OSD in the new mode. _THUMB_EnterNewMode(); //Reset the JPEG relative info. _THUMB_ResetJPEGInfo(); //Reset the time of flash the current selection _dwTHUMBFlashTime = OS_GetSysTimer(); _dwTHUMBFlash = FALSE;}//*********************************************************************************************************// Function : _THUMB_Initial// Abstract : This function will initialize all global variables.// Arguments : none.// Return : none.// Side Effect : none.// Notes ://*********************************************************************************************************void _THUMB_Initial(void){ __bThumbnailMode = TRUE; // LLY2.22, config frame buffer as JPEG thumbnail mode // Otherwise, fill frame buffer result maybe wrong. // Since, the frame buffer are different between JPEG slide show and JPEG preview/ thumbnail mode // Notice: must call this API after __bThumbnailMode setting, since it will reference it. UTL_Config_BufferMode(DUMP_BUFF_MM_VIDEO_ONLY_MODE); //calculate the number of JPEG files. if (__bTHUMBMainMode == THUMB_MAIN_MODE_GENERAL) { #ifdef CT950_STYLE //Clear the flag to prevent MM will not clear the status before entering thumbnail mode. for (_wTHUMBTemp = 0; _wTHUMBTemp < __bMMTotalDirs; _wTHUMBTemp++) { // wyc2.60-909P, modify for unicode because unicode use bit 7 in link status __pMMDirNameList[_wTHUMBTemp].bMMLinkStatus &= ~MM_SORT_FILTER_LINK_READY; } _THUMB_InitializeDirFile();#else _THUMB_GetTotalFiles(); _wTHUMBIndex = __wPlayItem - 1 - _wTHUMBStartPlayItem;#endif //CT950_STYLE } else //Edit mode {#ifdef SUPPORT_DELETE_FILE_IN_THUMB_UI // Switch source to SPI __SF_SourceGBL[0].bSourceIndex = SOURCE_SPI; _wTHUMBIndex = 0; _wTHUMBTotalFiles = __bMMJPGEncodeNum;#endif //SUPPORT_DELETE_FILE_IN_THUMB_UI } _bTHUMBPageNO = _wTHUMBIndex / THUMB_TOTAL_NUM_IN_PAGE; _wTHUMBPlayIndex = _bTHUMBPageNO * THUMB_TOTAL_NUM_IN_PAGE; //Play from what item. if (__bTHUMBMainMode == THUMB_MAIN_MODE_GENERAL) {#ifdef CT950_STYLE //Caldulate the __MMPlayingItem.wDirID after _wTHUMBPlayIndex is assigned. _THUMB_CheckDumpFileRecord(TRUE);#endif //CT950_STYLE } __bZoomFactor = VIEW_NORMAL; _bTHUMBRetryTimes = THUMB_REDECODE_TIMES; _THUMB_InitialStage(); #ifdef SUPPORT_THUMB_PROGRAM if (__btProgram) { _bTHUMBSubMode = THUMB_SUBMODE_PROGRAM; //Enter "Program" mode directly } else#endif //#ifdef SUPPORT_THUMB_PROGRAM { if (__bTHUMBMainMode == THUMB_MAIN_MODE_GENERAL) { _bTHUMBSubMode = THUMB_SUBMODE_GENERAL; //Enter "General" mode } else {#ifdef THUMB_NO_EDIT_MODE _bTHUMBSubMode = THUMB_SUBMODE_DELETE_MODE; //Enter "delete" mode#else _bTHUMBSubMode = THUMB_SUBMODE_EDIT_MODE; //Enter "edit" mode#endif //THUMB_NO_EDIT_MODE } } _bTHUMBDecodeMode = THUMB_DECODE_PAGE; _THUMB_InitializeGDI(); //Set the color of the background, color of the text, and vertical starting position for upper right message. _THUMB_InitializeNDAttribute(); __bHALJPEGEffect = HALJPEG_EFFECT_NONE; //set variables of frame position _THUMB_TuneFramePosition(); /*#if (DRAM_CONFIGURATION_TYPE_DVD == DRAM_SIZE_16) HALJPEG_SetDisplay();#endif */}//*********************************************************************************************************// Function : THUMB_UI_Trigger// Abstract : Call this function by OSD_Trigger// Arguments : none.// Return : none.// Side Effect : none.// Notes ://*********************************************************************************************************// LLY2.53, expand time value unit from WORD to DWORD// Since, we will use [23:16]:hour, [15:8]: min, [7:0]: sec//void THUMB_UI_Trigger(BYTE bType, WORD wTime)void THUMB_UI_Trigger(BYTE bType, DWORD dwTime){ //Flash the current selection if (bType == OSD_TRIGGER_CONTROL) { if (__bThumbnailMode && _bTHUMBStop && (_bTHUMBCursorType == THUMB_CURSOR_PICTURE)) { if ((OS_GetSysTimer() - _dwTHUMBFlashTime) > COUNT_1_SEC) { _bTHUMBTemp = (_wTHUMBIndex % THUMB_TOTAL_NUM_IN_PAGE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -