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

📄 real_interface.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 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 + -