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

📄 hxplay.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    {        m_pGroupManager->SetMasterTAC(m_pMasterTAC);    }#endif /* HELIX_FEATURE_ADVANCEDGROUPMGR && HELIX_FEATURE_MASTERTAC */#if defined(HELIX_FEATURE_NESTEDMETA)    m_pPersistentComponentManager->AddRef();    if (m_pGroupManager)    {        m_pGroupManager->AddSink(m_pPersistentComponentManager);    }#endif /* HELIX_FEATURE_NESTEDMETA */#if defined(HELIX_FEATURE_AUTOUPGRADE)    m_pUpgradeCollection = new HXUpgradeCollection;    m_pUpgradeCollection->AddRef();#endif /* HELIX_FEATURE_AUTOUPGRADE */#if defined(HELIX_FEATURE_EVENTMANAGER)    // Get our own IUnknown interface    IUnknown* pUnknown = NULL;    QueryInterface(IID_IUnknown, (void**) &pUnknown);    if (pUnknown)    {        // Initialize the renderer event manager        m_pEventManager = new CRendererEventManager(pUnknown);        if (m_pEventManager) m_pEventManager->AddRef();    }    HX_RELEASE(pUnknown);#endif /* #if defined(HELIX_FEATURE_EVENTMANAGER) */}HXPlayer::~HXPlayer(){    CloseAllRenderers(m_nCurrentGroup);    ResetPlayer();    Close();    HX_DELETE(m_pSourceMap);    HX_DELETE(m_pSharedWallClocks);}///////////////////////////////////////////////////////////////////////////      Method://              IUnknown::QueryInterface//      Purpose://              Implement this to export the interfaces supported by your//              object.//STDMETHODIMP HXPlayer::QueryInterface(REFIID riid, void** ppvObj){#if defined(HELIX_FEATURE_PACKETHOOKMGR)    // create the following objects only if needed    if (!m_pPacketHookManager && IsEqualIID(riid, IID_IHXPacketHookManager))    {        m_pPacketHookManager = new PacketHookManager(this);        if (m_pPacketHookManager)        {            m_pPacketHookManager->AddRef();        }    }#endif /* HELIX_FEATURE_PACKETHOOKMGR */    QInterfaceList qiList[] =        {            { GET_IIDHANDLE(IID_IHXPlayer), (IHXPlayer*)this },            { GET_IIDHANDLE(IID_IHXPlayer2), (IHXPlayer2*)this },            { GET_IIDHANDLE(IID_IHXPendingStatus), (IHXPendingStatus*)this },#if defined(HELIX_FEATURE_AUTHENTICATION)            { GET_IIDHANDLE(IID_IHXAuthenticationManager), (IHXAuthenticationManager*)this },            { GET_IIDHANDLE(IID_IHXAuthenticationManager2), (IHXAuthenticationManager2*)this },#endif /* HELIX_FEATURE_AUTHENTICATION */            { GET_IIDHANDLE(IID_IHXGroupSink), (IHXGroupSink*)this },            { GET_IIDHANDLE(IID_IHXAudioPlayerResponse), (IHXAudioPlayerResponse*)this },            { GET_IIDHANDLE(IID_IHXRegistryID), (IHXRegistryID*)this },            { GET_IIDHANDLE(IID_IHXErrorMessages), (IHXErrorMessages*)this },            { GET_IIDHANDLE(IID_IHXLayoutSiteGroupManager), (IHXLayoutSiteGroupManager*)this },#if defined(HELIX_FEATURE_NESTEDMETA)            { GET_IIDHANDLE(IID_IHXPersistenceManager), (IHXPersistenceManager*)this },#endif /* HELIX_FEATURE_NESTEDMETA */            { GET_IIDHANDLE(IID_IHXDriverStreamManager), (IHXDriverStreamManager*)this },            { GET_IIDHANDLE(IID_IHXRendererUpgrade), (IHXRendererUpgrade*)this },            { GET_IIDHANDLE(IID_IHXInternalReset), (IHXInternalReset*)this },            { GET_IIDHANDLE(IID_IHXPlayerState), (IHXPlayerState*)this },#if defined(HELIX_FEATURE_PLAYERNAVIGATOR)            { GET_IIDHANDLE(IID_IHXPlayerNavigator), (IHXPlayerNavigator*)this },#endif /* HELIX_FEATURE_PLAYERNAVIGATOR */            { GET_IIDHANDLE(IID_IHXClientStatisticsGranularity), (IHXClientStatisticsGranularity*)this },            { GET_IIDHANDLE(IID_IHXPlayerPresentation), (IHXPlayerPresentation*)this },#if defined(HELIX_FEATURE_RECORDCONTROL)            { GET_IIDHANDLE(IID_IHXRecordManager), (IHXRecordManager*)this },#endif /* HELIX_FEATURE_RECORDCONTROL */            { GET_IIDHANDLE(IID_IUnknown), (IUnknown*)(IHXPlayer*)this },            { GET_IIDHANDLE(IID_IHXOverrideDefaultServices), (IHXOverrideDefaultServices*)this },        };    HX_RESULT res = ::QIFind(qiList, QILISTSIZE(qiList), riid, ppvObj);        // if it succeeded, return immediately...    if (res == HXR_OK)    {        return res;    }    // ...otherwise continue onward        if (m_pClientViewSource &&             IsEqualIID(riid, IID_IHXViewSourceCommand))    {        AddRef();        *ppvObj = (IHXViewSourceCommand*)this;        return HXR_OK;    }    else if (m_pErrorSinkControl &&             m_pErrorSinkControl->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }    else if (m_pAdviseSink &&             m_pAdviseSink->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }    else if (m_pAudioPlayer &&             m_pAudioPlayer->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#if defined(HELIX_FEATURE_PREFERENCES)    else if (m_pPreferences &&             m_pPreferences->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* HELIX_FEATURE_PREFERENCES */#if defined(HELIX_FEATURE_HYPER_NAVIGATE)    else if (m_pHyperNavigate &&             m_pHyperNavigate->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* HELIX_FEATURE_HYPER_NAVIGATE */#if defined(HELIX_FEATURE_ASM)    /* m_pASM will be available on a per player basis ONLY under Load testing */    else if (m_pASM &&             m_pASM->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* HELIX_FEATURE_ASM */#if defined(HELIX_FEATURE_VIDEO)    else if (m_pSiteManager &&             m_pSiteManager->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* HELIX_FEATURE_VIDEO */#if defined(HELIX_FEATURE_AUTOUPGRADE)    else if (m_pUpgradeCollection &&             m_pUpgradeCollection->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* HELIX_FEATURE_AUTOUPGRADE */#if defined(HELIX_FEATURE_PACKETHOOKMGR)    else if (m_pPacketHookManager &&             m_pPacketHookManager->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* HELIX_FEATURE_PACKETHOOKMGR */#if defined(HELIX_FEATURE_BASICGROUPMGR)    else if (m_pGroupManager &&             m_pGroupManager->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* HELIX_FEATURE_BASICGROUPMGR */    else if (m_pViewPortManager &&             m_pViewPortManager->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#if defined(HELIX_FEATURE_MEDIAMARKER)    else if (m_pMediaMarkerManager &&             m_pMediaMarkerManager->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* #if defined(HELIX_FEATURE_MEDIAMARKER) */#if defined(HELIX_FEATURE_EVENTMANAGER)    else if (m_pEventManager &&             m_pEventManager->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* #if defined(HELIX_FEATURE_EVENTMANAGER) */#if defined(HELIX_FEATURE_NESTEDMETA)    else if (m_pPersistentComponentManager &&             m_pPersistentComponentManager->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }#endif /* HELIX_FEATURE_NESTEDMETA */    else if (m_pPlugin2Handler &&             m_pPlugin2Handler->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }    else if (m_pClient &&             m_pClient->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }    else if (m_pEngine &&             m_pEngine->QueryInterface(riid, ppvObj) == HXR_OK)    {        return HXR_OK;    }    /* DO NOT ADD ANY MROE QIs HERE. ADD IT BEFORE m_pClient QI*/    *ppvObj = NULL;    return HXR_NOINTERFACE;}///////////////////////////////////////////////////////////////////////////      Method://              IUnknown::AddRef//      Purpose://              Everyone usually implements this the same... feel free to use//              this implementation.//STDMETHODIMP_(ULONG32) HXPlayer::AddRef(){    return InterlockedIncrement(&m_lRefCount);}///////////////////////////////////////////////////////////////////////////      Method://              IUnknown::Release//      Purpose://              Everyone usually implements this the same... feel free to use//              this implementation.//STDMETHODIMP_(ULONG32) HXPlayer::Release(){    if (InterlockedDecrement(&m_lRefCount) > 0)    {        return m_lRefCount;    }    if(m_lRefCount == 0)    {        delete this;    }    return 0;}// *** IHXPlayer methods ***/************************************************************************ *      Method: *              IHXPlayer::GetClientEngine *      Purpose: *              Get the interface to the client engine object of which the player *              is a part of. * */STDMETHODIMP HXPlayer::GetClientEngine(IHXClientEngine* &pEngine){    pEngine = m_pEngine;    if (pEngine)    {        pEngine->AddRef();    }    return HXR_OK;}/************************************************************************ *      Method: *              IHXPlayer::Begin *      Purpose: *              Tell the player to begin playback of all its sources. * */STDMETHODIMP HXPlayer::Begin(void){    HX_RESULT theErr = HXR_OK;    m_bCoreLocked = TRUE;    m_pCoreMutex->Lock();    theErr = BeginPlayer();    m_pCoreMutex->Unlock();    m_bCoreLocked = FALSE;    return theErr;}HX_RESULTHXPlayer::BeginPlayer(void){    HX_RESULT   theErr = HXR_OK;    m_bUserHasCalledBegin   = TRUE;    m_bFastStartInProgress  = FALSE;    if (!m_bInternalPauseResume && !m_bIsFirstBegin && !m_bPaused)    {        return HXR_OK;    }    if (m_bIsLive && m_bPaused && m_bLiveSeekToBeDone)    {        m_ulElapsedPauseTime = CALCULATE_ELAPSED_TICKS(m_ulTimeOfPause, HX_GET_TICKCOUNT());        /* This is an internal seek due to live pause */        theErr = SeekPlayer(m_ulLiveSeekTime + m_ulElapsedPauseTime);    }    m_bPaused = FALSE;    if (m_bIsFirstBegin)    {        UpdateSourceActive();    }    if (!theErr)    {        theErr = UpdateStatistics();    }    if (!theErr)    {        UpdateCurrentPlayTime( m_pAudioPlayer->GetCurrentPlayBackTime() );    }    /* Unregister all the sources that are not currently active */    UnregisterNonActiveSources();    if (!m_bIsDone)    {        CheckSourceRegistration();        CHXMapPtrToPtr::Iterator ndxSources = m_pSourceMap->Begin();        /* Check if we are done. This may be TRUE for empty files */        for (;  !theErr && ndxSources != m_pSourceMap->End(); ++ndxSources)        {            SourceInfo* pSourceInfo = (SourceInfo*) (*ndxSources);            theErr = pSourceInfo->Begin();        }    }    /* Only send this OnBegin()'s if not the first begin. In the case     * of the first begin, these are actually sent after the header's     * arrive...     */    if (!theErr && !m_bIsFirstBegin && !m_bInternalPauseResume && !m_bInternalReset && m_pAdviseSink)    {        m_pAdviseSink->OnBegin(m_ulCurrentPlayTime);    }    m_bIsFirstBegin = FALSE;    m_bBeginPending = TRUE;    m_bFastStartInProgress  = FALSE;    if (!m_ToBeginRendererList.IsEmpty())    {        CheckBeginList();    }    return (theErr);}/************************************************************************ *      Method: *              IHXPlayer::Stop *      Purpose: *              Tell the player to stop playback of all its sources. * */STDMETHODIMP HXPlayer::Stop(void){    // we want to protect against the TLC opening another URL    if (m_bSetModal)    {        return HXR_OK;    }    m_bCoreLocked = TRUE;    m_pCoreMutex->Lock();    StopPlayer(END_STOP);    m_pCoreMutex->Unlock();    m_bCoreLocked = FALSE;    return HXR_OK;}voidHXPlayer::StopPlayer(EndCode endCode){    StopAllStreams(endCode);    /* Reset player condition */    ResetPlayer();}/************************************************************************ *      Method: *              IHXPlayer::Pause *      Purpose: *              Tell the player to pause playback of all its sources. * */STDMETHODIMP HXPlayer::Pause(void){    HX_RESULT theErr = HXR_OK;    m_bCoreLocked = TRUE;    m_pCoreMutex->Lock();    theErr = PausePlayer();    m_pCoreMutex->Unlock();    m_bCoreLocked = FALSE;    return theErr;}HX_RESULTHXPlayer::PausePlayer(BOOL bNotifyTLC /* = TRUE*/){    HX_RESULT theErr = HXR_OK;    if (m_bIsDone)    {        return HXR_UNEXPECTED;    }

⌨️ 快捷键说明

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