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

📄 dvb_pvr.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 5 页
字号:

	CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
	if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
	{
		DVBPVR_DBG(("\n\r DVB_PVR_PlaybackPause FAIL"));
	}
	return TRUE;
}

bool8 DVB_PVR_UnPause(void)
{
	stPvrSendMsg.u8Cmd = EN_PVR_TASK_PLAY_UNPAUSE;

	CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
	if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
	{
		DVBPVR_DBG(("\n\r DVB_PVR_PlaybackUnPause FAIL"));
	}

	return TRUE;
}

bool8 DVB_PVR_Register(DVB_PVR_NOTIFY_FN fpNotify)
{
	if (fpNotify != NULL)
	{
		_fpNotify = fpNotify;
		return TRUE;
	}	
	else
	{
		return FALSE;
	}
}

bool8 DVB_PVR_PlaybackSkip(s32 s32Second)
{
	if((PVR_Play_GetStatus()==EN_PVR_PLAY_NONE)||
	   (PVR_Play_GetStatus()==EN_PVR_ERROR_PLAY))
	{
		DVBPVR_MSG(("\n\r DVB_PVR_PlaybackSkip FAIL"));
		return FALSE;
	}
	
	stPvrSendMsg.u8Cmd = EN_PVR_TASK_PLAY_SKIP;
	stPvrSendMsg.unData.u32MsgData = s32Second;
	
	CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
	if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
	{
		DVBPVR_DBG(("\n\r DVB_PVR_PlaybackSkip FAIL"));
	}
	return TRUE;
}

bool8 DVB_PVR_SetSectorSize(u32 u32Size)
{
	if((u32Size % 512)!=0)
	{
		return FALSE;
	}
	else
	{
		_u32SectorSize = u32Size;
		PVR_SetSectorSize(u32Size);
	}
	return TRUE;
}

u32 DVB_PVR_GetSectorSize(void)
{
	return _u32SectorSize;
}

bool8 DVB_PVR_SetNextRecordFileHandle(u32 u32FileHandle, u32 u32NextFileHandle)
{
	bool8 b8Result;
	b8Result = PVR_SetNextRecordFileHandle(u32FileHandle,u32NextFileHandle);
	return b8Result;
}

bool8 DVB_PVR_SetAvPid(ST_PVR_AV_PID *pstAvPid)
{
	PVR_SetAvPid(pstAvPid);
	return TRUE;
}

bool8 DVB_PVR_SetNotAvPid(ST_PVR_NOT_AV_PID *pstNotAvPid)
{
	PVR_SetNotAvPid(pstNotAvPid);
	return TRUE;
}

u32 DVB_PVR_GetCurPlayHandle(void)
{
	if(PVR_Play_GetStatus()!=EN_PVR_PLAY_FILE)
	{
		return PVR_INVALID_FILE_HANDLE;
	}
	else
	{
		return PVR_GetCurPlayHandle();
	}
}

u32 DVB_PVR_GetCurRecHandle(void)
{
	if(PVR_Record_GetStatus() != EN_PVR_RECORD_FILE)
	{
		return PVR_INVALID_FILE_HANDLE;
	}
	else
	{
		return PVR_GetCurRecHandle();
	}
}

void DVB_PVR_SetTimeShitMode(bool8 b8Mode)
{
	PVR_SetTimeShitMode(b8Mode);
}

bool8 DVB_PVR_TimeShiftLiveBackward(EN_PVR_PLAYBACK_SPEED enSpeed,u16 u16LiveVid, u16 u16LiveAid)
{
	//ST_PVR_AV_PID	stAvPid;

	if(PVR_Record_GetStatus()==EN_PVR_RECORD_NONE)
	{
		DVBPVR_MSG(("\n\r DVB_PVR_TimeShiftLiveBackward Error"));
		return FALSE;
	}   
	/*
	_u16LiveVid = u16LiveVid;
	_u16LiveAid = u16LiveAid;

	DVB_PVR_SetParserAVPid(u16LiveVid,u16LiveAid);
	DVBPVR_MSG(("\n\r Set Pid %x %x",u16LiveVid,u16LiveAid));

	stAvPid.au16Pid[0] = 0x1FFF;
	stAvPid.au16Pid[1] = u16LiveVid;
	stAvPid.au16Pid[2] = u16LiveAid;
	stAvPid.u16PidNumber = 3;
	DVB_PVR_SetAvPid(&stAvPid);	
	*/
	stPvrSendMsg.u8Cmd = EN_PVR_TASK_PLAY_LIVEBACK;
	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"));
	}
	/*
	DVB_AVDemuxDisable();	
	DVB_AudioVideoStop();
	DVB_VideoScreenEnable(FALSE);
	DVB_VideoScreenShow(FALSE);
	*/
	DVB_PVR_PlaybackRecordingStart(u16LiveVid,u16LiveAid);
	/*
	DVB_VideoScreenEnable(TRUE);
	DVB_VideoScreenShow(TRUE);
	DVB_AudioVideoPlay();

	bool8 b8Mute = DVB_AudioGetMute();
	DVB_AudioSetMute(b8Mute);
	*/

	DVB_PVR_FastBackwardPlay(enSpeed);
	return TRUE;
}

