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

📄 mpeginterface.c

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

/*********************************declare********************************/
#ifdef BOARD
extern SYS_FILE_INFO     VideoFileInfo;
#endif
#define MAX_PATH_NAME 256
extern int stopFillBuf;

extern int MpegAudioCtrl(int cmd);
/*************************************************************/

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

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

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

    if (MpegFileInit(path) != MPEG_FILE_PARSING_OK)
        return FALSE;
    this->audio_flag = 1;
    return TRUE;
}

// return value:
//     TRUE = successfully open codec.
//     FALSE = codec error.
int MpegDecOpen(video_interface_t *this)
{

    if (this->audio_flag)
        this->audio_flag = MpegAudioCtrl(MPEG_AUDIO_CTRL_START);  //start audio

    /* start video decoder */
    if (MpegVideoDecInit())
    {
        return FALSE;
    }

    /* start fill buffer */
    stopFillBuf = 0;
    RockOSSendMsg(MBVIDEO, AS_GUVI_VideoFillBuf, NULL);

    return TRUE;
}

int MpegFillBuf(video_interface_t *this, void *arg)
{
    int err;
    if (err = MpegFillBitStream())
        return err;

    if (!stopFillBuf)
        RockOSSendMsg(MBVIDEO, AS_GUVI_VideoFillBuf, NULL);

    return 0;
}

int MpegControl(video_interface_t *this, int cmd, void *arg0, void *arg1)
{
    switch (cmd)
    {
        case VIDEO_CTRL_PLAY_PAUSE:
            if (MpegPlayPause())
            {
                if (this->audio_flag)
                    MpegAudioCtrl(MPEG_AUDIO_CTRL_PAUSE);
                return TRUE;
            }
            else
            {
                if (this->audio_flag)
                    MpegAudioCtrl(MPEG_AUDIO_CTRL_RESUME);
                return FALSE;
            }
            break;
#if 1
        case VIDEO_CTRL_FFD:
            if (MpegFFD(NULL) != 0)
            {
                return -1;
            }
            else
            {
                if (this->audio_flag)
                    MpegAudioCtrl(MPEG_AUDIO_CTRL_FFD);
                return 0;
            }
            break;

        case VIDEO_CTRL_FFW:
            if (this->audio_flag)
                MpegAudioCtrl(MPEG_AUDIO_CTRL_FFW);
            return MpegFFW(NULL);
        case VIDEO_CTRL_RESUME:
            //if(this->audio_flag)
            //    MpegAudioCtrl(MPEG_AUDIO_CTRL_RESUME);
            MpegResume();
            break;
#endif
        case VIDEO_CTRL_GET_CUR_TIME:
            *(unsigned int *)arg0 = MpegGetCurTime();
            break;

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

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

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

        default:
            break;
    }
    return 0;
}

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

    err = MpegVideoSeek(time);

    return err;
}

int MpegExit(video_interface_t *this, int force_exit)
{
    stopFillBuf = 1;
    if (!force_exit)
    {
        /* ensure all video frames is showed out. */
        while (!MpegIsLastFrame());
    }

    /* stop audio */
    MpegAudioCtrl(MPEG_AUDIO_CTRL_STOP);

    /* stop video */
    MpegDecExit();
    return 0;
}

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

#ifdef TVOUT_PANEL
int Mpegtvout()
{
    MpegTVoutChange();
    return 0;
}
#endif

video_interface_t video_interface_mpeg =
{
    "MPEMPGDATVOB",
    0, //audio flag
    MpegInit,
    MpegDecOpen,
    MpegFillBuf,
    MpegSeekTime,
    MpegControl,
    MpegExit,
#ifdef TVOUT_PANEL
    MpegInstallSubtitlePlugin,
    Mpegtvout
#else
    MpegInstallSubtitlePlugin
#endif
};

⌨️ 快捷键说明

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