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

📄 digest.c

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

//////////////////////////////////////////////////////////////
// ***** Big Modification History Area *****
// LLY2.80a,
//  - remove the codes while define "_ALONE",

//////////////////////////////////////////////
#define     VIEWTIME                    225L    // The default starting point from Track

// The file "winav.h" must be included in first line
// LLY.045-1, porting for new define depending on 22QF055.DOC
// all original include file will be put in "winav.h"
#include  "winav.h"
// LLY.045-1 end ...

#include "digest.h"

//LJY1.20, support 4M flash, remove digest
#ifndef NO_DIGEST

#include "cc.h"

#include "cdinfo.h"
#include "utl.h"
#include "hal.h"
#include "servo.h"
#include "isr.h"

#include "input.h"
#include "chips.h"
#include "osd.h"
#include "linear.h"
// wyc.100 for DVD digest
#ifdef  _WINDVD
#include "navigate.h"
#include "cell.h"
#include "dvdinfo.h"    // ** TCH0.27;
#include "monitor.h"
#endif    // _WINDVD

//LJY1.21, 
// - Remove UTL_ChangeCDROMSpeed().

// DVD_274Micky, add copyright. Don't remove it!!!!
BYTE    Copyright_CHEERTEK_INC_2002_DIGEST;

static  DWORD   __dwCheckDigestTime; //for checking digest hang use
static  DWORD   __dwPreIFrames; //for checking digest hang use
DWORD   __dwIFrames; //the I Frame decteced number
// wyc.100 dvd digest
BYTE    __bDVDDigest;
// wyc.172r, reudce SRAM
#ifndef NO_DVDDIGEST
BYTE    __bCHAPXXFromCurr;
BYTE    __bPreDVDDigest;
BYTE    __bDigestStop;
BYTE    __bCmdKeyPress;
WORD    __wTotChapTime;
#endif // NO_DVDDIGEST

DWORD   __dwTimeShow;    // the sector time to show in one track
BYTE    __bTotPageNO;
extern  DWORD   __dwGoToTime;
extern  BYTE    __bDigestStyle;         // Digest Mode
extern  BYTE    IDATA   __bMin, __bSec;
// Micky2.79, tune the usage of __bCountStop, don't reference DOUBLE_STOP
//#ifdef  DOUBLE_STOP
//extern  BYTE    __bCountStop;
//#endif
extern  BYTE    __bFrames;
// end ..
extern  BIT     __btDIGEST;  // means Digest Mode
extern  DWORD   __dwTimeDiscEnd; // The end of the disc time

extern  void    _OSD_ShowCDDA(void);
extern  BIT     _OSD_LogoFillData(WORD wWords, BYTE *pwLogoData);
BYTE    __bGrid;    // The DIGEST screen 3 by 3
static  DWORD   __dwTimeDigestBegin;  // the system time begins to digest show
// wyc.172r, reudce SRAM use __dwTimeDigestBegin to replace __dwDigestKeep
//static  DWORD   __dwDigestKeep;  // for DIGEST_STYLE_TRACK
                //  record the starting point  (__dwTimeNow)
BYTE     __bStyle;         // Digest Style

BYTE   __bTrackNO;       // current track NO (Had played)
// DVD_275Micky, share the same variable.
#define __bPlayOrder  Copyright_CHEERTEK_INC_2002_DIGEST
//BYTE   __bPlayOrder;     // record the playorder
// **** TCH0.99C-XQ, static BYTE     __bPageNO= NULL;        // which page
//LJY1.20, declare __bPageNo in Thumb.c instead of digest.c(support 4M flash, remove digest)
extern BYTE   __bPageNO;        // which page
static BYTE     __bTrackRepeat;   // record the repeat time in one track
static BYTE     __bDigestModePlay;        // DIGEST ModePlay variable

static int      __iXDigest;               // X coordinate
static int      __iYDigest;               // Y coordinate

BIT      __btDigestEnableAudio;    // control Audio O/P when ] ()
static BIT      __btTrackPoint ;          // flag for check first point
                                                // enter track mode
static BIT      __btDigestMode;           // 0: 9 frame, 1: 4 frame

// ShowTable coordinate for digest frame ver. and hor. start
static BYTE     __bTableX[3];
static BYTE     __bTableY[3];

BIT    __btDigestSetMode;
// indicate the DIGEST mode will start from a CD-DA track
BIT      __btCDDADigest;

// for reduce SRAM size usage
DWORD  _dwTemp;  
// wyc.172r, reudce SRAM and move local variables to global
int     _iHor, _iVer; // recode the positon of showing digest number
int     _iRem;

extern DWORD    __dwTimeTorelence;
//LJY279
extern int     __iRow;
extern int     __iCol;

extern  void    SWOSD_DigestInfo(void);
extern  void    _OSD_ShowDigestNumber(WORD wValue);
extern  WORD    __wFontH;
extern  WORD    __wFontW;


//  *********************************************************************
//  Function    :   _DigestOverview
//  Description :   Enter the DIGEST mode and reorcd the Page NO.
//  Arguments   :   None
//  Return      :
//  Side Effect :   when it's called, it will always enter digest mode
//  *********************************************************************
void  _DigestOverview ()
{
    __dwPreIFrames=0; // for digest hang checking
    __dwIFrames=0;  // record the I frame detected
    // wyc.172r, reudce SRAM
#ifndef NO_DVDDIGEST
    __bCmdKeyPress = FALSE;
#endif // NO_DVDDIGEST

    // Check ID, discard it if ID is out of range

    if (!__bDVDDigest)
    {
        __bTrackNO = __bPageNO* (__bGrid* __bGrid);
        __bTrackNO+= (BYTE)__wTrackBegin;
    }
    
    if ( (__bStyle & 0x0F) == DIGEST_STYLE_NORMAL4 )
    {
        __btDigestMode= DIGEST_FRAME_4;
    }
    else
    {
        __btDigestMode= DIGEST_FRAME_9;
    }

    HAL_ControlCDIF(HAL_CDIF_CLOSE);
    HAL_Display(HAL_DISPLAY_VIDEO, FALSE);
//    CHIPS_OpenAudio( FALSE ); //LJY1.24-3

    __bModePlay= MODE_PLAYUNKNOW;

    if ((__bStyle & 0x0F)==DIGEST_STYLE_TRACK)
    {                    // Cindy 041 for one sequence header
        // wyc.172r, reudce SRAM and use __dwTimeDigestBegin to replace __dwDigestKeep
        __dwTemp=/*__dwDigestKeep*/__dwTimeDigestBegin;
        //get track number
        CDINFO_ParseInfo ( VCD_ENTRIES_TRACK, &__dwTemp, NULL );
        __bTrackNO=(BYTE)__dwTemp;
        __btTrackPoint=TRUE;
        __bTemp= UTL_CheckPlayItemMode ( __bTrackNO );
#ifndef NO_CDDADIGEST
        // LLY.274p, check playing mode method has updated
        //if (__bTemp & MODE_PLAYCDDA)
        if(__bAttrPlayNew == ATTR_CDDA)
            __btCDDADigest=TRUE;
#endif //NO_CDDADIGEST
    }

#ifndef NO_CDDADIGEST
    if (__wDiscType & BOOK_CDDA)
        __btCDDADigest=TRUE;
#endif //#ifndef NO_CDDADIGEST

    __bDigestModePlay= MODE_PLAYUNKNOW;
    UTL_SetPlayMode ( MODE_PLAYMOTION );
    // Restore normal audio
    if (__btMute)
    {
        OSD_OUTPUT_MACRO ( MSG_MUTE, FALSE, 1 );
    }
    __btMute= FALSE;  // digest default not mute
// f/w 0.45, cancel 3D in DIGEST mode
    if (__bModeChannel==AUDIO_3D)
    {
        __bModeChannel=AUDIO_STEREO;
        OSD_OUTPUT_MACRO(MSG_AUDIO, __bModeChannel, 1);
    }

    OSD_OUTPUT_MACRO ( MSG_PLAYING, NULL, NULL );

    CHIPS_OpenAudio( FALSE );
// modify for let DIGEST output same as last decoded MPEG stream
// do not force to be NTSC mode.
//    __btNTSCBitStream= TRUE;

    // Set to zero,  Let the play start from Track begin first time.
    // Let DIGEST mode can encounter ONE Sequence Header
    // wyc.273-1, keep this code for fixing some VCD titles digest frame error.
    __dwTimeShow= NULL;
    __dwIER= INT_IFSC;

    // Prevent clear by MSG_MUTE
    {
        __bTemp = __bPageNO;
        if ( (__bStyle & 0x0F) <= DIGEST_STYLE_PAGE )
            //bPage++;
            __bTemp++;
        //low->style, high page number
        //Digest forever display        
        if (((__bStyle & 0x0F) != DIGEST_STYLE_CHAPXX) && ((__bStyle & 0x0F) != DIGEST_STYLE_TRACK))
        {
            OSD_OUTPUT_MACRO(MSG_DIGEST, MAKEWORD( (__bStyle & 0x0F), (__bPageNO + 1) ), 0xff);
        }
        else
        {
            OSD_OUTPUT_MACRO(MSG_DIGEST, MAKEWORD( (__bStyle & 0x0F), NULL ), 0xff);
        }
    }

    // First time setting
    __bPlayOrder= NULL;
    __bTrackRepeat= NULL;
    if ( __btDigestMode== DIGEST_FRAME_4 )
    {
        HAL_DigestInitial(4);
        __bGrid= 2;

        if(__wDiscType & BOOK_DVD)
        {
//***** check more, must add for DVD title
        }
        else if(__wDiscType & BOOK_SVCD)
        {
            __bTableX[0]= 14; //16; // 20;
            __bTableX[1]= 78; //80; // 100;

            __bTableY[0]= 16; // 20;
            __bTableY[1]= 132; //140; // 150;
        }
        else if(__wDiscType & BOOK_CVD)
        {
            __bTableX[0]= 16; // 30;
            __bTableX[1]= 64; // 100;

            __bTableY[0]= 14; //16; // 20;
            __bTableY[1]= 132; //140; // 150;
        }
        else
        {
            __bTableX[0]= 4; //2;
            __bTableX[1]= 88; //94;

            __bTableY[0]= 16;
            __bTableY[1]= 132; //140; // 150;
        }
    }
    else
    {
        HAL_DigestInitial(9);
        __bGrid= 3;

        if(__wDiscType & BOOK_DVD)
        {
//***** check more, must add for DVD title
            __bTableX[0]= 24;//16;//32;
            __bTableX[1]= 74;//68;//46; //56; //80;
            __bTableX[2]= 124;//118;//96;//76; //96; //128;

            __bTableY[0]= 30; //34;
            __bTableY[1]= 106; //114;
            __bTableY[2]= 182; //194;
        }
        //LJY2.80, using the same setting for CVD&SVCD
        else if((__wDiscType & BOOK_CVD) || (__wDiscType & BOOK_SVCD))
        {
            __bTableX[0]= 22; //32; 
            __bTableX[1]= 46; //80;
            __bTableX[2]= 70; //128;

            __bTableY[0]= 30; //34;
            __bTableY[1]= 106; //114;
            __bTableY[2]= 182; //194;
        }
        else
        {
            //LJY1.00, fine tune X to be (6, 38, 70) for P-Scan OSD flash issue.
            __bTableX[0]= 6;//14;//16; //12;
            __bTableX[1]= 38;//64;//68;
            __bTableX[2]= 70;//114;//120; //124;

            __bTableY[0]= 30;
            __bTableY[1]= 106;
            __bTableY[2]= 182;
        }
    }


    __btDIGEST= TRUE;
    // must put after DigestInitial
    HAL_AdjustTVMode ();  // marked by LLY on 1999.02.23

    __iXDigest= __bTableX[0];
    __iYDigest= __bTableY[0];

    // Set DIGEST mode, please refer TechNote

    HAL_DigestPosition(__iXDigest, __iYDigest);

    if (!__btCDDADigest)
    {
        //WYC.050a begin
        //DWORD dwHsize, dwVsize;
        W99AV_ReadInfo(W99AV_INFO_DIGEST_HSIZE, &_dwTemp);
        W99AV_ReadInfo(W99AV_INFO_DIGEST_VSIZE, &__dwTemp);
        // end       
//LJY0.86, for new HAL_ClearScreen()
        HAL_ClearScreen(HAL_COLOR_DIGEST);
    }
    // swosd must know the YUV buffer start, digest size
    SWOSD_DigestInfo();

    ////////////////////
    // enable IFSC IRQ
    EX1= 1;

    W99AV_ClearInterrupt(INT_IFSC);

    W99AV_EnableInterrupt(NULL);

    __btPlaying= FALSE;
    __btPause= FALSE;
    __bModeCmd= KEY_STOP;

}

//  *********************************************************************
//  Function    :   DIGEST_SetStyle
//  Description :   Record a global variable __bStyle
//  Arguments   :   bStyle
//  Return      :   previous Style
//  Side Effect :
//  *********************************************************************
BYTE  DIGEST_SetStyle ( BYTE bStyle )
{
    BYTE        bTemp;

    bTemp= __bStyle;
    __bStyle= bStyle;
    // reset digest page number

⌨️ 快捷键说明

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