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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? hxaudply.cpp

?? linux下的一款播放器
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
    if ( m_eState == E_PLAYING )    {	return HXR_OK;    }    m_bIsDonePlayback = FALSE;    m_eState          = E_PLAYING;    m_bCanBeRewound   = TRUE;    /* Use Audio Session Object ONLY if there are any audio streams     * in the presentation     */    if (m_bHasStreams)    {	CHXAudioStream* s = 0;	CHXSimpleList::Iterator lIter = m_pStreamList->Begin();	for (; lIter != m_pStreamList->End(); ++lIter)	{	    s = (CHXAudioStream*) (*lIter);	    if ( s )		s->Resume(TRUE);	}	// This is the audio device playback time that corresponds to	// when this audio player resumed.	m_ulADresumeTime = m_Owner->GetCurrentPlayBackTime();	// This is this player's start time within its timeline. This is	// modified when the player is seeked or resumed.	m_ulAPstartTime = m_ulAPplaybackTime;	UpdateStreamLastWriteTime();	// Resume the audio device playback	if ( !theErr )	    theErr = m_Owner->Resume(this);    }    else    {	theErr = ResumeFakeTimeline();	/* Send time 0 at first Resume */	if (!theErr && m_bIsFirstResume)	{	    m_bIsFirstResume = FALSE;	    OnTimeSync(m_ulIncreasingTimer);	}    }    m_bIsResumed = TRUE;    return ( !theErr ) ? HXR_OK : HXR_FAILED;}/************************************************************************ *  Method: *		CHXAudioPlayer::Pause *	Purpose: *		The player object calls this function to pause audio playback. */HX_RESULT CHXAudioPlayer::Pause(){    if (m_eState == E_PAUSED)    {	return HXR_OK;    }    m_eState = E_PAUSED;    if (m_bHasStreams)    {	CHXAudioStream* s = 0;	CHXSimpleList::Iterator lIter = m_pStreamList->Begin();	for (; lIter != m_pStreamList->End(); ++lIter)	{	    s = (CHXAudioStream*) (*lIter);	    if ( s )		s->Pause(TRUE);	}	m_Owner->Pause(this);    }    else    {	StopFakeTimeline();    }    m_bCanBeRewound = FALSE;    return HXR_OK;}/************************************************************************ *  Method: *		CHXAudioPlay::Stop *	Purpose: *      The player object calls this function to stop audio playback. *		If bFlush is TRUE, flush any data in the audio device. */HX_RESULT CHXAudioPlayer::Stop(    const BOOL bFlush){    m_eState = E_STOPPED;    m_ulAPstartTime 	= 0;    if (m_bHasStreams)    {	CHXAudioStream* s = 0;	CHXSimpleList::Iterator lIter = m_pStreamList->Begin();	for (; lIter != m_pStreamList->End(); ++lIter)	{	    s = (CHXAudioStream*) (*lIter);	    if ( s )		s->Stop();	}	m_Owner->Stop(this, bFlush);    }    else    {	StopFakeTimeline();    }    ResetPlayer();    return HXR_OK;}/************************************************************************ *  Method: *		CHXAudioPlayer::Seek *	Purpose: *		The player object calls this function to seek audio playback to *		the time (in milliseconds) given. */HX_RESULT CHXAudioPlayer::Seek(const 	UINT32			ulSeekTime){    /* always remember this seek time.. even though there may not be any streams     * yet for this player. This is because the streams may be created later and     * we need to correctly apply the seek time to get the accurate time.     */    m_ulAPstartTime = m_ulAPplaybackTime = ulSeekTime;	// current start time for this player    m_llLastWriteTime = (INT64) ulSeekTime;    if (m_bHasStreams)    {	// 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);	    if ( s )		s->Seek(ulSeekTime);	}	m_Owner->Seek( this, ulSeekTime );	m_ulADresumeTime = m_Owner->GetCurrentPlayBackTime();    }    else    {	StopFakeTimeline();	m_bIsFirstResume    = TRUE;    }    m_ulCurrentTime	    = ulSeekTime;    m_ulLastCurrentTimeReturned	= m_ulCurrentTime;    m_bTimeReturned	    = FALSE;    m_bHasDataInAudioDevice = FALSE;    return HXR_OK;}void CHXAudioPlayer::ResetPlayer(void){    m_bInited		= FALSE;    m_bHasStreams	= FALSE;    m_bIsFirstResume	= TRUE;    m_ulAPstartTime	= 0;    m_ulAPplaybackTime	= 0;    m_ulADresumeTime	= 0;    m_ulCurrentTime	= 0;    m_ulLastCurrentTimeReturned	= 0;    m_ulLastDeviceTimeAdjusted = 0;    m_bTimeReturned	= FALSE;    m_bIsLive		= FALSE;    m_bIsResumed	= FALSE;    m_bIsDonePlayback	= TRUE;    m_llLastWriteTime	= 0;    m_bCanBeRewound	= FALSE;    m_bHasDataInAudioDevice = FALSE;    // Delete all streams.  Remove all list items.    if ( m_pStreamList )    {	CHXAudioStream* pAudioStream = 0;	while(!m_pStreamList->IsEmpty())	{	    pAudioStream = (CHXAudioStream*) m_pStreamList->RemoveHead();	    pAudioStream->ResetStream();	    pAudioStream->Release();	}    }    /* We do not remove post mix hooks any more */    /* We do not remove Stream Response Objects any more */    /* Default value of Player format */    m_PlayerFmt.uChannels	= 2;    m_PlayerFmt.uBitsPerSample	= 16;    m_PlayerFmt.ulSamplesPerSec	= 16000;    m_PlayerFmt.uMaxBlockSize	= 64000;    m_ulLastFakeCallbackTime = 0;    StopFakeTimeline();}/************************************************************************ *  Method: *		CHXAudioPlayer::SetupStreams *	Purpose: *		Tell each stream about the audio device format so *		they can setup their resamplers and buffer. */void CHXAudioPlayer::SetupStreams(void){    // Get audio device format    m_Owner->GetFormat(&m_DeviceFmt);    // Calculate bytes per gran    m_ulBytesPerGran = (ULONG32)                (((m_DeviceFmt.uChannels * ((m_DeviceFmt.uBitsPerSample==8)?1:2) *  m_DeviceFmt.ulSamplesPerSec)                                / 1000.0) * m_ulGranularity);    // Make sure that number of bytes per granularity is an even number.    if ( (m_ulBytesPerGran % 2) != 0 )        m_ulBytesPerGran++;    /* Don't we have to calculate granularity again if we adjust     * for even byte boundary - XXX Rahul 06/15/97     */    // Notify each stream    CHXAudioStream* s = 0;    CHXSimpleList::Iterator lIter = m_pStreamList->Begin();    for (; lIter != m_pStreamList->End(); ++lIter)    {	s = (CHXAudioStream*) (*lIter);	if ( s )	{	    s->Setup( &m_DeviceFmt, m_ulGranularity );	}    }}/************************************************************************ *  Method: *		CHXAudioPlayer::OnTimeSync *	Purpose: */HX_RESULT	CHXAudioPlayer::OnTimeSync(ULONG32 ulCurrentTime){    HX_RESULT theErr = HXR_OK;#ifdef _MACINTOSH    if (InterlockedIncrement(&gTIMELINE_MUTEX) > 1)    {       InterlockedDecrement(&gTIMELINE_MUTEX);       return;    }    InterlockedDecrement(&gTIMELINE_MUTEX);#endif    if (m_bHasStreams)    {	ULONG32 ulADplaybackTime;	ulADplaybackTime = m_Owner->GetCurrentPlayBackTime();	m_ulAPplaybackTime = (ulADplaybackTime - m_ulADresumeTime) +			      m_ulAPstartTime;    }    else    {	m_ulAPplaybackTime  = ulCurrentTime;    }    m_ulCurrentTime = m_ulAPplaybackTime ;    AdjustForRealAudio();    // Here we need to fudge the actual time for this player    // For now we support only one player/timeline    if (m_pPlayerResponse)    {	// The current playback time of any player is the difference	// of the current audio device playback time minus the audio	// device time when this player started (resumed) playback	// plus the initial start time of playback within this player's	// timeline (usually 0 but can be something else esp. after a	// seek).	theErr = m_pPlayerResponse->OnTimeSync(m_ulCurrentTime);    }    return theErr;}/************************************************************************ *  Method: *		CHXAudioPlayer::Setup *	Purpose: *		This is called after AS receives format and stream info *		from the renderers AND before packets are received from *		the renderer. */HX_RESULT CHXAudioPlayer::Setup( ULONG32 ulGranularity){    HX_RESULT theErr = HXR_OK;    if (m_bInited)	return HXR_OK;    /* Always write 100ms audio blocks for now. */    m_ulGranularity = MAXIMUM_AUDIO_GRANULARITY;	//ulGranularity;    /* We do not go below MINIMUM_AUDIO_GRANULARITY. This will not affect     * sending timesyncs at this lower granularity since HXPlayer object     * uses the scheduler to send individual timesyncs anyway     */    if (m_ulGranularity < MINIMUM_AUDIO_GRANULARITY)    {	m_ulGranularity = MINIMUM_AUDIO_GRANULARITY;    }    else if (m_ulGranularity > MAXIMUM_AUDIO_GRANULARITY)    {	m_ulGranularity = MAXIMUM_AUDIO_GRANULARITY;    }    if (!m_bHasStreams)    {	m_bInited = TRUE;	return HXR_OK;    }    /* If this is the second player, session object may overide     * the granularity value.     */    m_ulGranularity = m_Owner->SetGranularity(m_ulGranularity);    // Determine this player's audio format parameters based on    // the mixer channels attributes supplied in RegisterRenderer.    //    // 1. Spin thru the list of registered streams and    //    determine the desired audio device parameters.    // 2. Check the audio format with the audio device.    //    CHXAudioStream* pAudioStream = 0;    ULONG32 maxSamplesPerSec = 8000;    ULONG32 minSamplesPerSec = 44100;    BOOL    bFirst = TRUE;    UINT16  maxChannels = 1;    UINT16  maxBlocksize = 0;    UINT16  maxBitsPerSample = 0;    HXAudioFormat audioFmt;    theErr = GetAudioPrefs();    if (!theErr && m_pStreamList->GetCount() > 0)    {	CHXSimpleList::Iterator lIter = m_pStreamList->Begin();	for (;lIter != m_pStreamList->End(); ++lIter)	{	    pAudioStream = (CHXAudioStream*) (*lIter); //m_pStreamList->GetNext(lp);	    if (!pAudioStream->IsAudioFormatKnown())	    {		continue;	    }	    pAudioStream->GetFormat( &audioFmt );	    if (bFirst)	    {		bFirst = FALSE;		maxSamplesPerSec    = audioFmt.ulSamplesPerSec;		minSamplesPerSec    = audioFmt.ulSamplesPerSec;		maxChannels	    = audioFmt.uChannels;		maxBlocksize	    = audioFmt.uMaxBlockSize;		maxBitsPerSample    = audioFmt.uBitsPerSample;	    }	    else	    {		//		// NOTE: upsampling typically costs more CPU than downsampling		if ( audioFmt.ulSamplesPerSec > maxSamplesPerSec )		    maxSamplesPerSec = audioFmt.ulSamplesPerSec;		if ( audioFmt.ulSamplesPerSec < minSamplesPerSec)		    minSamplesPerSec = audioFmt.ulSamplesPerSec;		//		// NOTE: converting mono to stereo and vice versa cost about the		// same in CPU usage.		if ( audioFmt.uChannels > maxChannels)		    maxChannels = audioFmt.uChannels;		// Get max block size.		if ( audioFmt.uMaxBlockSize > maxBlocksize )		    maxBlocksize = audioFmt.uMaxBlockSize;		// Get max sample width.		if ( audioFmt.uBitsPerSample > maxBitsPerSample )		    maxBitsPerSample = audioFmt.uBitsPerSample;	    }	}	// Set the audio format for this Player.	m_PlayerFmt.uMaxBlockSize 	= maxBlocksize;	m_PlayerFmt.uChannels		= maxChannels;	m_PlayerFmt.uBitsPerSample 	= maxBitsPerSample;	// If user wants upsampling	if ( m_uPrefAudioQuality > 2 )	    m_PlayerFmt.ulSamplesPerSec = maxSamplesPerSec;	else	    m_PlayerFmt.ulSamplesPerSec = minSamplesPerSec;    }    if (m_bPrefUse11khz)    {	m_PlayerFmt.ulSamplesPerSec = 11025;    }    // Do audio session setup. (e.g., determine device audio    // format, etc.    if ( !theErr )	theErr = m_Owner->Setup( m_bHasStreams );    // Now let all streams know the final audio format so they    // can resample to this format.    if ( !theErr )    {	SetupStreams();    }    // if audio device is failed to initialized, we    // will keep the video playing if this is not audio only source    else if (!IsAudioOnlyTrue())    {	m_bHasStreams = FALSE;	m_bInited = TRUE;	return HXR_OK;    }    // Let all stream response know total number of streams.    if (!theErr && m_pStreamRespList)    {	IHXAudioStreamInfoResponse* pAudioStreamInfoResponse = 0;	CHXSimpleList::Iterator lIter = m_pStreamRespList->Begin();	for (; lIter != m_pStreamRespList->End(); ++lIter) 	{	    pAudioStreamInfoResponse = (IHXAudioStreamInfoResponse*) (*lIter);	    CHXSimpleList::Iterator lIter2 = m_pStreamList->Begin();	    for (; lIter2 != m_pStreamList->End(); ++lIter2) 	    {		CHXAudioStream* pStream = (CHXAudioStream*) (*lIter2);		/* Only if a stream is initialized, send it to		 * Response object. If not, we will send it when it		 * gets initialized (in StreamInitialized() call)		 */		if (pStream->IsInitialized())		{		    pAudioStreamInfoResponse->OnStream(pStream);		}	    }	}    }    // All renderers should have checked in by now!    // Call post mix process hooks in list and provide the audio format.    if (!theErr && m_pPMixHookList)    {	HXAudioFormat audioFmt;	m_Owner->GetFormat( &audioFmt );	HXAudioHookInfo* pPMixHookInfo = 0;	CHXSimpleList::Iterator lIter = m_pPMixHookList->Begin();	for (; lIter != m_pPMixHookList->End(); ++lIter)	{	    pPMixHookInfo = (HXAudioHookInfo*) (*lIter);	    if (pPMixHookInfo->bIgnoreAudioData ||		HXR_OK == ProcessAudioHook(ACTION_CHECK, pPMixHookInfo->pHook))	    {		pPMixHookInfo->pHook->OnInit( &audioFmt );	    }	}    }    if (!theErr)    {    	m_bInited = TRUE;	/* Only change the state to initialized if we were in a stopped	 * state earlier. It is possible to be in Playing state and be still	 * in this function. This will happen if we have started the	 * timeline as a fake timeline and later an audio stream joins the	 * presentation thereby converting fake to audio timeline	 * (delayed audio source in SMIL playback)	 */	if (m_eState == E_STOPPED)	{	    m_eState = E_INITIALIZED;	}    }    return theErr;}ULONG32	CHXAudioPlayer::GetCurrentPlayBackTime(void){    if (m_eState != E_PLAYING)    {	return m_ulCurrentTime;    }    // The current playback time of any player is the difference    // of the current audio device playback time minus the audio    // device time when this player started (resumed) playback    // plus the initial start time of playback within this player's    // timeline (usually 0 but can be something else esp. after a    // seek).    if (!m_bHasStreams)    {	ULONG32 ulCurrentTime	= HX_GET_TICKCOUNT();	m_ulIncreasingTimer	    += CALCULATE_ELAPSED_TICKS(m_ulLastFakeCallbackTime, ulCurrentTime);	m_ulLastFakeCallbackTime    = ulCurrentTime;	m_ulCurrentTime		    = m_ulIncreasingTimer;    }    else    {	m_ulCurrentTime	= (m_Owner->GetCurrentPlayBackTime() -		    m_ulADresumeTime) + m_ulAPstartTime;    }    m_ulAPplaybackTime = m_ulCurrentTime;    AdjustForRealAudio();    return m_ulCurrentTime;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
激情成人午夜视频| 日韩一区和二区| 亚洲成人自拍网| 亚洲欧洲制服丝袜| 亚洲色图在线播放| 亚洲欧洲av色图| 亚洲丝袜精品丝袜在线| 日韩美女精品在线| 一区二区三区在线观看国产 | 亚洲尤物视频在线| 亚洲欧美成aⅴ人在线观看| 亚洲欧美日韩一区二区三区在线观看 | 激情久久五月天| 蜜桃久久av一区| 国产一区啦啦啦在线观看| 黄色日韩网站视频| 日本精品免费观看高清观看| 99天天综合性| 欧美三级中文字| 欧美一二三四在线| 欧美国产日本韩| 伊人色综合久久天天| 日韩成人一级片| 国产成人精品亚洲777人妖| 99久久综合色| 欧美一区二区观看视频| 久久久久久久综合| 一区二区三区在线观看动漫| 日本欧美在线看| 成人免费毛片aaaaa**| 欧美日韩另类国产亚洲欧美一级| 国产一区不卡精品| 久久免费电影网| 亚洲国产高清aⅴ视频| 一区二区久久久| 精品一区二区av| 在线观看欧美精品| 久久综合久久99| 一区二区三区美女视频| 韩国v欧美v亚洲v日本v| 一本色道久久加勒比精品| 日韩一区二区精品| 亚洲欧美另类综合偷拍| 久久福利资源站| 一本色道久久综合亚洲aⅴ蜜桃| 欧美一级xxx| 亚洲免费资源在线播放| 国产综合成人久久大片91| 欧美日韩在线免费视频| 欧美韩日一区二区三区四区| 日韩成人伦理电影在线观看| 91免费观看在线| 久久亚洲综合色一区二区三区| 亚洲午夜激情av| 成人性视频免费网站| 日韩欧美一区二区不卡| 亚洲一区二区三区中文字幕| 成人久久18免费网站麻豆| 日韩精品专区在线影院观看 | 亚洲丝袜另类动漫二区| 国产一区二区日韩精品| 制服丝袜在线91| 亚洲综合另类小说| 91国产福利在线| 亚洲欧美日韩国产综合| 成人精品在线视频观看| 国产a区久久久| 69久久99精品久久久久婷婷| 亚洲婷婷综合色高清在线| 国产精品91xxx| 久久久国产精华| 精品一区二区三区影院在线午夜| 欧美色男人天堂| 亚洲综合精品久久| 色欧美日韩亚洲| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 国产一区二区三区久久久| 日韩一区二区在线观看视频| 日韩不卡一区二区| 日韩欧美一区二区免费| 久久精品99国产精品日本| 久久久午夜精品理论片中文字幕| 久久精品久久久精品美女| 欧美va天堂va视频va在线| 全部av―极品视觉盛宴亚洲| 日韩一区二区三区在线| 国产成人精品亚洲午夜麻豆| 久久精品理论片| 欧美一区二区在线视频| 肉色丝袜一区二区| 欧美丰满嫩嫩电影| 日韩av成人高清| 欧美成人一区二区| 国产一区二区h| 国产清纯美女被跳蛋高潮一区二区久久w | 91麻豆国产福利在线观看| 亚洲免费在线播放| 欧美精品在线一区二区三区| 麻豆成人在线观看| 国产精品网站导航| 日本高清免费不卡视频| 秋霞午夜av一区二区三区| 久久毛片高清国产| 色一情一伦一子一伦一区| 日产国产高清一区二区三区| 久久看人人爽人人| 色综合久久综合网97色综合| 国产一区二区电影| 成人午夜免费av| 亚洲美女视频一区| 日韩午夜在线观看| 不卡视频在线看| 日韩精品三区四区| 国产肉丝袜一区二区| 久久免费视频色| 91一区在线观看| 美国三级日本三级久久99| 国产精品人成在线观看免费| 欧美性一二三区| 国产精品1024| 五月婷婷久久丁香| 国产精品高清亚洲| 日韩欧美在线网站| 一本久道中文字幕精品亚洲嫩| 久久精品国产秦先生| 综合在线观看色| 久久久久成人黄色影片| 欧美视频一区二区三区四区| 成人网在线免费视频| 国产美女精品在线| 国产99精品国产| 三级影片在线观看欧美日韩一区二区| 精品电影一区二区三区| 欧美亚洲免费在线一区| 成人国产电影网| 韩国精品主播一区二区在线观看| 午夜欧美2019年伦理| 亚洲女与黑人做爰| 中文字幕在线不卡一区二区三区| 久久久久久一级片| 日韩一区二区三区电影在线观看| 欧美亚洲日本国产| 色婷婷av一区二区三区gif| 东方aⅴ免费观看久久av| 国产精品一二一区| 国产在线精品一区二区不卡了| 日韩av网站免费在线| 亚洲成av人片一区二区三区| 一区二区三区四区中文字幕| 1000精品久久久久久久久| 欧美国产精品久久| 中文字幕电影一区| 国产精品免费丝袜| 成人欧美一区二区三区白人| 一区二区国产盗摄色噜噜| 中文av一区二区| 国产三级一区二区| 日本一区二区三级电影在线观看 | 7777精品久久久大香线蕉| 欧美日精品一区视频| 精品视频1区2区3区| 欧美日韩亚州综合| 欧美一区二区三区色| 日韩欧美一二三四区| www国产成人| 国产欧美一二三区| 亚洲欧美日韩在线| 亚洲国产成人tv| 精品一区二区三区在线观看| 国产精品一区二区你懂的| 成人aa视频在线观看| 日本伦理一区二区| 555夜色666亚洲国产免| 日韩欧美综合一区| 亚洲国产精品激情在线观看| 亚洲欧美一区二区久久| 日韩精品国产精品| 国产在线精品一区二区夜色| yourporn久久国产精品| 欧美中文一区二区三区| 日韩一二三四区| 国产精品三级电影| 日韩黄色一级片| 成人夜色视频网站在线观看| 欧美系列日韩一区| 2014亚洲片线观看视频免费| 国产欧美日韩精品在线| 亚洲超丰满肉感bbw| 欧美精品亚洲一区二区在线播放| 91成人免费在线| 精品日韩在线观看| 亚洲婷婷综合久久一本伊一区| 首页国产欧美日韩丝袜| 高清不卡在线观看av| 欧美日本韩国一区二区三区视频| 久久婷婷国产综合国色天香| 亚洲午夜免费电影| 国产成人精品免费在线| 欧美日韩激情一区二区| 中文字幕第一页久久|