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

📄 movvideocontrl.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
📖 第 1 页 / 共 2 页
字号:
        }
    }

    /*    Load code and start decoder.     */
    switch (gMovFile.vFormat)
    {
	    case VIDEO_CODEC_LIB_MP4V:
            if (VideoDecoderLoad(sMovVideoBufRemain, "MP4V"))
            {
                return -1;
            }

            break;

        case VIDEO_CODEC_LIB_H263 :
            if (VideoDecoderLoad(sMovVideoBufRemain, "H263"))
            {
                return -1;
            }

            break;

        default :
            return -1;


    }

    /*   Start frame diaplay timer.       */
    MovFrameDispCtrl(NULL);
    movPlayState = MOV_STATE_PALYING;
    return 0;
}

/********************************************************************************************
*	Func:
*		MovGetTotalTime()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

uint32 MovGetTotalTime(void)
{
    return gMovFile.length;
}

/********************************************************************************************
*	Func:
*		MovFFD()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/
int MovFFD(unsigned int step)
{
    /* do nothing when video is stoped. */
    if ((movPlayState == MOV_STATE_STOP)
       || (movPlayState == MOV_STATE_INITIALIZING))
    {
        return 0;
    }

    if (gSkipFlag == FALSE)
    {
        movLastSeekTime = MovGetCurTime();
        gSkipFlag = TRUE;
    }

    movLastSeekTime += MOV_FFD_FFW_INTERVAL;

    if (movLastSeekTime > gMovFile.length)
    {
        movLastSeekTime = gMovFile.length;

    }

    movPlayState = MOV_STATE_FFD;

    if (MovSeekVideoNextISample2Time(gMovFilePointer, &gMovFile, movLastSeekTime) != 0x0)
    {
        //movPlayState = MOV_STATE_PALYING;
        return -1;
    }

    /* send ffd/ffw msg to dsp. */
    SendOperationMsg(VIDEO_OPERATION_FFD_FFW);
    gVideoBeingSkip = FFD_STATE;

    /*while (IsYuvReady(curFrame) == 0x1)
    {
        MovShowVideoFrame();
    }*/
    return 0;
}


/********************************************************************************************
*	Func:
*		MovFFW()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/
int MovFFW(unsigned int step)
{
    /* do nothing when video is stoped. */
    if ((movPlayState == MOV_STATE_STOP)
       || (movPlayState == MOV_STATE_INITIALIZING))
    {
        return 0;
    }

    if (gSkipFlag == FALSE)
    {
        movLastSeekTime = MovGetCurTime();
        gSkipFlag = TRUE;
    }

    movLastSeekTime -= MOV_FFD_FFW_INTERVAL;

    if (movLastSeekTime < 0x0)
    {
        movLastSeekTime = 0x0;
    }

    movPlayState = MOV_STATE_FFW;

    if (MovSeekVideoPreISample2Time(gMovFilePointer, &gMovFile, movLastSeekTime) != 0x0)
    {
        //movPlayState = MOV_STATE_PALYING;
        return -1;
    }

    /* send ffd/ffw msg to dsp. */
    SendOperationMsg(VIDEO_OPERATION_FFD_FFW);
    gVideoBeingSkip = FFW_STATE;

    /*while (IsYuvReady(curFrame) == 0x1)
    {
        MovShowVideoFrame();
    }*/

    return 0;
}