bool8 DVB_PVR_SetDevice(EN_DEVICE_TYPE enDevice)
{
	if(PVR_Record_GetStatus()!= EN_PVR_RECORD_NONE)
	{
		return FALSE;
	}	
	if(PVR_Play_GetStatus()!= EN_PVR_PLAY_NONE)	
	{
		return FALSE;
	}
	_enPVRDeviceType = enDevice;
	
	return PVR_PORTING_SetDevice(enDevice);
}

EN_DEVICE_TYPE DVB_PVR_GetDevice(void)
{
	return _enPVRDeviceType;
}

#ifdef PVR_FILL_TASK_ENABLE
void DVB_PVR_Fill_Task_Active(bool8 b8Active)
{
	// Resume
	if(b8Active == TRUE)
	{
		if(_b8PVRFillTaskResume == FALSE)
		{
			_b8PVRFillTaskResume = TRUE;
			CT_OS_ResumeTask(&_stPVRFillTask);
		}
	}
	// Suspend
	else
	{
		if(_b8PVRFillTaskResume == TRUE)
		{
			_b8PVRFillTaskResume = FALSE;
			CT_OS_SuspendTask(&_stPVRFillTask);
		}
	}
}

void DVB_PVR_Fill_Task(u32 u32Argc, void* pArgv)
{
	while(1)
	{
		CT_OS_WaitOnSemaphore(&PVR_Fill_Data_Semaphore, CTOS_WAIT);

		PVR_Fill_Data_to_Dumpin();
	}
}

void _dvb_pvr_fill_data_notify(void)
{
	CT_OS_FreeSemaphore(&PVR_Fill_Data_Semaphore);
}
#endif

//====================Internal Use Function===========================
bool8 _dvb_pvr_send_cb_event(EN_PVR_EVENT enEvent)
{
	//DVBPVR_MSG(("\n\r _dvb_pvr_send_cb_event %d",enEvent));
	
	stCBSendMsg.u8Cmd = enEvent;
	CT_OS_PutMsg(&stCBQueue, &stCBSendMsg, CTOS_NO_WAIT);

	if(DVB_PVR_CBStatus()!= EN_PVR_STATUS_SUCCESS)
	{
		DVBPVR_DBG(("\n\r  Callback Status Failed!!\n"));
	}
	return TRUE;
}

void DVB_PVR_GetTimeShiftParams(u32* pu32ReadHandleIndex, u32* pu32WriteHandleIndex, 
	u32* pu32ReadPosition, u32* pu32WritePosition)
{
	return PVR_GetTimeShiftParams(pu32ReadHandleIndex, pu32WriteHandleIndex, pu32ReadPosition, pu32WritePosition);
}

u32 DVB_PVR_GetMaxFileSize(void)
{
	return PVR_GetMaxFileSize();
}

//p047
u32 DVB_PVR_GetPlaybackTime(void)
{
	u32 u32Seconds;
	if(DVB_PVR_GetPlayStatus()!=EN_PVR_PLAY_FILE)
	{
		return 0xFFFFFFFF;
	}
	u32Seconds = PVR_GetPlaybackTime();
//	printf("\n\r u32Seconds %ld",u32Seconds);	
	return u32Seconds;
}

EN_PVR_PLAY_STATUS DVB_PVR_GetPlayStatus(void)
{
 	return PVR_Play_GetStatus();
}

u32 DVB_PVR_GetRecDuration(void)
{
    return PVR_Get_RecDuration();
}

bool8 DVB_PVR_GetPreviewStatus(void)
{
	return PVR_GetPreviewStauts();
}

EN_PVR_PLAYBACK_SPEED DVB_PVR_Play_GetSpeed(void)
{
	return PVR_Play_GetSpeed();
}

EN_PVR_PLAYMODE DVB_PVR_Play_GetMode(void)
{
	return PVR_Play_GetMode();
}

EN_PVR_RECORD_STATUS DVB_PVR_GetRecordStatus(void)
{
 	return PVR_Record_GetStatus();
}

bool8 DVB_PVR_PlaybackRecordingStop(void)
{
	if((PVR_Play_GetStatus()==EN_PVR_PLAY_NONE)||
	   (PVR_Play_GetStatus()==EN_PVR_ERROR_PLAY))
	{
		DVBPVR_MSG(("\n\r DVB_PVR_PlaybackRecordingStop FAIL"));
		return FALSE;
	}
	
	stPvrSendMsg.u8Cmd = EN_PVR_TASK_PLAY_RECORDING_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;	
}

#if 0
//p030
bool8 DVB_PVR_PlaybackRecordingStart(void)
{
	bool8 b8Mute;
	ST_PVR_AV_PID	stAvPid;
	u16 u16Vid,u16Aid;

	if(PVR_Record_GetStatus()!=EN_PVR_RECORD_FILE)
	{
		DVBPVR_MSG(("\n\r DVB_PVR_PlaybackRecordingStart FAIL"));
		return FALSE;
	}

	_u16LiveVid = DVB_VideoGetPID();
	_u16LiveAid = DVB_AudioGetPID();
	
	u16Aid = DVB_AudioGetPID();
	u16Vid= DVB_VideoGetPID();

	DVB_AVDemuxDisable();	
	DVB_AudioVideoStop();
	DVB_VideoScreenEnable(FALSE);
	DVB_VideoScreenShow(FALSE);
	
	DVB_PVR_SetParserAVPid(u16Vid,u16Aid);

	CT_MPG_ParserSetVideoPID(_u16ParserVid);
	CT_MPG_ParserSetAudioPID(_u16ParserAid);	
	

	stAvPid.au16Pid[0] = 0x1FFF;
	stAvPid.au16Pid[1] = u16Vid;
	stAvPid.au16Pid[2] = u16Aid;
	stAvPid.u16PidNumber = 3;
	DVB_PVR_SetAvPid(&stAvPid);	

	stPvrSendMsg.u8Cmd = EN_PVR_TASK_PLAY_RECORDING_START;

	CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
	if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
	{
		DVBPVR_DBG(("\n\r DVB_PVR_PlaybackRecordingStart FAIL")); 
	}

	DVB_VideoScreenEnable(TRUE);
	DVB_VideoScreenShow(TRUE);
	DVB_AudioVideoPlay();

	CT_MPG_ParserDemuxEnable();
	b8Mute = DVB_AudioGetMute();
	DVB_AudioSetMute(b8Mute);

	return TRUE;
}
#endif

//p030
bool8 DVB_PVR_PlaybackRecordingStart(u16 u16LiveVid, u16 u16LiveAid)
{
	ST_PVR_AV_PID	stAvPid;

	if(PVR_Record_GetStatus()!=EN_PVR_RECORD_FILE)
	{
		DVBPVR_MSG(("\n\r DVB_PVR_PlaybackRecordingStart FAIL"));
		return FALSE;
	}

	_u16LiveVid = u16LiveVid;
	_u16LiveAid = u16LiveAid;
	
	DVB_PVR_SetParserAVPid(u16LiveVid,u16LiveAid);

	CT_MPG_ParserSetVideoPID(_u16ParserVid);
	CT_MPG_ParserSetAudioPID(_u16ParserAid);	
	

	stAvPid.au16Pid[0] = 0x1FFF;
	stAvPid.au16Pid[1] = u16LiveVid;
	stAvPid.au16Pid[2] = u16LiveAid;
	stAvPid.u16PidNumber = 3;
	DVB_PVR_SetAvPid(&stAvPid);	

	stPvrSendMsg.u8Cmd = EN_PVR_TASK_PLAY_RECORDING_START;

	CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
	if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
	{
		DVBPVR_DBG(("\n\r DVB_PVR_PlaybackRecordingStart FAIL")); 
	}

	//CT_MPG_ParserDemuxEnable();

	#ifdef PVR_FILL_TASK_ENABLE
	DVB_PVR_Fill_Task_Active(TRUE);
	#endif

	return TRUE;
}

bool8 DVB_PVR_TimeShiftSetReadToWrite(void)
{
	if(PVR_Record_GetStatus()!=EN_PVR_RECORD_FILE)
	{
		DVBPVR_MSG(("\n\r DVB_PVR_SetTimeShiftReadToWrite FAIL"));
		return FALSE;
	}
	
	stPvrSendMsg.u8Cmd = EN_PVR_TASK_TIME_SHIFT_READ_TO_WRITE;

	CT_OS_PutMsg(&stPvrQueue, &stPvrSendMsg, CTOS_NO_WAIT);
	if(DVB_PVR_CmdStatus()!= EN_PVR_STATUS_SUCCESS)
	{
		DVBPVR_DBG(("\n\r DVB_PVR_SetTimeShiftReadToWrite FAIL"));
	}
	return TRUE;	
}

bool8 DVB_PVR_RecordAddPid(u16 u16Pid)
{
	if(PVR_Record_GetStatus()!=EN_PVR_RECORD_FILE)
	{
		DVBPVR_MSG(("\n\r DVB_PVR_SetTimeShiftReadToWrite FAIL"));
		return FALSE;
	}	
	return PVR_RecordAddPid(u16Pid);
}

void DVB_PVR_ShowPlayInfo(void)
{
	PVR_ShowPlayInfo();
}

bool8 DVB_PVR_ScanPreview(ST_PVR_PLAY_PARAMETER *pstScanPreviewParam, u16 u16LiveVid, u16 u16LiveAid)
{
	stPvrSendMsg.u8Cmd = EN_PVR_TASK_SCAN_PREVIEW;
	stPvrSendMsg.unData.u32MsgData = (u32)pstScanPreviewParam;

	_u16LiveVid = u16LiveVid;
	_u16LiveAid = u16LiveAid;


	CT_MPG_ParserSetVideoPID(_u16ParserVid);
	CT_MPG_ParserSetAudioPID(_u16ParserAid);

⌨️ 快捷键说明

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