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

📄 thumb.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
}

//***************************************************************************
//  Function    :   _THUMBNAIL_ClearScreen
//  Abstract    :   This function will clear the screen to the color of the background.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   This function will clear all data in frame buffer.
//***************************************************************************
void _THUMBNAIL_ClearScreen(void)
{
#ifndef NO_PICTURECD
    HAL_JPEGDecode(HAL_JPEG_STOP_DECODE);
    _THUMBNAIL_JPEG_PSFB(TRUE);
#endif
}

//***************************************************************************
//  Function    :   THUMBNAIL_Entry
//  Abstract    :   Call this function to enter thumbnail mode.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   This function will initialize _bChangeToNextPic, _bStop, 
//              :   _wThumbnailIndex, _wThumbnailPlayIndex, __bPageNO and dwPreTime.
//***************************************************************************
void THUMBNAIL_Entry(void)
{
#ifndef NO_PICTURECD
    /*
    if (__bThumbnailMode)
        return;
        */

    OSD_Output(MSG_GUI, OSD_UI_THUMBNAIL, 0xFF); //tell OSD enter thumbnail mode

    //initialize some global variables when entering thumbnail first time.
    _THUMBNAIL_Initial();

    //CoCo2.39, disable video to prvent see wrong data when File Manager to Thumbnail.
    HAL_Display(HAL_DISPLAY_VIDEO, FALSE); //CoCo1.24a, don't disable the video display for "摧紇" issue
    //CoCo2.31, wait the "disable video" action OK before doing JPEG reset.
    __dwCheckTime  = UTL_GetSysTimer();
    while ((UTL_GetSysTimer() - __dwCheckTime ) < COUNT_100_MSEC)    
    {
        W99AV_ReadDRAMData (0xC1, &__dwTemp);
        
        if (HIWORD(__dwTemp) == 0) //The "disable video" action is OK.
            break;
    }

    HAL_JPEGDecode(HAL_JPEG_STOP_DECODE);
    
    __bAttrPlayNew = ATTR_JPG;
    //UTL_SetPlayMode(MODE_PLAYVIDEO);
    
    //__btActiveFrame = !__btActiveFrame;
    __btActiveFrame = 0;
    _THUMBNAIL_ClearScreen();
    
    W99AV_WriteDRAMData(W99AV_DRAM_JPEG_HCS, 0);
	W99AV_WriteDRAMData(W99AV_DRAM_JPEG_VCS, 0);

    //CoCo2.27, Tune JPEG buffer.
    if (__bDVDROM)
    {
        W99AV_WriteDRAMData(W99AV_DRAM_JPEG_HCW, (((DWORD)HAL_DISPLAY_DVD_JPEG_WIDTH) << 16));
        W99AV_WriteDRAMData(W99AV_DRAM_JPEG_VCW, (((DWORD)HAL_DISPLAY_DVD_JPEG_HEIGHT) << 16));        
    }
    else
    {
        W99AV_WriteDRAMData(W99AV_DRAM_JPEG_HCW, (((DWORD)HAL_DISPLAY_CD_JPEG_WIDTH) << 16));
        W99AV_WriteDRAMData(W99AV_DRAM_JPEG_VCW, (((DWORD)HAL_DISPLAY_CD_JPEG_HEIGHT) << 16));
    }
        
    HAL_Display(HAL_DISPLAY_JPEG, HAL_JPEG_DECODE); 
    HAL_Display(HAL_DISPLAY_VIDEO, TRUE); //CoCo1.25, 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.
    _THUMBNAIL_EnterNewMode();
#endif
}

//***************************************************************************
//  Function    :   _THUMBNAIL_CheckPlayPageBoundary
//  Abstract    :   This function will check if we have decoded all thumbnails
//              :   in a page.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   Use _wThumbnailPlayIndex and __bPageNO to judge
//              :   Modify _bStop
//***************************************************************************
void _THUMBNAIL_CheckPlayPageBoundary(void)
{
#ifndef NO_PICTURECD
    if (_THUMBNAIL_CheckPagePlayEnd()) //All thumbnails has been decoded in a page.
    {
        _bStop = TRUE;
        _THUMBNAIL_UpdateHighlight(THUMBNAIL_UPDATE_HIGHLIGHT_DRAW);
        _THUMBNAIL_DisplayPageInfo();
    }
#endif
}
 
     
//***************************************************************************
//  Function    :   _THUMBNAIL_UpdateHighlight
//  Abstract    :   This function will Update the highlight.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   _wHPos==>left, _wHALTemp==>right, _wHALTemp1==>top, __wTemp==>bottom
//***************************************************************************
void _THUMBNAIL_UpdateHighlight(BYTE bUpdate)
{
#ifdef SUPPORT_FM_BUTTONS        
    if ((bUpdate == THUMBNAIL_UPDATE_HIGHLIGHT_DRAW) && (_bCursorType == THUMBNAIL_CURSOR_BUTTON))
        return; //The cursor is at the button. Don't update VCD3.0 highlight.

    if (__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC)
    {
        //__rcHALVCD30Area.wLeft = (THUMBNAIL_DISTANCE_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_DISPLAY_WIDTH * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_H_REGION + THUMBNAIL_FRAME_THICKNESS;
        _wHPos = (THUMBNAIL_DISTANCE_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_DISPLAY_WIDTH * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_H_REGION + THUMBNAIL_FRAME_THICKNESS;
        //__rcHALVCD30Area.wLeft -= THUMBNAIL_TUNE_THUMB_FRAME_H_NTSC;
        //_wHPos -= THUMBNAIL_TUNE_THUMB_FRAME_H_NTSC;
        _wHPos -= _bTuneThumbFrame_H;
        //__rcHALVCD30Area.wRight = __rcHALVCD30Area.wLeft + THUMBNAIL_DISPLAY_WIDTH - THUMBNAIL_FRAME_THICKNESS * 2;
        _wHALTemp = _wHPos + THUMBNAIL_DISPLAY_WIDTH + THUMBNAIL_TUNE_DISPLAY_WIDTH_NTSC - THUMBNAIL_FRAME_THICKNESS * 2;
        
        if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
            //__rcHALVCD30Area.wTop = THUMBNAIL_DISTANCE_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC_PROGRAM_LIST + THUMBNAIL_FRAME_THICKNESS;
            _wHALTemp1 = THUMBNAIL_DISTANCE_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC_PROGRAM_LIST + THUMBNAIL_FRAME_THICKNESS;
        else //general mode
            //__rcHALVCD30Area.wTop = THUMBNAIL_DISTANCE_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC + THUMBNAIL_FRAME_THICKNESS;
            _wHALTemp1 = THUMBNAIL_DISTANCE_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC + THUMBNAIL_FRAME_THICKNESS;
        
        //__rcHALVCD30Area.wTop -= THUMBNAIL_TUNE_THUMB_FRAME_V_NTSC;
        //_wHALTemp1 -= THUMBNAIL_TUNE_THUMB_FRAME_V_NTSC;
        _wHALTemp1 -= _bTuneThumbFrame_V;
        //__rcHALVCD30Area.wBottom = __rcHALVCD30Area.wTop + THUMBNAIL_DISPLAY_HEIGHT_NTSC - THUMBNAIL_FRAME_THICKNESS * 2;
        __wTemp = _wHALTemp1 + THUMBNAIL_DISPLAY_HEIGHT_NTSC + THUMBNAIL_TUNE_DISPLAY_HEIGHT_NTSC- THUMBNAIL_FRAME_THICKNESS * 2;
    }
    else
    {
        //__rcHALVCD30Area.wLeft = (THUMBNAIL_DISTANCE_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + (THUMBNAIL_DISPLAY_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_H_REGION + THUMBNAIL_FRAME_THICKNESS;
        _wHPos = (THUMBNAIL_DISTANCE_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + (THUMBNAIL_DISPLAY_WIDTH) * (_wThumbnailIndex % COLUMN_NUM) + THUMBNAIL_H_REGION + THUMBNAIL_FRAME_THICKNESS;
        //__rcHALVCD30Area.wLeft -= THUMBNAIL_TUNE_THUMB_FRAME_H_PAL;
        //_wHPos -= THUMBNAIL_TUNE_THUMB_FRAME_H_PAL;
        _wHPos -= _bTuneThumbFrame_H;
        //__rcHALVCD30Area.wRight = __rcHALVCD30Area.wLeft + (THUMBNAIL_DISPLAY_WIDTH+THUMBNAIL_TUNE_DISPLAY_WIDTH_PAL) - THUMBNAIL_FRAME_THICKNESS * 2;
        _wHALTemp = _wHPos + (THUMBNAIL_DISPLAY_WIDTH+THUMBNAIL_TUNE_DISPLAY_WIDTH_PAL) - THUMBNAIL_FRAME_THICKNESS * 2;
      
        if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
            //__rcHALVCD30Area.wTop = (THUMBNAIL_DISTANCE_HEIGHT_NTSC+THUMBNAIL_TUNE_DISTANCE_HEIGHT_PAL) * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC_PROGRAM_LIST + THUMBNAIL_FRAME_THICKNESS;
            _wHALTemp1 = (THUMBNAIL_DISTANCE_HEIGHT_NTSC+THUMBNAIL_TUNE_DISTANCE_HEIGHT_PAL) * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % PROGRAM_LIST_TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC_PROGRAM_LIST + THUMBNAIL_FRAME_THICKNESS;
        else //general mode
            //__rcHALVCD30Area.wTop = (THUMBNAIL_DISTANCE_HEIGHT_NTSC+THUMBNAIL_TUNE_DISTANCE_HEIGHT_PAL) * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC + THUMBNAIL_FRAME_THICKNESS;
            _wHALTemp1 = (THUMBNAIL_DISTANCE_HEIGHT_NTSC+THUMBNAIL_TUNE_DISTANCE_HEIGHT_PAL) * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_DISPLAY_HEIGHT_NTSC * ((_wThumbnailIndex % TOTAL_NUM_IN_PAGE) / COLUMN_NUM) + THUMBNAIL_V_REGION_NTSC + THUMBNAIL_FRAME_THICKNESS;
        
        //__rcHALVCD30Area.wTop -= THUMBNAIL_TUNE_THUMB_FRAME_V_PAL;
        //_wHALTemp1 -= THUMBNAIL_TUNE_THUMB_FRAME_V_PAL;
        _wHALTemp1 -= _bTuneThumbFrame_V;
        //__rcHALVCD30Area.wBottom = __rcHALVCD30Area.wTop + (THUMBNAIL_DISPLAY_HEIGHT_NTSC+THUMBNAIL_TUNE_DISPLAY_HEIGHT_PAL) - THUMBNAIL_FRAME_THICKNESS * 2;
        __wTemp = _wHALTemp1 + (THUMBNAIL_DISPLAY_HEIGHT_NTSC+THUMBNAIL_TUNE_DISPLAY_HEIGHT_PAL) - THUMBNAIL_FRAME_THICKNESS * 2;
    }

    if (bUpdate == THUMBNAIL_UPDATE_HIGHLIGHT_DRAW)
        __GDIParm.u.RectParm.bColor = THUMBNAIL_PALETTE_ENTRY_HIGHLIGHT;      
    else
        __GDIParm.u.RectParm.bColor = PAL_ENTRY_COLOR_TRANSPARENT;

    //SET_RECT(__GDIParm.u.RectParm.rect, __rcHALVCD30Area.wLeft, __rcHALVCD30Area.wTop, __rcHALVCD30Area.wRight, __rcHALVCD30Area.wBottom);
    SET_RECT(__GDIParm.u.RectParm.rect, _wHPos, _wHALTemp1, _wHALTemp, __wTemp);

    //Draw the highlight in the file window.
    GDI_FillRect((PPARM_RECT)&__GDIParm);

    if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST)
    {
        //if (FM_GetFileType(__ProgIdxList[_wThumbnailIndex].wSubIndex) != EXTNAME_JPG)
        if (__pProgContent[_wThumbnailIndex].bExtID != EXTNAME_JPG)
        {
            if ((bUpdate == THUMBNAIL_UPDATE_HIGHLIGHT_CLEAR) && (_wThumbnailIndex > (__bProgramMaxEntry-1)))
                return;

            _THUMBNAIL_ShowFileExtInProgramList((BYTE)(_wThumbnailIndex%PROGRAM_LIST_TOTAL_NUM_IN_PAGE), bUpdate);        
        }
    }
#else //Use the selected frame to represet current cursor.

#ifdef USE_PSFB_DRAW_THUMB_FRAME //CoCo.230, use PSFB buffer command to draw the frame
        _THUMBNAIL_GetPosition((BYTE)(_wThumbnailIndex % TOTAL_NUM_IN_PAGE));
#endif

    if (bUpdate == THUMBNAIL_UPDATE_HIGHLIGHT_DRAW)
    {
#ifdef USE_PSFB_DRAW_THUMB_FRAME //CoCo.230, use PSFB buffer command to draw the frame
        _THUMBNAIL_UsePSFBDrawFrame(THUMBNAIL_HIGHLIGHT_COLOR);       
#else
        _THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailIndex % TOTAL_NUM_IN_PAGE), THUMBNAIL_FRAME_SELECT);
#endif
    }
    else //clear highlight
    {
        if (_wThumbnailIndex > _wThumbnailPlayIndex)
        {
#ifdef USE_PSFB_DRAW_THUMB_FRAME //CoCo.230, use PSFB buffer command to draw the frame
            _THUMBNAIL_UsePSFBDrawFrame(THUMBNAIL_BACKGROUND_COLOR);       
#else
            _THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailIndex % TOTAL_NUM_IN_PAGE), THUMBNAIL_FRAME_CLEAR);
#endif
        }
        else
        {
#ifdef USE_PSFB_DRAW_THUMB_FRAME //CoCo.230, use PSFB buffer command to draw the frame
            _THUMBNAIL_UsePSFBDrawFrame(THUMBNAIL_FRAME_COLOR);       
#else
            _THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailIndex % TOTAL_NUM_IN_PAGE), THUMBNAIL_FRAME_NORMAL);
#endif
        }
    }
#endif //SUPPORT_FM_BUTTONS
}
  
//***************************************************************************
//  Function    :   _THUMBNAIL_CheckUpBoundary
//  Abstract    :   This function will check if the highlight exceeds the  
//              :   up item or not.
//  Arguments   :   none.
//  Return		:   TRUE ==> exceed up item.
//              :   FALSE ==> not exceed up item.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE _THUMBNAIL_CheckUpBoundary(void)
{
#ifndef NO_PICTURECD
#ifdef SUPPORT_FM_BUTTONS        
    if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
    {
        _bTHUMBNAILTemp = _bProgramPageNo;
    }
    else //general mode
    {
        _bTHUMBNAILTemp = __bPageNO;
    }

    if (_wThumbnailIndex < (COLUMN_NUM + _bTHUMBNAILTemp * _bThumbnailTotalNum[_bThumbnailSubMode]))
        return TRUE;
#else
    if (_wThumbnailIndex < (COLUMN_NUM + __bPageNO * TOTAL_NUM_IN_PAGE))
        return TRUE;
#endif //SUPPORT_FM_BUTTONS

#endif //NO_PICTURECD
    return FALSE;
}

//***************************************************************************
//  Function    :   _THUMBNAIL_CheckDownBoundary
//  Abstract    :   This function will check if the highlight exceeds the  
//              :   down item or not.
//  Arguments   :   none.
//  Return		:   TRUE ==> exceed down item.
//              :   FALSE ==> not exceed down item.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE _THUMBNAIL_CheckDownBoundary(void)
{
#ifndef NO_PICTURECD

#ifdef SUPPORT_FM_BUTTONS
    if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM_LIST) //"Program List" mode
    {
        _bTHUMBNAILTemp = _bProgramPageNo;
    }
    else //general mode
    {
        _bTHUMBNAILTemp = __bPageNO;
    }

    if (((_wThumbnailIndex + COLUMN_NUM) >= ((_bTHUMBNAILTemp+1)*_bThumbnailTotalNum[_bThumbnailSubMode])) ||
        ((_wThumbnailIndex + COLUMN_NUM) >=  _wThumbTotalFiles))
        return TRUE;
#else
    if (((_wThumbnailIndex + COLUMN_NUM) >= ((__bPageNO+1)*TOTAL_NUM_IN_PAGE)) ||
        ((_wThumbnailIndex + COLUMN_NUM) >=  _wThumbTotalFiles))
        return TRUE;
#endif //SUPPORT_FM_BUTTONS

#endif //NO_PICTURECD
    return FALSE;
}

//***************************************************************************
//  Function    :   _THUMBNAIL_CheckRightBoundary
//  Abstract    :   This function will check if the highlight exceeds the  
//              :   right item or not.
//  Arguments   :   none.
//  Return		:   TRUE ==> exceed right item.
//              :   FALSE ==> not exceed right item.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
BYTE _THUMBNAIL_CheckRightBoundary(void)
{
#ifndef NO_PICTURECD
    
    if (((_wThumbnailIndex % COLUMN_NUM + 1) >= COLUMN_NUM) ||
        ((_wThumbnailIndex+1) >= _wThumbTotalFiles))
        return TRUE;
    
#endif
    return FALSE;
}

//***************************************************************************
//  Function    :   _THUMBNAIL_CheckLeftBoundary
//  Abstract    :   This function will check if the highlight exceeds the  
//              :   left item or not.

⌨️ 快捷键说明

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