📄 mpeginterface.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 + -