亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hxaudply.cpp

?? linux下的一款播放器
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
/************************************************************************ *  Method: *		CHXAudioPlayer::GetStreamCount *	Purpose: *		Get the number of streams associated with this player. */UINT16 CHXAudioPlayer::GetStreamCount(){    return m_pStreamList->GetCount();}/************************************************************************ *  Method: *		CHXAudioPlayer::SetStreamInfoResponse *	Purpose: *		Add the stream info response interface to our list. */STDMETHODIMP CHXAudioPlayer::SetStreamInfoResponse(    IHXAudioStreamInfoResponse*    pResponse){    if (!pResponse || !m_pStreamRespList)    {	return HXR_FAILED;    }    /* Add to the stream response list */    LISTPOSITION lPos = m_pStreamRespList->Find(pResponse);    if (lPos)    {	return HXR_FAILED;    }    m_pStreamRespList->AddTail((void*) pResponse);    pResponse->AddRef();         // Released in destructor    return HXR_OK;}/************************************************************************ *  Method: *  CHXAudioPlayer::RemoveStreamInfoResponse *  Purpose: *  Remove stream info response that was added earlier */STDMETHODIMP CHXAudioPlayer::RemoveStreamInfoResponse(    IHXAudioStreamInfoResponse*    pResponse){    /* Add to the stream response list */    if (pResponse && m_pStreamRespList)    {	LISTPOSITION lPos = m_pStreamRespList->Find(pResponse);	if (lPos)	{	    m_pStreamRespList->RemoveAt(lPos);	    pResponse->Release();         // Released in destructor	    return HXR_OK;	}    }    return HXR_FAILED;}UINT16CHXAudioPlayer::NumberOfResumedStreams(void){    UINT16 uNumActive = 0;    if (m_pStreamList && m_pStreamList->GetCount() > 0)    {	CHXAudioStream* pStream = 0;	CHXSimpleList::Iterator lIter = m_pStreamList->Begin();	for (; lIter != m_pStreamList->End(); ++lIter)	{	    pStream = (CHXAudioStream*) (*lIter);	    if (pStream->GetState() == E_PLAYING)	    {		uNumActive++;	    }	}    }    return uNumActive;}void CHXAudioPlayer::StreamInitialized(CHXAudioStream* pAudioStream){    /* If we are already initialized, it means this stream was added mid-     * presentation and gogt initialized later. In this case, report arrival     * of this stream to all StreamInfoResponse objects registered with the     * player     */    if (m_pStreamRespList && m_bInited)    {	IHXAudioStreamInfoResponse* pAudioStreamInfoResponse = 0;	CHXSimpleList::Iterator lIter = m_pStreamRespList->Begin();	for (; lIter != m_pStreamRespList->End(); ++lIter) 	{	    pAudioStreamInfoResponse = (IHXAudioStreamInfoResponse*) (*lIter);	    pAudioStreamInfoResponse->OnStream(pAudioStream);	}    }    m_bHasStreams = TRUE;}ULONG32	CHXAudioPlayer::GetInitialPushdown(BOOL bAtStart /* = FALSE*/){    /* If there are any audio streams, initial pushdown is session's     * initial pushdown     */    if (m_pStreamList->GetCount() > 0)    {        ULONG32 ulRet =             m_Owner->GetInitialPushdown(bAtStart) + m_ulGranularity;#ifdef HELIX_FEATURE_MIN_HEAP        // The MIN_HEAP code seems to need 1 extra block's worth        // of data to avoid rebuffers during playback. This        // is a low impact temporary solution that fixes the problem.        ulRet += m_ulGranularity;#endif /* HELIX_FEATURE_MIN_HEAP */        return ulRet;    }    else    {	return 0;    }}/************************************************************************ *  Method: *      CHXAudioPlayer::OnTimerCallback *  Purpose: *      Timer callback when implementing fake timeline. */void	CHXAudioPlayer::OnTimerCallback(){    ULONG32 ulCurrentTime	= HX_GET_TICKCOUNT();    m_ulIncreasingTimer		+= CALCULATE_ELAPSED_TICKS(m_ulLastFakeCallbackTime, ulCurrentTime);    m_ulLastFakeCallbackTime    = ulCurrentTime;    OnTimeSync(m_ulIncreasingTimer);    /* A call to timesync may result in stopping     * playback and we do not want to have any more     * time syncs.     */    /* Put this back in the scheduler.     */    if (m_bInited && m_eState == E_PLAYING && !m_ulCallbackID)    {	*m_pFakeAudioCBTime += (int) (m_ulGranularity*1000);	m_ulCallbackID = m_pScheduler->AbsoluteEnter( this,                                                      *((HXTimeval*)m_pFakeAudioCBTime));    }}voidCHXAudioPlayer::SetLive(BOOL bIsLive){    m_bIsLive = bIsLive;    CHXAudioStream* s = 0;    CHXSimpleList::Iterator lIter = m_pStreamList->Begin();    for (; lIter != m_pStreamList->End(); ++lIter)    {	s = (CHXAudioStream*) (*lIter);	s->SetLive(m_bIsLive);    }}voidCHXAudioPlayer::AudioFormatNowKnown(void){    HX_ASSERT(m_bInited);    /* When : More than one audio stream created after initialization     * and one of them already called this function earlier     */    if (m_bHasStreams)    {	return;    }    m_bHasStreams   = TRUE;    m_bInited	= FALSE;    /* internal setup */    HX_RESULT theErr = Setup(m_ulGranularity);    if (theErr != HXR_OK)    {	IHXErrorMessages* pErrorMessage = NULL;	m_pContext->QueryInterface(IID_IHXErrorMessages, (void**) &pErrorMessage);	if (pErrorMessage)	{	    pErrorMessage->Report(HXLOG_ERR, theErr, 0, NULL, NULL);	    pErrorMessage->Release();	}	return;    }    HX_ASSERT(m_bInited);    /* If we have not yet resumed, it is simply setting the audio     * player from fake timeline mode to audio timeline mode.     * Instead if we have already been resumed and are acting as a     * fake timeline, we need to kinda pause from being a fake timeline to     * an audio timeline, In this process, we may have to seek the audio     * device to generate right timesyncs.     */    /* If we are already resumed, we need to call resume again internally */    if (m_bIsResumed)    {	StopFakeTimeline();	Seek(m_ulCurrentTime);	// only resume the owner if we are in a play state...	// otherwise owner will be resumed when the player gets resumed.	if (m_eState == E_PLAYING)	{	    m_Owner->Resume();	}    }    else    {	/* Cool! HXPlayer will call resume later */    }}voidCHXAudioPlayer::RegisterRealAudioStream(CHXAudioStream* pAudioStream){    if (!m_pRealAudioStreamList)    {	m_pRealAudioStreamList = new CHXSimpleList;    }    m_pRealAudioStreamList->AddTail((void*) pAudioStream);    m_bAdjustForRealAudio = TRUE;}voidCHXAudioPlayer::UnRegisterRealAudioStream(CHXAudioStream* pAudioStream){    if (!m_pRealAudioStreamList)    {	return;    }    LISTPOSITION posStream = m_pRealAudioStreamList->Find((void*) pAudioStream);    if (posStream)    {	m_pRealAudioStreamList->RemoveAt(posStream);    }    /* Check if there are any more RealAudio Streams registered */    if (m_pRealAudioStreamList->GetCount() == 0)    {	m_bAdjustForRealAudio = FALSE;    }}BOOLCHXAudioPlayer::IsAudioOnlyTrue(void){    BOOL bRetValue = TRUE;    IHXPlayer* pPlayer = NULL;    m_pContext->QueryInterface(IID_IHXPlayer, (void**)&pPlayer);    HX_ASSERT(pPlayer);    UINT16 uNumSources = pPlayer->GetSourceCount();    IUnknown*		pUnknown	= NULL;    IHXStreamSource*	pStreamSource	= NULL;    IHXStream*		pStream		= NULL;    for (UINT16 i=0; bRetValue && i < uNumSources; i++)    {	pPlayer->GetSource(i, pUnknown);	pUnknown->QueryInterface(IID_IHXStreamSource,				 (void**) &pStreamSource);	HX_RELEASE(pUnknown);	HX_ASSERT(pStreamSource);	UINT16 uNumStreams = pStreamSource->GetStreamCount();	for (UINT16 j=0; bRetValue && j < uNumStreams; j++)	{	    pStreamSource->GetStream(j, pUnknown);	    pUnknown->QueryInterface(IID_IHXStream,				     (void**) &pStream);	    HX_RELEASE(pUnknown);	    HX_ASSERT(pStream);	    IHXValues* pHeader = pStream->GetHeader();	    if (pHeader)	    {		if (!IsThisAudioStream(pHeader))		{		    bRetValue = FALSE;		}		pHeader->Release();	    }	    pStream->Release();	}	HX_RELEASE(pStreamSource);    }    HX_RELEASE(pPlayer);    return bRetValue;}BOOLCHXAudioPlayer::IsThisAudioStream(IHXValues* pHeader){    CHXSimpleList::Iterator ndxStream = m_pStreamList->Begin();    for(; ndxStream != m_pStreamList->End(); ++ndxStream)    {	CHXAudioStream* pAudioStream = (CHXAudioStream*) (*ndxStream);	IHXValues* pAudioHeader = pAudioStream->GetStreamInfo();	if (pAudioHeader == pHeader)	{	    HX_RELEASE(pAudioHeader);	    return TRUE;	}	HX_RELEASE(pAudioHeader);    }    return FALSE;}voidCHXAudioPlayer::AdjustForRealAudio(){    UINT32 ulCurrentDeviceTime = m_ulCurrentTime;#if defined(HELIX_FEATURE_AUDIO_INACCURATESAMPLING)    if (m_bAdjustForRealAudio)    {	CHXAudioStream* pAudioStream = NULL;        // Only use a playing audio stream for time adjustment:        for (CHXSimpleList::Iterator streamIterator = m_pRealAudioStreamList->Begin();             streamIterator != m_pRealAudioStreamList->End();             ++streamIterator)        {            if ( ((CHXAudioStream*) (*streamIterator))->GetState() == E_PLAYING)            {                pAudioStream = (CHXAudioStream*) *streamIterator;                break;            }        }        if (pAudioStream)        {            UINT32 ulAdjustedTime = 0L;            double dBytesPlayed = m_Owner->GetNumBytesPlayed();            if (HXR_OK == pAudioStream->ConvertCurrentTime( dBytesPlayed,                                                            m_ulCurrentTime,                                                            ulAdjustedTime))            {                UINT32 ulTickCount = HX_GET_TICKCOUNT();                /* This is to avoid stall at end of the presentation */                /* The RA stream may have a duration of say 30 seconds                 * but the actual data may be only for 29.9                 * seconds. In this case, audio stream will never                 * return time more than 29.9 seconds and we will get                 * stalled.  To avoid this, we wait for atmost                 * MAX_WAIT_AT_SAME_TIME (== max granularity+50 ms) at                 * the same timestamp. If we find that we are pushing                 * more data in the audio device but the audio stream                 * is reporting the same time for the past                 * MAX_WAIT_AT_SAME_TIME, we increment our timestamp                 * by the real time elapsed since the last update.                 * This code will only trigger when we are near the                 * end of presentation.                 */                if (m_bTimeReturned &&                    ulAdjustedTime <= m_ulLastCurrentTimeReturned &&                    ulCurrentDeviceTime > m_ulLastDeviceTimeAdjusted &&                    ulCurrentDeviceTime - m_ulLastDeviceTimeAdjusted > MAX_WAIT_AT_SAME_TIME)                {                    UINT32 ulElapsedTime = CALCULATE_ELAPSED_TICKS(m_ulTimeAdjustDoneAt,                                                                   ulTickCount);                    if (ulElapsedTime >= MAX_WAIT_AT_SAME_TIME)                    {                        m_ulCurrentTime = m_ulLastCurrentTimeReturned + ulElapsedTime;                        m_ulTimeAdjustDoneAt	    = ulTickCount;                        m_ulLastDeviceTimeAdjusted  = ulCurrentDeviceTime;                    }                    else                    {                        m_ulCurrentTime = ulAdjustedTime;                    }                }                else                {                    m_ulTimeAdjustDoneAt = ulTickCount;                    m_ulCurrentTime      = ulAdjustedTime;                }            }        }    }#endif /* HELIX_FEATURE_AUDIO_INACCURATESAMPLING */    /* Never go back in time */    if (!m_bTimeReturned)    {	m_bTimeReturned		    = TRUE;	m_ulLastCurrentTimeReturned = m_ulCurrentTime;	m_ulTimeAdjustDoneAt	    = HX_GET_TICKCOUNT();	m_ulLastDeviceTimeAdjusted  = ulCurrentDeviceTime;    }    else if (m_ulCurrentTime <= m_ulLastCurrentTimeReturned)    {	m_ulCurrentTime = m_ulLastCurrentTimeReturned;    }    else    {	m_ulLastDeviceTimeAdjusted  = ulCurrentDeviceTime;	m_ulLastCurrentTimeReturned = m_ulCurrentTime;    }}HX_RESULTCHXAudioPlayer::ResumeFakeTimeline(void){    HX_RESULT	rc = HXR_OK;    HX_ASSERT(!m_bHasStreams);    HXTimeval lTime = m_pScheduler->GetCurrentSchedulerTime();    m_pFakeAudioCBTime->tv_sec = lTime.tv_sec;    m_pFakeAudioCBTime->tv_usec = lTime.tv_usec;    m_ulIncreasingTimer = m_ulCurrentTime;    m_ulLastFakeCallbackTime = HX_GET_TICKCOUNT();    *m_pFakeAudioCBTime += (int) (m_ulGranularity*1000);    m_ulCallbackID = m_pScheduler->AbsoluteEnter(this,                                                 *((HXTimeval*) m_pFakeAudioCBTime));    return rc;}HX_RESULT CHXAudioPlayer::Func(){    m_ulCallbackID = 0;    OnTimerCallback();    return HXR_OK;}HX_RESULT CHXAudioPlayer::StopFakeTimeline(void){    HX_RESULT	rc = HXR_OK;    if(m_ulCallbackID && m_pScheduler)    {        m_pScheduler->Remove(m_ulCallbackID);    }    return rc;}doubleCHXAudioPlayer::NumberOfBytesWritten(){    return m_Owner->NumberOfBytesWritten();}doubleCHXAudioPlayer::ConvertMsToBytes(UINT32 ulTime){    return m_Owner->ConvertMsToBytes(ulTime);}voidCHXAudioPlayer::UpdateStreamLastWriteTime(){    // Make each stream seek, too, since they own the resampling buffers.    CHXAudioStream* s = 0;    CHXSimpleList::Iterator lIter = m_pStreamList->Begin();    for (; lIter != m_pStreamList->End(); ++lIter)    {	s = (CHXAudioStream*) (*lIter);	s->UpdateStreamLastWriteTime();    }}voidCHXAudioPlayer::SaveLastNMilliSeconds(BOOL bSave, UINT32 ulNMilliSeconds){    // Make each stream seek, too, since they own the resampling buffers.    CHXAudioStream* s = 0;    CHXSimpleList::Iterator lIter = m_pStreamList->Begin();    for (; lIter != m_pStreamList->End(); ++lIter)    {	s = (CHXAudioStream*) (*lIter);	s->SaveLastNMilliSeconds(bSave, ulNMilliSeconds);    }}voidCHXAudioPlayer::RewindPlayer(UINT32 ulTimeToRewind){    if (m_pStreamList->GetCount() == 0	|| !m_bCanBeRewound)    {	return;    }    // Make each stream seek, too, since they own the resampling buffers.    CHXAudioStream* s = 0;    CHXSimpleList::Iterator lIter = m_pStreamList->Begin();    for (; lIter != m_pStreamList->End(); ++lIter)    {	s = (CHXAudioStream*) (*lIter);	s->RewindStream(ulTimeToRewind);    }    HX_ASSERT(m_llLastWriteTime >= ulTimeToRewind);    if (m_llLastWriteTime >= ulTimeToRewind)    {	m_llLastWriteTime -= ulTimeToRewind;    }}HX_RESULTCHXAudioPlayer::ProcessAudioHook(PROCESS_ACTION action,				 IHXAudioHook* pAudioHook){    return HXR_OK;}STDMETHODIMP CHXAudioPlayer::SetError( HX_RESULT theErr ){    if (theErr != HXR_OK)    {	IHXErrorMessages* pErrorMessage = NULL;	m_pContext->QueryInterface(IID_IHXErrorMessages, (void**) &pErrorMessage);	if (pErrorMessage)	{	    pErrorMessage->Report(HXLOG_ERR, theErr, 0, NULL, NULL);	    pErrorMessage->Release();	}    }    return HXR_OK;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利电影一区二区三区四区| 亚洲一区二区三区四区五区中文| 中文字幕人成不卡一区| 亚洲制服欧美中文字幕中文字幕| 麻豆国产精品官网| 在线国产亚洲欧美| 久久九九久久九九| 久久国产视频网| 欧美日韩国产不卡| 中文无字幕一区二区三区| 免费xxxx性欧美18vr| 日本国产一区二区| 国产校园另类小说区| 免费久久精品视频| 91麻豆精品国产91久久久| 亚洲视频你懂的| 成人激情黄色小说| 国产亚洲欧美日韩俺去了| 日本女人一区二区三区| 欧美性大战久久| 亚洲三级在线播放| a亚洲天堂av| 国产精品福利一区二区| 国产高清成人在线| 久久久国产精品麻豆| 久久99精品久久久久婷婷| 欧美一区二区三区在线看| 亚洲一区免费视频| 欧美日韩一区二区三区免费看 | 国产一区二区三区久久久| 91麻豆精品国产91久久久| 五月婷婷另类国产| 在线播放一区二区三区| 日韩国产一二三区| 国产午夜精品在线观看| 激情亚洲综合在线| 亚洲精品一区二区三区在线观看| 久久精品久久99精品久久| 日韩欧美高清在线| 国产一区二区三区电影在线观看| 欧美不卡一区二区三区| 国产精品一区二区免费不卡| 国产亚洲精久久久久久| 大胆亚洲人体视频| 亚洲三级视频在线观看| 欧美性淫爽ww久久久久无| 亚洲一二三区在线观看| 91精品国产91久久久久久最新毛片| 午夜亚洲福利老司机| 欧美变态口味重另类| 国产精品一区二区三区四区| 国产精品色在线观看| 91九色最新地址| 日韩av中文在线观看| 精品国产乱码久久久久久久| 国产精品影音先锋| 亚洲欧美日韩国产综合在线| 欧美性生活大片视频| 另类小说图片综合网| 国产欧美日韩卡一| 日本高清不卡一区| 蜜桃在线一区二区三区| 中文字幕精品三区| 欧美色图在线观看| 激情综合网激情| 亚洲色图视频网| 日韩一级黄色大片| av电影在线观看完整版一区二区| 亚洲一线二线三线视频| 精品国产一区二区精华| 色综合久久六月婷婷中文字幕| 天天综合天天做天天综合| 国产亚洲视频系列| 欧美剧在线免费观看网站| 欧美日韩精品一区二区在线播放| 日本麻豆一区二区三区视频| 中文字幕不卡的av| 欧美色综合天天久久综合精品| 精品制服美女久久| 一卡二卡三卡日韩欧美| 久久久亚洲国产美女国产盗摄| 欧美午夜电影在线播放| 国产成人鲁色资源国产91色综| 亚洲国产成人av| 国产精品久久久爽爽爽麻豆色哟哟| 91.com视频| 91国产免费观看| 国产成人av电影在线观看| 日韩精品1区2区3区| 亚洲乱码一区二区三区在线观看| www成人在线观看| 91精品麻豆日日躁夜夜躁| 色婷婷av一区二区三区gif| 国产精品一品视频| 日韩高清欧美激情| 亚洲国产日韩一级| 一区二区三区四区视频精品免费| 久久精品视频网| 欧美成人aa大片| 日韩一区二区在线观看视频| 在线视频中文字幕一区二区| 成人高清av在线| 国产精品一级在线| 国产一区二区三区视频在线播放| 日韩激情中文字幕| 丝袜国产日韩另类美女| 午夜日韩在线观看| 亚洲gay无套男同| 亚洲最大的成人av| 一区二区三区在线免费视频| 亚洲视频在线观看一区| 国产精品丝袜91| 国产人伦精品一区二区| 国产欧美一区二区精品久导航| www亚洲一区| 久久精品欧美日韩精品| 日本一区二区三区在线不卡| 久久久久久免费| 欧美国产一区二区在线观看 | 久久久99免费| 精品不卡在线视频| 久久久综合网站| 国产午夜亚洲精品羞羞网站| 欧美国产日韩a欧美在线观看| 国产日产亚洲精品系列| 中文av字幕一区| 亚洲人成在线观看一区二区| 一区二区三区四区激情| 一区二区三区中文字幕精品精品| 极品尤物av久久免费看| 国产麻豆成人精品| 99久久精品情趣| 欧美亚洲国产一区二区三区 | 成人国产免费视频| 91视视频在线直接观看在线看网页在线看| 91亚洲资源网| 欧美精品第1页| 久久久久久久久97黄色工厂| 日韩一区在线免费观看| 亚洲成人综合视频| 美日韩黄色大片| 成人午夜精品在线| 欧美色涩在线第一页| 欧美不卡视频一区| 亚洲欧美日韩一区| 午夜激情一区二区三区| 国产一区不卡视频| 91福利在线免费观看| 日韩欧美在线综合网| 国产精品三级av| 视频在线在亚洲| 成人精品一区二区三区中文字幕| 欧美性视频一区二区三区| 日韩精品最新网址| 亚洲美女免费视频| 精品系列免费在线观看| 色噜噜偷拍精品综合在线| 日韩一区二区精品葵司在线| 国产精品久久国产精麻豆99网站| 亚洲自拍偷拍九九九| 国产经典欧美精品| 日本精品一区二区三区高清| 久久午夜电影网| 性欧美疯狂xxxxbbbb| 成人网在线免费视频| 717成人午夜免费福利电影| 国产精品国模大尺度视频| 免费观看一级欧美片| 色综合视频一区二区三区高清| 日韩精品中文字幕一区 | 亚洲高清免费一级二级三级| 国产乱人伦偷精品视频免下载| 91国模大尺度私拍在线视频| 亚洲蜜臀av乱码久久精品蜜桃| 国产永久精品大片wwwapp| 欧美探花视频资源| 亚洲欧美综合网| 极品美女销魂一区二区三区 | 成人免费va视频| 欧美一区在线视频| 亚洲一本大道在线| 99在线视频精品| 国产婷婷色一区二区三区四区| 日本麻豆一区二区三区视频| 欧美三电影在线| 亚洲乱码中文字幕综合| 不卡一区二区在线| 国产精品每日更新在线播放网址| 精品在线免费观看| 欧美一级片免费看| 水野朝阳av一区二区三区| 欧洲另类一二三四区| 亚洲黄色尤物视频| 91丨九色丨尤物| 日韩一区在线播放| 色综合天天综合狠狠| 亚洲私人影院在线观看| 色综合久久综合| 一区二区在线免费| 欧美日韩中文另类|