📄 dvb_pvr.c
字号:
enOsStatusCB = CT_OS_CreateTask ( &stCBTask,
"PVRCallback",
DVB_Callback_Task,
&au8CBTaskStack[0],
DVB_PVR_TASK_CB_STACK_SIZE,
DVB_PVR_TASK_CB_PRIORITY,
DVB_PVR_TASK_CB_TIMESLICE);
if (EN_CTOS_SUCCESS != enOsStatusCB)
{
_enCBStatus = EN_PVR_STATUS_FAIL;
DVBPVR_MSG(("Create Callback Task Fail\n"));
}
enOsStatusCB = CT_OS_CreateMsgQueue(&stCBQueue, "CallbackQ", &u32CBQueueMsg[0], PVR_QUEUE_SIZE, EN_CTOS_SUSPEND_FIFO);
if (EN_CTOS_SUCCESS != enOsStatusCB)
{
enOsStatusCB = EN_PVR_STATUS_FAIL;
DVBPVR_MSG(("Create Callback MessageQ Fail\n"));
}
if (EN_CTOS_SUCCESS != CT_OS_CreateSemaphore(&PVR_CB_Semaphore, "PVR_CBSem", 0, EN_CTOS_SUSPEND_FIFO))
{
DVBPVR_MSG(("\n\r PVR_CB_WARNING: CT_OS_CreateSemaphore Error"));
}
else
{
DVBPVR_MSG(("\n\r CREATE SEM OK FOR PVR CB\n\r"));
}
b8CBInitFlag = TRUE;
if(_enCBStatus == EN_PVR_STATUS_SUCCESS)
{
CT_OS_ResumeTask(&stCBTask);
}
return _enCBStatus;
}
void DVB_Callback_Task(u32 u32Argc, void* pArgv)
{
EN_PVR_EVENT enCBEvent = EN_PVR_EVENT_NONE;
EN_CTOS_STATUS enOsStatusCB;
u32 u32CBRecvMsgLen;
MSG_PARAMETER stCBRecvMsg;
while(1)
{
/* wait message to switch task status */
enOsStatusCB = CT_OS_GetMsg(&stCBQueue, &stCBRecvMsg, &u32CBRecvMsgLen,CTOS_WAIT);
//printf("\nGet msg!\n");
if (enOsStatusCB == EN_CTOS_SUCCESS)
{
enCBEvent = stCBRecvMsg.u8Cmd;
//DVBPVR_MSG(("\n\rCBTask Get Callback Event = %d",enCBEvent));
}
switch(enCBEvent)
{
case EN_PVR_EVENT_NONE:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_NONE=====\n"));
break;
case EN_PVR_EVENT_WRITE_FAIL:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_WRITE_FAIL=====\n"));
break;
case EN_PVR_EVENT_READ_FAIL:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_READ_FAIL=====\n"));
break;
case EN_PVR_EVENT_RECORD_START:
/*
DVB_PVR_ResetRecordingTime();
DVB_PVR_ResetStreamRateCalc();
PVR_CleanRecBufferInputSize();
*/
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_RECORD_START=====\n"));
break;
case EN_PVR_EVENT_RECORD_STOP:
_b8DeviceRecordCheck = FALSE;
_u32DeviceEventLastTick = 0;
_u32DeviceRecordWriteErrorCount = 0;
DVB_PVR_SaveLastRecordingDuration();
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_RECORD_STOP=====\n"));
break;
case EN_PVR_EVENT_RECORD_FINISH:
_b8DeviceRecordCheck = FALSE;
_u32DeviceEventLastTick = 0;
_u32DeviceRecordWriteErrorCount = 0;
DVB_PVR_SaveLastRecordingDuration();
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_RECORD_FINISH=====\n"));
break;
case EN_PVR_EVENT_RECORD_NEW_HANDLE:
DVB_PVR_SaveLastRecordingDuration();
DVB_PVR_ResetRecordingTime();
DVB_PVR_ResetStreamRateCalc();
//DVB_PVR_ResetFilterCallbackSpeedCalc(TRUE);
PVR_CleanRecBufferInputSize();
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_RECORD_NEW_HANDLE=====\n"));
break;
case EN_PVR_EVENT_PLAYBACK_START:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_START=====\n"));
break;
case EN_PVR_EVENT_PLAYBACK_FINISH:
case EN_PVR_EVENT_PLAYBACK_END_OF_RECORDING:
case EN_PVR_EVENT_PLAYBACK_STOP:
if(EN_PVR_EVENT_PLAYBACK_FINISH==enCBEvent)
{
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_FINISH=====\n"));
}
else if(EN_PVR_EVENT_PLAYBACK_END_OF_RECORDING ==enCBEvent)
{
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_END_OF_RECORDING=====\n"));
}
else
{
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_STOP=====\n"));
}
#ifdef PVR_FILL_TASK_ENABLE
DVB_PVR_Fill_Task_Active(FALSE);
#endif
break;
case EN_PVR_EVENT_PLAYBACK_PAUSE:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_PAUSE=====\n"));
break;
case EN_PVR_EVENT_PLAYBACK_UNPAUSE:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_UNPAUSE=====\n"));
break;
case EN_PVR_EVENT_PLAYBACK_SKIP:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_SKIP=====\n"));
break;
case EN_PVR_EVENT_PLAYBACK_JUMP:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_JUMP=====\n"));
break;
case EN_PVR_EVENT_DISK_FULL:
_b8DeviceRecordCheck = FALSE;
_u32DeviceEventLastTick = 0;
_u32DeviceRecordWriteErrorCount = 0;
DVB_PVR_SaveLastRecordingDuration();
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_DISK_FULL=====\n"));
break;
case EN_PVR_EVENT_PLAYBACK_END_OF_BEGIN:
case EN_PVR_EVENT_PLAYBACK_TO_NORMAL:
if(EN_PVR_EVENT_PLAYBACK_END_OF_BEGIN == enCBEvent)
{
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_END_OF_BEGIN=====\n"));
}
else
{
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_PLAYBACK_TO_NORMAL=====\n"));
}
CT_MPG_ParserSetVideoPID(_u16ParserVid);
CT_MPG_ParserSetAudioPID(_u16ParserAid);
break;
case EN_PVR_EVENT_TIME_SHIFT_HEAD:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_TIME_SHIFT_HEAD=====\n"));
break;
case EN_PVR_EVENT_TIME_SHIFT_START:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_TIME_SHIFT_START=====\n"));
break;
case EN_PVR_EVENT_TIME_SHIFT_STOP:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_TIME_SHIFT_STOP=====\n"));
break;
case EN_PVR_EVENT_SCAN_PREVIEW:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_SCAN_PREVIEW=====\n"));
break;
case EN_PVR_EVENT_SCAN_PREVIEW_STOP:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_SCAN_PREVIEW_STOP=====\n"));
break;
case EN_PVR_EVENT_GET_BITRATE:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_GET_BITRATE=====\n"));
break;
case EN_PVR_EVENT_GET_TIMESHIFT_REMOVE_HANDLE:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_GET_TIMESHIFT_REMOVE_HANDLE=====\n"));
break;
case EN_PVR_EVENT_DEVICE_WRITE_TOO_SLOW:
CT_OS_MS_GetClock(&_u32DeviceEventLastTick);
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_DEVICE_WRITE_TOO_SLOW=====\n"));
break;
case EN_PVR_EVENT_DEVICE_READ_TOO_SLOW:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_DEVICE_READ_TOO_SLOW=====\n"));
break;
case EN_PVR_EVENT_DEVICE_READ_WRITE_TOO_SLOW:
DVBPVR_MSG(("\n=====Callback Task:EN_PVR_EVENT_DEVICE_READ_WRITE_TOO_SLOW=====\n"));
break;
default:
break;
}
//DVBPVR_MSG(("\n\r Callback Task call Notify!\n"));
if(_fpNotify != NULL)
{
_fpNotify(stCBRecvMsg.u8Cmd);
}
CT_OS_FreeSemaphore(&PVR_CB_Semaphore);
}
}
/***********************************************************************/
//Elaine-2007/12/04 "09:59:49"
/************************************************************************/
//===================NEW PVR API=========================
bool8 DVB_PVR_SetParserAVPid(u16 u16Vid,u16 u16Aid)
{
_u16ParserAid = u16Aid;
_u16ParserVid = u16Vid;
PVR_SetParserAVPid(u16Vid,u16Aid);
return TRUE;
}
bool8 DVB_PVR_SetRecordTime(u32 u32Second)
{
if(u32Second ==0)
{
return FALSE;
}
else
{
PVR_SetRecordTime(u32Second);
return TRUE;
}
}
EN_PVR_STATUS DVB_PVR_CBStatus(void)
{
DVBPVR_MSG(("\n\r WaitPVR S CallbackStatus %d",_enCBStatus));
CT_OS_WaitOnSemaphore(&PVR_CB_Semaphore, CTOS_WAIT);
return _enCBStatus;
}
EN_PVR_STATUS DVB_PVR_CmdStatus(void)
{
DVBPVR_MSG(("\n\r WaitPVR S PVRStatus %d",_enPVRStatus));
CT_OS_WaitOnSemaphore(&PVR_API_Semaphore, CTOS_WAIT);
return _enPVRStatus;
}
u16 DVB_PVR_GetPlayPercent(void)
{
u16 u16Percent;
u16Percent = PVR_GetPlayPercent();
// printf("\n\r u16Percent %ld",u16Percent);
return u16Percent;
}
bool8 DVB_PVR_NormalPlay(void)
{
if((PVR_Play_GetStatus()==EN_PVR_PLAY_NONE)||
(PVR_Play_GetStatus()==EN_PVR_ERROR_PLAY))
{
DVBPVR_MSG(("\n\r DVB_PVR_NormalPlay FAIL"));
return FALSE;
}
stPvrSendMsg.u8Cmd = EN_PVR_TASK_PLAY_NORMAL;
CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
{
DVBPVR_DBG(("\n\r UI DVB_PVR_NormalPlay FAIL"));
}
else
{
CT_MPG_ParserSetAudioPID(_u16ParserAid);
}
return TRUE;
}
bool8 DVB_PVR_FastForwardPlay(EN_PVR_PLAYBACK_SPEED enSpeed)
{
if((PVR_Play_GetStatus()==EN_PVR_PLAY_NONE)||
(PVR_Play_GetStatus()==EN_PVR_ERROR_PLAY))
{
DVBPVR_MSG(("\n\r DVB_PVR_FastForwardPlay FAIL"));
return FALSE;
}
stPvrSendMsg.u8Cmd = EN_PVR_TASK_FAST_FORWARD;
stPvrSendMsg.u8Reserve = enSpeed;
CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
{
DVBPVR_DBG(("\n\r UI DVB_PVR_FastForwardPlay FAIL"));
}
else
{
// It should finish before free semaphore in PVR Task
//CT_MPG_ParserSetAudioPID(0);
}
return TRUE;
}
bool8 DVB_PVR_SlowForwardPlay(EN_PVR_PLAYBACK_SPEED enSpeed)
{
if((PVR_Play_GetStatus()==EN_PVR_PLAY_NONE)||
(PVR_Play_GetStatus()==EN_PVR_ERROR_PLAY))
{
DVBPVR_MSG(("\n\r DVB_PVR_SlowForwardPlay FAIL"));
return FALSE;
}
stPvrSendMsg.u8Cmd = EN_PVR_TASK_SLOW_FORWARD;
stPvrSendMsg.u8Reserve = enSpeed;
CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
{
DVBPVR_DBG(("\n\r DVB_PVR_SlowForwardPlay FAIL"));
}
else
{
// It should finish before free semaphore in PVR Task
//CT_MPG_ParserSetAudioPID(0);
}
return TRUE;
}
bool8 DVB_PVR_FastBackwardPlay(EN_PVR_PLAYBACK_SPEED enSpeed)
{
if((PVR_Play_GetStatus()==EN_PVR_PLAY_NONE)||
(PVR_Play_GetStatus()==EN_PVR_ERROR_PLAY))
{
DVBPVR_MSG(("\n\r DVB_PVR_FastBackwardPlay FAIL"));
return FALSE;
}
stPvrSendMsg.u8Cmd = EN_PVR_TASK_FAST_BACKWARD;
stPvrSendMsg.u8Reserve = enSpeed;
CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
{
DVBPVR_DBG(("\n\r DVB_PVR_FastBackwardPlay FAIL"));
}
else
{
// It should finish before free semaphore in PVR Task
//CT_MPG_ParserSetAudioPID(0);
}
return TRUE;
}
bool8 DVB_PVR_RecordStart(ST_PVR_RECORD_PARAMETER *pstRecordParam)
{
if(PVR_Record_GetStatus() == EN_PVR_RECORD_FILE)
{
DVBPVR_MSG(("\n\r DVB_PVR_RecordStart FAIL"));
return FALSE;
}
if(PVR_Record_GetStatus() == EN_PVR_RECORD_NONE)
{
PVR_ResetRecInfo();
}
stPvrSendMsg.u8Cmd = EN_PVR_TASK_FILE_RECORD_START;
stPvrSendMsg.unData.pMsgData = pstRecordParam;
DVBPVR_MSG(("\n\r DVB Handle %ld",pstRecordParam->u32FileHandle));
CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
{
DVBPVR_DBG(("\n\r DVB_PVR_RecordStart FAIL"));
}
_b8SetCacheBitRate = FALSE;
return TRUE;
}
bool8 DVB_PVR_RecordStop(void)
{
if(PVR_Record_GetStatus()!=EN_PVR_RECORD_FILE)
{
DVBPVR_MSG(("\n\r DVB_PVR_RecordStop FAIL"));
return FALSE;
}
stPvrSendMsg.u8Cmd = EN_PVR_TASK_FILE_RECORD_STOP;
CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
{
DVBPVR_DBG(("\n\r DVB_PVR_RecordStop FAIL"));
}
return TRUE;
}
bool8 DVB_PVR_PlaybackStart(ST_PVR_PLAY_PARAMETER *pstPlaybackParam, u16 u16LiveVid, u16 u16LiveAid)
{
//bool8 b8Mute;
if(PVR_Play_GetStatus()!=EN_PVR_PLAY_NONE)
{
DVBPVR_MSG(("\n\r DVB_PVR_PlaybackStart FAIL"));
return FALSE;
}
DVBPVR_MSG(("\n\r File Handle Num %ld",pstPlaybackParam->u32FileHandleNum));
_u16LiveVid = u16LiveVid;
_u16LiveAid = u16LiveAid;
/*
DVB_AVDemuxDisable();
DVB_AudioVideoStop();
DVB_VideoScreenEnable(FALSE);
DVB_VideoScreenShow(FALSE);
DVB_VideoSetPID(0);
DVB_AudioSetPID(0);
*/
CT_MPG_ParserSetVideoPID(_u16ParserVid);
CT_MPG_ParserSetAudioPID(_u16ParserAid);
stPvrSendMsg.u8Cmd = EN_PVR_TASK_FILE_PLAY_START;
stPvrSendMsg.unData.pMsgData = pstPlaybackParam;
// pstPlaybackParam->u32OffsetFileIndex = 3;
// pstPlaybackParam->u32Offset = 104857600;
CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
{
DVBPVR_DBG(("\n\r DVB_PVR_PlaybackStart FAIL"));
}
/*
DVB_VideoScreenEnable(TRUE);
DVB_VideoScreenShow(TRUE);
DVB_AudioVideoPlay();
bool8 b8Mute = DVB_AudioGetMute();
DVB_AudioSetMute(b8Mute);
CT_MPG_ParserDemuxEnable();
*/
#ifdef PVR_FILL_TASK_ENABLE
DVB_PVR_Fill_Task_Active(TRUE);
#endif
return TRUE;
}
bool8 DVB_PVR_PlaybackStop(void)
{
if(PVR_Play_GetStatus()==EN_PVR_PLAY_NONE)
{
return FALSE;
}
stPvrSendMsg.u8Cmd = EN_PVR_TASK_FILE_PLAY_STOP;
CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
{
DVBPVR_DBG(("\n\r DVB_PVR_PlaybackStop FAIL"));
}
#ifdef PVR_FILL_TASK_ENABLE
DVB_PVR_Fill_Task_Active(FALSE);
#endif
return TRUE;
}
bool8 DVB_PVR_PlaybackPause(void)
{
stPvrSendMsg.u8Cmd = EN_PVR_TASK_PLAY_PAUSE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -