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

📄 subpict.h

📁 ct952 source code use for Digital Frame Photo
💻 H
字号:
//  **************************************************************************//      (C)Copyright Cheertek Inc. 2003-2004,//          D300, all right reserved.////      Product : CT909////      Date    : 2003.09.17//      Author  : Cheertek (D300 Chuan)//      Purpose : SUBPICTURE//      Sources : subpict.c/ subpict.h//  **************************************************************************#ifndef __SUBPICT_H__#define __SUBPICT_H__#ifdef __cplusplus   extern "C"{#endif#define SUPPORT_SPDEC#include "parser.h"//#define NO_PTS// Joey2.11, Patch H/W bug for color change#define PATCH_HWBUG_CC#define     SP_TYPE_NONE            (0x0)#define     SP_TYPE_DVD             (0x1)#define     SP_TYPE_SVCD            (0x2)#define     SP_TYPE_CVD             (0x3)#define     SP_TYPE_DIVX            (0x4)#define     SPPTS_OVERFLOW          (0x1000000L)#define SHOWBYTE()          (REG_SPU_RISC_ACS)#define SHOWWORD()          (SHOWBYTE() << 8 | SHOWBYTE())#define SHOWDWORD()         (SHOWWORD() << 16 | SHOWWORD())#define SPU_GETWORD(n) \{  \    n = SHOWBYTE(); \    n = SHOWBYTE() | (n << 8); \}#define SPU_GETDWORD(n) \{ \    n = SHOWBYTE(); \    n = SHOWBYTE() | (n << 8); \    n = SHOWBYTE() | (n << 8); \    n = SHOWBYTE() | (n << 8); \}#define SPU_GETWORD_LITTLE_ENDIAN(n) \{  \    n = SHOWBYTE(); \    n |= (SHOWBYTE() << 8); \}#define SP_NULL_ID          (0xFFFFFFFF)// SP display Control Command (SP_DCCMD)#define DCCMD_FSTA_DSP              (0x00)#define DCCMD_STA_DSP               (0x01)#define DCCMD_STP_DSP               (0x02)#define DCCMD_SET_COLOR             (0x03)#define DCCMD_SET_CONTR             (0x04)#define DCCMD_SET_DAREA             (0x05)#define DCCMD_SET_DSPXA             (0x06)#define DCCMD_CHG_COLCON            (0x07)#define DCCMD_CMD_END               (0xFF)#define CHG_COLCON_TERMINATION      (0x0FFFFFFF)// OGT display Control Command (OGT_CMD)#define OGT_TIME_ENABLE             (0x08000000)#define OGT_TIME_DISABLE            (0x00000000)#define OGT_REGION_TOPLEFT          (0x10000000)#define OGT_REGION_BOTTOMRIGHT      (0x18000000)#define OGT_COLOR                   (0x20000000)#define OGT_COLOR_HL                (0x28000000)#define OGT_BLEND                   (0x30000000)#define OGT_BLEND_HL                (0x38000000)#define OGT_TOPFIELD                (0x40000000)#define OGT_BOTTOMFIELD             (0x48000000)#define OGT_REGION_TOPLEFT_HL       (0x50000000)#define OGT_REGION_BOTTOMRIGHT_HL   (0x58000000)#define OGT_CMD_END                 (0x04080C10)// The result code of DecodeDCSQ// #define RST_DCSQ_WAIT_BUFFER        (1) // Need more data in buffer to decode the DCSQ. (not used now)#define RST_DCSQ_ERROR              (2) // Some errors in the display control commands.#define RST_DCSQ_NEXT_DCSQ          (3) // The current DCSQ has been decoded successfully, and there are still some DCSQs in the DCSQT.#define RST_DCSQ_LAST_DCSQ          (4) // The current DCSQ has been decoded successfully, and is the last DCSQ in the DCSQT.// Subpicture Stage#define SPUSTAGE_PREPARE            (0)// #define SPUSTAGE_CHECK_SIZE         (1) // (not used now)#define SPUSTAGE_CHECK_START        (2)#define SPUSTAGE_CHECK_END          (3)#define SPUSTAGE_END                (4)// Joey1.50, for 909 and 909S#define MAKE_LCUT(RUN_POS, RUN_LEN, PXD_POS, SCALE, OFFSET, CODE_LEN)                   \    (((RUN_POS) & 0xf) << 24) | (((RUN_LEN) & 0xf) << 20) | (((PXD_POS) & 0xf) << 16) | \    (((SCALE) & 7) << 12) | (((OFFSET) & 3) << 8) | ((CODE_LEN) & 0x1f)// DVD_SP#define MASK0_DVD           (0x1FFFCL)#define MASK1_DVD           (0x1FC00L)#define MASK2_DVD           (0x1F000L)#define MASK3_DVD           (0x1C000L)#define MASK4_DVD           (0x1C000L)#define LCUT_IDX0_DVD       MAKE_LCUT(0, 0, 14, 1, 0, 16)#define LCUT_IDX1_DVD       MAKE_LCUT(6, 8, 14, 1, 0, 16)#define LCUT_IDX2_DVD       MAKE_LCUT(4, 6, 10, 1, 0, 12)#define LCUT_IDX3_DVD       MAKE_LCUT(2, 4,  6, 1, 0,  8)#define LCUT_IDX4_DVD       MAKE_LCUT(0, 2,  2, 1, 0,  4)// SVCD_OGT#define MASK0_SVCD          (0x1FC00L)#define MASK1_SVCD          (0x1C000L)#define MASK2_SVCD          (0x1C000L)#define LCUT_IDX0_SVCD      MAKE_LCUT(0, 0, 6, 1, 0, 8)#define LCUT_IDX1_SVCD      MAKE_LCUT(2, 4, 6, 4, 0, 8)#define LCUT_IDX2_SVCD      MAKE_LCUT(0, 2, 2, 1, 0, 4)// CVD_OGT#define MASK0_CVD           (0x1C000L)#define MASK1_CVD           (0x1C000L)#define LCUT_IDX0_CVD       MAKE_LCUT(2, 2, 0, 1, 1, 4)#define LCUT_IDX1_CVD       MAKE_LCUT(0, 0, 0, 1, 0, 2)// SP Display Mode#define MODE_N2N            (0x0)#define MODE_N2P            (0x1)#define MODE_P2N            (0x2)#define MODE_P2P            (0x3)#define MODE_PS             (0x10)#define MODE_LB             (0x20)#define MODE_WS             (0x40)#define USE_SP1             (0)#define USE_SP2             (1)#ifdef NO_PTS#define EXTRA_BYTE          (0)#else#define EXTRA_BYTE          (8)#endif#define HLI_ACTION_OK       (0x0)#define HLI_ACTION_SELECT   (0x1)#define HLI_ACTION_ACTIVE   (0x2)#define HLI_ACTION_ENTER    (0x3)#define HLI_ACTION_OFF      (0x4)// Constants for SP_CTRL::bEnable#define SPCTRL_SP1              (0x1)#define SPCTRL_SP2              (0x2)#define SPCTRL_SP1_FSTA_DSP     (0x4)// #define SPCTRL_SP2_FSTA_DSP     (0x8)// #define SPCTRL_UPDATEREM        (0x8)// #define SPCTRL_FREEZE           (0x10)#define SPCTRL_REALPTS          (0x20)#define SPCTRL_ENABLE           (0x40)//#define SPCTRL_RESET_BUFFER (0x80)// Constants for SP_CTRL::bStatus#define SPCTRL_NEWSTC           (0x10)#define MCU_SUB_SPREM_MAXSIZE   (0xffff*4)#define MAGIC_PATTERN_CODE1     (0x000001BA)#define MAGIC_PATTERN_CODE2     (0xFFFFFFFF)#define     SPU_NUM         (128)#define     SPU_MASK        (SPU_NUM-1)typedef struct tagSP_CTRL{    DWORD   dwSP1ID;  // ID of SP#1, 0xFFFFFFFF indicate SP_NULL_ID    DWORD   dwSP2ID;  // ID of SP#2, 0xFFFFFFFF indicate SP_NULL_ID    BYTE    bEnable;                        // bit[0] SP#1 on/off (SPCTRL_SP1) - WinDVD                        // bit[1] SP#2 on/off (SPCTRL_SP2) - WinDVD                        // bit[2] force display detected for SP1 (SPCTRL_SP1_FSTA_DSP) - SP                        // bit[5] Real PTS reach (SPCTRL_REALPTS) - Decoder                        // bit[6] enable (SPCTRL_ENABLE) - WinDVD/Parser    BYTE    bStatus;                        // bit[1:0] 0: force display detected, 1: display detected, 2: stop detected for SP1                        // bit[3:2] 0: force display detected, 1: display detected, 2: stop detected for SP2                        // bit[4] 0: Bitstream is continuous, 1: Bitstream is dis-continuous. (SPCTRL_NEWSTC)} SP_CTRL, *PSP_CTRL;typedef struct  tagspu{    DWORD   dwSPU_NextAddress[SPU_NUM];    DWORD   dwReadPtr;    DWORD   dwPacketPTS;    DWORD   dwDCSQPTS;    DWORD   dwRead_Counter;    DWORD   dwWrite_Counter;    DWORD   dwWrite_Counter_NewSTC; // Record Write Counter for NewSTC    DWORD   dwSP_ID;    DWORD   dwSP_NextID;    DWORD   dwTopFieldAddr;    DWORD   dwBottomFieldAddr;    DWORD   dwTopFieldAddr_PL;    DWORD   dwBottomFieldAddr_PL;    DWORD   dwPattern[4];    WORD    wDCSQ_STM;          // Execution Start Time of DCSQ (relative value)    WORD    wSPU_SZ;            // Size of the current SPU    WORD    wCurr_SPU_SZ;       // current wSPU_SZ    WORD    wPrev_DCSQ_SA;      // previous wDCSQ_SA    WORD    wDCSQ_SA;           // Starting address of the current DCSQ// Joey2.11, Patch H/W bug for color change#ifdef PATCH_HWBUG_CC    WORD    wFirst_DCSQ_SA;     // Starting address of first DCSQ#endif // PATCH_HWBUG_CC    WORD    wVStart;    WORD    wVEnd;    WORD    wVStart_PL;    WORD    wVEnd_PL;    WORD    wPassLine;    BYTE    bStage;    BOOL    blUsage;    BOOL    blReset;// J500KWShih, For Nero Digital//===================================================================//  PARSER_ESFMT_DVD_SP  : for DVD sub-picture//  PARSER_ESFMT_TEXT_SP : for UTF-8 charactor base subtitle//===================================================================    PARSER_ESFMT ESFormat;} SPU, *PSPU;typedef struct tagSTRU_HLI{    struct    {        WORD    wHLI_SS         PACK_FORMAT;   // Status of HLI        DWORD   dwHLI_S_PTM     PACK_FORMAT;   // Start PTM of HLI        DWORD   dwHLI_E_PTM    PACK_FORMAT;   // End PTM of HLI        DWORD   dwBTN_SL_E_PTM  PACK_FORMAT;   // End PTM of Button Select        WORD    wBTN_MD         PACK_FORMAT;   // Button Mode        BYTE    bBTN_OFN        PACK_FORMAT;   // Button Offset Number        BYTE    bBTN_Ns         PACK_FORMAT;   // Number of Buttons        BYTE    bNSL_BTN_Ns     PACK_FORMAT;   // Number of Numerical Select Buttons        BYTE    bReserved       PACK_FORMAT;   // Reserved        BYTE    bFOSL_BTNN      PACK_FORMAT;   // Forcedly Selected Button Number        BYTE    bFOAC_BTNN      PACK_FORMAT;   // Forcedly Activated Button Number    } HL_GI; // 22 bytes    struct    {        WORD    wSL_COLI_Color      PACK_FORMAT;   // Selection Color Information - Color        WORD    wSL_COLI_Contrast   PACK_FORMAT;   // Selection Color Information - Contrast        WORD    wAC_COLI_Color      PACK_FORMAT;   // Action Color Information - Color        WORD    wAC_COLI_Contrast   PACK_FORMAT;   // Action Color Information - Contrast    } BTN_COLIT[3]; // 8 bytes x 3    struct    {        WORD    wBTN_POSI_1         PACK_FORMAT;        DWORD   dwBTN_POSI_2        PACK_FORMAT;        BYTE    bAJBTN_POSI_Upper   PACK_FORMAT;        BYTE    bAJBTN_POSI_Lower   PACK_FORMAT;        BYTE    bAJBTN_POSI_Left    PACK_FORMAT;        BYTE    bAJBTN_POSI_Right   PACK_FORMAT;        DWORD   dwBTN_CMD_1         PACK_FORMAT;        DWORD   dwBTN_CMD_2         PACK_FORMAT;    } BTNIT[36]; // 18 bytes x 36, maybe 1x36 or 2x18 or 3x12 BTNs} HLI , *PHLI; // 694 bytesextern volatile WIN_PARAMETER _SPU_MainVideo;   // backup of _MainVideo from dispextern volatile SP_CTRL __SPUCtrl;extern volatile SPU     __SP1;extern volatile SPU     __SP2;extern volatile PHLI    __pHLIBuffer;extern volatile BYTE    __bHLI_Ready;extern volatile BYTE    __bHLI_On;extern volatile BYTE    __bHLI_Action;      // Inform SP to do HLI control. Possible active lists as below.                                            // HLI_ACTION_SELECT: change the highlight to selection color.                                            // HLI_ACTION_ACTIVE: change the highlight to active color.                                            // HLI_ACTION_ENTER: change the highlight to active color. Same as ACTIVE?                                            // HLI_ACTION_OFF: Turn off the HLI                                            // HLI_ACTION_OK: do nothing.extern BYTE    __bHLI_BTNNumber;    // Current BTN Number accord to different SPST display mode(LB/ WD/ PS)extern BOOL    __blHLI_Status;      // TRUE: on, FALSE: offextern DWORD   __dwSP_EndLine;extern ULONG_UNION   __ulSPVHDS_HLI;extern ULONG_UNION   __ulSPVHDS;extern DWORD   __dwScaleFactor;VOID    SPU_AdjustVHDS(VOID);VOID    SPU_DisplayMode(BYTE bSPMode, BYTE bTVMode, CHAR cOffset);VOID    SPU_Reset(DWORD dwType);VOID    SPU_SetPalette(DWORD *dwPalette);VOID    SPU_TimeStamp(DWORD dwPTS );VOID    SPU_VCD30Set(WIN_PARAMETER VCD30, BYTE bColor, BYTE bContrast);VOID    SPU_ScreenEnd(VOID);VOID    SPU_Vsync(VOID);VOID    SPU_NewSTC(DWORD dwNewSTC);// Micky2.11aVOID    SPU_ControlHighlight(BYTE bAction, BYTE bButton);// Bitmap SPVOID    SPU_BMP_Init(VOID);VOID    SPU_BMP_SetDisplay(BYTE bSPn, BYTE bEnable);VOID    SPU_BMP_SetColorContrast(BYTE bSPn, BYTE bColorIndex, DWORD dwColorYUV, BYTE bContrast);VOID    SPU_BMP_SetDisplayArea(BYTE bSPn, WORD wX, WORD wY, WORD wWidth, WORD wHeight, const BYTE* pbBMP);#ifdef __cplusplus   }#endif#endif  // __SUBPICT_H__

⌨️ 快捷键说明

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