📄 utl.c
字号:
// [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 + -