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

📄 dvb_movie.c

📁 DVB软件,基于CT216软件的开发源程序.
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifdef CT216T_ELGIST_MM
                    AV_MonitorResetVariable();	   
                    AV_MonitorCheckAudioType(TRUE);
#else
                    DVB_AudioMonitorFreq(TRUE);
#endif
                }

                break;

            case EN_CT_MOVIE_WAIT_PLAY:
                enMovieStage = CT_Movie_Wait_Play(_enCurMovType);
                break;

            case EN_CT_MOVIE_PLAYEND:
                return EN_MOV_STATUS_SUCCESS;

            case EN_CT_MOVIE_ERROR_CONCEAL:
                DVB_Movie_AVStop();
                CT_FillData_Stop(_pstMovieHandle->u32FillDataHandle);
                DVB_FILECTRL_FileClose(_enDeviceType, _pstMovieHandle->u32FileHandle);
                return EN_MOV_STATUS_DECODE_FAIL;   

            case EN_CT_MOVIE_STAGE_FAIL:
            case EN_CT_MOVIE_SKIP_ITEM:
                DVB_Movie_AVStop();
				CT_FillData_Stop(_pstMovieHandle->u32FillDataHandle);
                DVB_FILECTRL_FileClose(_enDeviceType, _pstMovieHandle->u32FileHandle);
                return EN_MOV_STATUS_NOT_SUPPORT_FILE;

            default:
                break;
        }

        CT_FillData_GetStatus(_pstMovieHandle->u32FillDataHandle, &u32Status);

        if (u32Status == CT_FILL_DATA_STATUS_ERROR)
        {
            CT_FillData_Stop(_pstMovieHandle->u32FillDataHandle);
            DVB_FILECTRL_FileClose(_enDeviceType, _pstMovieHandle->u32FileHandle);
            return EN_MOV_STATUS_OPEN_FILE_FAIL;
        }

        DVB_DEVCTRL_LookupByMedia(EN_MEDIA_MOVIE, &stMovieDeviceInfo);

        if (FALSE == stMovieDeviceInfo.b8Ready)
        {
            CT_FillData_Stop(_pstMovieHandle->u32FillDataHandle);
            DVB_FILECTRL_FileClose(_enDeviceType, _pstMovieHandle->u32FileHandle);
            return EN_MOV_STATUS_OPEN_FILE_FAIL;
        }
    }

    return EN_MOV_STATUS_SUCCESS;
}

bool8 DVB_Movie_AVStop(void)
{

    MOV_MSG(("Enter DVB_Movie_AVStop\n"));

    if (CT_FillData_Stop(_pstMovieHandle->u32FillDataHandle)!=DRV_OK)
    {
        return FALSE;
    }
    if(DVB_FILECTRL_FileClose(_enDeviceType, _pstMovieHandle->u32FileHandle)!=TRUE)
    {
        return FALSE;
    }
	CT_MPG_ProcessIFrameDetectDisable();
	CT_MPG_ProcessIPBFrameReadyDisable();
	CT_MPG_ProcessAvSyncReadyDisable();
    CT_Movie_AVStop(); 
    _pstMovieHandle->u32TotalTime                   = 0;
    _pstMovieHandle->u32CurrentTime               = 0;
    _pstMovieHandle->b8PauseStatus                 = FALSE;
    _pstMovieHandle->b8FrameCountDetect         = FALSE; 
    _pstMovieHandle->b8TotatTimeDetect          = FALSE;  
    _pstMovieHandle->b8PlayInfoDetect               = FALSE;
    _pstMovieHandle->b8PlayStart                    = FALSE;
    _pstMovieHandle->u32PreFrameCount           = 0;
    
    return TRUE;
}

bool8 DVB_Movie_AVPause(bool8 b8Pause)
{
    if (_pstMovieHandle==NULL)
    {
        return FALSE;
    }

    if (b8Pause)
    {
        CT_MPG_VideoPause(b8Pause);
    }
    else
    {
        CT_Movie_PlayBack(EN_CT_MOVIE_PLAY, 0);
    }

    _pstMovieHandle->b8PauseStatus = b8Pause;

    return TRUE;
}

