📄 mm_play.c
字号:
if(!__bSameItem)
{
__wPrevPlayItem=__wPlayItem;
__wPrevPlayDir=__MMPlayingItem.wDirID;
}
}
break;
case MM_STAGE_PLAYEND:
#ifdef SUPPORT_JPEG_AUDIO_PLAYING
if ((__bMMJPEGAudioMode && __bMMAudioPlayEnd) || (!__bMMJPEGAudioMode && (__btPlayEnd == TRUE)))
#else
if (__btPlayEnd == TRUE)
#endif //SUPPORT_JPEG_AUDIO_PLAYING
{
// wyc0.75, make time-out to 15s because our audio buffer can play about 10s when buffer full. So wait 15s for
// proc2 to decode these data when parser sent bits completed. Also wait audio remainder to 1000 because minimun
// audio remainder is about 700 in CT909 now.
if ((OS_GetSysTimer() - __dwBuffEmptyTime) < _dwMMTriggerEmptyTime)
{
#ifdef SUPPORT_WMA
if(__bAttrPlay==ATTR_WMA)
{
// wyc2.77-909p, patch the Joey's code.
HAL_ReadInfo(HAL_INFO_AUDIO1_REMAIN, &_dwMMTemp);
HAL_ReadAM(HAL_AM_WMA_BLOCK_ALIGN, &_dwMMTemp1);
HAL_ReadAM(HAL_AM_FRAME_SAMPLE_SEC_CNT, &dwSample);
//kevin1.07, fix WMA low bitrate play ~sec and then jump to next file
if ((_dwMMTemp < _dwMMTemp1+64) && (dwSample==dwPreSample) && (dwSample!=0))
{
if (dwTimeStamp == 0xffffffff)
{
__dwMMAudioPreGetTime = OS_GetSysTimer();
dwTimeStamp = __dwMMAudioPreGetTime;
}
}
else
{
dwPreSample = dwSample;
OS_YieldThread();
}
}
else //MP3/MP2
#endif //#ifdef SUPPORT_WMA
{
HAL_ReadInfo(HAL_INFO_AUDIO_REMAIN, &_dwMMTemp);
// Choose 3000 is because MP3 audio remainder maybe remain 1200 DWORDs. So increase it to avoid not time out.
// wyc1.05-909, use __dwPreGetTime to delay 1s after audio almost empty and can let user have time to go prev file
// when current file is un-playable.
#ifndef DOLBY_CERTIFICATION
if ((_dwMMTemp < 2000) && (__dwMMAudioPreGetTime == 0xFFFFFFFF)) //kevin1.20, avoid MP3 low bit rate file from proceeding to next file too early
#else
if ((_dwMMTemp < 1000) && (__dwMMAudioPreGetTime == 0xFFFFFFFF)) //kevin1.20, avoid playing .AC3 file from proceeding to next file too early
#endif //DOLBY_CERTIFICATION
{
__dwMMAudioPreGetTime = OS_GetSysTimer();
}
else
{
OS_YieldThread();
}
}
if (((OS_GetSysTimer() - __dwMMAudioPreGetTime) >= COUNT_1_SEC) && (__dwMMAudioPreGetTime != 0xFFFFFFFF))
{
#ifdef SUPPORT_JPEG_AUDIO_PLAYING
if (__bMMJPEGAudioMode)
{
__bMMAudioStage=MM_STAGE_NEXT_ITEM;
}
else
#endif //SUPPORT_JPEG_AUDIO_PLAYING
{
__bMMStage=MM_STAGE_NEXT_ITEM;
}
}
}
else
{
#ifdef SUPPORT_JPEG_AUDIO_PLAYING
if (__bMMJPEGAudioMode)
{
__bMMAudioStage=MM_STAGE_NEXT_ITEM;
}
else
#endif //SUPPORT_JPEG_AUDIO_PLAYING
{
__bMMStage=MM_STAGE_NEXT_ITEM;
}
}
}
else
{
#ifdef DOLBY_CERTIFICATION
if (bShowDolbySurrFlag)
{
if( HAL_ReadInfo(HAL_INFO_AUDIOFREQ, &_dwMMTemp)) //kevin1.05, check already decoding then shows surround status
{
HAL_ReadAM(HAL_AM_DOLBY_SURR_FLAG, &_dwMMTemp);
switch (_dwMMTemp)
{
case 0:
strcpy(__bMsgString, "not ind.");
bShowDolbySurrFlag = false;
OSD_Output(MSG_STRING, NULL_0, 0x5);
break;
case 1:
strcpy(__bMsgString, "not surr");
bShowDolbySurrFlag = false;
OSD_Output(MSG_STRING, NULL_0, 0x5);
break;
case 2:
strcpy(__bMsgString, "surr");
bShowDolbySurrFlag = false;
OSD_Output(MSG_STRING, NULL_0, 0x5);
break;
case 3: //the default value after audio reset
break;
}
}
}
#endif //DOLBY_CERTIFICATION
#ifdef SUPPORT_JPEG_AUDIO_PLAYING
if (!__bMMJPEGAudioMode)
#endif //SUPPORT_JPEG_AUDIO_PLAYING
{
if (!_bMMAudioDisplayInfo)
{
if (!(__bCheckAudioType & CHECK_AUDIO_FREQ))
{
_bMMAudioDisplayInfo = TRUE;
if (__bAttrPlay == ATTR_MP3)
OSDMM_Update(OSDMM_MSG_UPDATE_HELP, OSDMM_HELP_TYPE_MP3);
else if (__bAttrPlay == ATTR_MP2)
OSDMM_Update(OSDMM_MSG_UPDATE_HELP, OSDMM_HELP_TYPE_MP2);
#ifdef SUPPORT_WMA
else if (__bAttrPlay == ATTR_WMA)
OSDMM_Update(OSDMM_MSG_UPDATE_HELP, OSDMM_HELP_TYPE_WMA);
#endif //SUPPORT_WMA
}
}
}
#ifdef SUPPORT_JPEG_AUDIO_PLAYING
if (__bMMJPEGAudioMode)
{
#ifdef SUPPORT_WMA
bAudioType = UTL_CheckBGPlayItemMode(__wBGPlayItem);
// Configurate audio only playback mode, and issue command
if(bAudioType==ATTR_WMA)
{
HAL_ReadAM(HAL_AM_WMA_L1_DECODE, &__dwTemp);
if (__dwTemp == 1) //Can't decode
{
wBackupPlayingItemDir = __MMBackgroundPlayingItem.wDirID;
wBackupPlayingItemIndex = __MMBackgroundPlayingItem.wIndex;
_MM_GetNextPlayAudioFile();
if ((__MMBackgroundPlayingItem.wDirID == wBackupPlayingItemDir) && (__MMBackgroundPlayingItem.wIndex == wBackupPlayingItemIndex))
{
//Only 1 WMA file and the file can't be decoded.
UTL_StopAudio();
__bMMSkipAudio = TRUE;
UTL_StreamContinue(0);
__bMMAudioStreamPause = TRUE;
__bMMVideoStreamPause = FALSE;
__bMMStartJPEGAudioTrigger = FALSE;
}
}
}
#endif //SUPPORT_WMA
if (PARSER_QueryEvent(BG_ITEM_STREAM_ID, PARSER_EVENT_COMPLETED, TRUE)) //The stream id of the background item is 1.
{
__bMMAudioPlayEnd = TRUE;
dwTimeStamp = 0xffffffff;
__dwBuffEmptyTime = OS_GetSysTimer();
}
}
else
#endif //SUPPORT_JPEG_AUDIO_PLAYING
{
if (PARSER_QueryEvent(0,PARSER_EVENT_COMPLETED, TRUE))
{
__btPlayEnd = TRUE;
dwTimeStamp = 0xffffffff;
__dwBuffEmptyTime = OS_GetSysTimer();
}
}
OS_YieldThread();
}
break;
case MM_STAGE_NEXT_ITEM:
#ifdef SUPPORT_JPEG_AUDIO_PLAYING
if (__bMMJPEGAudioMode)
{
__bMMAudioStage = MM_STAGE_AUDIO_STAGE_INIT;
__bMMAudioPlayEnd = FALSE;
// LLY2.53, stop audio decoder playback related procedure.
UTL_StopAudio();
_MM_GetNextPlayAudioFile();
}
else
#endif //SUPPORT_JPEG_AUDIO_PLAYING
{
__btPlaying=FALSE;
__bFWKey=KEY_NEXT;
}
break;
default:
break;
}
#ifdef SUPPORT_JPEG_AUDIO_PLAYING
if (__bMMJPEGAudioMode)
{
_MM_SourceControl();
}
#endif //SUPPORT_JPEG_AUDIO_PLAYING
}
void _MM_ImageTrigger(void)
{
WORD wJPEGAbortTime;
#ifdef SUPPORT_AUTO_ROTATION
_MM_DetectAutoRotate();
#endif //SUPPORT_AUTO_ROTATION
switch(__bMMStage)
{
case MM_STAGE_PREPAREINFO:
__bLOGO = LOGO_JPEG;
if (__dwMMTriggerMode != MM_IMAGE_TRIGGER_MODE)
{
#ifdef JPG_SINGLE_FRAME_BUFFER
__HALJPEGSetting.bFrameBuffer = 1;
#endif //JPG_SINGLE_FRAME_BUFFER
__dwMMTriggerMode = MM_IMAGE_TRIGGER_MODE;
__dwMMJPGDispOK = TRUE;
}
// Record time for trigger audio error concealment when playing abnormal.
__dwPreGetTime=OS_GetSysTimer();
__dwMMJPGBuffEmptyTime = 0xFFFFFFFF;
__bMMrogressCnt = 0;
if (__dwMMJPEGPreview)
{
__bHALJPEGEffect=HALJPEG_EFFECT_NONE;
#ifndef IMAGE_FRAME_SETUP
__bMMEffectIdx = HALJPEG_EFFECT_NONE;
#endif //#ifndef IMAGE_FRAME_SETUP
if ((__bTVType == SETUP_SCREEN_TV_SYSTEM_NTSC) || (__bTVType == SETUP_SCREEN_TV_SYSTEM_PAL_M))
{
__HALJPEGSetting.wDisplayStartH = MM_JPEG_PREVIEW_NTSC_START_H;
__HALJPEGSetting.wDisplayStartV = MM_JPEG_PREVIEW_NTSC_START_V;
__HALJPEGSetting.wDisplayWidth = MM_JPEG_PREVIEW_NTSC_WIDTH;
__HALJPEGSetting.wDisplayHeight = MM_JPEG_PREVIEW_NTSC_HEIGHT;
}
else //PAL
{
__HALJPEGSetting.wDisplayStartH = MM_JPEG_PREVIEW_PAL_START_H;
__HALJPEGSetting.wDisplayStartV = MM_JPEG_PREVIEW_PAL_START_V;
__HALJPEGSetting.wDisplayWidth = MM_JPEG_PREVIEW_PAL_WIDTH;
__HALJPEGSetting.wDisplayHeight = MM_JPEG_PREVIEW_PAL_HEIGHT;
}
}
else
{
__HALJPEGSetting.wDisplayStartH = MM_JPEG_FRAME_START_H;
__HALJPEGSetting.wDisplayStartV = MM_JPEG_FRAME_START_V;
__HALJPEGSetting.wDisplayWidth = MM_JPEG_FRAME_WIDTH;
__HALJPEGSetting.wDisplayHeight = MM_JPEG_FRAME_HEIGHT;
MM_CompleteJPGEffect(FALSE);
#ifdef JPG_SINGLE_FRAME_BUFFER
// wyc2.30-909s, only do the copy when decode & display OK. Otherwise the frame 2 is not ready and will see garbage image.
if ((__bHALJPEGEffect!=HALJPEG_EFFECT_NONE) && (__dwMMJPGDispOK))
{
#ifdef IMAGE_FRAME_SETUP
if (!__bMMFirstJPEGPlaying)
#endif //IMAGE_FRAME_SETUP
{
HALJPEG_CopyPictureToDisplayBuffer(JPEG_EFFECT_DISP_BUFFER_2_TO_0);
__HALJPEGSetting.bFrameBuffer = 0;
__bHALJPEGEffect = HALJPEG_EFFECT_NONE;
HALJPEG_Display(__HALJPEGSetting.bFrameBuffer);
OS_DelayTime(COUNT_50_MSEC);
}
}
#endif //JPG_SINGLE_FRAME_BUFFER
#ifdef IMAGE_FRAME_SETUP
if (!__bMMFirstJPEGPlaying)
{
__bHALJPEGEffect= __bMMEffectIdx;
}
else
{
__bHALJPEGEffect= HALJPEG_EFFECT_NONE; //The first JPEG can't do effect.
}
#else
__bHALJPEGEffect= __bMMEffectIdx; //change effect only when dsiplay is OK.
#endif //IMAGE_FRAME_SETUP
DISP_ShowEffect(SLIDESHOW_RESET, 0, __HALJPEGSetting.bFrameBuffer); //Reset the Display's state for effect.
// wyc2.38-909s, clear it when go different play item.
if (__bZoomFactor != VIEW_NORMAL)
{
__bZoomFactor = VIEW_NORMAL;
}
}
__HALJPEGSetting.bOperation = HALJPEG_OPERATION_I;
__HALJPEGSetting.dwBackgroundColor = HALJPEG_SLIDESHOW_BACKGROUND_COLOR;
#ifdef JPG_SINGLE_FRAME_BUFFER
if (__dwMMJPEGPreview== TRUE)
{
__HALJPEGSetting.bFrameBuffer = 1;
}
else
{
// wyc2.21a-909s, when play from preview to slide show mode, need to clear frame 0 and display frame 0 to avoid to avoid seeing garbage image.
if (__HALJPEGSetting.bFrameBuffer == 1)
{
HAL_ClearScreen(HAL_COLOR_BLACK, HAL_CLEAR_SCREEN_JPEG, HAL_DISP_FRAME0);
__HALJPEGSetting.bFrameBuffer = 0;
}
// wyc2.21-909S, tell JPG decoder to do effect mode.
if (__bHALJPEGEffect != HALJPEG_EFFECT_N
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -