172 lines
4.5 KiB
C
Executable File
172 lines
4.5 KiB
C
Executable File
|
|
#include "SysKer.h"
|
|
#include "PlaybackTsk.h"
|
|
#include "UIFramework.h"
|
|
#include "UIAppPlay.h"
|
|
#include "SMediaPlayAPI.h"
|
|
#include "AppDisp_MoviePlayView.h"
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
#define __MODULE__ MDSCPLAYBK
|
|
#define __DBGLVL__ 2 // 0=FATAL, 1=ERR, 2=WRN, 3=UNIT, 4=FUNC, 5=IND, 6=MSG, 7=VALUE, 8=USER
|
|
#define __DBGFLT__ "*" //*=All, [mark]=CustomClass
|
|
#include <kwrap/debug.h>
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define MoviePlay_GetMediaInfo(x) SMediaPlay_GetMediaInfo(x)
|
|
#define MoviePlay_GetNowDisplayFrame(x,y,z) SMediaPlay_GetNowDisplayFrame(x,y,z)
|
|
#define MoviePlay_GetVideoFrameRate(x) SMediaPlay_GetVideoFrameRate(x)
|
|
#define MoviePlay_GetVideoFrameData(x) SMediaPlay_GetVideoFrameData((SMEDIAPLAY_FARMEPOS *)x)
|
|
#define MoviePlay_GetAudioFrameData(x) SMediaPlay_GetAudioFrameData((SMEDIAPLAY_FARMEPOS *)x)
|
|
#define MoviePlay_GetDispRatioScaleBuffer(x, y) SMediaPlay_GetDispRatioScaleBuffer(x, y)
|
|
#define MoviePlay_GetDispScaleBuffer(x, y) SMediaPlay_GetDispScaleBuffer(x, y)
|
|
|
|
#if (NMEDIAPLAY_FUNC == DISABLE)
|
|
static UINT32 gMoviePlay_DisplayCnt = 1;
|
|
|
|
MEM_RANGE Play_GetBuf(UINT32 id)
|
|
{
|
|
MEM_RANGE ScaleBuf = {0};
|
|
if (id == 0) {
|
|
// Get the display ratio scale buffer from Media Play
|
|
MoviePlay_GetDispRatioScaleBuffer(&ScaleBuf.Addr, &ScaleBuf.Size);
|
|
}
|
|
if (id == 1) {
|
|
// Get the display scale buffer from Media Play
|
|
MoviePlay_GetDispScaleBuffer(&ScaleBuf.Addr, &ScaleBuf.Size);
|
|
}
|
|
return ScaleBuf;
|
|
}
|
|
|
|
void Play_MovieCB(UINT32 uiEventID)
|
|
{
|
|
DBG_IND("+PlayCB=%d\r\n", uiEventID);
|
|
|
|
switch (uiEventID) {
|
|
case SMEDIAPLAY_EVENT_MEDIAINFO_READY: {
|
|
MEDIA_FIRST_INFO *pMediaInfo = NULL;
|
|
USIZE DispAR;
|
|
|
|
pMediaInfo = MoviePlay_GetMediaInfo();
|
|
|
|
// Get Display AR
|
|
DispAR.w = pMediaInfo->tkwid;
|
|
DispAR.h = pMediaInfo->tkhei;
|
|
|
|
// Init for MoviePlayView
|
|
AppDisp_MoviePlayView_Init(&DispAR);
|
|
|
|
// Start MoviePlayView_tsk
|
|
AppDisp_MoviePlayView_Open();
|
|
}
|
|
break;
|
|
|
|
case SMEDIAPLAY_EVENT_ONE_DISPLAYFRAME: {
|
|
AppDisp_MoviePlayView_OnDraw();
|
|
break;
|
|
}
|
|
|
|
case SMEDIAPLAY_EVENT_FINISH: {
|
|
Ux_PostEvent(NVTEVT_CB_MOVIE_FINISH, 0);
|
|
}
|
|
break;
|
|
|
|
case SMEDIAPLAY_EVENT_STOP:
|
|
AppDisp_MoviePlayView_Close(); // Release ISF_Data
|
|
break;
|
|
|
|
case SMEDIAPLAY_EVENT_ONE_SECOND:
|
|
Ux_PostEvent(NVTEVT_CB_MOVIE_ONE_SEC, 0);
|
|
break;
|
|
|
|
case SMEDIAPLAY_EVENT_START: {
|
|
gMoviePlay_DisplayCnt = 0;
|
|
Ux_PostEvent(NVTEVT_CB_MOVIE_START, 0);
|
|
}
|
|
break;
|
|
|
|
case SMEDIAPLAY_EVENT_ONE_VIDEOFRAME: {
|
|
// This callback is used for playback progressive bar, however NT96660 doesn't implement it, so close this block now. ( reduce unnecessary event post )
|
|
#if 0
|
|
UINT32 uPollCnt = 2;
|
|
|
|
if (MoviePlay_GetVideoFrameRate() > 120) { // for 240 fps to fix post event table overflow issue
|
|
uPollCnt = 8;
|
|
} else if (MoviePlay_GetVideoFrameRate() >= 60) { // for 60/120 fps to fix post event table overflow issue
|
|
uPollCnt = 4;
|
|
}
|
|
gMoviePlay_DisplayCnt++;
|
|
if (gMoviePlay_DisplayCnt == uPollCnt) {
|
|
Ux_PostEvent(NVTEVT_CB_MOVIE_ONE_VIDEOFRAME, 0);
|
|
gMoviePlay_DisplayCnt = 0;
|
|
}
|
|
#endif
|
|
}
|
|
break;
|
|
|
|
case SMEDIAPLAY_EVENT_CURR_VIDFRAME: {
|
|
SMEDIAPLAY_FARMEPOS VFrmPos;
|
|
MoviePlay_GetVideoFrameData(&VFrmPos);
|
|
DBG_IND("V:a=0x%X, s=%d\r\n", VFrmPos.Addr, VFrmPos.Size);
|
|
}
|
|
break;
|
|
|
|
case SMEDIAPLAY_EVENT_CURR_AUDFRAME: {
|
|
SMEDIAPLAY_FARMEPOS AFrmPos;
|
|
MoviePlay_GetAudioFrameData(&AFrmPos);
|
|
DBG_IND("A:a=0x%X, s=%d\r\n", AFrmPos.Addr, AFrmPos.Size);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
/**
|
|
Movie Play Callback for NMediaPlay framework
|
|
*/
|
|
void UIAppPlay_MoviePlayCB(UINT32 uiEventID)
|
|
{
|
|
DBG_IND("MoviePlayCB event=%d\r\n", uiEventID);
|
|
|
|
switch (uiEventID) {
|
|
case MOVIEPLAY_EVENT_MEDIAINFO_READY:
|
|
{
|
|
MEDIA_FIRST_INFO *pMediaInfo = NULL;
|
|
USIZE DispAR;
|
|
|
|
pMediaInfo = (MEDIA_FIRST_INFO *)ImageApp_MoviePlay_GetParam(MOVIEPLAY_NM_PARAM_MEDIA_INFO);
|
|
|
|
// Get Display AR
|
|
if (!pMediaInfo->tkwid || !pMediaInfo->tkhei) {
|
|
DBG_ERR("tkwid=%d, tkhei=%d\r\n", pMediaInfo->tkwid, pMediaInfo->tkhei);
|
|
break;
|
|
}
|
|
DispAR.w = pMediaInfo->tkwid;
|
|
DispAR.h = pMediaInfo->tkhei;
|
|
|
|
// Init for MoviePlayView
|
|
AppDisp_MoviePlayView_Init(&DispAR);
|
|
|
|
// Start MoviePlayView_tsk
|
|
AppDisp_MoviePlayView_Open();
|
|
break;
|
|
}
|
|
case MOVIEPLAY_EVENT_ONE_DISPLAYFRAME:
|
|
AppDisp_MoviePlayView_OnDraw();
|
|
break;
|
|
case MOVIEPLAY_EVENT_STOP:
|
|
AppDisp_MoviePlayView_Close(); // Release ISF_Data
|
|
break;
|
|
default:
|
|
DBG_ERR("Invalid eventID=0x%x\r\n");
|
|
break;
|
|
}
|
|
}
|
|
#endif
|
|
|