⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thumb.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
#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 + -