📄 real_interface.c
字号:
#include "include.h"
#include "TypeDef.h"
#include "RealFun.h"
#include "Fs_fat.h"
#include "Audio_globals.h"
#include "AudioControl.h"
#include "videowin.h"
extern volatile short RealExitState;
extern INT16U AudioPlayState;
extern AudioInOut_Type AudioIOBuf;
extern long long volatile real_timer_tick;
extern volatile short FramesInBuff;
unsigned long RealPauseTime;
unsigned short RealAudioExist;
unsigned short Real_InitEnable;
unsigned short Real_SeekEnable;
unsigned long PosSeekVal;
unsigned short Real_FrameTimerEn;
extern unsigned long Real_GetCurrentVideoSliceTime(void);
extern UINT32 CurrentTime;
extern UINT32 TotalTime;
extern UINT32 CurrentTimeLast;
extern UINT16 VideoStatue;
extern UINT16 VideoDspStatue;
extern UINT32 RVGetTotalTimeLength(void);
extern UINT32 VideoUIBarPaint(void);
extern UINT32 VideoWaitPicStop(void);
extern UINT32 VideoWaitPicStart(void);
UINT8 FFWSign = 0;
UINT8 RealIsrCloseFlag = 0;
BOOLEAN RealLowTaskMsgCallBack(ROCK_MSG_ID id, void *msg)
{
if (Real_InitEnable)
{
if (id == AS_GUVI_VideoInit)
Real_InitEnable = 0;
else
return TRUE;
}
switch (id)
{
case AS_GUVI_VideoInit:
INPUT_DISABLE();
VideoStatue = Video_Init;
VideoWaitPicStart();
if (RealInit() == FALSE)
{
VideoWaitPicStop();
INPUT_ENABLE();
RockOSSendMsg(MBGUI, AS_VIGU_VideoDecodeEnd, (void*) 2);
break;
}
FileFuncInit();
RealAudioExist = VideoDecAudioStart();
if (RealAudioExist)
Real_SeekEnable = (GetIsRASeekable() && GetIsRVSeekable());
else
Real_SeekEnable = GetIsRVSeekable();
if (!RealAudioExist)
RockOSSendMsg(MBVIDEO, AS_GUVI_RealDisplayStart, NULL);
break;
case AS_GUVI_VideoFillBuf:
FillBitStreamForRealVideo((int)msg);
CurrentTime = RealGetShowedTime(); //// huangzf
TotalTime = RVGetTotalTimeLength();
if (CurrentTime > 1000)
{
FFWSign = 1;
}
if (CurrentTimeLast != CurrentTime / 1000)
{
RockOSSendMsg(MBVIDEO, AS_GUVI_VideoPaint, NULL);
CurrentTimeLast = CurrentTime / 1000;
}
break;
case AS_GUVI_RealDisplayStart:
// 4ms per tick, by Vincnet Hisung , Nov 19,2007
if (Real_FrameTimerEn)
{
VideoWaitPicStop();
INPUT_ENABLE();
VideoStatue = Video_Being;
StartHWVideoTimer(4000, real_timer_counter);
RealIsrCloseFlag = 1;
Real_FrameTimerEn = 0;
}
break;
case AS_GUVI_VideoPosSeek:
if (!Real_SeekEnable)
break;
if (RealIsrCloseFlag == 0)
{
StartHWVideoTimer(4000, real_timer_counter);
RealIsrCloseFlag = 1; // 中断开
}
if (RealAudioExist)
AudioPlayState = Audio_State_FFW;
Real_DecodeState = REAL_DECODE_STATE_POSSEEKSTART;
PosSeekVal = (unsigned long)msg;
//Real_CurrentSeekingTime = Real_GetCurrentVideoSliceTime();
Codec_DACMute(); // add by huangzf 08.1.25
I2sStop();
HDMA_Stop(0);
SyncDisable();
RV_SeekEnd_AudioEN = 1;
VideoStatue = Video_Being;
break;
case AS_GUVI_VideoFFDStart:
if (!Real_SeekEnable)
break;
if (Real_DecodeState == REAL_DECODE_STATE_FFDSEEK)
break;
if (RealIsrCloseFlag == 0)
{
StartHWVideoTimer(4000, real_timer_counter);
RealIsrCloseFlag = 1; // 中断开
}
if (RealAudioExist)
AudioPlayState = Audio_State_FFW;
VideoDspStatue = Video_FFW;
Real_DecodeState = REAL_DECODE_STATE_FFDSEEK;
Real_CurrentSeekingTime = Real_GetCurrentVideoSliceTime();
SyncDisable();
VideoStatue = Video_FFW;
RV_SeekEnd_AudioEN = 1;
break;
case AS_GUVI_VideoFFWStart:
if (!Real_SeekEnable)
break;
if (Real_DecodeState == REAL_DECODE_STATE_FFWSEEK)
break;
if (RealIsrCloseFlag == 0)
{
StartHWVideoTimer(4000, real_timer_counter);
RealIsrCloseFlag = 1; // 中断开
}
if (RealAudioExist)
AudioPlayState = Audio_State_FFD;
VideoDspStatue = Video_FFD;
Real_DecodeState = REAL_DECODE_STATE_FFWSEEK;
Real_CurrentSeekingTime = Real_GetCurrentVideoSliceTime();
SyncDisable();
VideoStatue = Video_FFD;
RV_SeekEnd_AudioEN = 1;
break;
case AS_GUVI_VideoFFDEnd:
if (!Real_SeekEnable)
break;
if (Real_DecodeState != REAL_DECODE_STATE_FFDSEEK)
break;
if (RealAudioExist)
real_timer_tick = 0x7fff0000;
else
real_timer_tick = RealGetShowedTime();
while (FramesInBuff);
Real_DecodeState = REAL_DECODE_STATE_FFDEND;
VideoStatue = Video_Being;
break;
case AS_GUVI_VideoFFWEnd:
if (!Real_SeekEnable)
break;
if (Real_DecodeState != REAL_DECODE_STATE_FFWSEEK)
break;
if (RealAudioExist)
real_timer_tick = 0x7fff0000;
else
real_timer_tick = RealGetShowedTime();
while (FramesInBuff);
Real_DecodeState = REAL_DECODE_STATE_FFWEND;
VideoStatue = Video_Being;
break;
case AS_GUVI_VideoStartAudio:
if (RealAudioExist)
{
if (Real_SeekEnable)
while (CodecSeek((unsigned long)msg, 0) == 0);
real_timer_tick = 0;//(unsigned long)msg - GetRASeekedTime();
AudioInitList();
memset(AudioIOBuf.PCMBuf, 0, AUDIO_OUT_BUF_NUM*AUDIO_OUT_BUF_LEN*2);
// RockOSSendMsg(MBAUDIO,AS_GUAU_VolumeSet,(void*)OutputVolume);
Codec_SetVolumet(OutputVolume);
I2sStart(I2S_Start_Tx);
Codec_DACUnMute();
AudioPlayState = Audio_State_Play;
RockOSSendMsg(MBAUDIO, AS_GUAU_Playing, (void*)NULL);
AudioOutBufSwitch();
}
else
real_timer_tick = (unsigned long)msg;
break;
case AS_GUVI_VideoPauseStart:
if (Real_DecodeState == REAL_DECODE_STATE_PAUSE)
break;
VideoStatue = Video_Pause;
RealPauseTime = real_timer_tick;
Timer_PowerOffDeinit(0);
RealIsrCloseFlag = 0; // 中断关闭
Real_DecodeState = REAL_DECODE_STATE_PAUSE;
if (RealAudioExist)
{
AudioPlayState = Audio_State_Pause;
RockOSSendMsg(MBAUDIO, AS_GUAU_Pause, (void*)NULL);
}
break;
case AS_GUVI_VideoPauseEnd:
if (Real_DecodeState != REAL_DECODE_STATE_PAUSE)
break;
real_timer_tick = RealPauseTime;
Real_DecodeState = REAL_DECODE_STATE_PLAYING;
StartHWVideoTimer(4000, real_timer_counter);
RealIsrCloseFlag = 1; // 中断开
if (RealAudioExist)
{
I2sStart(I2S_Start_Tx);
Codec_DACUnMute();
AudioPlayState = Audio_State_Play;
RockOSSendMsg(MBAUDIO, AS_GUAU_Playing, (void*)NULL);
AudioOutBufSwitch();
}
VideoStatue = Video_Being;
break;
case AS_GUVI_VideoStop:
{
long ExitCnt = 0;
MailBoxMSG Msg;
VideoStatue = Video_Stop;
INPUT_DISABLE();
Real_InitEnable = 1;
RealExitState = 0;
Msg.CMD = MSG_ARM2ZSP_EXITDECODER;
SendMsg2ZSp(&Msg);
while (RealExitState == 0)
{
if ((++ExitCnt) > 5000)
break;
};
RealVideoExit();
// Screen_UpdataFinish(); /// huangzf
// if(PreNextOrStop==FALSE)
if (msg == FALSE)
RockOSSendMsg(MBGUI, AS_GUVI_VideoNext, (UINT32 *)VIDEO_FILE_DIRECTION_NEXT);
INPUT_ENABLE();
}
break;
case AS_GUVI_VideoPaint:
// if (Real_InitEnable==1)
// return FALSE;
VideoUIBarPaint();
break;
#ifdef TVOUT_PANEL
case AS_GUVI_VideoTvout:
RealTVoutChange();
break;
#endif
default:
return FALSE;
}
return TRUE;
}
EXT char *yuvBuf;
EXT short PreIndex;
EXT short Real_PicWidth;
EXT short Real_PicHeight;
#define REAL_YUV_BUFFER_SIZE (720*576*3/2)
int Real_GetRkYUVInfo(char **pYuv, long *pWidth, long *pHeight)
{
if ((yuvBuf == NULL) || (PreIndex == -1))
return 0;
*pYuv = (char*)((unsigned long)(yuvBuf) + (unsigned long)REAL_YUV_BUFFER_SIZE * (unsigned long)(PreIndex));
*pWidth = Real_PicWidth;
*pHeight = Real_PicHeight;
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -