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

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

?? hxaudstr.cpp

?? linux下的一款播放器
?? CPP
?? 第 1 頁 / 共 5 頁
字號:
    // /////////////////////////////////////////////////////////////    // If no  resampling, mix stream data directly into the player    // buffer.    if ( !m_pResampler)    {        pSourceBuffer   = pPlayerBuf;        ulMaxBytes      = m_ulInputBytesPerGran;        /* For only those sound cards which do not         * support stereo - a RARE (non-existent) case          */        if (m_AudioFmt.uChannels == 2 && m_DeviceFmt.uChannels == 1)        {            /* We should never reach here since this case             * should be handled by the Resampler             * Temporary ASSERT...              */            HX_ASSERT(FALSE);        }        /* Mono->Stereo conversion*/        else if (m_bChannelConvert)        {            HX_ASSERT(ulMaxBytes <= ulBufSize/2);                        /* Avoid GPF in retail builds! */            if (ulMaxBytes > ulBufSize/2)            {                ulMaxBytes = ulBufSize/2;            }        }        else        {            HX_ASSERT(ulMaxBytes <= ulBufSize);                        /* Avoid GPF in retail builds! */            if (ulMaxBytes > ulBufSize)            {                ulMaxBytes = ulBufSize;            }        }    }#if defined(HELIX_FEATURE_RESAMPLER)    // /////////////////////////////////////////////////////////////    // If resampling, mix stream data into a tmp buffer. Then    // resample this buffer and mix the final resampled buffer into    // the player buffer.    else    {        bMonoToStereoMayBeConverted = FALSE;//      memset(m_pTmpResBuf, 0, HX_SAFESIZE_T(m_ulMaxBlockSize));        pSourceBuffer = m_pTmpResBuf;        /*          * Audio Session will always ask for m_ulOutputBytesPerGran bytes to be mixed         * in MixIntoBuffer() call. So we need to produce these many number of bytes.         * If there is any mono-stereo conversion that happens in the mixing, number         * of output bytes required from the resampler are half the number of          * m_ulOutputBytesPerGran bytes.         */        if (m_pResampler)        {            ulMaxFramesOut = m_ulOutputBytesPerGran/(m_DeviceFmt.uBitsPerSample==8 ? 1 : 2);            if (m_DeviceFmt.uChannels == 2)            {                ulMaxFramesOut /= 2;            }            ulMaxFramesIn = m_pResampler->Requires(ulMaxFramesOut);            ulMaxBytes = ulMaxFramesIn *  ((m_AudioFmt.uBitsPerSample==8)? 1 : 2)                                            * m_AudioFmt.uChannels;        }        else        {            ulMaxBytes = m_ulInputBytesPerGran;        }        HX_ASSERT(ulMaxBytes <= m_ulMaxBlockSize);    }#endif /* HELIX_FEATURE_RESAMPLER */    // /////////////////////////////////////////////////////////////    // Mix n bytes of data into buffer    ulNumBytesMixed = MixData(pSourceBuffer, ulMaxBytes, bMonoToStereoMayBeConverted,         (!m_pResampler) ? bIsMixBufferDirty : bResampleBufferDirty);/*    if (ulNumBytesMixed > 0)    {        ::fwrite(pSourceBuffer, ulNumBytesMixed, 1, fdbefore);    }*/#if defined(HELIX_FEATURE_RESAMPLER)    // /////////////////////////////////////////////////////////////    // If we need to resample , then do this and then mix data into    // the player buffer.    // Only resample and mix if volume is *not* zero and there     // are some bytes to mix.    if (m_pResampler && ulNumBytesMixed > 0 && m_uVolume > 0 && !m_bMute)    {        if(ulNumBytesMixed < ulMaxBytes  &&  8==m_AudioFmt.uBitsPerSample)        {            //fill remainder with 128's (-1), silence:            UCHAR* pTmp = &pSourceBuffer[ulNumBytesMixed];            ULONG32 ulNumBytesLeftToSilence = ulMaxBytes-ulNumBytesMixed;            do            {                *pTmp = 128;                pTmp++;            } while(--ulNumBytesLeftToSilence);        }        ULONG32 ulOutBytes      = 0;        if (m_pResampler)        {            ulOutBytes = m_pResampler->Resample((UINT16*)pSourceBuffer,                                                ulMaxBytes,                                                (UINT16*)m_pResampleBuf);/*            FILE* fp = fopen("c:\\temp\\audio.txt", "w+");            ::fwrite(m_pResampleBuf, ulOutBytes, 1, fp);            fclose(fp);*/            /* Resampler will do stereo to mono conversion for us.*/            HX_ASSERT(ulMaxFramesOut == (ulOutBytes / 2 /                       (m_AudioFmt.uChannels == 2 && m_DeviceFmt.uChannels == 1 ? 1 : m_AudioFmt.uChannels))) ;        }        if (m_bChannelConvert)        {            HX_ASSERT(ulOutBytes*2 <= ulBufSize);            if ( ulOutBytes > ulBufSize/2 )            {                           ulOutBytes = ulBufSize/2;            }        }        else        {            HX_ASSERT(ulOutBytes <= ulBufSize);            ulOutBytes = ulBufSize;        }        BOOL bBeforeMixBufferDirty = bIsMixBufferDirty;        UINT32 ulMixedNumBytes = 0;#if defined(HELIX_FEATURE_MIXER)        ulMixedNumBytes = CHXMixer::MixBuffer( m_pResampleBuf, pPlayerBuf,                              ulOutBytes, m_bChannelConvert,                             m_uVolume, m_DeviceFmt.uBitsPerSample, bIsMixBufferDirty);#else        ::memcpy(pPlayerBuf, m_pResampleBuf, ulOutBytes); /* Flawfinder: ignore */        bIsMixBufferDirty = TRUE;        ulMixedNumBytes = ulOutBytes;#endif /* HELIX_FEATURE_MIXER */        // If we mixed only a partial buffer, make the remaining buffer silent        if (!bBeforeMixBufferDirty && ulMixedNumBytes < ulBufSize)        {            ::memset(pPlayerBuf+ulMixedNumBytes, 0, ulBufSize-ulMixedNumBytes);        }    }afterMixing:#endif /* HELIX_FEATURE_RESAMPLER */#ifdef _TESTING    if ( g_log > 0 )    {        write( g_log, pPlayerBuf, ulNumBytesMixed);    }#endif    /* This is for *FROM* stream */    if (bGetCrossFadeData)    {        m_bFadeAlreadyDone = TRUE;    }    /* If we are cross-fading, we have data from this stream in pPlayerBuf     * Now get data to be  cross-faded from *From* stream in      * m_pCrossFadeBuffer     */#if defined(HELIX_FEATURE_CROSSFADE) && defined(HELIX_FEATURE_MIXER)    else if (bCrossFadeThisTime)    {        /* Allocate CrossFade Buffer */        if (!m_pCrossFadeBuffer)        {            m_ulCrossFadeBufferSize = ulBufSize;            m_pCrossFadeBuffer = new UCHAR[m_ulCrossFadeBufferSize];        }        memset(m_pCrossFadeBuffer, 0, HX_SAFESIZE_T(m_ulCrossFadeBufferSize));        UINT32 ulCrossFadeLen = m_ulCrossFadeBufferSize;        UINT32 ulTmpBufTime   = 0;        BOOL bIsDrity = FALSE;        m_pCrossFadeStream->MixIntoBuffer(m_pCrossFadeBuffer,                                         ulCrossFadeLen, ulTmpBufTime, bIsDrity, TRUE);        /* Now it is time to perform cross-fading between         * pPlayerBuf and m_pCrossFadeBuffer         */                UINT32 ulStartByteToFade            = 0;        UINT32 ulNumMsInThisBuffer          = CalcDeviceMs(ulBufSize);        UINT32 ulNumBytesToBeCrossFaded = ulBufSize;        UINT32 ulSampleSize = ((m_DeviceFmt.uBitsPerSample==8)? 1 : 2)                            * m_DeviceFmt.uChannels;        /* Make sure we have integral number of samples */        HX_ASSERT(ulBufSize == (ulBufSize/ulSampleSize) * ulSampleSize);        /* Only partial buffer needs to be cross-faded.         *   -------------         * ~~_____________|         *         *       -----------         *      |___________~~         *         *               *     -----         *    |_____|  <-- Granularity size block that is mixed.         *         *       <--> Only partial block needs to be faded         */                if (ulTimeActuallyFaded < ulNumMsInThisBuffer)        {            ulNumBytesToBeCrossFaded = (UINT32) (ulBufSize *                 (ulTimeActuallyFaded*1./ulNumMsInThisBuffer)) ;            UINT32 ulOutOfPhase = ulNumBytesToBeCrossFaded % ulSampleSize;            if (ulOutOfPhase > 0)            {                ulNumBytesToBeCrossFaded =                     ulNumBytesToBeCrossFaded - ulOutOfPhase;            }            ulStartByteToFade = ulBufSize - ulNumBytesToBeCrossFaded;        }        if (ulTimeActuallyFaded > m_ulCrossFadeDuration)        {            ulNumBytesToBeCrossFaded = (UINT32) (ulBufSize *                 (m_ulCrossFadeDuration*1./ulNumMsInThisBuffer)) ;            UINT32 ulOutOfPhase = ulNumBytesToBeCrossFaded % ulSampleSize;            if (ulOutOfPhase > 0)            {                ulNumBytesToBeCrossFaded =                     ulNumBytesToBeCrossFaded - ulOutOfPhase;            }        }        UINT16 uNumSamples = (UINT16) (ulNumBytesToBeCrossFaded/                                       ulSampleSize);        BOOL bWasDirty = bIsMixBufferDirty;        /* Mix the initial bytes that are not cross-faded*/        if (ulStartByteToFade > 0)        {            CHXMixer::MixBuffer( m_pCrossFadeBuffer, pPlayerBuf,                         ulStartByteToFade, FALSE, 100, 8, bWasDirty);        }        m_pCrossFader->CrossFade((INT16*) (m_pCrossFadeBuffer+ulStartByteToFade),                                  (INT16*) (pPlayerBuf+ulStartByteToFade),                                  uNumSamples);        /* make sure we have silence in bytes that were not touched */        if (!bIsMixBufferDirty &&            (ulStartByteToFade + (uNumSamples*ulSampleSize)) < ulBufSize)        {            ::memset(pPlayerBuf+ulStartByteToFade + (uNumSamples*ulSampleSize), 0,                 ulBufSize - (ulStartByteToFade + (uNumSamples*ulSampleSize)));        }        bIsMixBufferDirty = TRUE;    }    if (bGetCrossFadeData || bCrossFadeThisTime)    {        if (bGetCrossFadeData)        {            HX_ASSERT(m_llLastWriteTime >= m_llCrossFadeStartTime);            if (m_llLastWriteTime >= m_llCrossFadeStartTime)            {                HX_ASSERT(m_llLastWriteTime - m_llCrossFadeStartTime < MAX_TIMESTAMP_GAP);                ulTimeActuallyFaded = INT64_TO_UINT32(m_llLastWriteTime - m_llCrossFadeStartTime);            }        }        if (ulTimeActuallyFaded >= m_ulCrossFadeDuration)        {            m_bCrossFadingToBeDone = FALSE;            HX_RELEASE(m_pCrossFadeStream);            /* We should release any extra buffers if it is a             * *from* stream             */            if (!m_bFadeToThisStream)            {                /* Do not remove any instantaenous buffers */                FlushBuffers(FALSE);            }        }        else        {            m_ulCrossFadeDuration   -= ulTimeActuallyFaded;            m_llCrossFadeStartTime  += CAST_TO_INT64 ulTimeActuallyFaded;        }    }    else if (m_bCrossFadingToBeDone && !m_bFadeToThisStream)    {        m_pCrossFadeStream->SyncStream(m_llLastWriteTime);    }#endif /* HELIX_FEATURE_CROSSFADE && HELIX_FEATURE_MIXER *///{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_OK;}/************************************************************************ *  Method: *      CHXAudioStream::MixData *  Purpose: *      Mix all valid data in my auxilliary list into the buffer. * *  Thoughts: *      while there are buffers available *          if (buffertime is more than endtime) break; *          if (any part of buffer is >startime and < endtime) *              we are in business.  *              mix that part of the buffer, update offset,  *              update max of num bytes written in this round.     * Looks like we need to keep LastWrite time and offsets for all buffers     * that get written in one pass.     * Consider this scenario:     *       *        ----------------- -----------------       |________________| |_______________|  -> Skew  1          ________ __________            |_______| |_________|              ->Skew    2  5          ____________________________________         |__________________|_|_______________| Skew in opposite direction 3               _______              |_______|                               4         ____________        |____________|      <- Buffer to be mixed currently                                 Order of buffer processing will be in the order of numbers on the right.          Since all the theree buffers have fudge within fudge limit, they need to           be written one after the other. This is possible only if we keep last          write times and last written offsets in mixer buffer for each one of them.        Is this extra processsing on every write worthed OR do we place limitations        on the data that can be written.     *  Hmmm... We are now going with STREAMED/INSTANTANEOUS/TIMED model since the     *  above case is shows that users can really screw things up and it would be     *  very difficult to handle this case. So instead, we do not support over-lapped     *  buffers any more. i.e. If a renderer wants to have streamed and instantaneous     *  behavior, it needs to use two audio streams. */ULONG32 CHXAudioStream::MixData(        UCHAR*  pDestBuf,       ULONG32 ulBufLen,       BOOL    bMonoToStereoMayBeConverted,       BOOL&   bIsMixBufferDirty){    HXAudioInfo*    pInfo                       = 0;    ULONG32         ulNumBytes                  = 0;    LISTPOSITION    lp                          = 0;    LISTPOSITION    lastlp                      = 0;    LISTPOSITION    lpList                      = 0;    LISTPOSITION    lastlpList                  = 0;    ULONG32         ulNumBytesWritten           = 0;    BOOL            bLastWriteTimeToBeUpdated   = TRUE;    ULONG32         ulDestinationOffset         = 0;    BOOL            bWasMixBufferDirty          = bIsMixBufferDirty;    // /////////////////////////////////////////////////////////////    // Go thru the buffer list and mix in valid buffers.    /* First all instantaneous buffers     * All the instantaneous buffers get written at the start of      * the destination buffer.     */    lpList = lastlpList = 0;    lpList = m_pInstantaneousList->GetHeadPosition();    while(lpList)    {        lastlpList      = lpList;        CHXSimpleList* pList = 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲综合网站在线观看| 国产精品毛片久久久久久久| 亚洲一区二区在线观看视频| 在线视频你懂得一区二区三区| 亚洲品质自拍视频网站| 色先锋资源久久综合| 亚洲伦理在线精品| 欧美性猛交xxxx乱大交退制版| 亚洲国产美国国产综合一区二区| 欧美性受xxxx| 美女mm1313爽爽久久久蜜臀| 2024国产精品视频| av网站免费线看精品| 一区二区三区色| 日韩一级片在线播放| 国产福利一区在线| 亚洲欧洲制服丝袜| 制服丝袜亚洲色图| 国产一二精品视频| 国产乱色国产精品免费视频| 中文字幕av一区二区三区| 91香蕉视频黄| 免费在线观看日韩欧美| 中文字幕 久热精品 视频在线| 91美女视频网站| 毛片一区二区三区| 中文字幕亚洲一区二区va在线| 日本伦理一区二区| 精品一区免费av| 亚洲精品日韩专区silk| 日韩欧美成人一区| 99久久精品免费看| 美日韩一区二区三区| 亚洲欧美在线高清| 日韩精品一区二区三区视频| 成人黄页在线观看| 天天免费综合色| 国产精品久久久久影院色老大| 欧美日韩性生活| 岛国av在线一区| 蜜臀av在线播放一区二区三区| **性色生活片久久毛片| 日韩欧美亚洲国产精品字幕久久久| 91一区一区三区| 国产一区二区剧情av在线| 亚洲成av人片在线| 国内外精品视频| 一区二区三区在线视频免费观看| 欧美mv日韩mv亚洲| 色国产综合视频| 成人一区在线看| 久久99久久99精品免视看婷婷 | 欧美日韩久久不卡| 国产成人av电影在线播放| 视频一区二区三区入口| 国产精品毛片无遮挡高清| 欧美成人福利视频| 欧美日韩国产一二三| 91最新地址在线播放| 国产美女在线观看一区| 青青草原综合久久大伊人精品| 亚洲精品日韩综合观看成人91| 欧美国产精品v| 久久亚洲欧美国产精品乐播| 日韩久久久久久| 欧美一区二区网站| 欧美人与性动xxxx| 欧美日韩专区在线| 色先锋aa成人| 一本色道**综合亚洲精品蜜桃冫| 成人黄色在线视频| 国产sm精品调教视频网站| 精品一区精品二区高清| 精品一区二区综合| 免费三级欧美电影| 蜜桃一区二区三区在线| 奇米影视在线99精品| 日韩av电影一区| 蜜臀av一区二区在线免费观看| 日本欧美一区二区三区| 日本vs亚洲vs韩国一区三区二区 | 久久精品人人爽人人爽| 日韩欧美精品在线| 欧美成人欧美edvon| 日韩精品一区二区三区在线观看| 6080日韩午夜伦伦午夜伦| 在线成人av影院| 欧美白人最猛性xxxxx69交| 欧美一级精品大片| 欧美精品一区二区三区蜜桃视频| 精品乱人伦小说| 国产丝袜在线精品| 中文字幕欧美一区| 悠悠色在线精品| 天天色天天操综合| 狠狠色丁香久久婷婷综| 国产精品18久久久久| 成人在线视频首页| 色欧美日韩亚洲| 欧美日韩在线直播| 欧美成人r级一区二区三区| 久久蜜桃一区二区| 自拍偷拍欧美激情| 亚洲成人综合网站| 蜜臂av日日欢夜夜爽一区| 国产在线不卡视频| 99国产麻豆精品| 6080亚洲精品一区二区| 美女视频黄免费的久久 | 日本久久一区二区三区| 欧美三级日韩三级| 精品理论电影在线观看 | 亚洲天天做日日做天天谢日日欢| 一区二区三区国产精华| 男女男精品网站| eeuss国产一区二区三区| 精品视频一区三区九区| 久久一夜天堂av一区二区三区| 亚洲欧洲精品天堂一级| 日韩电影在线免费观看| 成人精品鲁一区一区二区| 欧美网站一区二区| 久久久久成人黄色影片| 亚洲成人av电影| 国产成人精品三级麻豆| 欧美精品亚洲一区二区在线播放| 久久久国际精品| 五月激情综合网| 成人黄色软件下载| 日韩欧美亚洲一区二区| 一区二区三区欧美亚洲| 国产一区二区三区在线观看免费 | 91精品国产一区二区三区| 国产精品美女久久久久久久久久久| 亚洲成av人片一区二区梦乃 | 免费在线欧美视频| 不卡高清视频专区| 欧美精品一区二| 亚洲一区二区三区激情| 成人午夜电影网站| 精品久久久久久久人人人人传媒| 亚洲综合色噜噜狠狠| 国产 日韩 欧美大片| 欧美丰满一区二区免费视频| 亚洲日本护士毛茸茸| 国产成人在线电影| 欧美不卡一二三| 日本 国产 欧美色综合| 欧美三级韩国三级日本一级| 亚洲欧洲色图综合| 成人小视频在线| 久久无码av三级| 久久99国产精品久久| 一级日本不卡的影视| 成人美女在线视频| 久久夜色精品国产噜噜av| 奇米色一区二区| 欧美欧美欧美欧美| 亚洲国产综合色| 在线观看免费亚洲| 一区二区三区在线不卡| 91在线一区二区三区| 国产精品视频九色porn| 成人综合婷婷国产精品久久| 亚洲精品在线三区| 久久精品国产亚洲一区二区三区| 欧美男女性生活在线直播观看| 亚洲综合成人在线视频| 在线观看av不卡| 亚洲一区二区不卡免费| 欧美日韩一区二区三区在线看| 一区二区三区欧美| 在线视频综合导航| 亚洲综合一区二区| 欧美日韩国产精品成人| 五月天精品一区二区三区| 欧美日韩国产免费| 捆绑调教一区二区三区| 精品欧美一区二区三区精品久久 | 国产三级精品在线| 国产成人免费在线视频| 久久精品视频免费观看| 成人激情动漫在线观看| 亚洲女同一区二区| 欧美性高清videossexo| 视频一区二区中文字幕| 日韩欧美在线影院| 国产剧情一区在线| 亚洲欧洲国产日韩| 欧美怡红院视频| 免费看黄色91| 日本一区二区三区电影| 91丝袜美女网| 日韩高清不卡在线| 久久久精品国产免大香伊| 99国产精品国产精品毛片| 亚洲国产成人av| 久久亚洲精品小早川怜子| 99国产精品久久久久久久久久 | 久久精品视频免费|