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

📄 thumb.c

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

#define THUMB_MAIN_FILE

#include "winav.h"
#include <string.h>
#include "input.h"
#include "hal.h"
#include "setup.h"          
#include "servo.h"
#include "utl.h"
#include "FManager.h"
#include "cc.h"
#include "linear.h"
#include "gdi.h"
#include "OSDFM.h"
#include "thumb.h"
#include "cdinfo.h"
#include "osdvp.h"

#include "String.lan"

#ifdef SUPPORT_FM_BUTTONS

#define MAX_THUB_BTN_NO  6

CTL_BUTTON  __ThumbCtlBTNList[MAX_THUB_BTN_NO];

//constant definition
BYTE code _bThumbnailTotalNum[] = {TOTAL_NUM_IN_PAGE, TOTAL_NUM_IN_PAGE, TOTAL_NUM_IN_PAGE, PROGRAM_LIST_TOTAL_NUM_IN_PAGE};
BYTE code aThumbButtonShape[] = {BUTTON_ID_40x40, BUTTON_ID_40x40, BUTTON_ID_40x40, BUTTON_ID_120x40, BUTTON_ID_120x40, BUTTON_ID_120x40, BUTTON_ID_120x40, BUTTON_ID_120x40, BUTTON_ID_120x40, BUTTON_ID_120x40};
BYTE code aThumbButtonGeneralMode[]= // Control button list for normal mode
{
THUMBNAIL_BUTTON_PREVIOUS, THUMBNAIL_BUTTON_NEXT, THUMBNAIL_BUTTON_PLAY, THUMBNAIL_BUTTON_ROTATE, 
#ifdef SUPPORT_FM_PROGRAM
THUMBNAIL_BUTTON_PROGRAM, 
#endif
THUMBNAIL_BUTTON_FILEMGR
};

BYTE code aThumbButtonRotateMode[] = {THUMBNAIL_BUTTON_PREVIOUS, THUMBNAIL_BUTTON_NEXT, THUMBNAIL_BUTTON_PLAY, THUMBNAIL_BUTTON_RETURN, THUMBNAIL_BUTTON_RESET, THUMBNAIL_BUTTON_FILEMGR};
BYTE code aThumbButtonProgramMode[] = {
THUMBNAIL_BUTTON_PREVIOUS, THUMBNAIL_BUTTON_NEXT, THUMBNAIL_BUTTON_PLAY, THUMBNAIL_BUTTON_RETURN, 
#ifdef SUPPORT_FM_PROGRAM_LIST
THUMBNAIL_BUTTON_PROGRAM_LIST, 
#endif
THUMBNAIL_BUTTON_FILEMGR
};
BYTE code aThumbButtonProgramListMode[] = {THUMBNAIL_BUTTON_PREVIOUS, THUMBNAIL_BUTTON_NEXT, THUMBNAIL_BUTTON_PLAY, THUMBNAIL_BUTTON_CLEAR_ALL, THUMBNAIL_BUTTON_RETURN};
BYTE* code aThumbButtonID[] = {aThumbButtonGeneralMode, aThumbButtonRotateMode, aThumbButtonProgramMode, aThumbButtonProgramListMode};

//***************************************************************************
//Note: Don't translate the following strings.
//display the extention of the file in the program list if it is not a JPEG.
WORD code aThumbButtonPreviousName[] = {1, CHAR_PREV_26};
WORD code aThumbButtonNextName[] = {1, CHAR_NEXT_26};
WORD code aThumbButtonPlayName[] = {1, CHAR_N_PLAY_26};
WORD code aThumbMP3[] = {3, CHAR_M, CHAR_P, CHAR_3};
WORD code aThumbAC3[] = {3, CHAR_A, CHAR_C, CHAR_3};
WORD code aThumbWMA[] = {3, CHAR_W, CHAR_M, CHAR_A};
WORD code aThumbDAT[] = {3, CHAR_D, CHAR_A, CHAR_T};
WORD code aThumbVOB[] = {3, CHAR_V, CHAR_O, CHAR_B};
WORD code aThumbMPG[] = {3, CHAR_M, CHAR_P, CHAR_G};
//***************************************************************************

#endif //SUPPORT_FM_BUTTONS

//delcare global variables
BYTE __bThumbnailMode;
WORD _wThumbnailIndex;  //current index that user want to play
WORD _wThumbnailPlayIndex; 
BYTE _bStop;
BYTE _bTHUMBNAILTemp;
WORD _wTHUMBNAILTemp;
BYTE _bTHUMBNAILStage;
BYTE _bRetryTimes;
BYTE _bCheckHangTimes;
WORD _wThumbTotalFiles;
WORD _wThumbStartPlayItem; //Use it to record the first JPEG in this folder.

//CoCo280-2, for CT908 JPEG
WORD _wHPos;
#ifdef SUPPORT_FM_BUTTONS
BYTE _bCursorType;
BYTE _bButtonIndex;
BYTE _bThumbnailSubMode;
BYTE _bThumbnailDecodeMode;
BYTE _bProgramPageNo;
#endif //SUPPORT_FM_BUTTONS

BYTE _bTuneThumbFrame_H;
BYTE _bTuneThumbFrame_V;

//LJY1.20, declare __bPageNo here instead of digest.c(support 4M flash, remove digest)
BYTE __bPageNO;

extern BYTE __bZoomFactor;
extern BYTE __bPageNO;
extern BYTE DATA _bOSDLang; 
//OSD global variables
extern BYTE __bOSDFg;
extern BYTE __bOSDBg;
extern WORD __wOSDUpVPos;
extern WORD __wOSDUpHPos;
extern WORD __wOSDBottomVPos;
extern WORD __wOSDBottomHPos;
extern BYTE _bCurrentUI;
extern WORD _wHALTemp, _wHALTemp1;
extern BYTE __bDumpPage;
extern PFILE_RECORD    __pFMFileRecord; //CoCo1.25, New structure of File Manager
//***************************************************************************
//  Function    :   _THUMBNAIL_Initial
//  Abstract    :   This function will initialize all global variables.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void _THUMBNAIL_Initial(void)
{
#ifndef NO_PICTURECD
    __bThumbnailMode = TRUE;

#ifdef SUPPORT_JPEG_3_FRAMES
    if (!__bDVDROM)
        GDI_SetFonTableAddr(FONT_TABLE_JPEG);
#endif

    //calculate the number of JPEG files.
    _THUMBNAIL_GetTotalFiles();

    //_wThumbnailIndex = __wPlayItem - 1;
    _wThumbnailIndex = __wPlayItem - 1 - _wThumbStartPlayItem; //CoCo1.25, Fix the bug about Thumbnail's highlight is incorrect when mix title.
    __bPageNO = _wThumbnailIndex / TOTAL_NUM_IN_PAGE;
    _wThumbnailPlayIndex = __bPageNO * TOTAL_NUM_IN_PAGE;

    __bZoomFactor = VIEW_NORMAL;
    __bFMStage=STAGE_IDLE;

    _bRetryTimes = THUMBNAIL_REDECODE_TIMES;

    _bCheckHangTimes = 0;

    _THUMBNAIL_InitialStage();

    //Set the width and height for displaying rectangle.
    __wWidth = THUMBNAIL_DISPLAY_WIDTH;
    __wHeight = THUMBNAIL_DISPLAY_HEIGHT_NTSC;
 
#ifdef SUPPORT_FM_BUTTONS
    if (__btProgram)
        _bThumbnailSubMode = THUMBNAIL_SUBMODE_PROGRAM; //Enter "Program" mode directly
    else
        _bThumbnailSubMode = THUMBNAIL_SUBMODE_GENERAL; //Enter "General" mode

    _bThumbnailDecodeMode = THUMBNAIL_DECODE_PAGE;
#endif //SUPPORT_FM_BUTTONS

    _THUMBNAIL_InitializeGDI();

    //Set the color of the background, color of the text, and vertical starting position for upper right message.
    __bOSDBg = PAL_ENTRY_COLOR_TRANSPARENT;
    __bOSDFg = THUMBNAIL_PALETTE_ENTRY_TITLE_STRING;
    __wOSDUpVPos = THUMBNAIL_DISPLAY_PAGE_START_V-_THUMBNAIL_TuneForTVType(THUMBNAIL_TUNE_POS_TYPE_TITLE);
    __wOSDUpHPos = THUMBNAIL_DISPLAY_PAGE_END_H;
    __wOSDBottomVPos = THUMBNAIL_DISPLAY_HELP_START_V-_THUMBNAIL_TuneForTVType(THUMBNAIL_TUNE_POS_TYPE_HELP);
    __wOSDBottomHPos = THUMBNAIL_DISPLAY_HELP_START_H;

    __bJPEGEffect = HAL_JPEG_EFFECT_NO_EFFECT;
    __bDoJPEGEffect = FALSE;

    // Brian1.10, set variables of frame position
    _THUMBNAIL_TuneFramePosition(); 

#endif
}

