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

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

?? hxaudply.cpp

?? linux下的一款播放器
?? CPP
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
    // Create the Stream response list.    m_pStreamList	= new CHXSimpleList;#if defined(HELIX_FEATURE_AUDIO_POSTMIXHOOK)    m_pPMixHookList	= new CHXSimpleList;#endif /* HELIX_FEATURE_AUDIO_POSTMIXHOOK */    m_pStreamRespList	= new CHXSimpleList;    if ( !m_pStreamList || !m_pStreamList->IsPtrListValid())	theErr = HXR_OUTOFMEMORY;#if defined(HELIX_FEATURE_AUDIO_POSTMIXHOOK)    if ( !m_pPMixHookList || !m_pPMixHookList->IsPtrListValid())	theErr = HXR_OUTOFMEMORY;#endif /* HELIX_FEATURE_AUDIO_POSTMIXHOOK */    if ( !m_pStreamRespList || !m_pStreamRespList->IsPtrListValid())	theErr = HXR_OUTOFMEMORY;#if defined(HELIX_FEATURE_VOLUME)    if( !theErr )    {        m_pPlayerVolume = (IHXVolume*)new CHXVolume;        if( m_pPlayerVolume )        {            m_pPlayerVolume->AddRef();            m_pPlayerVolume->AddAdviseSink(this);            //Start off with the volume at max.            m_pPlayerVolume->SetVolume(HX_MAX_VOLUME);        }        else        {            theErr = HXR_OUTOFMEMORY;        }    }#endif /* HELIX_FEATURE_VOLUME */    return ( theErr );}/************************************************************************ *  Method: *		CHXAudioPlayer::GetFormat *	Purpose: *		Return the player's device format which was determined in *		InitPlayer() and is based on all the streams. */void CHXAudioPlayer::GetFormat(	HXAudioFormat*   pAudioFormat){    memcpy(pAudioFormat, &m_PlayerFmt, sizeof( HXAudioFormat) );}/* *********************************************************************** *  Method: *      CHXAudioPlayer::GetAudioPrefs *  Purpose: *	Get audio related preferences. */HX_RESULT CHXAudioPlayer::GetAudioPrefs(){    IHXBuffer* pBuffer = NULL;    IHXPreferences* pPreferences = 0;#if defined(HELIX_FEATURE_PREFERENCES)    /* Reason we query for Preferences here and not at Init() is because     * Preferences may have been overwritten in HXPlayer by SetupClient()     * call by upper level client and this happens AFTER CHXAudioPlayer::Init()     * is called     */    if (!m_pContext)    {	return HXR_INVALID_PARAMETER;    }    m_pContext->QueryInterface(IID_IHXPreferences, (void**) &pPreferences);    //  What is the pref for this?    if( pPreferences )    {        if (pPreferences->ReadPref("SamplingRate", pBuffer) == HXR_OK)        {            m_bPrefUse11khz = (11025 == ::atol((const char*) pBuffer->GetBuffer()));            pBuffer->Release();            pBuffer = 0;        }	ReadPrefINT16(pPreferences, "BitsPerSample", m_uPrefBitsPerSample);	ReadPrefINT16(pPreferences, "Quality", m_uPrefAudioQuality);        /* hmmm... Looks like the client override default Preferences implementation*/        if (m_pPreferences != pPreferences)        {            if (m_pPreferences)            {                m_pPreferences->Release();            }            m_pPreferences = pPreferences;            m_pPreferences->AddRef();        }        pPreferences->Release();    }#endif /* HELIX_FEATURE_PREFERENCES */    return HXR_OK;}/************************************************************************ *  Method: *		IHXAudioPlay::CreateAudioStream *	Purpose: *       The renderer calls this to create a unique audio stream with its *	 unique audio format. */STDMETHODIMP CHXAudioPlayer::CreateAudioStream(    IHXAudioStream**		  pAudioStream){   HX_RESULT theErr = HXR_OK;    // Create a new IRMA audio stream    *pAudioStream = 0;    *pAudioStream = (IHXAudioStream*) new CHXAudioStream(this, m_pContext);    if ( !*pAudioStream )    {	theErr = HXR_OUTOFMEMORY;    }    // Add audio stream to my list    if (!theErr)    {	theErr = _CreateAudioStream(pAudioStream);    }    return theErr;}HX_RESULTCHXAudioPlayer::_CreateAudioStream(IHXAudioStream** pAudioStream){    (*pAudioStream)->AddRef();   // once for user    (*pAudioStream)->AddRef();   // once for me    // Add to the stream list.    m_pStreamList->AddTail((void*) *pAudioStream);    ((CHXAudioStream*)(*pAudioStream))->SetLive(m_bIsLive);    m_Owner->CheckIfLastNMilliSecsToBeStored();    /* Already initialized with no streams?*/    if (m_bInited && !m_bHasStreams)    {	/* If we are already initialized and there were no audio streams before	 * initialization, we must be using our fake timer to send time syncs	 * This needs to change now to get time syncs from the audio device	 */	((CHXAudioStream*)(*pAudioStream))->SetupToBeDone();	return HXR_OK;    }    m_bHasStreams = TRUE;    /* If we are already initialized, it means CreateAudioStream was     * called in the midst of the presentation. In this case, we already know     * the granularity and the Device format and thus call Setup right away     */    if ((*pAudioStream) && m_bInited)    {	((CHXAudioStream*)(*pAudioStream))->Setup( &m_DeviceFmt, m_ulGranularity );    }    return HXR_OK;}HX_RESULTCHXAudioPlayer::SetSoundLevel(CHXSimpleList* pAudioStreamList, UINT16 uSoundLevel, BOOL bReflushAudioDevice){    HX_RESULT	rc = HXR_OK;    IHXVolume* pStreamVolume = NULL;    if (pAudioStreamList && !pAudioStreamList->IsEmpty())    {	CHXSimpleList::Iterator lIter = pAudioStreamList->Begin();	for (; lIter != pAudioStreamList->End(); ++lIter)	{	    CHXAudioStream* pAudioStream = (CHXAudioStream*) (*lIter);	    pStreamVolume = pAudioStream->GetAudioVolume();	    if (pStreamVolume)	    {		pStreamVolume->SetVolume(uSoundLevel);	    }	    HX_RELEASE(pStreamVolume);	}	if (bReflushAudioDevice)	{	    AudioStreamStateChanged(E_PLAYING);	}    }    return rc;}HX_RESULT CHXAudioPlayer::ManageAudioStreams( CHXSimpleList* pStreamList,                                              STREAM_ACTION  what,                                              UINT32 ulTime ){    HX_RESULT    rc  = HXR_OK;    LISTPOSITION pos = 0;    if(pStreamList && !pStreamList->IsEmpty())    {	CHXSimpleList::Iterator it = pStreamList->Begin();	while( it != pStreamList->End() )	{	    CHXAudioStream* pAudioStream = (CHXAudioStream*) (*it);            switch(what)            {               case STR_STOP:                   pAudioStream->Stop();                   break;               case STR_SEEK:                   pAudioStream->Seek(ulTime);                   break;               case STR_RESUME:                   pAudioStream->Resume(FALSE);                   break;               case STR_PAUSE:                   pAudioStream->Pause(FALSE);                   break;               case STR_SETHINT:                   pAudioStream->SetAudioDeviceReflushHint(TRUE);                   break;               case STR_REMOVE:                   pos = m_pStreamList->Find(pAudioStream);                   if (pos)                       m_pStreamList->RemoveAt(pos);                   pAudioStream->Stop();                   HX_RELEASE(pAudioStream);                   break;               default:                   HX_ASSERT("bad stream action taken"==NULL);            }            ++it;	}        //Post stream iteration actions.        switch(what)        {           case STR_STOP:               AudioStreamStateChanged(E_STOPPED);               break;           case STR_PAUSE:               AudioStreamStateChanged(E_PAUSED);               break;           case STR_SETHINT:               m_Owner->CheckIfLastNMilliSecsToBeStored();               break;           case STR_REMOVE:               if( 0 == m_pStreamList->GetCount())               {                   m_bHasStreams = FALSE;                   m_Owner->Stop(this, TRUE);                   m_bInited = FALSE;                   if(HXR_OK != (rc=Setup(m_ulGranularity)))                   {                       IHXErrorMessages* pErrorMessage = NULL;                       m_pContext->QueryInterface(IID_IHXErrorMessages, (void**) &pErrorMessage);                       if (pErrorMessage)                       {                           pErrorMessage->Report(HXLOG_ERR, rc, 0, NULL, NULL);                           pErrorMessage->Release();                       }                       rc = HXR_OK;                   }                   else                   {                       rc = ResumeFakeTimeline();                   }               }               else               {                   AudioStreamStateChanged(E_STOPPED);               }               break;           default:               HX_ASSERT("bad stream action taken"==NULL );        }    }    return rc;}HX_RESULTCHXAudioPlayer::AudioStreamStateChanged(EPlayerState eState){    if(!m_Owner->GetDisableMultiPlayPauseSupport())    {	// we only concern about the state change of audio stream	// while its parent audio player is in playing mode	if (m_eState == E_PLAYING)	{	    switch (eState)	    {	    case E_PLAYING:		m_Owner->RewindSession();		m_Owner->ActualResume();		break;	    case E_PAUSED:	    case E_STOPPED:		m_Owner->RewindSession();		if (NumberOfResumedStreams() > 0 ||		    m_Owner->NumberOfResumedPlayers() > 0)		{		    m_Owner->ActualResume();		}		break;	    default:		break;	    }	}    }    return HXR_OK;}CHXAudioStream*CHXAudioPlayer::GetCHXAudioStream(UINT16 uIndex){    LISTPOSITION lp = 0;    lp = m_pStreamList->FindIndex( (int) uIndex );    if ( lp )    {	return (CHXAudioStream*)m_pStreamList->GetAt(lp);    }    else    {        return NULL;    }}BOOLCHXAudioPlayer::IsLastNMilliSecsToBeStored(){    BOOL bResult = FALSE;    if (m_bHasStreams)    {	CHXAudioStream* s = 0;	CHXSimpleList::Iterator lIter = m_pStreamList->Begin();	for (; lIter != m_pStreamList->End(); ++lIter)	{	    s = (CHXAudioStream*) (*lIter);	    if (s->IsAudioDeviceReflushHint())	    {		bResult = TRUE;		break;	    }	}    }    return bResult;}HX_RESULTCHXAudioPlayer::ActualAddPostMixHook(IHXAudioHook* pHook,	    			     const BOOL	    bDisableWrite,				     const BOOL	    bFinal){    if (!m_pPMixHookList || !pHook)    {	return HXR_FAILED;    }#if defined(HELIX_FEATURE_AUDIO_POSTMIXHOOK)    /* Check if this one already exists */    HXAudioHookInfo* h = 0;    LISTPOSITION lp = 0;    lp = m_pPMixHookList->GetHeadPosition();    while( lp )    {	h = (HXAudioHookInfo*) m_pPMixHookList->GetNext(lp);	if (pHook == h->pHook)	{	    return HXR_FAILED;	}    }    h = (HXAudioHookInfo*) new HXAudioHookInfo;    h->pHook   = pHook;    h->bDisableWrite = bDisableWrite;    h->bFinal  = bFinal;    h->bIgnoreAudioData = FALSE;    h->bMultiChannelSupport = FALSE;    IHXValues* pValues = NULL;    if (pHook && pHook->QueryInterface(IID_IHXValues, (void**) &pValues) == HXR_OK)    {	UINT32 ulValue = 0;	pValues->GetPropertyULONG32("IgnoreAudioData", ulValue);	h->bIgnoreAudioData = (ulValue == 1);	HX_RELEASE(pValues);    }    IHXAudioMultiChannel* pMultiChannel = NULL;    if (pHook && HXR_OK == pHook->QueryInterface(IID_IHXAudioMultiChannel, (void**) &pMultiChannel))    {        h->bMultiChannelSupport = pMultiChannel->GetMultiChannelSupport();    }    HX_RELEASE(pMultiChannel);    if (bDisableWrite)    {	m_bDisableWrite = bDisableWrite;    }    pHook->AddRef();    // Order list by putting all bFinal == TRUE at end of list.    if ( m_pPMixHookList->IsEmpty() || !bFinal )    {	m_pPMixHookList->AddHead((void*) h);    }    else    {	m_pPMixHookList->AddTail((void*) h);    }    m_Owner->PostMixHooksUpdated();    ProcessAudioHook(ACTION_ADD, pHook);    /* If we are already initialized, send the device format to the     * post hook     */    if (m_bInited)    {	if (h->bIgnoreAudioData ||	    HXR_OK == ProcessAudioHook(ACTION_CHECK, pHook))	{	    HXAudioFormat audioFmt;	    m_Owner->GetFormat( &audioFmt );	    pHook->OnInit( &audioFmt );	}    }#endif /* HELIX_FEATURE_AUDIO_POSTMIXHOOK */    return HXR_OK;}HX_RESULTCHXAudioPlayer::ActualRemovePostMixHook(IHXAudioHook* pHook){    if (!m_pPMixHookList || !pHook)    {	return HXR_FAILED;    }#if defined(HELIX_FEATURE_AUDIO_POSTMIXHOOK)    BOOL bCheckForDisableWrite	= FALSE;    BOOL bFound			= FALSE;    HXAudioHookInfo* h = 0;    LISTPOSITION lp, lastlp;    lp = lastlp = 0;    lp = m_pPMixHookList->GetHeadPosition();    while( lp )    {	lastlp = lp;	h = (HXAudioHookInfo*) m_pPMixHookList->GetNext(lp);	if ( pHook == h->pHook )	{	    if (h->bDisableWrite)	    {		m_bDisableWrite		= FALSE;		bCheckForDisableWrite	= TRUE;	    }	    ProcessAudioHook(ACTION_REMOVE, pHook);	    h->pHook->Release();	    delete h;	    h = 0;	    m_pPMixHookList->RemoveAt(lastlp);	    bFound = TRUE;	    break;	}    }    if (!bFound)    {	return HXR_FAILED;    }    m_Owner->PostMixHooksUpdated();    if ( m_pPMixHookList && bCheckForDisableWrite && m_pPMixHookList->GetCount() > 0)    {	HXAudioHookInfo* h = 0;	LISTPOSITION lp, lastlp;	lp = lastlp = 0;	lp = m_pPMixHookList->GetHeadPosition();   	while( lp )	{	    h = (HXAudioHookInfo*) m_pPMixHookList->GetNext(lp);	    if (h->bDisableWrite)	    {		m_bDisableWrite = TRUE;		break;	    }	}    }#endif /* HELIX_FEATURE_AUDIO_POSTMIXHOOK */    return HXR_OK;}/************************************************************************ *  Method: *      CHXAudioPlayer::SetGranularity *  Purpose: *       The HELIX player object calls this BEFORE starting audio playback *       and AFTER all audio streams are created for the renderers. */void CHXAudioPlayer::SetGranularity(    const ULONG32  ulGranularity){    m_ulGranularity = ulGranularity;    return;}/************************************************************************ *  Method: *		CHXAudioPlayer::Resume *	Purpose: *		Resume audio playback by writing data to the audio device. *		Open the audio device if it is not opened already. */HX_RESULT CHXAudioPlayer::Resume(){    HX_RESULT theErr = HXR_OK;    if (!m_bInited)	return HXR_NOT_INITIALIZED;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜影院久久久| 久久久久久久免费视频了| 亚洲欧洲制服丝袜| 99在线精品一区二区三区| 亚洲欧美综合色| 在线亚洲一区二区| 图片区小说区区亚洲影院| 91麻豆精品国产91久久久| 精东粉嫩av免费一区二区三区| 精品99一区二区三区| 国产宾馆实践打屁股91| 亚洲美女淫视频| 欧美人与z0zoxxxx视频| 床上的激情91.| 一区二区三区产品免费精品久久75| 欧美三级在线看| 久久福利视频一区二区| 国产欧美一区二区在线观看| 色综合中文字幕国产| 亚洲免费观看高清完整版在线观看| 欧美网站大全在线观看| 激情伊人五月天久久综合| 国产精品久久久久国产精品日日| 欧美日韩视频第一区| 久久99久久精品欧美| 17c精品麻豆一区二区免费| 欧美日韩国产三级| 成人免费黄色在线| 午夜久久久久久久久久一区二区| 久久精品人人做人人综合 | 免费亚洲电影在线| 欧美激情在线观看视频免费| 欧美日韩成人综合在线一区二区| 国精产品一区一区三区mba桃花 | 日韩一区二区三区四区| 成人晚上爱看视频| 免费在线欧美视频| 亚洲欧美色图小说| 久久蜜桃av一区精品变态类天堂| 在线看国产日韩| 国产激情偷乱视频一区二区三区| 一区二区三区在线播| 久久综合色综合88| 91麻豆精品国产91久久久资源速度| 成人黄色在线看| 久久精品999| 天天射综合影视| 成人免费在线视频| 国产亚洲女人久久久久毛片| 欧美男同性恋视频网站| 91免费版在线| 国产白丝网站精品污在线入口| 日韩国产欧美三级| 亚洲国产精品尤物yw在线观看| 国产精品久久三| 久久久影院官网| 日韩精品一区二区三区视频| 色婷婷狠狠综合| 三级欧美在线一区| 26uuu亚洲综合色| 欧美日本一区二区在线观看| 成人激情黄色小说| 高清不卡在线观看av| 捆绑变态av一区二区三区| 亚洲国产日韩精品| 一区二区三区四区在线| 综合精品久久久| 国产精品久久久久影院亚瑟| 日韩欧美国产一区二区三区| 欧美伦理影视网| 欧美日韩免费一区二区三区视频| 色呦呦一区二区三区| 91亚洲永久精品| 成人黄色大片在线观看| 成人妖精视频yjsp地址| 成人美女视频在线看| 成人亚洲一区二区一| 国产凹凸在线观看一区二区| 欧美激情一区二区三区| 欧美一区二区三区色| 欧美性xxxxxxxx| 日本韩国欧美国产| 欧洲一区在线观看| 欧美亚洲精品一区| 欧美调教femdomvk| 4hu四虎永久在线影院成人| 欧美高清精品3d| 日韩一区二区三区视频| 日韩精品资源二区在线| 2024国产精品视频| 中文字幕av资源一区| 亚洲丝袜美腿综合| 亚洲激情av在线| 亚洲成人777| 久久99精品久久久久婷婷| 国产揄拍国内精品对白| 国产99精品在线观看| gogogo免费视频观看亚洲一| 色视频成人在线观看免| 欧美视频在线观看一区二区| 91精品国产欧美一区二区成人| 日韩免费一区二区| 中文字幕乱码日本亚洲一区二区| 亚洲日本丝袜连裤袜办公室| 一区二区三区免费网站| 日韩精品一二三四| 成人综合在线网站| 欧美午夜精品一区二区三区| 精品少妇一区二区| 亚洲猫色日本管| 欧美福利视频一区| 日韩欧美高清一区| 久久久久久日产精品| 亚洲va国产天堂va久久en| 日韩精品免费视频人成| 日韩国产一二三区| www.欧美精品一二区| 欧美精品三级日韩久久| 久久精品欧美一区二区三区麻豆| 亚洲免费在线看| 精品一区二区三区免费观看| 不卡一区二区三区四区| 在线观看91av| 中文字幕在线不卡一区二区三区| 午夜伦欧美伦电影理论片| 高清不卡在线观看| 欧美一区二区三区在线电影| 亚洲欧洲日产国码二区| 美女mm1313爽爽久久久蜜臀| voyeur盗摄精品| 精品久久久久久久久久久院品网| 亚洲欧美偷拍三级| 国产一区二区在线观看视频| 91黄色免费看| 中文字幕电影一区| 久久婷婷国产综合精品青草| 亚洲精品国产视频| 蜜桃传媒麻豆第一区在线观看| 国产精品996| 69p69国产精品| 亚洲色图欧美激情| 狠狠色狠狠色合久久伊人| 欧美日韩免费电影| 亚洲欧洲日产国产综合网| 玖玖九九国产精品| 欧美精品在线观看播放| 一区二区三区资源| 99精品久久只有精品| 国产精品高潮呻吟久久| 国产一区二区三区久久久 | 亚洲色图在线看| 成人午夜激情在线| 久久一区二区视频| 免费视频一区二区| 在线电影一区二区三区| 亚洲国产三级在线| 色8久久人人97超碰香蕉987| 亚洲欧美自拍偷拍| 成人精品视频.| 中文久久乱码一区二区| 国产精品亚洲视频| 日本女人一区二区三区| 91免费观看在线| 中文字幕不卡的av| 成人性生交大片免费看在线播放| 欧美成人video| 免播放器亚洲一区| 精品日本一线二线三线不卡| 日本系列欧美系列| 欧美一区二区三区白人| 奇米影视一区二区三区| 欧美一区二区三区不卡| 日本午夜一区二区| 精品电影一区二区三区| 国产成人av电影在线| 国产精品天美传媒| 99re热这里只有精品视频| 亚洲另类一区二区| 欧美日韩在线综合| 日韩中文字幕亚洲一区二区va在线| 欧美日本高清视频在线观看| 免费的成人av| 久久综合国产精品| 成人av资源在线观看| 亚洲视频 欧洲视频| 欧美日韩一区二区在线观看视频| 日本怡春院一区二区| 精品美女被调教视频大全网站| 国产精品一区二区你懂的| 国产精品国产三级国产aⅴ入口 | 在线免费观看视频一区| 丝袜美腿亚洲一区二区图片| 日韩欧美国产系列| 国产成人久久精品77777最新版本| 国产精品久久久久久亚洲毛片| 欧美在线短视频| 欧美aaaaaa午夜精品| 国产精品美女一区二区| 欧美日韩久久不卡| 国产激情视频一区二区三区欧美|