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

📄 pe_consumer_dvd.h

📁 这是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 + -