bool8 DVB_Movie_Play(void)
{                             
	CT_Movie_PlayBack(EN_CT_MOVIE_PLAY, 0);
    
    return TRUE;
}

bool8 DVB_Movie_FastForward(EN_MOVIE_PLAYBACK_FAST enFast)
{
	if (enFast < EN_MOVIE_PLAYBACK_FAST2X || enFast > EN_MOVIE_PLAYBACK_FAST32X)
	{
		return FALSE;
	}

	if (enFast == EN_MOVIE_PLAYBACK_FAST2X)
	{
		CT_Movie_PlayBack(EN_CT_MOVIE_FF, enFast);
	}
	else
	{
		CT_Movie_PlayBack(EN_CT_MOVIE_SCF, enFast);
	}

	return TRUE;
}

bool8 DVB_Movie_BackForward(EN_MOVIE_PLAYBACK_FAST enFast)
{
	if (enFast < EN_MOVIE_PLAYBACK_FAST2X || enFast > EN_MOVIE_PLAYBACK_FAST32X)
	{
		return FALSE;
	}

	CT_Movie_PlayBack(EN_CT_MOVIE_SCB, enFast);

	return TRUE;
}

bool8 DVB_Movie_SlowForward(EN_MOVIE_PLAYBACK_SLOW enSlow)
{
	if (enSlow < EN_MOVIE_PLAYBACK_SLOW2X || enSlow > EN_MOVIE_PLAYBACK_SLOW32X)
	{
		return FALSE;
	}

	CT_Movie_PlayBack(EN_CT_MOVIE_SF, enSlow);

	return TRUE;
}

bool8 DVB_Movie_Step(void)
{
	CT_Movie_PlayBack(EN_CT_MOVIE_STEP, 0);

	return TRUE;
}

EN_MOVIE_STATUS DVB_Movie_DecodeGetStatus(void)
{
    EN_MOVIE_STATUS         enMovieStatus       = EN_MOVIE_STATUS_UN_INIT;
    
    if (_pstMovieHandle==NULL)
    {
        enMovieStatus = EN_MOVIE_STATUS_UN_INIT;
    }
    else
    {
        if (_pstMovieHandle->b8PlayStart==TRUE)
        {   
            if (_pstMovieHandle->b8PauseStatus==TRUE)
            {
                enMovieStatus = EN_MOVIE_STATUS_PAUSE;
            }
            else
            {
                switch(CT_Movie_DecodeGetStatus())
                {
                    case EN_CT_MOVIE_STATUS_PLAY:
                        enMovieStatus = EN_MOVIE_STATUS_PLAY;
                        break;
                    case EN_CT_MOVIE_STATUS_STOP:
                        enMovieStatus = EN_MOVIE_STATUS_STOP;
                        break;    
                    case EN_CT_MOVIE_STATUS_ERROR:
                        enMovieStatus = EN_MOVIE_STATUS_ERROR;
                        break;            
                    default:
                        enMovieStatus = EN_MOVIE_STATUS_PLAY;
                        break;                        
                }                   
            }
        }
        else
        {
            enMovieStatus = EN_MOVIE_STATUS_STOP;
        }
    }
    return enMovieStatus;
}

// file system about
u32 DVB_Movie_GetFileCount(void)
{
	u32 count;
	DVB_DEVCTRL_HoldFs(TRUE, EN_MEDIA_MOVIE);
	count = DVB_FILECTRL_GetFileCount(_enDeviceType, EN_FILE_TYPE_MOVIE);
	DVB_DEVCTRL_HoldFs(FALSE, EN_MEDIA_MOVIE);
	return count;
}

u32 DVB_Movie_GetDirCount(void)
{
	u32 count;
	DVB_DEVCTRL_HoldFs(TRUE, EN_MEDIA_MOVIE);
	count = DVB_FILECTRL_GetFileCount(_enDeviceType, EN_FILE_TYPE_DIR);
	DVB_DEVCTRL_HoldFs(FALSE, EN_MEDIA_MOVIE);
	return count;
}

bool8 DVB_Movie_DelFile(u32 u32FileIndex)
{
	u8 au8FileName[13] = {0};
    DVB_DEVCTRL_HoldFs(TRUE, EN_MEDIA_MOVIE);
	DVB_FILECTRL_GetFilenameWithIndex(_enDeviceType, EN_FILE_TYPE_MOVIE, u32FileIndex, au8FileName);
	DVB_DEVCTRL_HoldFs(FALSE, EN_MEDIA_MOVIE);
	return DVB_FILECTRL_FileDelete(_enDeviceType, au8FileName);
}

u16* DVB_Movie_GetFileName(u32 u32FileIndex, u8 *pu8FileName)
{
	u16* LongName;
	DVB_DEVCTRL_HoldFs(TRUE, EN_MEDIA_MOVIE);
	LongName = DVB_FILECTRL_GetFilenameWithIndex(_enDeviceType, EN_FILE_TYPE_MOVIE, u32FileIndex, pu8FileName);
	DVB_DEVCTRL_HoldFs(FALSE, EN_MEDIA_MOVIE);
	
	return LongName;
}

u16* DVB_Movie_GetDirName(u32 u32FileIndex, u8 *pu8DirName)
{
	u16* LongName;
	DVB_DEVCTRL_HoldFs(TRUE, EN_MEDIA_MOVIE);
	LongName = DVB_FILECTRL_GetFilenameWithIndex(_enDeviceType, EN_FILE_TYPE_DIR, u32FileIndex, pu8DirName);
	DVB_DEVCTRL_HoldFs(FALSE, EN_MEDIA_MOVIE);
	
	return LongName;
}

bool8 DVB_Movie_GetCurrentTime(u8 *pu8Hour, u8 *pu8Min, u8 *pu8Sec)
{
	u32 u32Time;

	if (pu8Hour == NULL || pu8Min == NULL || pu8Sec == NULL)
	{
		return FALSE;
	}

	u32Time = CT_Movie_GetCurrentTime();

	*pu8Hour = u32Time/3600;
	*pu8Min = (u32Time%3600)/60;
	*pu8Sec = u32Time%60;

	return TRUE;
}

bool8 DVB_Movie_GetMovieInfo(DVB_MOVIE_INFO *pstMovieInfo)
{
	if (pstMovieInfo == NULL)
	{
		return FALSE;
	}

	if (CT_Movie_GetMovieInfo((CT_MOVIE_INFO *)pstMovieInfo) == FALSE)
	{
		return FALSE;
	}

	return TRUE;
}
bool8 DVB_Movie_GetStatus(void)
{
	return _b8MovDecodingMode;
}

/*******************************************************************************************/
EN_DRV_RESULT DVB_Movie_ReadFsData(u8* pu8Puffer,  u32 u32Offset, u32 u32ReadLen)
{   
	u32 u32Count = 0;
	ST_PENDEV_HANDLEINFO stDeviceInfo;

	if ((_pstMovieHandle==NULL)||(_pstMovieHandle->u32MovDataLen==0))
	{
		return DRVERR_NOTOK;
	}            

	if ((pu8Puffer==NULL)||(u32ReadLen==0))
	{
		MOV_DBG(("\n>> DVB_Movie_ReadFsData : Fail"));
		return DRVERR_NOTOK;
	}            

	if ((u32Offset+u32ReadLen) > _pstMovieHandle->u32MovDataLen)
	{                                 
		u32ReadLen = _pstMovieHandle->u32MovDataLen - u32Offset;
	}

	DVB_DEVCTRL_LookupByMedia(EN_MEDIA_MOVIE ,&stDeviceInfo);
	if(stDeviceInfo.b8Ready == FALSE)
	{
		return DRVERR_NOTOK;
	}

//	MOV_DBG(("\n>>DVB_IMG_ReadFsData : u32ReadLen = %lu, pu8Puffer = %lx, u32JpgDataLen = %lu, u32Offset = %lu\n", u32ReadLen, pu8Puffer, _pstMovieHandle->u32MovDataLen, u32Offset));

	DVB_DEVCTRL_HoldFs(TRUE, EN_MEDIA_MOVIE);

	DVB_FILECTRL_FileSeek(_enDeviceType, _pstMovieHandle->u32FileHandle, u32Offset, EN_FILE_START); 

	while(u32Count < 3)
	{
		u32 u32ReadLength = 0;

              // Yan/K200, 2008/01/29
              // 璝琌杆竚祇ネぃ铆

⌨️ 快捷键说明

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