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

📄 flvinterface.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*  Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  FlvInterface.c
Desc :  主界面窗口
Author :
Date :  2008-01-11
Notes :
$Log :
*********************************************************************/
#include "include.h"
#include "system.h"
#include "../browser/BrowserStruct.h"
#ifdef BOARD
#include "../video/flv/flvfile.h"
#include "BrowserGlobal.h"
#include "FlvMacro.h"
#include "FlvVideoControl.h"
#include "VideoCodecs.h"
#include "VideoWin.h"
#endif

/*********************************declare********************************/
#ifdef BOARD
extern SYS_FILE_INFO     VideoFileInfo;
#endif


extern void FlvAudioCtrl(int cmd);

int stopFillBuf;
/*************************************************************/
#define FLV_VIDEO_EN

/*****************************************************************/

// return value:
//     TRUE = successfully parse the file .
//     FALSE = file is not supported.
int FlvInit(video_interface_t *this, char *path)
{
    int err;


#if 1 // just debug.
    char pathName[FS_MAX_PATH_LEN];
    path = pathName;
    RKmemcpy(path, VideoFileInfo.Path, FS_MAX_PATH_LEN);
    RKstrcat(path, VideoFileInfo.Name);
#endif

    if (FlvFileInit(path) != FLV_FILE_PARSING_OK)
        return FALSE;
    this->audio_flag = flv.audioFlag;
    return TRUE;
}

// return value:
//     TRUE = successfully open codec.
//     FALSE = codec error.
int FlvDecOpen(video_interface_t *this)
{
    if (this->audio_flag)
        FlvAudioCtrl(FLV_AUDIO_CTRL_START);  //start audio
#ifdef FLV_VIDEO_EN
    /* start video decoder */
    if (FlvVideoDecInit())
    {
        return FALSE;
    }

    /* start fill buffer */
    stopFillBuf = 0;
    RockOSSendMsg(MBVIDEO, AS_GUVI_VideoFillBuf, NULL);
#endif
    return TRUE;
}

int FlvFillBuf(video_interface_t *this, void *arg)
{
    int err;
#ifdef FLV_VIDEO_EN
    if (err = FlvFillBitStream())
        return err;

    /* check decoder status */
    //if(IS_VIDEO_DECODE_OK(AviGetDecStatus()) != TRUE){
    // return -1;
    //}
    if (!stopFillBuf)
        RockOSSendMsg(MBVIDEO, AS_GUVI_VideoFillBuf, NULL);
#endif
    return 0;
}

int FlvControl(video_interface_t *this, int cmd, void *arg0, void *arg1)
{
    switch (cmd)
    {
        case VIDEO_CTRL_PLAY_PAUSE:
            if (FlvPlayPause())
            {
                if (this->audio_flag)
                {
                    FlvAudioCtrl(FLV_AUDIO_CTRL_PAUSE);
                }
                return TRUE;
            }
            else
            {
                if (this->audio_flag)
                {
                    FlvAudioCtrl(FLV_AUDIO_CTRL_RESUME);
                }
                return FALSE;
            }
            break;
#if 1
        case VIDEO_CTRL_FFD:
            if (FlvFFD(NULL) != 0)
            {
                this->control(this, VIDEO_CTRL_RESUME, NULL, NULL);
                return -1;
            }
            else
            {
                if (this->audio_flag)
                    FlvAudioCtrl(FLV_AUDIO_CTRL_FFD);
                return 0;
            }
            break;

        case VIDEO_CTRL_FFW:
            if (this->audio_flag)
                FlvAudioCtrl(FLV_AUDIO_CTRL_FFW);
            return FlvFFW(NULL);
        case VIDEO_CTRL_RESUME:
            FlvResume();
            if ((this->audio_flag))
            {
                FlvAudioCtrl(FLV_AUDIO_CTRL_RESUME);
            }
            break;
#endif
        case VIDEO_CTRL_GET_CUR_TIME:
            *(unsigned int *)arg0 = FlvGetCurTime();
            break;

        case VIDEO_CTRL_GET_TOTAL_TIME:
            *(unsigned int *)arg0 = FlvGetTotalTime();
            break;

        case VIDEO_CTRL_GET_YUV_INFO:
            return FlvGetYuvAddr((char **)arg0);
            break;

        case VIDEO_CTRL_GET_RESOLUTION:
            return FlvGetResolution(arg0, arg1);
            break;

        default:
            break;
    }
    return 0;
}

int FlvSeekTime(video_interface_t *this, long time)
{
    int err;

    err = FlvVideoSeek(time);

    return err;
}

int FlvExit(video_interface_t *this, int force_exit)
{
#ifdef FLV_VIDEO_EN
    stopFillBuf = 1;
    if (!force_exit)
    {
        /* ensure all video frames is showed out. */
        while (!FlvIsLastFrame());
    }
#endif
    /* stop audio */
    FlvAudioCtrl(FLV_AUDIO_CTRL_STOP);
#ifdef FLV_VIDEO_EN
    /* stop video */
    FlvDecExit();
#endif
    return 0;
}

int FlvInstallSubtitlePlugin(video_interface_t *this, subtitle_plugin_t *subtitle)
{
    return 0;
}

#ifdef TVOUT_PANEL
int Flvtvout()
{

    FLVTVoutChange();
    return 0;
}
#endif

video_interface_t video_interface_flv =
{
    "FLV",
    0, //audio flag
    FlvInit,
    FlvDecOpen,
    FlvFillBuf,
    FlvSeekTime,
    FlvControl,
    FlvExit,
#ifdef TVOUT_PANEL
    FlvInstallSubtitlePlugin,
    Flvtvout
#else
    FlvInstallSubtitlePlugin
#endif
};

⌨️ 快捷键说明

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