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

📄 char_subpict.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 4 页
字号:
    {        CHAR_SP_ClearRegion();    }#endif    if (__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC ||        __bTVType == SETUP_SCREEN_TV_SYSTEM_PAL_M)    {        _CHAR_SP_RectAttr.rect.wBottom = CHAR_SP_REG_BOTTOM;        _CHAR_SP_RectAttr.rect.wTop = CHAR_SP_REG_TOP;    }    else    {#ifndef EX_SP_POS_INDEPEND_OSDND        _CHAR_SP_RectAttr.rect.wBottom = __OSDNDBottomMsgAttr.wY;#else        _CHAR_SP_RectAttr.rect.wBottom = CHAR_SP_REG_BOTTOM_PAL; #endif        _CHAR_SP_RectAttr.rect.wTop = CHAR_SP_REG_TOP_PAL;    }}void    CHAR_SP_SetOutputBuffer(DWORD dwBufferAddress, DWORD dwBufferSize){    _Char_SP_OutputInfo.dwAddr = dwBufferAddress;    _Char_SP_OutputInfo.dwLen  = dwBufferSize;}void    CHAR_SP_ParseSPFile(void){    DWORD dwFileBytes;    BYTE  bSecNum;    BYTE  bFileType;    if (!MM_GetSRTRecord(&_dwSPStartSector, &dwFileBytes, &bFileType))    {        CHAR_SP_Initial();        CHAR_SP_Reset();        return;    }    switch (bFileType)    {#ifdef PARSER_SPTXT_SRT    case MP4SP_EXT_SRT:        _dwSPType = PARSER_SPTXT_SRT;        break;#endif#ifdef PARSER_SPTXT_SSA     case MP4SP_EXT_SSA:    case MP4SP_EXT_ASS:         _dwSPType = PARSER_SPTXT_SSA;        break;#endif#ifdef PARSER_SPTXT_SUB     case MP4SP_EXT_SUB:        _dwSPType = PARSER_SPTXT_SUB;        break;#endif#ifdef PARSER_SPTXT_SMI     case MP4SP_EXT_SMI:        _dwSPType = PARSER_SPTXT_SMI;        break;#endif#ifdef PARSER_SPTXT_PSB    case MP4SP_EXT_PSB:        _dwSPType = PARSER_SPTXT_PSB;        break;#endif    default:        return;    }/*** Alan2.36, the output buffer will be set in CHAR_SP_SetOutputBuffer().#ifdef EX_SP_SHARE_WITH_FIRMWARE_BUFFER     // wyc2.21-909S, run time to update the SP output address and length by MM FW buffer usage.    _Char_SP_OutputInfo.dwAddr = __dwMMSPBuffST;    _Char_SP_OutputInfo.dwLen  = __dwMMSPBuffSize;#else    _Char_SP_OutputInfo.dwAddr = CHAR_SP_BUFFER;    _Char_SP_OutputInfo.dwLen  = CHAR_SP_BUFFER_SIZE;#endif*/    _Char_SP_InputInfo.dwAddr = (DWORD) NULL;    _Char_SP_InputInfo.dwLen  = dwFileBytes;        bSecNum = (BYTE)((_Char_SP_InputInfo.dwLen + (IF_DUMP_IN_SECTOR_SIZE- 1))              / IF_DUMP_IN_SECTOR_SIZE);     _dwSPEndSector = _dwSPStartSector + bSecNum - 1;    SrcFilter_Stop(__dwSFStreamID);    SrcFilter_ReadSectors(__dwSFStreamID, _dwSPStartSector, _dwSPEndSector);    PARSER_SPTXT_initial();    __dwParResult_CharSP = PARSER_SPTXT(&_Char_SP_InputInfo,                                        &_Char_SP_OutputInfo, 0, _dwSPType);    if (PARSER_SPTXT_SUCCESS == __dwParResult_CharSP ||         PARSER_SPTXT_BUFFER_OVERFLOW == __dwParResult_CharSP)     {        _pSP_HeaderPt = (PPARSER_SPTXT_HEADER)_Char_SP_OutputInfo.dwAddr;#ifdef  SUPPORT_MP4        // LLY1.50, specify different bitstream format base on file type        if(MM_GetFileType(__MMPlayingItem.wDirID, __wPlayItem)==EXTNAME_MP4)        {            PARSER_SetDataFmt(0, PARSER_DATAFMT_NOCHANGE, PARSER_BSFMT_MP4);                    }        else#endif  // #ifdef SUPPORT_MP4                    {            PARSER_SetDataFmt(0, PARSER_DATAFMT_NOCHANGE, PARSER_BSFMT_AVI);        }        // LLY1.20, check if support char base subpicture        // if yes, increase Ns by one, assign SPSTNO as 0 (1st SPST ID)        // And, insert this SPST into parser SPST arrary        if( PARSER_AddExtTextSP(0) )        {            __bSPSTNs += 1;            __bSPSTNO = 0;            __bSPSTID=__bSPSTNO;                }#ifdef EX_SP_USE_SPU_BUFFER        _CHAR_SP_InitSPU();      #endif    }    else    {        _pSP_HeaderPt = NULL;    }}void    CHAR_SP_Trigger(void){    // Prevent to show subtitle in Setup Mode    if (!__btPlaying)     {        CHAR_SP_ClearRegion();        return;       }    if (FALSE == (__SPUCtrl.bEnable & SPCTRL_REALPTS) || 0 == (__SPUCtrl.bEnable & SPCTRL_SP1))    {        CHAR_SP_ClearRegion();//Alan1.20, reomve this code//        return;    }    if (PARSER_ESFMT_TEXT_SP_EXT == __SP1.ESFormat)    {        if (!_CHAR_SP_CheckPTS_ExSP())            return;    } #ifdef SUPPORT_UTF8     else if (PARSER_ESFMT_TEXT_SP == __SP1.ESFormat)    {        if (!_CHAR_SP_CheckPTS_MP4())            return;    }#endif    else    {        return;    }    //    if (FALSE == (__SPUCtrl.bEnable & SPCTRL_SP1)) return;//Alan1.20, update the above code    if (FALSE == (__SPUCtrl.bEnable & SPCTRL_REALPTS) || 0 == (__SPUCtrl.bEnable & SPCTRL_SP1))        return;#ifndef EX_SP_USE_SPU_BUFFER    if (FALSE == __bOSDDynamicRegion)    {        OSD_NewDynamicRegion(_CHAR_SP_RecoverFunc);    }    if (OSD_CanUpdateDynamicRegionInfo() == FALSE)        return;#endif    if (_blAlreadyDisplay)        return;    _CHAR_SP_DrawStrings();}BOOL _CHAR_SP_CheckPTS_ExSP(void){    if ( ! (PARSER_SPTXT_SUCCESS == __dwParResult_CharSP ||         PARSER_SPTXT_BUFFER_OVERFLOW == __dwParResult_CharSP) )        return FALSE;    if (PARSER_SPTXT_END == _pSP_HeaderPt->dwStart)    {        CHAR_SP_ClearRegion();        _CHAR_SP_LoadSP();        return FALSE;    }   HAL_ReadInfo(HAL_INFO_STC_UPDATED, &__dwTemp);   if (FALSE == __dwTemp)        return FALSE;    HAL_ReadInfo(HAL_INFO_STC, &__dwTemp);       if (__dwTemp < _pSP_HeaderPt->dwStart)    // PTS < start time        return FALSE;     if (__dwTemp > _pSP_HeaderPt->dwEnd)    // PTS > end time    {        CHAR_SP_ClearRegion();                _pSP_HeaderPt = (PPARSER_SPTXT_HEADER) ((PBYTE)_pSP_HeaderPt +                     (((_pSP_HeaderPt->bLen + PARSER_SPTXT_HEADER_SIZE + 3) >> 2) << 2));        _blAlreadyDisplay = FALSE;        return FALSE;    }    if (PARSER_SPTXT_END == _pSP_HeaderPt->dwStart)    {        return FALSE;    }    return TRUE;}#ifdef SUPPORT_UTF8 BOOL _CHAR_SP_CheckPTS_MP4(){    // Check whether it is the end of all the subtitle    if ( __SP1.dwRead_Counter ==  __SP1.dwWrite_Counter)        return FALSE;    _pSP_HeaderPt = (PPARSER_SPTXT_HEADER)__SP1.dwReadPtr;    // Check SP ID    if (__bSPSTID != _pSP_HeaderPt->bID)        return FALSE;    HAL_ReadInfo(HAL_INFO_STC, &__dwTemp);       if (__dwTemp < _pSP_HeaderPt->dwStart)    // PTS < start time        return FALSE;     if (__dwTemp > _pSP_HeaderPt->dwEnd)    // PTS > end time    {        CHAR_SP_ClearRegion();        __SP1.dwReadPtr = __SP1.dwSPU_NextAddress[__SP1.dwRead_Counter & SPU_MASK];        __SP1.dwRead_Counter++;        return FALSE;    }    return TRUE;}#endifvoid _CHAR_SP_DrawStrings(void){    BYTE   bLineIndex;    if (PARSER_ESFMT_TEXT_SP_EXT == __SP1.ESFormat)    {        switch (__bEnCodeType)        {               #ifdef SUPPORT_UNICODE_CODING               case CHAR_ENCODE_UNICODE:            _Convert_UTF8_To_Unicode();            break;#ifdef SUPPORT_CHAR_ENCODING_BIG5        case CHAR_ENCODE_OTHER:            _Convert_Big5_To_Unicode();            break;#endif#ifdef SUPPORT_CHAR_ENCODING_SHIFT_JIS        case CHAR_ENCODE_OTHER:            _Convert_Shift_JIS_To_Unicode();            break;#endif#endif        case CHAR_ENCODE_ISO_CP:        default:        _Convert_Locale_To_CTK_Strings();#ifdef ISO_8859_8_FONT//#ifdef SUPPORT_CHAR_ENCODING_SWITCH        // Damon2.56, Hebrew language need to change word direction        if (__SetupInfo.bExSPSTLanguage == SETUP_LANGUAGE_ENCODING_HEBREW)//#endif        {                    _Change_Word_Direction();        }#endif            break;        }    }#ifdef SUPPORT_UTF8     else if (PARSER_ESFMT_TEXT_SP == __SP1.ESFormat)    {        _Convert_UTF8_To_CTK_Strings();    }#endif    bLineIndex = _SP_Autowrap();#ifdef EX_SP_USE_SPU_BUFFER    // Use the SP buffer    SPU_BMP_SetDisplay(0, FALSE);    SPU_BMP_SetDisplayArea(0, 51, CHAR_SP_REG_TOP, __RegionList[GDI_SP_REGION_ID].wWidth,        __RegionList[GDI_SP_REGION_ID].wHeight, (const BYTE*)__RegionList[GDI_SP_REGION_ID].dwTAddr);    if (__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC || __bTVType == SETUP_SCREEN_TV_SYSTEM_PAL_M)    {        _CHAR_SP_StrAttr.wY = (CHAR_SP_MAX_LINE_NUM - bLineIndex) * CHAR_SP_LINE_HEIGHT;    }    else    {        _CHAR_SP_StrAttr.wY = (CHAR_SP_MAX_LINE_NUM - bLineIndex) * CHAR_SP_LINE_HEIGHT;    }#else  // #ifdef EX_SP_USE_SPU_BUFFER    // Use the OSD buffer    if (__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC || __bTVType == SETUP_SCREEN_TV_SYSTEM_PAL_M)    {        _CHAR_SP_StrAttr.wY = CHAR_SP_REG_BOTTOM - (bLineIndex * CHAR_SP_LINE_HEIGHT);    }    else    {#ifndef EX_SP_POS_INDEPEND_OSDND        _CHAR_SP_StrAttr.wY = __OSDNDBottomMsgAttr.wY - (bLineIndex * CHAR_SP_LINE_HEIGHT);#else        _CHAR_SP_StrAttr.wY = CHAR_SP_REG_BOTTOM_PAL - (bLineIndex * CHAR_SP_LINE_HEIGHT);#endif    }#endif    bLineIndex = 0;//#ifndef SUPPORT_UNICODE_CODING    //GDI_SetFontHeightInTable(_bSPFontHeight); //#endif/*#if (FONT_TABLE_METHOD == CREATE_DYNAMICALLY)    _CHAR_SP_UseExSPFontTable(TRUE);#endif */    while (_aLinePtr[bLineIndex] && bLineIndex < CHAR_SP_MAX_LINE_NUM)     {        if (__bEnCodeType == CHAR_ENCODE_ISO_CP)        {            __dwTemp = GDI_GetStringWidth_909(_aLinePtr[bLineIndex]);        }#ifdef SUPPORT_UNICODE_CODING        else // CHAR_SP_CODE_UNICODE        {            __dwTemp = GDI_GetUniStringWidth(_aLinePtr[bLineIndex]);        }#endif         _CHAR_SP_StrAttr.wX = CHAR_SP_REG_LEFT + (CHAR_SP_REG_WIDTH -__dwTemp) / 2;         if (__bEnCodeType == CHAR_ENCODE_ISO_CP)        {#ifdef EX_SP_USE_SPU_BUFFER        GDI_DrawString_909(GDI_SP_REGION_ID, &_CHAR_SP_StrAttr, _aLinePtr[bLineIndex]);#else        GDI_DrawString_909(0, &_CHAR_SP_StrAttr, _aLinePtr[bLineIndex]);#endif        }#ifdef SUPPORT_UNICODE_CODING        else // CHAR_SP_CODE_UNICODE        {#ifdef EX_SP_USE_SPU_BUFFER        GDI_DrawStringByUnicode(GDI_SP_REGION_ID, &_CHAR_SP_StrAttr, _aLinePtr[bLineIndex]);#else        GDI_DrawStringByUnicode(0, &_CHAR_SP_StrAttr, _aLinePtr[bLineIndex]);#endif        }#endif // #ifdef SUPPORT_UNICODE_CODING        _CHAR_SP_StrAttr.wY += CHAR_SP_LINE_HEIGHT;        bLineIndex++;    }/*#ifdef SUPPORT_UNICODE_CODING    OSD_SetCurFontTable(FONTABLE_OSD);#endif*/    //GDI_SetFontHeightInTable(OSD_FONT_HEIGHT); /*#if (FONT_TABLE_METHOD == CREATE_DYNAMICALLY)    _CHAR_SP_UseExSPFontTable(FALSE);#endif */#ifdef EX_SP_USE_SPU_BUFFER    SPU_BMP_SetDisplay(0, TRUE);#endif    _blAlreadyDisplay = TRUE;}void _Convert_Locale_To_CTK_Strings(void){    WORD   wReadByteNum;    BYTE   bCharNum, bLineIndex, bBufferIndex;    PBYTE  pString;     // Point to the current translated character#ifdef ISO_8859_8_FONT#ifdef HEBREW_IE_FORMAT    BYTE	bHebCharNum;	// save the character numbers of a word    BYTE	bHebNewSentence;    BYTE	bHebNumberWord;    BYTE	bHebCharStart;    BYTE	bSpaceIndex;    // initial variables    bHebCharNum = 0;    bHebNewSentence = TRUE;    bHebNumberWord = FALSE;    bHebCharStart = 0;    bSpaceIndex = 0;    _bHebSentenceIndex = 0;    _bHebNumberIndex = 0;#elif defined(HEBREW_WORD_FORMAT)    BYTE	bHebCharNum;	// save the character numbers of a word    BYTE	bHebChar;    // initial variables    bHebCharNum = 0;    bHebChar = FALSE;    _bHebWordIndex = 0;#endif#endif    /*    if (_pSP_LastHeaderPt == _pSP_HeaderPt)        return ;    */    for (bLineIndex = 0; bLineIndex < CHAR_SP_MAX_LINE_NUM; bLineIndex++)        _aLinePtr[bLineIndex] = NULL;    pString = ((PBYTE)_pSP_HeaderPt) + PARSER_SPTXT_HEADER_SIZE;    wReadByteNum = 0;    bCharNum = 0;    bBufferIndex = 1;    bLineIndex = 0;    _aLinePtr[bLineIndex] = _aString;

⌨️ 快捷键说明

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