?? digest.c
字號:
/**********************************************************************/
/*************** MTK CONFIDENTIAL & COPYRIGHTED ****************/
/*************** ****************/
/*************** $Modtime:: 07/04/10 11:48a $ ****************/
/*************** $Revision:: 3 $ ****************/
/*************** ****************/
/*************** Description : Digest function ****************/
/*************** module ****************/
/*************** ****************/
/*************** Company : MediaTek Inc. ****************/
/*************** Programmer : ****************/
/**********************************************************************/
#include "general.h"
#ifdef PLAYER_DIGEST
#pragma NOAREGS
enum {
DGST_STATE_TYPE,
DGST_STATE_MENU,
DGST_STATE_DISP,
DGST_STATE_INIT,
DGST_STATE_RESUME,
DGST_STATE_EXIT,
DGST_STATE_NUM,
DGST_STATE_MAX
};
enum {
DGST_TYPE_NONE,
DGST_TYPE_TRACK,
DGST_TYPE_TITLE,
DGST_TYPE_CHAPTER,
DGST_TYPE_TIME_DISC,
DGST_TYPE_TIME_TRK,
DGST_TYPE_TIME_TTL,
DGST_TYPE_TIME_PTT,
DGST_TYPE_BOOKMARK,
DGST_TYPE_PROGRAM,
DGST_TYPE_STROBE,
#ifdef SUPPORT_DVD_AUDIO
DA_DGST_TYPE_NONE,
DA_DGST_TYPE_GROUP,
DA_DGST_TYPE_TRACK,
DA_DGST_TYPE_TIME_GRP,
DA_DGST_TYPE_TIME_TRK,
DA_DGST_TYPE_INDEX,
DA_DGST_TYPE_SPOTLIGHT,
DA_DGST_TYPE_BOOKMARK,
#endif
DGST_TYPE_MAX
};
enum {
DGST_TYPE_MENU_DVD,
DGST_TYPE_MENU_VCD
};
enum {
DGST_MENU_BTN_PREV,
DGST_MENU_BTN_EXIT,
DGST_MENU_BTN_MENU,
DGST_MENU_BTN_NEXT,
DGST_MENU_BTN_MAX
};
//static xdata strucDigest _rDigest;
xdata strucDigest _rDigest; // megaa dgst time mark number
#define DGST_DEFAULT_SHOW_TIME 3
#define DGST_DEFAULT_INTERVAL 120 /* 120 * 5sec = 600sec = 10min */
#define IR_TIMEOUT_DGST_INIT 8
#define IR_TIMEOUT_DGST_RESUME 8
// *********************************************************************
// Local Function Prototype: Type Select Sub-state Functions
// *********************************************************************
void vDgstShowTypePage(BYTE bPage) large;
void vDgstShowDispMark(BYTE bItem) large;
BOOL fgDgstTypeSelect(BYTE bType) large;
BOOL fgDgstPlayControl(BYTE bCmd, bParm) large;
void vDgstGotoTypeItem(BYTE bItem) large;
void vDgstTypeInit(BYTE fgInit) large;
void vDgstTypeExit(void) large;
BOOL fgDgstTypeState(void) large;
void vDgstShowMenuPageType(void) large;
void vDgstShowMenuPageButton(void) large;
void vDgstMenuGotoItem(BYTE bItem) large;
void vDgstMenuBtnActive(void) large;
void vDgstMenuInit(BYTE fgInit) large;
void vDgstMenuExit(BYTE fgResume) large;
BOOL fgDgstMenuState(void) large;
void vDgstDispGotoItem(BYTE bItem);
void vDgstDispInit(BYTE fgInit) large;
void vDgstDispExit(void) large;
BOOL fgDgstDispState(void) large;
void vDgstInitInit(BYTE fgInit) large;
void vDgstInitExit(void) large;
BOOL fgDgstInitState(void) large;
void vDgstResumeInit(BYTE fgInit) large;
void vDgstResumeExit(void) large;
BOOL fgDgstResumeState(void) large;
void vDgstNumInit(BYTE fgInit) large;
void vDgstNumExit(BYTE bSelNo) large;
BOOL fgDgstNumState(void) large;
// *********************************************************************
// Type Select Menu Items
// *********************************************************************
typedef struct {
WORD wMsg;
BYTE bType;
} strucDgstType;
static code strucDgstType prDvdDgstTypePlay[] = {
{ OSD_MSG_DGST_TITLE, DGST_TYPE_TITLE },
{ OSD_MSG_DGST_CHAPTER, DGST_TYPE_CHAPTER },
{ OSD_MSG_DGST_TIME_TTL, DGST_TYPE_TIME_TTL },
{ OSD_MSG_DGST_TIME_PTT, DGST_TYPE_TIME_PTT },
#ifdef PLAYER_BOOKMARK
{ OSD_MSG_DGST_BOOKMARK, DGST_TYPE_BOOKMARK },
#endif
// { OSD_MSG_DGST_PROGRAM, DGST_TYPE_PROGRAM },
// { OSD_MSG_DGST_STROBE, DGST_TYPE_STROBE },
};
static code strucDgstType prDvdDgstTypeStop[] = {
{ OSD_MSG_DGST_TITLE, DGST_TYPE_TITLE },
#ifdef PLAYER_BOOKMARK
{ OSD_MSG_DGST_BOOKMARK, DGST_TYPE_BOOKMARK },
#endif
// { OSD_MSG_DGST_PROGRAM, DGST_TYPE_PROGRAM }
};
#ifdef SUPPORT_DVD_AUDIO
static code strucDgstType prDADgstTypePlay[] = {
{ OSD_MSG_DGST_GROUP, DA_DGST_TYPE_GROUP },
{ OSD_MSG_DGST_TRACK, DA_DGST_TYPE_TRACK },
{ OSD_MSG_DGST_TIME_GRP, DA_DGST_TYPE_TIME_GRP },
{ OSD_MSG_DGST_TIME_TRK, DA_DGST_TYPE_TIME_TRK },
// { OSD_MSG_DGST_INDEX, DA_DGST_TYPE_INDEX },
// { OSD_MSG_DGST_SPOTLIGHT, DA_DGST_TYPE_SPOTLIGHT },
#ifdef PLAYER_BOOKMARK
{ OSD_MSG_DGST_BOOKMARK, DA_DGST_TYPE_BOOKMARK },
#endif
};
static code strucDgstType prDADgstTypeStop[] = {
{ OSD_MSG_DGST_GROUP, DA_DGST_TYPE_GROUP },
#ifdef PLAYER_BOOKMARK
{ OSD_MSG_DGST_BOOKMARK, DA_DGST_TYPE_BOOKMARK },
#endif
// { OSD_MSG_DGST_PROGRAM, DGST_TYPE_PROGRAM }
};
#endif
static code strucDgstType prVcdDgstTypePlay[] = {
{ OSD_MSG_DGST_TRACK, DGST_TYPE_TRACK },
{ OSD_MSG_DGST_TIME_DISC, DGST_TYPE_TIME_DISC },
{ OSD_MSG_DGST_TIME_TRK, DGST_TYPE_TIME_TRK },
#ifdef PLAYER_BOOKMARK
{ OSD_MSG_DGST_BOOKMARK, DGST_TYPE_BOOKMARK },
#endif
// { OSD_MSG_DGST_PROGRAM, DGST_TYPE_PROGRAM },
// { OSD_MSG_DGST_STROBE, DGST_TYPE_STROBE }
};
static code strucDgstType prVcdDgstTypeStop[] = {
{ OSD_MSG_DGST_TRACK, DGST_TYPE_TRACK },
{ OSD_MSG_DGST_TIME_DISC, DGST_TYPE_TIME_DISC },
#ifdef PLAYER_BOOKMARK
{ OSD_MSG_DGST_BOOKMARK, DGST_TYPE_BOOKMARK },
#endif
// { OSD_MSG_DGST_PROGRAM, DGST_TYPE_PROGRAM }
};
//alfonso
#ifdef MPS_DIGEST
static code strucDgstType prMPSDgstTypePlay[] = {
//{ OSD_MSG_DGST_TRACK, DGST_TYPE_TRACK },
//{ OSD_MSG_DGST_TIME_DISC, DGST_TYPE_TIME_DISC },
{ OSD_MSG_DGST_TIME_TRK, DGST_TYPE_TIME_TRK },
//{ OSD_MSG_DGST_BOOKMARK, DGST_TYPE_BOOKMARK },
};
static code strucDgstType prMPSDgstTypeStop[] = {
//{ OSD_MSG_DGST_TRACK, DGST_TYPE_TRACK },
//{ OSD_MSG_DGST_TIME_DISC, DGST_TYPE_TIME_DISC },
{ OSD_MSG_DGST_TIME_TRK, DGST_TYPE_TIME_TRK },
//{ OSD_MSG_DGST_BOOKMARK, DGST_TYPE_BOOKMARK },
};
#endif /* MPS_DIGEST */
typedef struct {
strucDgstType code *prList;
BYTE bNo;
} strucDgstTypeMenu;
static code strucDgstTypeMenu prDgstTypeMenu[] = {
{ prDvdDgstTypePlay, TBL_SIZE(prDvdDgstTypePlay) },
{ prDvdDgstTypeStop, TBL_SIZE(prDvdDgstTypeStop) },
#ifdef SUPPORT_DVD_AUDIO
{ prDADgstTypePlay, TBL_SIZE(prDADgstTypePlay) },
{ prDADgstTypeStop, TBL_SIZE(prDADgstTypeStop) },
#endif
//alfonso
#ifdef MPS_DIGEST
{ prMPSDgstTypePlay, TBL_SIZE(prMPSDgstTypePlay) },
{ prMPSDgstTypeStop, TBL_SIZE(prMPSDgstTypeStop) },
#endif /* MPS_DIGEST*/
{ prVcdDgstTypePlay, TBL_SIZE(prVcdDgstTypePlay) },
{ prVcdDgstTypeStop, TBL_SIZE(prVcdDgstTypeStop) }
};
enum {
DGST_TYPE_PAGE_DVD_PLAY,
DGST_TYPE_PAGE_DVD_STOP,
#ifdef SUPPORT_DVD_AUDIO
DGST_TYPE_PAGE_DVD_AUDIO_PLAY,
DGST_TYPE_PAGE_DVD_AUDIO_STOP,
#endif
#ifdef MPS_DIGEST
//alfonso shall add DVIX page
DGST_TYPE_PAGE_MPS_PLAY,
DGST_TYPE_PAGE_MPS_STOP,
#endif /* MPS_DIGEST */
DGST_TYPE_PAGE_VCD_PLAY,
DGST_TYPE_PAGE_VCD_STOP,
DGST_TYPE_PAGE_MAX
};
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
static void vDgstMenuBtnUnsel(BYTE bNewState) large
{
if ((_rDigest.bState == DGST_STATE_MENU) ||
(bNewState == DGST_STATE_MENU))
{
#ifdef NUI_OSD_STYLE
vSetMsgCol4(WB_DGST_MENU, 0, 0, 2, 3);
#else
vSetMsgCol4(WB_DGST_MENU, 0, 0, 0, 3);
#endif
vUnselButton(WB_DGST_MENU, _rDigest.bCurItem);
}
_rDigest.bState = bNewState;
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
void vDgstShowTypePage(BYTE bPage) large
{
BYTE bIdx;
BYTE bDispIdx;
BYTE bTypeValid;
if (bPage >= DGST_TYPE_PAGE_MAX)
{
bPage = DGST_TYPE_PAGE_DVD_STOP;
}
_rDigest.bPageNo = bPage;
vOsdPosPaste(OSD_POS_DGST_TYPE_LINE_1, OSD_MSG_DGST_SEL_TYPE);
bDispIdx = 0;
bTypeValid = 0;
for (bIdx = 0; bIdx < prDgstTypeMenu[bPage].bNo; bIdx++)
{
if (
#ifdef SUPPORT_DVD_AUDIO
(((prDgstTypeMenu[bPage].prList)[bIdx].bType) == DA_DGST_TYPE_BOOKMARK) ||
#endif
(((prDgstTypeMenu[bPage].prList)[bIdx].bType) == DGST_TYPE_BOOKMARK))
{
if (fgIsBookmarkItemValid(BOOKMARK_ITEM_NO) == FALSE)
{
continue;
}
}
else if ((((prDgstTypeMenu[bPage].prList)[bIdx].bType) == DGST_TYPE_NONE) ||
#ifdef SUPPORT_DVD_AUDIO
(((prDgstTypeMenu[bPage].prList)[bIdx].bType) == DA_DGST_TYPE_NONE) ||
#endif
(((prDgstTypeMenu[bPage].prList)[bIdx].bType) >= DGST_TYPE_MAX))
{
/* not valid entry, array end */
break;
}
vOsdPosPaste(OSD_POS_DGST_TYPE_LINE_1 + 1 + bDispIdx,
(prDgstTypeMenu[bPage].prList)[bIdx].wMsg);
bTypeValid |= (1 << bIdx);
bDispIdx++;
}
_rDigest.bSelNoMax = bDispIdx;
_rDigest.bTypeParm = bTypeValid;
}
// *********************************************************************
// Function :
// Description : Currently we only support 2x3 window
// Parameter :
// Return :
// *********************************************************************
void vDgstShowDispMark(BYTE bItem) large
{
BYTE pbTmp[3];
BYTE bType;
WORD wTmp;
bItem = bItem % DGST_VIEW_NS;
switch(_rDigest.bType)
{
case DGST_TYPE_TRACK:
case DGST_TYPE_TITLE:
case DGST_TYPE_CHAPTER:
case DGST_TYPE_BOOKMARK:
case DGST_TYPE_PROGRAM:
#ifdef SUPPORT_DVD_AUDIO
case DA_DGST_TYPE_GROUP:
case DA_DGST_TYPE_TRACK:
#endif
bType = OSD_DGST_MARK_NO;
break;
case DGST_TYPE_TIME_DISC:
case DGST_TYPE_TIME_TRK:
bType = OSD_DGST_MARK_TIME2;
break;
case DGST_TYPE_TIME_TTL:
case DGST_TYPE_TIME_PTT:
#ifdef SUPPORT_DVD_AUDIO
case DA_DGST_TYPE_TIME_GRP:
case DA_DGST_TYPE_TIME_TRK:
#endif
bType = OSD_DGST_MARK_TIME3;
break;
#if 0
case DA_DGST_TYPE_INDEX:
break;
case DA_DGST_TYPE_SPOTLIGHT:
break;
case DA_DGST_TYPE_BOOKMARK:
break;
#endif
case DGST_TYPE_STROBE:
default:
bType = OSD_DGST_MARK_NONE;
break;
}
switch (bType)
{
case OSD_DGST_MARK_NO:
pbTmp[0] = _rDigest.bPageNo * DGST_VIEW_NS + bItem + 1;
break;
case OSD_DGST_MARK_TIME2:
wTmp = ((WORD)_rDigest.bTypeParm * DGST_SLICE_TIME) * (_rDigest.bPageNo * DGST_VIEW_NS + bItem);
pbTmp[0] = (BYTE)(wTmp / 60); /* minute */
wTmp -= 60 * pbTmp[0];
pbTmp[0] = bHEXToBCD(pbTmp[0]);
pbTmp[1] = bHEXToBCD(wTmp); /* seconds */
break;
case OSD_DGST_MARK_TIME3:
wTmp = ((WORD)_rDigest.bTypeParm * DGST_SLICE_TIME) * ((WORD)_rDigest.bPageNo * DGST_VIEW_NS + bItem);
pbTmp[0] = (BYTE)(wTmp / 3600); /* hour */
wTmp -= 3600 * pbTmp[0];
pbTmp[0] = bHEXToBCD(pbTmp[0]);
pbTmp[1] = (BYTE)(wTmp / 60); /* minute */
wTmp -= 60 * pbTmp[1];
pbTmp[1] = bHEXToBCD(pbTmp[1]);
pbTmp[2] = bHEXToBCD(wTmp); /* second */
break;
case OSD_DGST_MARK_NONE:
default:
vOsdShowDgstMark(bItem, bType, 0);
return;
}
vOsdShowDgstMark(bItem, bType, pbTmp);
}
// *********************************************************************
// Function :
// Description :
// Parameter :
// Return :
// *********************************************************************
BOOL fgDgstTypeSelect(BYTE bType) large
{
#if 0
WORD wTotalSec;
#endif
BYTE bDom = bSharedInfo(SI_DVD_DOM);
BYTE bParm1 = 0;
BYTE bParm2 = 0;
BYTE bParm3 = DGST_DEFAULT_SHOW_TIME;
BOOL fgRet = TRUE;
_rDigest.bType = bType;
switch (bType)
{
case DGST_TYPE_TRACK:
bParm1 = (SV_DGST_TRACK << 4) | DGST_VIEW_NS;
break;
case DGST_TYPE_TITLE:
bParm1 = (SV_DGST_TITLE << 4) | DGST_VIEW_NS;
break;
case DGST_TYPE_CHAPTER: /* play state only */
bParm1 = (SV_DGST_CHAPTER << 4) | DGST_VIEW_NS;
/* default is current title */
break;
case DGST_TYPE_TIME_DISC:
bParm1 = (SV_DGST_TIME_DISK << 4) | DGST_VIEW_NS;
bParm2 = DGST_DEFAULT_INTERVAL;
break;
case DGST_TYPE_TIME_TRK: /* play state only */
bParm1 = (SV_DGST_TIME_TRK << 4) | DGST_VIEW_NS;
#if 1
bParm2 = DGST_DEFAULT_INTERVAL;
/* default is current track */
#else
wTotalSec = bSharedInfo(SI_TIME_TOTAL_TRACK_HH) * 60; //min
wTotalSec += bSharedInfo(SI_TIME_TOTAL_TRACK_MM); //min
wTotalSec *= 60; //sec
wTotalSec += bSharedInfo(SI_TIME_TOTAL_TRACK_SS); //sec
wTotalSec /= 5; //n 5sec
bParm2 = wTotalSec/(DGST_VIEW_NS-1); // DGST_DEFAULT_INTERVAL;
#endif
break;
case DGST_TYPE_TIME_TTL:
bParm1 = (SV_DGST_TIME_TTL << 4) | DGST_VIEW_NS;
bParm2 = DGST_DEFAULT_INTERVAL;
/* default is current title */
break;
case DGST_TYPE_TIME_PTT:
bParm1 = (SV_DGST_TIME_PTT << 4) | DGST_VIEW_NS;
bParm2 = DGST_DEFAULT_INTERVAL;
/* default is current chapter */
break;
case DGST_TYPE_BOOKMARK:
if (fgIsBookmarkItemValid(BOOKMARK_ITEM_NO) == TRUE)
{
bParm1 = (SV_DGST_BOOKMARK << 4) | DGST_VIEW_NS;
}
else
{
fgRet = FALSE;
}
break;
case DGST_TYPE_PROGRAM:
bParm1 = (SV_DGST_PROGRAM << 4) | DGST_VIEW_NS;
break;
case DGST_TYPE_STROBE:
bParm1 = (SV_DGST_STROBE << 4) | DGST_VIEW_NS;
bParm3 = 0;
break;
#ifdef SUPPORT_DVD_AUDIO
case DA_DGST_TYPE_GROUP:
if ((bDom == SV_VTSTT_DOM) || (bDom == SV_ATSTT_DOM))
{
bParm1 = (SV_DGST_GROUP << 4) | DGST_VIEW_NS;
}
else
{
fgRet = FALSE;
}
break;
case DA_DGST_TYPE_TRACK:
if ((bDom == SV_VTSTT_DOM) || (bDom == SV_ATSTT_DOM))
{
bParm1 = (SV_DGST_TRACK << 4) | DGST_VIEW_NS;
}
else
{
fgRet = FALSE;
}
break;
#endif
#ifdef SUPPORT_DVD_AUDIO
case DA_DGST_TYPE_TIME_GRP:
if ((bDom == SV_VTSTT_DOM) || (bDom == SV_ATSTT_DOM))
{
bParm1 = (SV_DGST_TIME_GRP << 4) | DGST_VIEW_NS;
bParm2 = 1;
}
else
{
fgRet = FALSE;
}
break;
case DA_DGST_TYPE_TIME_TRK:
if ((bDom == SV_VTSTT_DOM) || (bDom == SV_ATSTT_DOM))
{
bParm1 = (SV_DGST_TIME_TRK << 4) | DGST_VIEW_NS;
bParm2 = 1;
}
else
{
fgRet = FALSE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -