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

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

?? hxaudstr.cpp

?? linux下的一款播放器
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
HX_RESULT CHXAudioStream::Setup(        HXAudioFormat*  pFormat,       ULONG32         ulGranularity){    HX_RESULT theErr = HXR_OK;    m_DeviceFmt.uChannels       = pFormat->uChannels;    m_DeviceFmt.uBitsPerSample  = pFormat->uBitsPerSample;    m_DeviceFmt.ulSamplesPerSec = pFormat->ulSamplesPerSec;    m_DeviceFmt.uMaxBlockSize   = pFormat->uMaxBlockSize;    m_ulGranularity = ulGranularity;    m_bSetupDone = TRUE;        /* we have all the info now.. so setup the resampler */    if (m_bAudioFormatKnown && !m_bInited)    {        theErr = ProcessInfo();    }    return theErr;}/************************************************************************ *  Method: *              IHXAudioStream::ResetStream *      Purpose: */void CHXAudioStream::ResetStream(){    m_bInited           = FALSE;    m_bCanBeRewound     = FALSE;    m_bSetupDone        = FALSE;    m_bAudioFormatKnown = FALSE;    m_bIsResumed        = FALSE;        UnRegister();    while (m_pAvailableBuffers && m_pAvailableBuffers->GetCount() > 0)    {        IHXBuffer* pBuffer = (IHXBuffer*) m_pAvailableBuffers->RemoveHead();        HX_RELEASE(pBuffer);    }    HX_DELETE(m_pAvailableBuffers);    // Delete all entries in the audio data list    FlushBuffers();    HX_DELETE(m_pDataList);    HX_DELETE(m_pInstantaneousList);    CleanupRAByToTs();    HX_DELETE(m_pRAByToTsInList);    HX_DELETE(m_pRAByToTsAdjustedList);        // Delete resample buffer    HX_VECTOR_DELETE(m_pResampleBuf);    // Delete tmp resample buffer    HX_VECTOR_DELETE(m_pTmpResBuf);    HX_VECTOR_DELETE(m_pCrossFadeBuffer);    HX_VECTOR_DELETE(m_pExcessInterpBuffer);    HX_VECTOR_DELETE(m_pTempInterpBuffer);    m_ulExcessInterpBufferSize = m_ulPreviousExcessInterpBufferSize = 0;    #if defined(HELIX_FEATURE_CROSSFADE)    HX_DELETE(m_pCrossFader);#endif /* HELIX_FEATURE_CROSSFADE */    // Free the resampler    HX_RELEASE(m_pResampler);    m_bGotHooks = FALSE;    m_llLastWriteTime = 0;    m_ulTSRollOver = 0;#ifdef _TESTING    if ( g_log > 0 )        close(g_log);    g_log = -1;#endif    HX_RELEASE(m_pValues);#if defined(HELIX_FEATURE_AUDIO_PREMIXHOOK)    // Delete all entries in the pre-mix hook list.    if ( m_PreMixHookMap.GetCount() > 0)    {        HXAudioHookInfo* h = 0;        CHXMapPtrToPtr::Iterator lIter = m_PreMixHookMap.Begin();        for (; lIter != m_PreMixHookMap.End(); ++lIter)        {            h = (HXAudioHookInfo*) (*lIter);            ProcessAudioHook(ACTION_REMOVE, h->pHook);            h->pHook->Release();            delete h;        }                m_PreMixHookMap.RemoveAll();    }#endif /* HELIX_FEATURE_AUDIO_PREMIXHOOK */#if defined(HELIX_FEATURE_VOLUME)    // Delete IRMA volume object.    if (m_pStreamVolume && m_pVolumeAdviseSink)    {        m_pStreamVolume->RemoveAdviseSink(m_pVolumeAdviseSink);        m_pVolumeAdviseSink->m_pCHXAudioStream = 0;    }    HX_RELEASE(m_pVolumeAdviseSink);#endif /* HELIX_FEATURE_VOLUME */    HX_RELEASE(m_pStreamVolume);    HX_DELETE(m_pInDataPtr);    HX_DELETE(m_pOutDataPtr);    if (m_DryNotificationMap.GetCount() > 0)    {        IHXDryNotification* pDryNotification = 0;        CHXMapPtrToPtr::Iterator lIter = m_DryNotificationMap.Begin();        for (; lIter != m_DryNotificationMap.End(); ++lIter)        {            pDryNotification = (IHXDryNotification*) (*lIter);            pDryNotification->Release();        }                m_DryNotificationMap.RemoveAll();    }    HX_RELEASE(m_pCrossFadeStream);    HX_RELEASE(m_pCommonClassFactory);#if defined(HELIX_FEATURE_PREFERENCES)    HX_RELEASE(m_pPreferences);#endif /* HELIX_FEATURE_PREFERENCES */    HX_RELEASE(m_Owner);    return;}HX_RESULTCHXAudioStream::ProcessAudioHook(PROCESS_ACTION action,                                  IHXAudioHook* pAudioHook){    return HXR_OK;}// Dummy version of this method - real version would be in hxaudstr_new.cppBOOL CHXAudioStream::ConvertIntoBuffer(tAudioSample* buffer, UINT32 nSamples, INT64 llStartTimeInSamples){    return FALSE;}/************************************************************************ *  Method: *              IHXAudioStream::InitHooks *      Purpose: *      Init any pre-mix hooks. Return TRUE if hooks exist else return *      FALSE. */void CHXAudioStream::InitHooks(){#if defined(HELIX_FEATURE_AUDIO_PREMIXHOOK)    /* Iterate thru the hook list and call the hook's OnInit().     * If any of the hooks have disabled write set to TRUE, then     * we will let this override any set to FALSE.     */    if ( m_PreMixHookMap.GetCount() > 0 )    {        HXAudioHookInfo* h = 0;        CHXMapPtrToPtr::Iterator lIter = m_PreMixHookMap.Begin();        for (; lIter != m_PreMixHookMap.End(); ++lIter)        {            h = (HXAudioHookInfo*) (*lIter);            if (h->bIgnoreAudioData ||                HXR_OK == ProcessAudioHook(ACTION_CHECK, h->pHook))            {                h->pHook->OnInit( &m_AudioFmt );            }        }    }#endif /* HELIX_FEATURE_AUDIO_PREMIXHOOK */    m_bHooksInitialized = TRUE;}/************************************************************************ *  Method: *              IHXAudioStream::ProcessHooks *      Purpose: */HX_RESULT CHXAudioStream::ProcessHooks(     HXAudioData*        pInData,    HXAudioData*        pOutData){    HX_RESULT theErr = HXR_OK;#if defined(HELIX_FEATURE_AUDIO_PREMIXHOOK)    m_pInDataPtr->pData         = pInData->pData;    m_pInDataPtr->pData->AddRef();    m_pInDataPtr->ulAudioTime   = pInData->ulAudioTime;        m_pOutDataPtr->pData        = NULL;    m_pOutDataPtr->ulAudioTime  = pInData->ulAudioTime;    m_pInDataPtr->uAudioStreamType    = pInData->uAudioStreamType;    m_pOutDataPtr->uAudioStreamType   = pInData->uAudioStreamType;    if ( m_PreMixHookMap.GetCount() > 0 )    {        HXAudioHookInfo* pPreMixHookInfo = 0;        CHXMapPtrToPtr::Iterator lIter = m_PreMixHookMap.Begin();        for (; !theErr && lIter != m_PreMixHookMap.End(); ++lIter)        {            pPreMixHookInfo = (HXAudioHookInfo*) (*lIter);            if (HXR_OK == ProcessAudioHook(ACTION_CHECK, pPreMixHookInfo->pHook))            {                theErr = pPreMixHookInfo->pHook->OnBuffer( m_pInDataPtr, m_pOutDataPtr);                /* Check to see if renderer changed the buffer. If so, then                 * make this output as input to the next Hook.                 */                if (!theErr && m_pOutDataPtr->pData)                {                    m_pInDataPtr->pData->Release();                    m_pInDataPtr->pData     = m_pOutDataPtr->pData;                    m_pInDataPtr->ulAudioTime   = m_pOutDataPtr->ulAudioTime;                    m_pOutDataPtr->pData        = 0;                }            }            else if (pPreMixHookInfo->bIgnoreAudioData)            {                IHXBuffer* pTempBuf = m_pInDataPtr->pData;                m_pInDataPtr->pData = NULL;                theErr = pPreMixHookInfo->pHook->OnBuffer( m_pInDataPtr, m_pOutDataPtr);                m_pInDataPtr->pData = pTempBuf;            }        }    }    /* Final output is always in InDataPtr*/    pOutData->pData             = m_pInDataPtr->pData;    pOutData->ulAudioTime       = m_pInDataPtr->ulAudioTime;    pOutData->uAudioStreamType  = m_pInDataPtr->uAudioStreamType;#endif /* HELIX_FEATURE_AUDIO_PREMIXHOOK */    return theErr;}/************************************************************************ *  Method: *      CHXAudioStream::MixIntoBuffer *  Purpose: *      Mix stream data into this pPlayerBuf. *  Note: *       *      Resampler always works on 16 bit PCM. If the input is *      8 bit, it converts it first to 16 bit before making *      any resampling calculations.  *      We always try to open audio device in 16 bit stereo mode. *      This is because a new player/stream may be instantiated in the *      midst of a presentation and this new stream may be stereo. If we  *      earlier opened the device as mono, we will have to force this stereo *      stream to be played as mono! Not a good idea. Also any mono-streo *      conversion almost comes for free (some extra memory usage and  *      an extra assignment) since it can be done in the mixing loop in *      MixBuffer(). * *      Any 8-16 and stereo-mono conversion, if required, SHOULD be done *      before resampling. *      Any mono-stereo conversion should be done after resampling. * *      Stereo-Mono conversion code resides in the resampler.  *      Mono-Stereo conversion code resides in the mixer.  * */HX_RESULT CHXAudioStream::MixIntoBuffer(    UCHAR*   pPlayerBuf,    ULONG32  ulBufSize,    ULONG32& ulBufTime,    BOOL&    bIsMixBufferDirty,    BOOL     bGetCrossFadeData){    BOOL    bCrossFadeThisTime  = FALSE;    UINT32  ulTimeActuallyFaded = m_ulGranularity;    if (!m_bInited)    {        return HXR_NOT_INITIALIZED;    }//{FILE* f1 = ::fopen("c:\\temp\\rasync.txt", "a+"); ::fprintf(f1, "Call MixIntoBuffer: %lu\n", m_ulLastWriteTime);::fclose(f1);}    /* If this is a *FROM* stream, we may have already mixed     * data during cross-fade with *TO* stream     */    if (m_bFadeAlreadyDone && !m_bFadeToThisStream)    {        m_bFadeAlreadyDone = FALSE;        return HXR_OK;    }    HX_ASSERT(!bGetCrossFadeData || !m_bFadeToThisStream);    /* If we need to mix cross fade data from the *from* stream,     * it better be available      */    HX_ASSERT(!bGetCrossFadeData || m_pDataList->GetCount() > 0);    /* If this stream needs to be cross-faded and is a     * NOT a fade-to stream, it would have been already taken     * care of by the fade-to stream in an earlier call to      * MixIntoBuffer()     */    if (m_bCrossFadingToBeDone && m_pDataList->GetCount() > 0)    {        HXAudioInfo* pInfo = (HXAudioInfo*) m_pDataList->GetHead();        INT64 llActualStartTime  = 0;        if (pInfo)        {            llActualStartTime   = CAST_TO_INT64 (pInfo->ulStartTime) +                                   CAST_TO_INT64 (CalcMs(pInfo->pBuffer->GetSize() - pInfo->ulBytesLeft)) +                                  CAST_TO_INT64 m_ulTSRollOver * CAST_TO_INT64 MAX_UINT32;            if (m_bFadeToThisStream)            {                /* Cool! It is time for cross-fading */                if ((m_llLastWriteTime <= m_llCrossFadeStartTime                            &&                     m_llCrossFadeStartTime - m_llLastWriteTime <= CAST_TO_INT64 m_ulGranularity)  ||                    (m_llLastWriteTime > m_llCrossFadeStartTime                             &&                     m_llLastWriteTime - m_llCrossFadeStartTime <= CAST_TO_INT64 m_ulFudge))                {                    bCrossFadeThisTime = TRUE;                    if (m_llLastWriteTime <= m_llCrossFadeStartTime)                    {                        ulTimeActuallyFaded = m_ulGranularity -                                               INT64_TO_UINT32(m_llCrossFadeStartTime - m_llLastWriteTime);                    }//{FILE* f1 = ::fopen("c:\\raroot\\racross.txt", "a+"); ::fprintf(f1, "m_ulLastWriteTime: %lu ulStartTime: %lu m_ulCrossFadeStartTime: %lu pInfo->ulStartTime: %lu pInfo->pBuffer->GetSize(): %lu pInfo->ulBytesLeft: %lu\n", m_ulLastWriteTime, ulStartTime, m_ulCrossFadeStartTime, pInfo->ulStartTime, pInfo->pBuffer->GetSize(), pInfo->ulBytesLeft);::fclose(f1);}                    HX_ASSERT(                        (llActualStartTime >= m_llCrossFadeStartTime &&                        (llActualStartTime <= m_llCrossFadeStartTime +                                               m_ulCrossFadeDuration)) ||                        (llActualStartTime < m_llCrossFadeStartTime &&                         (m_llCrossFadeStartTime - llActualStartTime <= CAST_TO_INT64 m_ulFudge)));                }            }        }    }    UINT32  ulLastWriteTime = INT64_TO_UINT32(m_llLastWriteTime - CAST_TO_INT64 m_ulTSRollOver * CAST_TO_INT64 MAX_UINT32);    if (!bGetCrossFadeData && ulBufTime < ulLastWriteTime)    {        ulBufTime = ulLastWriteTime;    }    /* If there are any DryNotifications and the data list is empty     * we need to notify them so that they can write more data.     */    if (m_DryNotificationMap.GetCount() > 0 || m_Owner->GetAudioStreamCount() == 1)    {        UINT32 ulNumMsRequired = m_ulGranularity;        if (m_pDataList->IsEmpty() || !EnoughDataAvailable(ulLastWriteTime, ulNumMsRequired))        {            if (!bIsMixBufferDirty && !bGetCrossFadeData && !m_Owner->m_Owner->ReallyNeedData())            {                return HXR_WOULD_BLOCK;            }            if (m_DryNotificationMap.GetCount() > 0)            {                IHXDryNotification* pDryNotification = 0;                CHXMapPtrToPtr::Iterator lIter = m_DryNotificationMap.Begin();                for (; lIter != m_DryNotificationMap.End(); ++lIter)                {                    pDryNotification = (IHXDryNotification*) (*lIter);                    pDryNotification->OnDryNotification(ulLastWriteTime, ulNumMsRequired);                }                if (m_Owner->GetState() != E_PLAYING)                {                    return HXR_OK;                }            }        }    }    m_Owner->DataInAudioDevice(TRUE);    // /////////////////////////////////////////////////////////////    // There may be no buffers in the list. No packets? Play silence.    // Still need to increment time.    if ( m_pDataList->IsEmpty() && m_pInstantaneousList->IsEmpty() )    {        m_llLastWriteTime += CAST_TO_INT64 m_ulGranularity;//{FILE* f1 = ::fopen("e:\\MixIntoBuffer.txt", "a+"); ::fprintf(f1, "%lu\t%p\t%lu\n", HX_GET_BETTERTICKCOUNT(), this, (UINT32)m_llLastWriteTime);::fclose(f1);}        return HXR_NO_DATA;    }    UCHAR*      pSourceBuffer = 0;    ULONG32     ulMaxBytes = 0;    ULONG32     ulMaxFramesIn = 0;    ULONG32     ulMaxFramesOut = 0;    ULONG32     ulNumBytesMixed = 0;    BOOL        bMonoToStereoMayBeConverted = TRUE;    BOOL        bResampleBufferDirty        = FALSE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久人人97超碰com| jlzzjlzz国产精品久久| 成人中文字幕合集| 欧美性感一类影片在线播放| 久久只精品国产| 天天av天天翘天天综合网 | 国产成人免费在线视频| 欧美日韩美少妇| 亚洲视频1区2区| 国内一区二区在线| 91精品国产丝袜白色高跟鞋| 亚洲人成亚洲人成在线观看图片| 老司机午夜精品| 欧美日韩国产在线观看| 亚洲久本草在线中文字幕| 国产一区二区三区蝌蚪| 中文字幕日韩一区| 欧美一级片在线| 91亚洲永久精品| 一区二区久久久久| 久久九九99视频| 欧美在线一区二区三区| 国产盗摄一区二区三区| 亚洲综合精品久久| 中文字幕中文字幕一区| 国产色91在线| 狠狠久久亚洲欧美| 日韩欧美亚洲另类制服综合在线| 亚洲一区二区三区视频在线| 色婷婷亚洲精品| 亚洲日本护士毛茸茸| 成人免费毛片aaaaa**| 2023国产一二三区日本精品2022| 国产亚洲欧美一级| 亚洲国产精品成人综合色在线婷婷| 免费的成人av| 日韩免费高清视频| 狠狠色丁香久久婷婷综| 久久影音资源网| 国产大片一区二区| 国产三级精品在线| 成人丝袜高跟foot| 国产精品你懂的| proumb性欧美在线观看| 亚洲欧美日韩一区二区| 欧美视频一二三区| 日本成人在线网站| 精品国产一区二区三区av性色| 另类的小说在线视频另类成人小视频在线 | 99久久国产综合精品色伊| 国产精品乱码人人做人人爱| 91视视频在线直接观看在线看网页在线看 | 亚洲综合色噜噜狠狠| 欧美日韩国产欧美日美国产精品| 日韩精品视频网| 精品成人佐山爱一区二区| 国产成人免费在线观看| 一区二区三区在线视频免费观看| 欧美色老头old∨ideo| 久久福利视频一区二区| 日本一区二区三区久久久久久久久不 | 成人精品国产一区二区4080| 中文字幕日韩欧美一区二区三区| 欧美日韩亚洲高清一区二区| 久久9热精品视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 一本大道av一区二区在线播放| 亚洲视频狠狠干| 91超碰这里只有精品国产| 国产精品一区三区| 一区二区三区在线观看动漫| 精品日韩欧美一区二区| 91女人视频在线观看| 六月丁香综合在线视频| 国产精品丝袜一区| 日韩一级免费一区| 色综合久久88色综合天天免费| 免费在线观看日韩欧美| 1区2区3区精品视频| 日韩视频不卡中文| 一本到三区不卡视频| 精品制服美女久久| 亚洲国产综合在线| 一区免费观看视频| 久久综合九色综合97婷婷女人| 在线国产亚洲欧美| 成人app网站| 国内精品久久久久影院色| 亚洲国产成人av| 亚洲欧洲成人精品av97| 久久久久久久综合狠狠综合| 欧美精选午夜久久久乱码6080| av一区二区三区| 国产精品88888| 蜜臀av一区二区在线免费观看| 亚洲综合视频在线| 国产精品嫩草99a| 久久久久88色偷偷免费| 日韩欧美国产精品一区| 欧美另类高清zo欧美| 在线观看亚洲成人| 一本一道久久a久久精品| 不卡的av电影在线观看| 国产成+人+日韩+欧美+亚洲| 久久99热99| 久久www免费人成看片高清| 日韩精品一二区| 亚洲国产成人av网| 亚洲一区二区三区三| 亚洲图片欧美激情| 欧美中文字幕亚洲一区二区va在线| 蜜桃精品视频在线观看| 久久精品在这里| 免费成人在线观看| 亚洲123区在线观看| 亚洲另类在线视频| 亚洲情趣在线观看| 夜色激情一区二区| 亚洲线精品一区二区三区| 夜夜操天天操亚洲| 亚洲一区影音先锋| 亚洲二区视频在线| 日韩精品国产精品| 喷水一区二区三区| 国产在线视频一区二区| 国产精品亚洲午夜一区二区三区| 国产福利91精品一区二区三区| 粉嫩av一区二区三区| 不卡一卡二卡三乱码免费网站| 91在线精品一区二区| 欧美日韩精品一区二区三区| 日韩女同互慰一区二区| 精品嫩草影院久久| 欧美日韩精品一区二区| 97精品久久久午夜一区二区三区 | 中文字幕亚洲电影| 国产精品国产三级国产普通话三级| 亚洲国产精品99久久久久久久久| 国产精品麻豆一区二区 | 久久综合色一综合色88| 国产精品免费免费| 一区二区三区免费在线观看| 日韩电影一区二区三区| 国产一本一道久久香蕉| 99久久精品国产导航| 欧洲一区在线电影| 精品日韩欧美一区二区| 中文字幕一区在线观看视频| 亚洲成人一二三| 国产精品99久久久久久宅男| 色伊人久久综合中文字幕| 欧美一卡2卡3卡4卡| 国产精品美女www爽爽爽| 日韩毛片高清在线播放| 午夜成人免费视频| 精品一区二区三区免费| 91视频国产观看| 日韩亚洲欧美成人一区| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 亚洲宅男天堂在线观看无病毒| 男男视频亚洲欧美| 色狠狠一区二区| 久久这里只有精品视频网| 亚洲一级二级在线| 国产91露脸合集magnet | 亚洲精品一区二区三区香蕉| 综合在线观看色| 久久机这里只有精品| 在线视频国内一区二区| 国产欧美va欧美不卡在线| 日韩精品亚洲一区二区三区免费| 99在线视频精品| 久久亚洲影视婷婷| 日本成人在线看| 在线看一区二区| 国产女人aaa级久久久级 | 国精产品一区一区三区mba视频| 亚洲高清免费在线| 成人午夜视频在线观看| 日韩一区二区在线观看视频| 亚洲六月丁香色婷婷综合久久 | 日韩精品一区二区三区蜜臀| 一区二区三区欧美日| 成人听书哪个软件好| 久久久国产一区二区三区四区小说| 亚洲一区二区欧美| 色成人在线视频| 亚洲欧美在线另类| 成人黄色国产精品网站大全在线免费观看| 日韩一区二区三区观看| 日本亚洲电影天堂| 在线电影一区二区三区| 亚洲成人免费影院| 欧美午夜精品一区二区三区| 亚洲素人一区二区| 91一区二区在线| 亚洲欧美日韩一区二区| 色哟哟一区二区三区| 亚洲乱码国产乱码精品精小说| 91视频.com|