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

📄 utl.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
        // [2-3] Let SP buffer - total reserved space - F/W used buffer - 3K index table - 3K SP output area - Servo buffer        dwSPSize = DS_INPUT_BITBUF_END_AVI_SMALL - __dwMMFWBuffEnd - 0x3000L - 0x3000L - dwServoSize;#else        dwServoSize = SERVO_BUFSIZE_ALIGN_UNIT*3;        // [2-2] Configure SP output buffer as 3K DW (near servo buffer)        // [2-3] Let SP buffer - total reserved space - F/W used buffer - 3K index table - 3K SP output area - Servo buffer        dwSPSize = DS_INPUT_BITBUF_END_AVI - __dwMMFWBuffEnd - 0x3000L - 0x3000L - dwServoSize;#endif //        dwSPStart = __dwMMFWBuffEnd + 0x3000L;        if(dwSPSize < 0xA000)        {            DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Note: SP buffer < 10K DW !!\n");        }        // [2-4] Config SP output buffer as 3K (near servo buffer)#ifdef SMALL_SOURCE_BUFFER        dwSPOutStart = DS_INPUT_BITBUF_END_AVI_SMALL - dwServoSize - 0x3000L;#else        dwSPOutStart = DS_INPUT_BITBUF_END_AVI - dwServoSize - 0x3000L;#endif    }#else   // #ifdef  SET_AVI_IDX_SP_SERVO_BUFF_RUNTIME    // Always let servo buffer as pre-define space    dwServoSize = DS_INPUT_BITBUF_END_AVI - DS_INPUT_BITBUF_ST_AVI;    // Always set SP buffer as 13K DW by pre-define range while exist internal SP    if(__bSPSTNs)    {        dwSPStart = DS_SP1BUF_ADDR_ST_MM;        dwSPSize = DS_SP1BUF_ADDR_END_MM - DS_SP1BUF_ADDR_ST_MM;    }    else    {        // Configure char-based SP buffer#ifdef  EX_SP_SHARE_WITH_FIRMWARE_BUFFER        dwSPStart = __dwMMFWBuffEnd;        dwSPSize = DS_CHAR_BASED_SP_OUTBUF_END - dwSPStart;#else   // #ifdef  EX_SP_SHARE_WITH_FIRMWARE_BUFFER        dwSPStart = DS_CHAR_BASED_SP_OUTBUF_ST;        dwSPSize = (DS_CHAR_BASED_SP_OUTBUF_END - DS_CHAR_BASED_SP_OUTBUF_ST);#endif  // #ifdef  EX_SP_SHARE_WITH_FIRMWARE_BUFFER        // Configure SP output buffer as 3K DW base on pre-define area        dwSPOutStart = DS_SP_OSD_ST;    }#endif  // #ifdef  SET_AVI_IDX_SP_SERVO_BUFF_RUNTIME//    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "##### %lx, %lx, %lx, %lx, %lx\n", dwSPStart, dwSPSize,//    (dwSPStart+dwSPSize), DS_SP1BUF_ADDR_ST_MM, DS_SP1BUF_ADDR_END_MM);    // Config SP buffer address.    PARSER_SetOutBufferAddress(PARSER_ES_SP1, dwSPStart, (dwSPStart+dwSPSize));    // Config Servo dump-in buffer address#ifdef SMALL_SOURCE_BUFFER    SrcFilter_ConfigBuffer( __dwSFStreamID, DS_INPUT_BITBUF_END_AVI_SMALL-dwServoSize,#else    SrcFilter_ConfigBuffer( __dwSFStreamID, DS_INPUT_BITBUF_END_AVI-dwServoSize,#endif //        (dwServoSize/SERVO_BUFSIZE_ALIGN_UNIT) );    // Parser data dump-out buffer, let it same as SP buffer    PARSER_SetOutBufferAddress((DWORD)PARSER_ES_DATA, dwSPStart, (dwSPStart+dwSPSize));    // Tell infofilter the user data mode as media manager mode.    INFOFILTER_CFGUserData(dwSPStart);    // Config char-based SP buffer address & output address    if(!__bSPSTNs)    {        CHAR_SP_SetOutputBuffer(dwSPStart, dwSPSize);        GDI_ConfigRegionAddress(GDI_SP_REGION_ID, dwSPOutStart);    }#ifdef  DEBUG_AVI_IDX_SP_SERVO_BUFFER    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "SP: %lx - %lx; Servo: %lx - %lx (%lx)\n",        dwSPStart, (dwSPStart+dwSPSize), (DS_INPUT_BITBUF_END_AVI-dwServoSize),        (DS_INPUT_BITBUF_END_AVI), (dwServoSize/SERVO_BUFSIZE_ALIGN_UNIT));    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "UserData: %lx - %lx; SP Display: %lx\n",        dwSPStart, (dwSPStart+dwSPSize), dwSPOutStart);#endif  // #ifdef  DEBUG_AVI_IDX_SP_SERVO_BUFFER}// LLY1.20 create, collect procedure together while updata AVI audio information// LLY2.21, add one new paramter to specify desired mode since integrate VOB audio information together.//  ******************************************************************************//  Function    :   _UTL_Update_Movie_AudioInfo//  Description :   Update AVI/ VOB audio information while change audio stream//  Argument    :   bMode, specify desired file format, AVI or others//                  bID, specify the desired AST index, from 0//  Return      :   None//  *****************************************************************************void _UTL_Update_Movie_AudioInfo(BYTE bMode, BYTE bID){    if(bMode == ATTR_AVI)    {        // LLY2.21, update audio stream ID as index for AVI file        __bASTID = bID;        // [1] Audio channel information -- LLY1.00        __bACHN=pBitsContent->StreamID.AVI.AudioTrack[bID].bChannelNo;        // Grievous2.60, record bit per sample value        __bBitsPerSample=(pBitsContent->StreamID.AVI.AudioTrack[bID].bBitsPerSample);        // [2] Sample frequency -- LLY1.00        __dwHALAudioFreq=pBitsContent->StreamID.AVI.AudioTrack[bID].dwSampleRate;        // [3] Filter the un-supported audio stream        switch(pBitsContent->StreamID.AVI.AudioTrack[bID].ESFormat)        {        // LLY2.17, support AAC audio format#if 0        case    PARSER_ESFMT_AAC: //???            // LLY1.02, set audio ID as HAL_THROW_AUDIO for un-support format            __bASTID=HAL_THROW_AUDIO;            DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "AAC audio\n");            break;#endif  // #if 0        case    PARSER_ESFMT_OGG: //???            // LLY1.02, set audio ID as HAL_THROW_AUDIO for un-support format            __bASTID=HAL_THROW_AUDIO;            DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "OGG audio\n");            break;        // LLY0.91, Support audio stream is WMA format        // Notice: set audio ID as non-exist temporally since DSP code don't support it.        case    PARSER_ESFMT_WMA_V1:        case    PARSER_ESFMT_WMA_V2:#ifdef  SUPPORT_WMA            // LLY1.05, assign AST ID as HAL_THROW_AUDIO while don't support WMA chip version            if( (__dwSupportFeature & SUPPORT_FEATURE_WMA)!= SUPPORT_FEATURE_WMA)            {                __bASTID=HAL_THROW_AUDIO;                DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "WMA audio\n");            }#else   // #ifdef SUPPORT_WMA            // LLY0.96, assign AST ID as HAL_THROW_AUDIO while don't support WMA            // To tell parser to skip the audio stream            __bASTID=HAL_THROW_AUDIO;            DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "WMA audio\n");#endif  // #ifdef SUPPORT_WMA            break;        // LLY1.20, skip the audio stream if PCM w/ mono        // Notice: must remove following preocedure after audio code is ready to support mono PCM        // LLY2.60, remove this procedure since audio code is ready to support PCM mono#if 0        case    PARSER_ESFMT_PCM:            if(pBitsContent->StreamID.AVI.AudioTrack[bID].bChannelNo==1)            {                __bASTID=HAL_THROW_AUDIO;                DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "PCM audio w/ mono \n");            }            break;#endif  // #if 0        // Grievous2.77, show message and discard bitstream while the ADPCM audio format is not supported.        case PARSER_ESFMT_MS_ADPCM:        case PARSER_ESFMT_DVI_ADPCM:        // Grievous2.78, add ALaw, MuLaw, AAC audio type when we have not supported yet.        case PARSER_ESFMT_PCM_ALAW:        case PARSER_ESFMT_PCM_MULAW:            __bASTID=HAL_THROW_AUDIO;            DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "ADPCM audio\n");            break;        case PARSER_ESFMT_AAC:            __bASTID=HAL_THROW_AUDIO;            DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "AAC audio\n");            break;        default:            break;        }    }    else    {        // LLY2.21, update audio stream ID base on parser reported ID        __bASTID=(pBitsContent->StreamID.MPEG.AudioTrack[bID].dwID)&0xF;#ifdef  DEBUG_AUDIO_ID        DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "__bASTID: %lx, parser ID: %lx, Idx: %lx\n", __bASTID,            pBitsContent->StreamID.MPEG.AudioTrack[bID].dwID, bID);#endif  // #ifdef DEBUG_AUDIO_ID    }}// LLY2.21 create ...//  ********************************************************************************//  Function    :   _UTL_GetBitsContent//  Description :   Get bitstream content and keep at global variables//  Arguments   :   bMode, specify the desired bits content mode//  Return      :   None//  ********************************************************************************void _UTL_GetBitsContent(BYTE bMode){    switch(bMode)    {    case    INFO_AUDIO:        // [1-1] Total AST number        // Notice: add protection while no audio stream exist -- LLY0.80        __bASTNs=(BYTE)pBitsContent->dwAudioTrackCount;        if(__bASTNs)        {            // [1-2] Assume to choose 1st audio stream ie. 0            __bASTNO=0;            // LLY2.21, remoe audio stream ID assignment procedure to _UTL_Update_Movie_AudioInfo()            // Since, the ID maybe different the index.            // Find 1st non-DTS audio stream first            // Notice: this procedure can't put @ _UTL_Update_Movie_AudioInfo(),            //         since it will be called while multi-audio switching.            //         And, find 1st non-DTS procedure is only need for normal playback.#ifdef  FIND_NODTS_AUDIO            while(__bASTNO < __bASTNs)            {                if(pBitsContent->StreamID.MPEG.AudioTrack[__bASTNO].ESFormat != PARSER_ESFMT_DTS)                {                    break;                }                else                {                    __bASTNO++;#ifdef  DEBUG_AUDIO_ID                    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Force change to next audio stream since DTS audio\n");#endif  // #ifdef DEBUG_AUDIO_ID                }            }            if(__bASTNO == __bASTNs)            {                __bASTNO=0;#ifdef  DEBUG_AUDIO_ID                DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Force restore to 1st audio since all DTS\n");#endif  // #ifdef DEBUG_AUDIO_ID            }#endif  // #ifdef FIND_NODTS_AUDIO            // LLY1.20, collect procedure toghther while update MP4/ AVI/ DivX/ Nero Digital AST information            _UTL_Update_Movie_AudioInfo(__bAttrPlayNew, __bASTNO);        }        else        {            // [1-2] Assume to set as un-exist audio stream ID            __bASTNO=0xFF;            // [1-3] Assume audio stream ID as skip            __bASTID=HAL_THROW_AUDIO;        }        // [1-4] Audio stream language code information        // Notice: assume it un-exist, and set is as 0xFFFF -- LLY0.90        __wA_LCD=0xFFFF;        break;    case    INFO_SPST:        // [2-1] Total SPST number        // Notice: add protection while no subpicture stream exist -- LLY0.80        __bSPSTNs=(BYTE)pBitsContent->dwSubtitleTrackCount;               // Grievous2.78, read internal subpicture stream total number        __bUTLSPTextMode = (BYTE)pBitsContent->dwSubtitleTrackCount;        if(__bSPSTNs)        {            // [2-2] Assume to choose 1st SPST stream, ie. 0            __bSPSTNO=0;        }        else        {            // [2-2] Assume to set as un-exist SPST stream ID            __bSPSTNO=0xFF;        }        // [2-3] SPST stream ID        // Let subpicture ID is same as subpicture stream index        // Then, parser will convert to corresponding subpicture ID automatically        __bSPSTID=__bSPSTNO;        // [2-4] SPST stream language code information        // Notice: assume it un-exist, and set is as 0xFFFF -- LLY0.90        __wSP_LCD=0xFFFF;        break;    case    INFO_AVI_VIDEO:        // Set video ID for DivX file        // [1] Throw the video case:        //     - video track count is zero -- LLY1.10        //     - not support DivX format chip -- LLY1.10        //     - resolution > 720*576 -- LLY0.85        // [2] Others: set the video ID as zero        __bVideoID=0x0;        if(pBitsContent->dwVideoTrackCount == 0)        {            __bVideoID=HAL_THROW_VIDEO;            DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Skip video since no video track\n");        }        else        {            // LLY2.55, keep video content format            __dwAVIVideoFMT = pBitsContent->StreamID.AVI.VideoTrack[__bVideoID].ESFormat;            // LLY2.38, add error protection while unknown AVI video format            if(__dwAVIVideoFMT == PARSER_ESFMT_UNKNOWN)            {                DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Skip the unknown video format\n");                __bVideoID=HAL_THROW_VIDEO;            }            else if( (__dwSupportFeature & SUPPORT_FEATURE_DIVX)!= SUPPORT_FEATURE_DIVX )            {                switch(__dwAVIVideoFMT)                {                case    PARSER_ESFMT_DIVX311:                // Marked by J500CSC, 238a                // Treat DivX 4/5 as normal MPEG-4 streams                //case    PARSER_ESFMT_DIVX4:                //case    PARSER_ESFMT_DIVX5:                    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Skip the DivX 311 format file since don't support DivX feature\n");                    __bVideoID=HAL_THROW_VIDEO;                    break;                default:                    break;                }            }            else            {                // LLY2.18, using negative define for DivX 311 supporting#ifdef  NO_DIVX_311                if(__dwAVIVideoFMT== PARSER_ESFMT_DIVX311)                {                    __bVideoID=HAL_THROW_VIDEO;                    DBG_Printf(DBG_THREAD_CHEERDVD, DBG_INFO_PRINTF, "Skip video since don't support DivX311 for this model\n");                }                else#endif  // #ifdef NO_DIVX_311                {                    if( (pBitsContent->dwWidth > 720) || (pBitsContent->dwHeight > 576) )                    {     

⌨️ 快捷键说明

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