//***************************************************************************
//  Function    :   THUMBNAIL_Trigger
//  Abstract    :   Call this function in main loop.
//  Arguments   :   none.
//  Return		:   none.
//  Side Effect :   none.
//  Notes       :   
//***************************************************************************
void THUMBNAIL_Trigger(void)
{
#ifndef NO_PICTURECD

    if (__bThumbnailMode)
    {   
#ifdef SUPPORT_SIMPLE_FM_PROGRAM
        //Don't decoding because the frame will influence the Program UI.
        if (__btInputProgram) 
            return;     
#endif //SUPPORT_SIMPLE_FM_PROGRAM

        if (_bStop || __btPause)
        {
            __btPlaying = FALSE;
            return;
        }

        switch (_bTHUMBNAILStage)
        {
        case THUMBNAIL_STAGE_START:            
            _bRetryTimes = THUMBNAIL_REDECODE_TIMES;

#ifdef SUPPORT_FM_BUTTONS
            if (_bThumbnailDecodeMode == THUMBNAIL_DECODE_ONE) //decode only one thumbnail
            {
                _THUMBNAIL_Start();
            }
            else
#endif //SUPPORT_FM_BUTTONS
            {
                if (!_THUMBNAIL_CheckPlayEnd())
                    _THUMBNAIL_Start();
                else //All thumbnails has been decoded. Stop!                
                {
                    _bStop = TRUE;
                    _THUMBNAIL_UpdateHighlight(THUMBNAIL_UPDATE_HIGHLIGHT_DRAW);
                }
            }            
            break;
        case THUMBNAIL_STAGE_PARSEHEADER:
            if ((__dwCountSystem - dwPreTime) < THUMBNAIL_MAX_PARSEHEADER_TIME)
            {
                 _bTHUMBNAILTemp = HAL_QueryStatus(HAL_JPEG_PARSE_HEADER); 
                if (_bTHUMBNAILTemp == HAL_QUERY_RESULT_OK)
                {
#ifdef SUPPORT_FM_BUTTONS
                    _THUMBNAIL_GetPosition((BYTE)(_wThumbnailPlayIndex % _bThumbnailTotalNum[_bThumbnailSubMode]));
#else
                    _THUMBNAIL_GetPosition((BYTE)(_wThumbnailPlayIndex % TOTAL_NUM_IN_PAGE));
#endif //SUPPORT_FM_BUTTONS
                    HAL_JPEGDecode(HAL_JPEG_DECODE);
                    _bTHUMBNAILStage = THUMBNAIL_STAGE_DECODE;
                    dwPreTime = __dwCountSystem;
                }
                else if (_bTHUMBNAILTemp == HAL_QUERY_RESULT_UNSUPPORT)
                {
                    _bRetryTimes = 0;
                    _THUMBNAIL_ProcessError();
                    return;
                }
                else if (_bTHUMBNAILTemp == HAL_QUERY_RESULT_FAIL) //CoCo0.90a, judge the "fail" case.
                {
                    _THUMBNAIL_ProcessError();
                    return;
                }
                else //unfinish
                {
                    _THUMBNAIL_PlayEnd();
                    return;
                }
            }
            else
            {
                _THUMBNAIL_ProcessError();
                return;
            }
#ifdef SUPPORT_FM_BUTTONS
            _THUMBNAIL_GetPosition((BYTE)(_wThumbnailPlayIndex % _bThumbnailTotalNum[_bThumbnailSubMode]));
#else
            _THUMBNAIL_GetPosition((BYTE)(_wThumbnailPlayIndex % TOTAL_NUM_IN_PAGE));
#endif
            _bTHUMBNAILStage = THUMBNAIL_STAGE_DECODE;
            break;
        case THUMBNAIL_STAGE_DECODE:
            if ((__dwCountSystem - dwPreTime) < THUMBNAIL_MAX_DECODE_TIME)
            {
                _bTHUMBNAILTemp = HAL_QueryStatus(HAL_JPEG_DECODE_STATUS); 
                if (_bTHUMBNAILTemp == HAL_QUERY_RESULT_OK)
                {
                    HAL_ControlCDIF(HAL_CDIF_CLOSE);
                    __btPlayEnd=TRUE;   //data input end, but not playing end

                    HAL_Display(HAL_DISPLAY_JPEG, HAL_JPEG_DECODE);
#ifdef SUPPORT_FM_BUTTONS
                    if (_bThumbnailDecodeMode == THUMBNAIL_DECODE_PAGE)                        
                    {
                        if (_bThumbnailSubMode == THUMBNAIL_SUBMODE_PROGRAM)
                        {
                            if (LINEAR_ProgramEntryOperation(LINEAR_QUERY_INDEX, 0, __bFMActiveDir, (WORD)(_wThumbStartPlayItem+_wThumbnailPlayIndex+1)) == 0xFF) //not found
                                _THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailPlayIndex%_bThumbnailTotalNum[_bThumbnailSubMode]), THUMBNAIL_FRAME_NORMAL);
                            else
                                _THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailPlayIndex%_bThumbnailTotalNum[_bThumbnailSubMode]), THUMBNAIL_FRAME_SELECT);
                        }
                        else
                            _THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailPlayIndex%_bThumbnailTotalNum[_bThumbnailSubMode]), THUMBNAIL_FRAME_NORMAL);
#else
                            _THUMBNAIL_DrawThumbnailFrame((BYTE)(_wThumbnailPlayIndex%TOTAL_NUM_IN_PAGE), THUMBNAIL_FRAME_NORMAL);
#endif //SUPPORT_FM_BUTTONS
                        _THUMBNAIL_ChangeToNextPic();
#ifdef SUPPORT_FM_BUTTONS
                    }
                    else if (_bThumbnailDecodeMode == THUMBNAIL_DECODE_UNDETERMINED)
                    {
                        //Search next picture to be decoded.
                        _wThumbnailPlayIndex++;
                        if (!_THUMBNAIL_SearchNextValidPic())
                            _bStop = TRUE;
                    }
                    else //decode only one thumbnail
                    {
                        _bStop = TRUE;
                        _bThumbnailDecodeMode = THUMBNAIL_DECODE_PAGE;
                    }
#endif //SUPPORT_FM_BUTTONS
                }
                else if (_bTHUMBNAILTemp == HAL_QUERY_RESULT_FAIL)
                    _THUMBNAIL_ProcessError();   
                else //unfinish
                {
                    W99AV_ReadDRAMData(W99AV_DRAM_JPEG_CHECK_HANG, &__dwTemp);
                    if (HIWORD(__dwTemp) == __wCheckDecodeHang)
                    {
                        _bCheckHangTimes++;
                        UTL_DelayTime(COUNT_50_MSEC, FALSE);
                        if (_bCheckHangTimes == THUMBNAIL_CHECK_HANG_TIMES)
                        {
                            _THUMBNAIL_ProcessError();
                            return;

⌨️ 快捷键说明

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