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

📄 mm_play.c

📁 ct952 source code use for Digital Frame Photo
💻 C
📖 第 1 页 / 共 5 页
字号:
                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 + -