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

📄 thumb.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
    }    else //PAL    {        _wTHUMBVStartPos += (THUMB_TUNE_DISTANCE_HEIGHT_PAL) * (bIndex / THUMB_COLUMN_NUM);        _THUMBFrame.rect.wRight = _wTHUMBHStartPos+THUMB_WIDTH+THUMB_TUNE_DISPLAY_WIDTH_PAL;        _THUMBFrame.rect.wBottom = _wTHUMBVStartPos+THUMB_HEIGHT_NTSC+THUMB_TUNE_DISPLAY_HEIGHT_PAL;    }    _THUMBFrame.rect.wLeft = _wTHUMBHStartPos;    _THUMBFrame.rect.wTop = _wTHUMBVStartPos;    //Clear the region before re-draw the frame because the thickness of the highlight frame may be bigger than normal frame    _THUMBRect.bColor = PAL_ENTRY_COLOR_TRANSPARENT;    _THUMBRect.rect.wLeft = _THUMBFrame.rect.wLeft;    _THUMBRect.rect.wTop = _THUMBFrame.rect.wTop;    _THUMBRect.rect.wRight = _THUMBFrame.rect.wRight;    _THUMBRect.rect.wBottom = _THUMBFrame.rect.wBottom;    GDI_FillRect_909(0, &_THUMBRect);    switch (bMode)    {    case THUMB_FRAME_NORMAL:        _THUMBFrame.bColorBright = THUMB_PALETTE_ENTRY_NORMAL_FRAME_BRIGHT;        _THUMBFrame.bColorDark = THUMB_PALETTE_ENTRY_NORMAL_FRAME_DARK;        break;    case THUMB_FRAME_SELECT:        _THUMBFrame.bThickness = THUMB_HIGHLIGHT_FRAME_THICKNESS >> 1;        _THUMBFrame.bColorBright = THUMB_PALETTE_ENTRY_SELECT_FRAME_BRIGHT;        _THUMBFrame.bColorDark = THUMB_PALETTE_ENTRY_SELECT_FRAME_DARK;        break;    case THUMB_FRAME_PROGRAM:        _THUMBFrame.bColorBright = THUMB_PALETTE_ENTRY_PROGRAM_FRAME_BRIGHT;        _THUMBFrame.bColorDark = THUMB_PALETTE_ENTRY_PROGRAM_FRAME_DARK;        break;    case THUMB_FRAME_CLEAR:        _THUMBFrame.bColorBright = PAL_ENTRY_COLOR_TRANSPARENT;        _THUMBFrame.bColorDark = PAL_ENTRY_COLOR_TRANSPARENT;        break;    default:        break;    }    GDI_DrawFrame_909(0, &_THUMBFrame);#else    /* --CoCo1.10, fix the bug about the "Program" symbol is not cleared.    //Clear the region before re-draw the frame because the "P" for program need to be cleared.    if (_bTHUMBSubMode == THUMB_SUBMODE_PROGRAM)        _THUMB_ClearProgramSymbol(bIndex);        */    _THUMB_GetPosition(bIndex);    switch (bMode)    {    case THUMB_FRAME_NORMAL:        _bTHUMBFrameThickness = THUMB_FRAME_THICKNESS;        _dwTHUMBFrameColor = THUMB_FRAME_NORMAL_COLOR;        break;    case THUMB_FRAME_SELECT:        _bTHUMBFrameThickness = THUMB_HIGHLIGHT_FRAME_THICKNESS;        _dwTHUMBFrameColor = _dwTHUMBSelectFrameColor[__SetupInfo.bUIStyle-SETUP_CUSTOM_UI_STYLE_BEGIN]; //THUMB_FRAME_SELECT_COLOR;        break;    case THUMB_FRAME_PROGRAM:        _bTHUMBFrameThickness = THUMB_FRAME_THICKNESS;        _dwTHUMBFrameColor = THUMB_FRAME_PROGRAM_COLOR;        break;    case THUMB_FRAME_CLEAR:        _bTHUMBFrameThickness = THUMB_HIGHLIGHT_FRAME_THICKNESS; //clear the max. thickness        _dwTHUMBFrameColor = THUMB_BACKGROUND_COLOR;        break;    default:        break;    }    _THUMBPSFBRect.wLeft = _wTHUMBHStartPos-_bTHUMBFrameThickness;    _THUMBPSFBRect.wTop = _wTHUMBVStartPos-_bTHUMBFrameThickness;    _THUMBPSFBRect.wRight = _wTHUMBHStartPos+THUMB_WIDTH+_bTHUMBFrameThickness;    _THUMBPSFBRect.wBottom = _wTHUMBVStartPos+THUMB_HEIGHT_NTSC+_bTHUMBFrameThickness;    GDI_FBDrawRect(__HALJPEGSetting.bFrameBuffer, &_THUMBPSFBRect, _bTHUMBFrameThickness, _dwTHUMBFrameColor);#endif //THUMB_DRAW_OSD_FRAME}//*********************************************************************************************************//  Function    :   _THUMB_ProcessError//  Abstract    :   Process the error about parsing header or decoding.//  Arguments   :   none.//  Return		:   none.//  Side Effect :   none.//  Notes       ://*********************************************************************************************************void _THUMB_ProcessError(void){    //HAL_ControlCDIF(HAL_CDIF_CLOSE); //--CoCo1.20, reduce code size    HALJPEG_Reset();    if (_bTHUMBRetryTimes)    {        _bTHUMBRetryTimes--;        _THUMB_Start();    }    else    {        if (_bTHUMBDecodeMode == THUMB_DECODE_PAGE)        {            _THUMB_DrawFrame((BYTE)(_wTHUMBPlayIndex%THUMB_TOTAL_NUM_IN_PAGE), THUMB_FRAME_NORMAL);            _THUMB_ChangeToNextPic();        }        else if (_bTHUMBDecodeMode == THUMB_DECODE_UNDETERMINED)        {            _wTHUMBPlayIndex++;            _THUMB_SearchNextValidPic();        }        else //decode only one thumbnail            _bTHUMBStop = TRUE;    }}//*********************************************************************************************************//  Function    :   _THUMB_ChangeToNextPic//  Abstract    :   Prepare to change to next picture.//  Arguments   :   none.//  Return		:   none.//  Side Effect :   none.//  Notes       ://*********************************************************************************************************void _THUMB_ChangeToNextPic(void){    _bTHUMBStage = THUMB_STAGE_START;    _THUMB_CheckPlayPageBoundary();    _wTHUMBPlayIndex++;}//*********************************************************************************************************//  Function    :   _THUMB_CheckPlayPageBoundary//  Abstract    :   This function will check if we have decoded all thumbnails//              :   in a page.//  Arguments   :   none.//  Return		:   none.//  Side Effect :   none.//  Notes       ://*********************************************************************************************************void _THUMB_CheckPlayPageBoundary(void){    if (_THUMB_CheckPagePlayEnd()) //All thumbnails has been decoded in a page.    {        _bTHUMBStop = TRUE;        _THUMB_UpdateHighlight(THUMB_UPDATE_HIGHLIGHT_DRAW);        _THUMB_DisplayPageInfo();        _THUMB_ShowGeneralHelp((BYTE)(_wTHUMBIndex % THUMB_TOTAL_NUM_IN_PAGE));    }}//*********************************************************************************************************//  Function    :   _THUMB_CheckPagePlayEnd//  Abstract    :   Call this function to check if we've played the last thumbnail//              :   in this page.//  Arguments   :   none.//  Return		:   TRUE: play end.//              :   FALSE: You can go on playing the next thumbnail.//  Side Effect :   none.//  Notes       ://*********************************************************************************************************BYTE _THUMB_CheckPagePlayEnd(void){    if (_bTHUMBSubMode == THUMB_SUBMODE_PROGRAM_LIST) //"Program List" mode        _bTHUMBTemp = _bTHUMBProgramListPageNo;    else //general mode        _bTHUMBTemp = _bTHUMBPageNO;    if (((_wTHUMBPlayIndex + 1) / THUMB_TOTAL_NUM_IN_PAGE) > _bTHUMBTemp)        return TRUE;    return FALSE;}//*********************************************************************************************************//  Function    :   _THUMB_DisplayPageInfo//  Abstract    :   This function will display the page number.//  Arguments   :   none.//  Return		:   none.//  Side Effect :   none.//  Notes       ://*********************************************************************************************************void _THUMB_DisplayPageInfo(void){    //clear the page info.    _THUMB_ClearRegion(THUMB_CLEAR_PAGE_INFO_REGION);    if (_wTHUMBTotalFiles != 0)    {        _THUMB_SetNormalStringAttribute();        _THUMBStringAttr.bTextColor = THUMB_PALETTE_ENTRY_PAGE_STRING;        OSDUTL_PrepareOutputString();        OSDUTL_CopyStringFromIndex(aTHUMBPage);#ifdef SUPPORT_THUMB_PROGRAM        if (_bTHUMBSubMode == THUMB_SUBMODE_PROGRAM_LIST)        {            OSDUTL_OutputNumFromIndex((WORD)(_bTHUMBProgramListPageNo+1));        }        else //general mode#endif //SUPPORT_THUMB_PROGRAM        {            OSDUTL_OutputNumFromIndex((WORD)(_bTHUMBPageNO+1));        }        OSDUTL_CopyStringFromIndex(aTHUMBSlash);        _bTHUMBTemp = _wTHUMBTotalFiles / THUMB_TOTAL_NUM_IN_PAGE;        if (_wTHUMBTotalFiles % THUMB_TOTAL_NUM_IN_PAGE)            _bTHUMBTemp++;        OSDUTL_OutputNumFromIndex(_bTHUMBTemp);        _THUMBStringAttr.wX = THUMB_PAGE_END_H-GDI_GetStringWidth_909(__pOSDUTLOutputString);        _THUMBStringAttr.wY = THUMB_PAGE_START_V-_THUMB_TuneForTVType(THUMB_TUNE_POS_TYPE_TITLE);        //GDI_DrawString_909(0, &_THUMBStringAttr, __pOSDUTLOutputString);        _THUMB_DrawString();    }}//*********************************************************************************************************//  Function    :   _THUMB_SearchNextValidPic//  Abstract    :   This function will search the valid picture that we want to decode. Currently, it's just//              :   for "reset" in rotate mode.//  Arguments   :   none.//  Return		:   TRUE: Got it.//              :   FALSE: No suitable picture.//  Side Effect :   none.//  Notes       ://*********************************************************************************************************BYTE _THUMB_SearchNextValidPic(void){#ifdef CT950_STYLE        _THUMB_CheckDumpFileRecord(TRUE);#endif //CT950_STYLE#ifdef CT950_STYLE        MM_AccessJPGStatus(MM_GET_JPG_STATUS, _THUMB_GetPlayIndex());#else        MM_AccessJPGStatus(MM_GET_JPG_STATUS, (WORD)(_wTHUMBStartPlayItem+_wTHUMBIndex+1));#endif //CT950_STYLE    // wyc2.60-909P, update for unicode issue.    while ((__pMMFileRecord->bFileAttr & ~IF_UNICODE_FILE_TAG) == HALJPEG_OPERATION_I)    {        _wTHUMBPlayIndex++;        //Exceed the number of files in this folder        if (_wTHUMBPlayIndex == _wTHUMBTotalFiles)            return FALSE;        else if (_wTHUMBPlayIndex == ((_bTHUMBPageNO+1) * THUMB_TOTAL_NUM_IN_PAGE)) //all thumbnails in the page are unrotating.            return FALSE;#ifdef CT950_STYLE        _THUMB_CheckDumpFileRecord(TRUE);        MM_AccessJPGStatus(MM_GET_JPG_STATUS, _THUMB_GetPlayIndex());#else        MM_AccessJPGStatus(MM_GET_JPG_STATUS, (WORD)(_wTHUMBStartPlayItem+_wTHUMBIndex+1));#endif //CT950_STYLE    }    __bMMJPGStatus = HALJPEG_OPERATION_I;#ifdef CT950_STYLE	MM_AccessJPGStatus(MM_STORE_JPG_STATUS, _THUMB_GetPlayIndex());#else    MM_AccessJPGStatus(MM_STORE_JPG_STATUS, (WORD)(_wTHUMBStartPlayItem+_wTHUMBIndex+1));#endif //CT950_STYLE    //Initialize the decoding stage.    _bTHUMBStage = THUMB_STAGE_START;    return TRUE;}//*********************************************************************************************************//  Function    :   _THUMB_PlayEnd//  Abstract    :   Call this function to push the IFIFO when playing end.//  Arguments   :   none.//  Return		:   none.//  Side Effect :   none.//  Notes       ://*********************************************************************************************************void _THUMB_PlayEnd(void){    if (!__btPlayEnd)    {        if (__dwTimeNow >= __dwTimeEnd)        {            __btPlayEnd = TRUE;        }    }}//*********************************************************************************************************//  Function    :   _THUMB_CheckChangePageValid//  Abstract    :   Call this function to see if the action of changing page is valid or not.//  Arguments   :   bAction: THUMB_NEXT_PAGE: Change to the next page.//              :            THUMB_PREVIOUS_PAGE: Change to the previous page.//  Return		:   TRUE: It's valid.//              :   FALSE: It's invalid.//  Side Effect :   none.//  Notes       ://*********************************************************************************************************BYTE _THUMB_CheckChangePageValid(BYTE bAction){    if (_bTHUMBSubMode == THUMB_SUBMODE_PROGRAM_LIST) //"Program List" mode        _bTHUMBTemp = _bTHUMBProgramListPageNo;    else //general mode        _bTHUMBTemp = _bTHUMBPageNO;    if (bAction == THUMB_NEXT_PAGE)    {        if (((_bTHUMBTemp + 1) * THUMB_TOTAL_NUM_IN_PAGE) < _wTHUMBTotalFiles) //has "Next" page            return TRUE;    }    else if (bAction == THUMB_PREVIOUS_PAGE)    {        if (_bTHUMBTemp > 0)            return TRUE;    }    return FALSE;}//*********************************************************************************************************//  Function    :   _THUMB_ChangePageAction//  Abstract    :   Call this function when changing the page.//  Arguments   :   bAction: THUMB_NEXT_PAGE: Change to the next page.//              :            THUMB_PREVIOUS_PAGE: Change to the previo

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -