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