/********************************************************************************************
*	Func:
*		MovResume()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

int MovResume(void *param)
{
    int keyFrameNo = 0x0;

    /* do nothing if current state is not ffd or ffw. */
    if ((movPlayState != MOV_STATE_FFD) && (movPlayState != MOV_STATE_FFW))
    {
        return -1;
    }

    movLastSeekTime = 0x0;
    gSkipFlag = FALSE;

    if (movPlayState == MOV_STATE_FFD)
    {
        /* FFD */
        keyFrameNo = MovVideoGetNextISample(gMovFilePointer, &gMovFile, gMovFile.curVideoSampleNo);
    }
    else
    {
        /* FFW */
        keyFrameNo = MovVideoGetPreISample(gMovFilePointer, &gMovFile, gMovFile.curVideoSampleNo);
    }

    if (keyFrameNo < 0x0)
    {
        /* syn audio to video. */
        OSSchedLock();
        MovSynAudio2Video(gMovFile.curVideoSampleNo);
        gBeingSkip = RESUME;
        OSSchedUnlock();
        movPlayState = MOV_STATE_PALYING;
        return -1;
    }
    else
    {
        /* stop video frames display. */
        Timer_PowerOffDeinit(0);
        DisableDecoder();
        MovShareDataInit();
        MovGetVideoISampleinf(gMovFilePointer, &gMovFile, keyFrameNo);

        /* syn audio to video. */
        OSSchedLock();
        MovSynAudio2Video(gMovFile.curVideoSampleNo);
        gBeingSkip = RESUME;
        gVideoBeingSkip = RESUME;
        OSSchedUnlock();

        switch (gMovFile.vFormat)
        {
            case VIDEO_CODEC_LIB_MP4V :
                if (VideoDecoderLoad(sMovVideoBufRemain, "MP4V"))
                {
                    return -1;
                }

                break;

            case VIDEO_CODEC_LIB_H263 :
                if (VideoDecoderLoad(sMovVideoBufRemain, "H263"))
                {
                    return -1;
                }

                break;

            /*case VIDEO_CODEC_LIB_H264 :
                if (VideoDecoderLoad(sMovVideoBufRemain, "H264"))
                {
                    return -1;
                }

                break;*/

            default :
                return -1;

        }

        /* start video frames display . */
        MovFrameDispCtrl(0);
        movPlayState = MOV_STATE_PALYING;
    }

    return 0;
}

/********************************************************************************************
*	Func:
*		MovPlayPause()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

int MovPlayPause(void)
{
    if ((movPlayState == MOV_STATE_STOP) || (movPlayState == MOV_STATE_INITIALIZING))
    {
        return FALSE;
    }

    if (movPlayState == MOV_STATE_PAUSE)
    {
        /* Start frame display timer. */
        MovFrameDispCtrl(0);
        movPlayState = MOV_STATE_PALYING;
        return FALSE;
    }
    else
    {
        /* Stop frame display timer. We may set DSP idle here to save power. */
        Timer_PowerOffDeinit(0);
        movPlayState = MOV_STATE_PAUSE;
        return TRUE;
    }
}

/********************************************************************************************
*	Func:
*		MovVideoSeek()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

int MovVideoSeek(long msTime)
{
    if ((movPlayState != MOV_STATE_PALYING)
        && (movPlayState != MOV_STATE_PAUSE)
        && (movPlayState != MOV_STATE_INITIALIZING))
    {
        return 0;
    }

    /* seek video sample to time. */
    if (MovSeekVideoNextISample2Time(gMovFilePointer, &gMovFile, msTime) != 0x0)
    {
        return -1;
    }

    if ((gMovFile.vFormat == VIDEO_CODEC_LIB_MP4V)
       || (gMovFile.vFormat == VIDEO_CODEC_LIB_H263))
    {
        MovGetVideoISampleinf(gMovFilePointer, &gMovFile, skipToSampleNo);
    }

    if (movPlayState != MOV_STATE_INITIALIZING)
    {
        /* stop video frames display. */
        Timer_PowerOffDeinit(0);
        DisableDecoder();
        MovShareDataInit();

        /* syn audio to video. */
        OSSchedLock();
        MovSynAudio2Video(gMovFile.curVideoSampleNo);
        gBeingSkip = SEEK_TIME;
        gVideoBeingSkip = SEEK_TIME;
        OSSchedUnlock();

        switch (gMovFile.vFormat)
        {
            case VIDEO_CODEC_LIB_MP4V :
                if (VideoDecoderLoad(sMovVideoBufRemain, "MP4V"))
                {
                    return -1;
                }

                break;

             case VIDEO_CODEC_LIB_H263 :
                if (VideoDecoderLoad(sMovVideoBufRemain, "H263"))
                {
                    return -1;
                }

                break;

             /*case VIDEO_CODEC_LIB_H264 :
                if (VideoDecoderLoad(sMovVideoBufRemain, "H264"))
                {
                    return -1;
                }

                break;*/

            default :
                return -1;

         }

         //movTimerCount = msTime;

         /* start video frames display . */
         MovFrameDispCtrl(0);
    }

    return 0;
}

/********************************************************************************************
*	Func:
*		MovGetCurTime()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

uint32 MovGetCurTime(void)
{
    if ((movPlayState == MOV_STATE_FFD) || (movPlayState == MOV_STATE_FFW))
    {
        {
           uint32 duration = 0x0;
           uint32 msTime = 0x0;

           duration = MovGetVideoFrameTime(gMovFilePointer, &gMovFile, gMovFile.curVideoSampleNo);
           msTime = ((duration / gMovFile.videoTimeScale) * 1000) +
                  (((duration % gMovFile.videoTimeScale) * 1000) / gMovFile.videoTimeScale);
           return msTime;
        }
    }
    else
    {
        return MovDispTime;
    }
}

/********************************************************************************************
*	Func:
*		MovGetYuvAddr()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

int MovGetYuvAddr(char **pYuv)
{
    if (lastYuvBufId < 0)
    {
	    return 0;
    }

	*pYuv = sMovyuvBuf + lastYuvBufId * MOV_YUV_BUFFER_SIZE;
    return 1;
}

/********************************************************************************************
*	Func:
*		MovGetResolution()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

int MovGetResolution(long *pWidth, long *pHeight)
{
    *pWidth = (gMovFile.width + 15) & 0xfff0;
    *pHeight = (gMovFile.height + 15) & 0xfff0;
	return 0;
}

/********************************************************************************************
*	Func:
*		MovGetDecStatus()
*	Description:
*
*	Param:
*
*	Return:
*
*
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/
short MovGetDecStatus(void)
{
    if ((movPlayState == MOV_STATE_STOP) || (movPlayState == MOV_STATE_INITIALIZING))
    {
        return 0;
    }
    else
    {
        return GetDecStatus();
    }
}

/********************************************************************************************
*	Func:
*		MovIsLastFrame()
*	Description:
*       Check if is last video frame or not?
*	Param:
*
*	Return:
*	    0: it is not the last frame.
*		1: it is the last frame.
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/

int MovIsLastFrame(void *param)
{
    if ((movPlayState  != MOV_STATE_PALYING) || (sMovTimeOut == 0) || (GetDecStatus() == MOV_DEC_EXIT))
    {
        return 1;
    }

    sMovTimeOut--;
    return 0;
}


/********************************************************************************************
*	Func:
*		MovGetAudioData()
*	Description:
*
*	Param:
*
*	Return:
*	    0:   OK.
*		-1:  Error.
*	Author:
*		guosl
*	Date:
*		2008-5-16	10:30
*	Log:
*
********************************************************************************************/
int MovGetAudioData(char *buffer, DWORD size)
{
    if (movPlayState == MOV_STATE_STOP)
    {
        return 0;
    }

    if (MovAudioGetDataToSDRAM(gMovAudioFilePointer, &gMovFile, buffer, &size) >= 0)
    {
        isAudioPlayEnd = FALSE;
        return size;
    }
    else
    {
        isAudioPlayEnd = TRUE;
        memset(buffer, 0, size);
        return 0;
    }

}



#ifdef TVOUT_PANEL
extern DWDMALLP     gLLPList[ ][480];       // LCD刷屏接口用
extern BACKGRND                    gScreen[2];
extern void ReCreat(void);
void MovTVoutChange(void)
{
    TVOUTPARA TVoutPara;
    TVoutPara.Type = TV_VEDIO;
    TVoutPara.Mode = TV_PAL50;
    TVoutPara.Size = TV_LARGE;
    TVoutPara.Switch = LCD_TVOUT;
    if (Screen_GetType() == TVOUT)
    {
        TVoutPara.Oddtion.Status = TV_Standby;
        Screen_SetTvout(TVOUT_Status, &TVoutPara, 0, 0);
#ifdef MCU_PANEL
        Screen_Configure(gLcdW, gLcdH, MCULCD, &TVoutPara);
#else
        Screen_Configure(gLcdW, gLcdH, RGBLCD, &TVoutPara);
#endif
        Screen_CreatRGB(&gScreen[0], &gLLPList[0][0], (uint32)gGuiDspLcdTransScreen0, gLcdW, gLcdH);
        Screen_CreatRGB(&gScreen[1], &gLLPList[1][0], (uint32)gGuiDspLcdTransScreen1, gLcdW, gLcdH);
        MovCreateVideoScreen();
    }
    else
    {
        //Screen_MCUIFUpdateFinish();
        while (Screen_GetMCUIFStatus() == BUSY);
        BL_SetBright(BL_DARK);
        Screen_Display(OFF);
        Screen_Configure(TVOUT_VIDEO_W, TVOUT_VIDEO_H, TVOUT, &TVoutPara);
        MovCreateVideoScreen();
    }
    ReCreat();
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -