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

📄 playhpnv.cpp

📁 linux下的一款播放器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    // if alternate hypernavigation says it doesn't implement    if (hxrResult != HXR_NOTIMPL)	return(hxrResult);    return HandleCommands(pURL, pTargetInstance, pParams);}STDMETHODIMP PlayerHyperNavigate::Hint(const char* pURL,                          const char* pTarget,                          IHXValues*  pParams){    HX_RESULT		    hxrResult = HXR_NOTIMPL;    IHXHyperNavigateHint*   pHyperNavigateHint = NULL;    if (m_pHyperNavigateWithContext)    {	m_pHyperNavigateWithContext->QueryInterface(IID_IHXHyperNavigateHint, (void**) &pHyperNavigateHint);    }    if (!pHyperNavigateHint && m_pHyperNavigate)    {	m_pHyperNavigate->QueryInterface(IID_IHXHyperNavigateHint, (void**) &pHyperNavigateHint);    }    if (pHyperNavigateHint)    {	hxrResult = pHyperNavigateHint->Hint(pURL, pTarget, pParams);	HX_RELEASE(pHyperNavigateHint);    }    return hxrResult;}HX_RESULTPlayerHyperNavigate::HandleCommands(const char* pURL, const char* pTarget, IHXValues* pParams){    HX_RESULT	hxrResult = HXR_NOTIMPL;    char*	pArgument = NULL;    //    // Check for player commands.    //    if (strnicmp(pURL, URL_COMMAND, sizeof(URL_COMMAND) - 1) == 0)    {	const char *pOpen = HXFindChar(pURL, '(');	const char *pClose = HXReverseFindChar(pURL, ')');	if (! pOpen || ! pClose || (pOpen > pClose))	{	    return HXR_FAILED;	}	// beginning of actual player command	const char* pCommand = pURL + sizeof(URL_COMMAND) - 1;	int   iLength = pClose - (pOpen + 1);	if (strnicmp(pCommand, URL_COMMAND_SEEK, sizeof(URL_COMMAND_SEEK) - 1) == 0)	{	    if (m_pPlayer)	    {		pArgument = new_string(pOpen + 1, iLength);		if (!pArgument)		{		    return HXR_OUTOFMEMORY;		}		NPTime  time(pArgument);		hxrResult = m_pPlayer->Seek(time);	    }	}	else if (strnicmp(pCommand, URL_COMMAND_PLAY, sizeof(URL_COMMAND_PLAY) - 1) == 0)	{	    if ((iLength == 0) && m_pPlayer)	    {		hxrResult = m_pPlayer->Begin();	    }	}	else if (strnicmp(pCommand, URL_COMMAND_PAUSE, sizeof(URL_COMMAND_PAUSE) - 1) == 0)	{	    if ((iLength == 0) && m_pPlayer)	    {		hxrResult = m_pPlayer->Pause();	    }	}	else if (strnicmp(pCommand, URL_COMMAND_STOP, sizeof(URL_COMMAND_STOP) - 1) == 0)	{	    if ((iLength == 0) && m_pPlayer)	    {		hxrResult = m_pPlayer->Stop();	    }	}	else if (strnicmp(pCommand, URL_COMMAND_PREVIOUSCLIP, sizeof(URL_COMMAND_PREVIOUSCLIP) - 1) == 0)	{	    if ((iLength == 0) && m_pGroupManager)	    {		UINT16  iCurrent = 0;				m_pGroupManager->GetCurrentGroup(iCurrent);		// play previous clip if one exists		if ((iCurrent > 0) && ((iCurrent - 1) < m_pGroupManager->GetGroupCount()))		{		    hxrResult = m_pGroupManager->SetCurrentGroup(iCurrent - 1);		}	    }	}	else if (strnicmp(pCommand, URL_COMMAND_NEXTCLIP, sizeof(URL_COMMAND_NEXTCLIP) - 1) == 0)	{	    if ((iLength == 0) && m_pGroupManager)	    {		UINT16  iCurrent = 0;				m_pGroupManager->GetCurrentGroup(iCurrent);		// play next clip if one exists		if (iCurrent < m_pGroupManager->GetGroupCount())		{		    hxrResult = m_pGroupManager->SetCurrentGroup(iCurrent + 1);		}	    }	}	else if (strnicmp(pCommand, URL_COMMAND_ADSCOOKIES, sizeof(URL_COMMAND_ADSCOOKIES) - 1) == 0)	{	    pArgument = new_string(pOpen + 1, iLength);	    if (!pArgument)	    {		return HXR_OUTOFMEMORY;	    }	    hxrResult = SendAdsCookies(pArgument);	}	HX_VECTOR_DELETE(pArgument);	return hxrResult;    }    else if (pTarget && stricmp(pTarget, "_player") == 0)    {	/* we want to unwind the stack...since it may come from	 * an OnTimeSync() into syncMM renderer...and if we call 	 * OpenURL() syncronously, bad things happen in the	 * core (srcinfo gets deleted).	 * use our friendly scheduler...	 */	HX_RELEASE(m_pPendingRequest);	IHXCommonClassFactory* pCommonClassFactory = NULL;	m_pPlayer->QueryInterface(IID_IHXCommonClassFactory,						(void**)&pCommonClassFactory);	if (pCommonClassFactory)	{	    pCommonClassFactory->CreateInstance(IID_IHXRequest, (void**) &m_pPendingRequest);	    HX_ASSERT(m_pPendingRequest);	    if (m_pPendingRequest)	    {		m_pPendingRequest->SetURL(pURL);		if (pParams)		{		    m_pPendingRequest->SetRequestHeaders(pParams);		}	    }	    HX_RELEASE(pCommonClassFactory);	}	if (m_pScheduler && m_pPendingRequest)	{	    if (!m_CallbackHandle)	    {		m_CallbackHandle = m_pScheduler->RelativeEnter((IHXCallback*) this, 0);	    }	}	else	{	    Func();	}	return HXR_OK;    }    return HXR_FAILED;}///////////////////////////////////////////////////////////////////////////  Method://  	IHXHyperNavigateRedirectResponse::RedirectDone//STDMETHODIMPPlayerHyperNavigate::RedirectDone(IHXBuffer*   pBuffer){    if (pBuffer && m_pHyperNavigate)    {	// deligate to alternate hypernavigation interface	return m_pHyperNavigate->GoToURL((const char*)pBuffer->GetBuffer(), NULL);    }    return HXR_OK;}/************************************************************************ *	Method: *	IHXFileSystemManagerResponse::InitDone *	Purpose: */STDMETHODIMPPlayerHyperNavigate::InitDone(HX_RESULT status){    return HXR_OK;}STDMETHODIMPPlayerHyperNavigate::FileObjectReady(HX_RESULT status,				     IUnknown* pObject){       HX_RESULT		theErr = HXR_OK;    IHXHTTPRedirect*	pRedirect = NULL;    if (!pObject)    {	theErr = HXR_FAILED;    }    else if (HXR_OK != pObject->QueryInterface(IID_IHXFileObject, (void**)&m_pFileObject))    {	theErr = HXR_FAILED;    }    else if (HXR_OK != pObject->QueryInterface(IID_IHXHTTPRedirect, (void**)&pRedirect))    {	theErr = HXR_FAILED;    }    else    {	theErr = pRedirect->Init((IHXHTTPRedirectResponse*)this);    }    HX_RELEASE(pRedirect);    return theErr;}/* * The following method is deprecated and should return HXR_NOTIMPL */STDMETHODIMPPlayerHyperNavigate::DirObjectReady(HX_RESULT status,				    IUnknown* pDirObject){    return HXR_NOTIMPL;}/* *	IHXCallback methods */STDMETHODIMPPlayerHyperNavigate::Func(){    m_CallbackHandle = 0;    if (m_pPlayer && m_pPendingRequest)    {	IHXPlayer2* pPlayer2 = NULL;	m_pPlayer->QueryInterface(IID_IHXPlayer2, (void**) &pPlayer2);	pPlayer2->OpenRequest(m_pPendingRequest);	m_pPlayer->Begin();	pPlayer2->Release();	HX_RELEASE(m_pPendingRequest);    }    return HXR_OK;}HX_RESULTPlayerHyperNavigate::SendAdsCookies(char* pURL){    HX_RESULT		    hr = HXR_OK;    IHXRequest*	    pRequest = NULL;    IHXFileSystemManager*  pFileSystemManager = NULL;    IHXCommonClassFactory* pCommonClassFactory = NULL;    if (HXR_OK != m_pPlayer->QueryInterface(IID_IHXCommonClassFactory,					    (void**)&pCommonClassFactory))    {	hr = HXR_FAILED;    }    else if (HXR_OK != pCommonClassFactory->CreateInstance(CLSID_IHXFileSystemManager,						     (void**)&pFileSystemManager))    {	hr = HXR_FAILED;    }    else if (HXR_OK != pFileSystemManager->Init((IHXFileSystemManagerResponse*)this))    {	hr = HXR_FAILED;    }    else    {	IHXPreferences* pPreferences = NULL;	if (m_pPlayer->QueryInterface(IID_IHXPreferences, (void **) &pPreferences) == HXR_OK)	{	    IHXRegistry* pRegistry = NULL;   	    m_pPlayer->QueryInterface(IID_IHXRegistry, (void**)&pRegistry);	    ::SetRequest(pURL,			 FALSE,			 pPreferences,			 pRegistry,			 NULL,			 pRequest);	    HX_RELEASE(pRegistry);	}	HX_RELEASE(pPreferences);	hr = pFileSystemManager->GetNewFileObject(pRequest, 0);    }    HX_RELEASE(pRequest);    HX_RELEASE(pFileSystemManager);    HX_RELEASE(pCommonClassFactory);    return hr;	}

⌨️ 快捷键说明

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