📄 pe_consumer_dvd.h
字号:
/*****************************************************************************
******************************************************************************
** **
** Copyright (c) 2006 Videon Central, Inc. **
** All rights reserved. **
** **
** The computer program contained herein contains proprietary information **
** which is the property of Videon Central, Inc. The program may be used **
** and/or copied only with the written permission of Videon Central, Inc. **
** or in accordance with the terms and conditions stipulated in the **
** agreement/contract under which the programs have been supplied. **
** **
******************************************************************************
*****************************************************************************/
/**
* @file pe_consumer_dvd.h
*
* $Revision: 1.9 $
*
* PE Consumer DVD Derived Class Definition
* The PE Consumer moves data from an input stream to a decoder or demux.
*
*/
#ifndef PE_CONSUMER_DVD_H
#define PE_CONSUMER_DVD_H
#include "cDemux.h"
/* NavPck Synchronization States */
typedef enum _tagPE_NVPCK_SYNC
{
PE_NVPCK_SYNC_NORMAL = 0,
PE_NVPCK_SYNC_FIRST,
PE_NVPCK_SYNC_SECOND,
} PE_NVPCK_SYNC;
class cPEConsumer_DVD : public cPEConsumer
{
public:
cPEConsumer_DVD()
{
m_fStillOn = FALSE;
m_fFlushPlayback = FALSE;
m_fFlushNavPacks = FALSE;
m_fPauseAfterVOBU = FALSE;
m_pSPUStream = NULL;
m_pSPUStreamBuffer = NULL;
m_pNvPckStream = NULL;
m_pNvPckStreamBuffer = NULL;
m_pBypassStream = NULL;
m_pBypassStreamBuffer = NULL;
m_pDemuxInStream = NULL;
m_pDemuxStreamBuffer = NULL;
pcDemux = NULL;
m_spu_decoder = NULL;
m_spu_pesID = -1;
m_spu_subID = -1;
m_semPSDemxMsgSync = 0;
task_navpack = 0;
task_playback = 0;
m_FirstTitleKeyPack = FALSE;
m_fFirstPlay = TRUE;
}
~cPEConsumer_DVD()
{
}
PE_STATUS Configure(PE_CONSUMER_CONFIG_INFO *pConfigInfo);
PE_STATUS Reset(void);
PE_STATUS DemuxAddSubpicPS(LONG lPID, LONG lSubID, PVOID pDecoder);
PE_STATUS DemuxRemoveSubpicPS(void);
PE_STATUS DemuxGetSubpicPS(LONG *plPID, LONG *plSubID, BOOLEAN *pfIsActive);
/* may need to override these for HDDVD */
virtual PE_STATUS Run(void);
virtual PE_STATUS Flush(void);
virtual PE_STATUS Stop(BOOLEAN fHoldPicture);
virtual PE_STATUS SetRate(PE_ISTREAMCTRL_PLAYRATE *pPlayRate);
virtual PE_STATUS SetVideoDecodeRate(PE_ISTREAMCTRL_PLAYRATE *pPlayRate);
virtual ULONG NavPackTask(PVOID pvParam);
virtual ULONG PlaybackTask(PVOID pvParam);
virtual PE_STATUS RequestDecodeDoneEvent(void);
/* synchronizes the subpics to the AV presentation */
PE_STATUS SubpicSyncCallback(TIME90k time90k_TargPTS, TIME90k *ptime90k_CurrSTC);
protected:
/* to following are protected because the hddvd/vr consumers needs access to them */
cDemux* pcDemux;
BOOLEAN m_fPauseAfterVOBU;
BOOLEAN m_fFlushNavPacks;
BOOLEAN m_fFlushPlayback;
PVOID m_spu_decoder;
/* cStreams */
DEMUXIOSTREAM* m_pDemuxInStream;
PVOID m_pDemuxStreamBuffer;
DEMUXIOSTREAM* m_pNvPckStream;
PVOID m_pNvPckStreamBuffer;
DEMUXIOSTREAM* m_pSPUStream;
PVOID m_pSPUStreamBuffer;
DEMUXIOSTREAM* m_pBypassStream;
PVOID m_pBypassStreamBuffer;
/* aacs and css params */
BYTE m_DecodeKey[5];
BOOLEAN m_FirstTitleKeyPack;
/* nav pack sync */
TIME90k m_time90k_NavPackPTS;
ULONG m_ulNavPckID;
PE_NVPCK_SYNC m_NvPckSyncState;
ULONG m_LastTickCount;
TIME90k m_LastPTS;
LONG m_E_STD_Offset;
BOOLEAN m_E_STD_Active;
BOOLEAN m_E_STD_Pending;
BOOLEAN m_fWasPaused;
ULONG m_SPULastNavPackTime;
int64 m_E_STD_Time;
ULONG m_LastSPUTargetPTS;
ULONG m_E_STD_StartPTM;
ULONG m_E_STD_EndPTM;
BOOLEAN m_E_STD_RolledOver;
/* semaphores */
OS_SEM_ID m_semPSDemxMsgSync;
OS_SEM_ID m_semNavPackState;
/* tasks */
int task_navpack;
int task_playback;
/* synchronizes the navpack to the AV presentation
* this can be used by DVD and HDDVD */
void NavPackAVSync(TIME90k time90k_NavPackPTS, ULONG ulLastTickCount, BOOLEAN fVideoExists);
PE_STATUS SendStreamMsgToDemux(cPayload *pPayload, PEINPUTMESSAGE *pInMessage);
/* may need to override these for HDDVD */
virtual PE_STATUS CreateStreams(void);
virtual PE_STATUS DeleteStreams(void);
virtual PE_STATUS CreatePSDemux(void);
virtual PE_STATUS DeletePSDemux(void);
/* may need to override these for HDDVD */
virtual PE_STATUS processData(PEINPUTMESSAGE *pInMessage);
virtual PE_STATUS processInfo(PEINPUTMESSAGE *pInMessage);
virtual PE_STATUS ProcessEndOfStream(PVOID StreamContext);
private:
/* everything else lets keep private */
/* spu params */
LONG m_spu_pesID;
LONG m_spu_subID;
BOOLEAN m_fFirstPlay;
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -