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

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

?? output.cpp

?? 6410BSP3
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//
// -----------------------------------------------------------------------------
//
//      THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
//      ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
//      THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
//      PARTICULAR PURPOSE.
//
// -----------------------------------------------------------------------------
#include "wavemain.h"


HRESULT OutputStreamContext::Open(DeviceContext *pDeviceContext, LPWAVEOPENDESC lpWOD, DWORD dwFlags)
{
    HRESULT Result;

    Result = WaveStreamContext::Open(pDeviceContext, lpWOD, dwFlags);

    if (Result==MMSYSERR_NOERROR)
    {
        // Note: Output streams should be initialized in the run state.
        Run();
    }

    return Result;
}


DWORD OutputStreamContext::Reset()
{
    HRESULT Result;

    Result = WaveStreamContext::Reset();

    if (Result==MMSYSERR_NOERROR)
    {
        // Note: Output streams should be reset to the run state.
        Run();
    }

    return Result;
};


// Init m_DeltaT with (SampleRate/HWSampleRate) calculated in 17.15 fixed point form
// Note that we need to hold the result in a 64-bit value until we're done shifting,
// since the result of the multiply will overflow 32 bits for sample rates greater than
// or equal to the hardware's sample rate.
DWORD OutputStreamContext::SetRate(DWORD dwMultiplier)
{
    m_dwMultiplier = dwMultiplier;

    UINT64 Delta = (m_WaveFormat.nSamplesPerSec * m_dwMultiplier) >> 16;
    Delta = (Delta * INVSAMPLERATE) >> 17;  // Convert to 17.15 format
    m_DeltaT = (DWORD)Delta;
    return MMSYSERR_NOERROR;
}


// Originally, this code used to be in each renderer, and each one would call GetNextBuffer as needed.
// Pulling this code out of each low level renderer allows the inner loop to be in a leaf routine (ie no
// subroutine calls out of that routine), which helps the compiler optimize the inner loop.
PBYTE WaveStreamContext::Render(PBYTE pBuffer, PBYTE pBufferEnd, PBYTE pBufferLast)
{
    if (!m_bRunning || !m_lpCurrData)
    {
        return pBuffer;
    }

    while (pBuffer < pBufferEnd)
    {
        while (m_lpCurrData>=m_lpCurrDataEnd)
        {
            if (!GetNextBuffer())
            {
                return pBuffer;
            }
        }

        pBuffer = Render2(pBuffer,pBufferEnd,pBufferLast);
    }

    return pBuffer;
}


PBYTE OutputStreamContextM8::Render2(PBYTE pBuffer, PBYTE pBufferEnd, PBYTE pBufferLast)
{
    LONG CurrT = m_CurrT;
    LONG DeltaT = m_DeltaT;
    LONG CurrSamp0 = m_CurrSamp[0];
    LONG PrevSamp0 = m_PrevSamp[0];
    PBYTE pCurrData = m_lpCurrData;
    PBYTE pCurrDataEnd = m_lpCurrDataEnd;
    LONG fxpGain = m_fxpGain;

    while (pBuffer < pBufferEnd)
    {
        while (CurrT >= 0x8000)
        {
            if (pCurrData>=pCurrDataEnd)
            {
                goto Exit;
            }

            CurrT -= 0x8000;

            PrevSamp0 = CurrSamp0;

            PPCM_SAMPLE pSampleSrc = (PPCM_SAMPLE)pCurrData;
            CurrSamp0 = (LONG)pSampleSrc->m8.sample;
            CurrSamp0 = (CurrSamp0 - 128) << 8;
            pCurrData+=1;
        }

        LONG OutSamp0;
        OutSamp0 = PrevSamp0 + (((CurrSamp0 - PrevSamp0) * CurrT) >> 15);
        OutSamp0 = (OutSamp0 * fxpGain) >> VOLSHIFT;
        CurrT += DeltaT;

#if (OUTCHANNELS==2)
        LONG OutSamp1;
        OutSamp1=OutSamp0;
        if (pBuffer < pBufferLast)
        {
            OutSamp0 += ((HWSAMPLE *)pBuffer)[0];
            OutSamp1 += ((HWSAMPLE *)pBuffer)[1];
#if USE_MIX_SATURATE
            // Handle saturation
            if (OutSamp0>AUDIO_SAMPLE_MAX)
            {
                OutSamp0=AUDIO_SAMPLE_MAX;
            }
            else if (OutSamp0<AUDIO_SAMPLE_MIN)
            {
                OutSamp0=AUDIO_SAMPLE_MIN;
            }
            if (OutSamp1>AUDIO_SAMPLE_MAX)
            {
                OutSamp1=AUDIO_SAMPLE_MAX;
            }
            else if (OutSamp1<AUDIO_SAMPLE_MIN)
            {
                OutSamp1=AUDIO_SAMPLE_MIN;
            }
#endif
        }
        ((HWSAMPLE *)pBuffer)[0] = (HWSAMPLE)OutSamp0;
        ((HWSAMPLE *)pBuffer)[1] = (HWSAMPLE)OutSamp1;
        pBuffer += 2*sizeof(HWSAMPLE);
#else
        if (pBuffer < pBufferLast)
        {
            OutSamp0 += ((HWSAMPLE *)pBuffer)[0];
#if USE_MIX_SATURATE
            // Handle saturation
            if (OutSamp0>AUDIO_SAMPLE_MAX)
            {
                OutSamp0=AUDIO_SAMPLE_MAX;
            }
            else if (OutSamp0<AUDIO_SAMPLE_MIN)
            {
                OutSamp0=AUDIO_SAMPLE_MIN;
            }
#endif
        }
        ((HWSAMPLE *)pBuffer)[0] = (HWSAMPLE)OutSamp0;
        pBuffer += sizeof(HWSAMPLE);
#endif
    }

    Exit:

    m_dwByteCount += (pCurrData - m_lpCurrData);
    m_lpCurrData = pCurrData;
    m_CurrT = CurrT;
    m_PrevSamp[0] = PrevSamp0;
    m_CurrSamp[0] = CurrSamp0;
    return pBuffer;
}


PBYTE OutputStreamContextM16::Render2(PBYTE pBuffer, PBYTE pBufferEnd, PBYTE pBufferLast)
{
    LONG CurrT = m_CurrT;
    LONG DeltaT = m_DeltaT;
    LONG CurrSamp0 = m_CurrSamp[0];
    LONG PrevSamp0 = m_PrevSamp[0];
    PBYTE pCurrData = m_lpCurrData;
    PBYTE pCurrDataEnd = m_lpCurrDataEnd;
    LONG fxpGain = m_fxpGain;
    LONG OutSamp0;

    while (pBuffer < pBufferEnd)
    {
        while (CurrT >= 0x8000)
        {
            if (pCurrData>=pCurrDataEnd)
            {
                goto Exit;
            }

            CurrT -= 0x8000;

            PrevSamp0 = CurrSamp0;

            PPCM_SAMPLE pSampleSrc = (PPCM_SAMPLE)pCurrData;
            CurrSamp0 = (LONG)pSampleSrc->m16.sample;
            pCurrData+=2;
        }

        OutSamp0 = PrevSamp0 + (((CurrSamp0 - PrevSamp0) * CurrT) >> 15);
        OutSamp0 = (OutSamp0 * fxpGain) >> VOLSHIFT;
        CurrT += DeltaT;
        DEBUGMSG(ZONE_TEST, (TEXT("PrevSamp0=0x%x, CurrSamp0=0x%x, CurrT=0x%x, OutSamp0=0x%x\r\n"), PrevSamp0,CurrSamp0,CurrT,OutSamp0));

#if (OUTCHANNELS==2)
        LONG OutSamp1;
        OutSamp1=OutSamp0;
        if (pBuffer < pBufferLast)
        {
            OutSamp0 += ((HWSAMPLE *)pBuffer)[0];
            OutSamp1 += ((HWSAMPLE *)pBuffer)[1];
#if USE_MIX_SATURATE
            // Handle saturation
            if (OutSamp0>AUDIO_SAMPLE_MAX)
            {
                OutSamp0=AUDIO_SAMPLE_MAX;
            }
            else if (OutSamp0<AUDIO_SAMPLE_MIN)
            {
                OutSamp0=AUDIO_SAMPLE_MIN;
            }
            if (OutSamp1>AUDIO_SAMPLE_MAX)
            {
                OutSamp1=AUDIO_SAMPLE_MAX;
            }
            else if (OutSamp1<AUDIO_SAMPLE_MIN)
            {
                OutSamp1=AUDIO_SAMPLE_MIN;
            }
#endif
        }
        ((HWSAMPLE *)pBuffer)[0] = (HWSAMPLE)OutSamp0;
        ((HWSAMPLE *)pBuffer)[1] = (HWSAMPLE)OutSamp1;
        pBuffer += 2*sizeof(HWSAMPLE);
#else
        if (pBuffer < pBufferLast)
        {
            OutSamp0 += ((HWSAMPLE *)pBuffer)[0];
#if USE_MIX_SATURATE
            // Handle saturation
            if (OutSamp0>AUDIO_SAMPLE_MAX)
            {
                OutSamp0=AUDIO_SAMPLE_MAX;
            }
            else if (OutSamp0<AUDIO_SAMPLE_MIN)
            {
                OutSamp0=AUDIO_SAMPLE_MIN;
            }
#endif
        }
        ((HWSAMPLE *)pBuffer)[0] = (HWSAMPLE)OutSamp0;
        pBuffer += sizeof(HWSAMPLE);
#endif
    }

    Exit:
    m_dwByteCount += (pCurrData - m_lpCurrData);
    m_lpCurrData = pCurrData;
    m_CurrT = CurrT;
    m_PrevSamp[0] = PrevSamp0;
    m_CurrSamp[0] = CurrSamp0;
    return pBuffer;
}


#if (OUTCHANNELS==2)
PBYTE OutputStreamContextS8::Render2(PBYTE pBuffer, PBYTE pBufferEnd, PBYTE pBufferLast)
{
    LONG CurrT = m_CurrT;
    LONG DeltaT = m_DeltaT;
    LONG CurrSamp0 = m_CurrSamp[0];
    LONG CurrSamp1 = m_CurrSamp[1];
    LONG PrevSamp0 = m_PrevSamp[0];
    LONG PrevSamp1 = m_PrevSamp[1];
    PBYTE pCurrData = m_lpCurrData;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91日韩精品一区| 成熟亚洲日本毛茸茸凸凹| 亚洲视频在线观看三级| 2021国产精品久久精品| 日韩欧美一二区| wwww国产精品欧美| 久久亚洲精精品中文字幕早川悠里| 日韩欧美国产综合一区| 911精品国产一区二区在线| 欧美高清激情brazzers| 欧美一区二区三区电影| www欧美成人18+| 国产人伦精品一区二区| 亚洲日穴在线视频| 亚洲高清免费视频| 美女在线一区二区| 国产精品一区二区在线观看网站 | 99免费精品视频| 91麻豆产精品久久久久久| 欧美中文字幕一区二区三区亚洲| 色一情一乱一乱一91av| 91精品国产综合久久小美女| 欧美变态凌虐bdsm| 国产精品久久久久久久久久久免费看| 亚洲欧美激情在线| 免费高清成人在线| 成人午夜看片网址| 制服.丝袜.亚洲.中文.综合| 久久久久久久综合日本| 一个色在线综合| 国产麻豆视频精品| 欧美性受xxxx黑人xyx性爽| 精品国产乱码久久久久久免费| 国产视频视频一区| 亚洲成人综合在线| 成人一区二区三区在线观看| 在线中文字幕不卡| 久久只精品国产| 亚洲激情在线播放| 国产真实乱对白精彩久久| 91久久精品一区二区三区| 精品国产一区二区三区久久影院 | 综合分类小说区另类春色亚洲小说欧美 | 亚洲韩国精品一区| 久草热8精品视频在线观看| 91在线精品一区二区| 日韩精品一区二区在线| 一级精品视频在线观看宜春院| 国产综合一区二区| 欧美精品777| 亚洲影院在线观看| 波波电影院一区二区三区| 日韩精品中文字幕一区| 亚洲一级电影视频| 99久久久免费精品国产一区二区| 欧美大片国产精品| 香蕉久久一区二区不卡无毒影院| av网站免费线看精品| 久久久蜜臀国产一区二区| 日本亚洲免费观看| 欧美日韩二区三区| 亚洲一级二级三级| 色悠久久久久综合欧美99| 中文在线一区二区| 国产.欧美.日韩| 26uuu国产电影一区二区| 轻轻草成人在线| 欧美巨大另类极品videosbest| 亚洲欧美另类小说视频| 99精品黄色片免费大全| 国产精品久久久久久妇女6080| 福利视频网站一区二区三区| 国产亚洲人成网站| 国产福利一区二区三区视频| 久久无码av三级| 国产一区二区在线观看视频| 精品三级在线看| 国产一区日韩二区欧美三区| 精品国产一区二区国模嫣然| 狠狠色伊人亚洲综合成人| 日韩精品一区二区三区中文精品| 久久97超碰国产精品超碰| 久久久久久久综合| 9i在线看片成人免费| 亚洲欧美视频一区| 欧美日韩精品久久久| 日本va欧美va精品发布| 欧美xxxxxxxxx| 国产精品一区久久久久| 日韩伦理免费电影| 欧美日韩一区视频| 国产一区二区三区免费播放| 国产欧美日韩不卡| 在线观看一区二区视频| 青青草国产成人99久久| 国产午夜精品一区二区三区视频| 99re6这里只有精品视频在线观看| 亚洲午夜久久久久久久久久久 | 中文字幕一区二区三| 欧美色图第一页| 麻豆精品一区二区| 中文字幕亚洲不卡| 制服.丝袜.亚洲.另类.中文| 高清成人在线观看| 亚洲一区免费在线观看| 亚洲精品一区二区三区精华液| 成人三级在线视频| 丝袜美腿亚洲综合| 国产精品嫩草99a| 欧美日韩成人一区| 成人丝袜视频网| 日韩精品三区四区| 国产精品免费av| 欧美一级夜夜爽| 91麻豆精东视频| 国产精品一区二区在线观看网站| 亚洲国产一二三| 国产精品网友自拍| 欧美一区二区三区免费视频| 94-欧美-setu| 精品一区二区三区免费观看| 亚洲一区二区三区四区五区中文| 久久久久国产一区二区三区四区 | 国产91清纯白嫩初高中在线观看| 亚洲第一综合色| 中文字幕久久午夜不卡| 欧美剧在线免费观看网站| 99久久综合色| 国产一区二区三区四区五区入口| 性欧美大战久久久久久久久| 亚洲欧美日韩小说| 国产精品久久久久影院老司| 日韩视频在线永久播放| 欧美专区日韩专区| 91麻豆产精品久久久久久| 国产成人午夜视频| 精品一区二区三区免费观看| 日韩福利电影在线| 亚洲高清视频中文字幕| 亚洲精品免费在线| 亚洲欧美日韩中文字幕一区二区三区| 国产亚洲精久久久久久| 精品国产免费久久 | 中文字幕一区在线| 亚洲激情成人在线| 亚洲三级免费电影| 综合久久国产九一剧情麻豆| 国产精品久久久久久久第一福利 | 亚洲最新视频在线观看| 成人欧美一区二区三区小说| 日韩美女视频一区二区| 中文字幕一区二区三区精华液| 国产精品久久久久9999吃药| 日韩经典一区二区| 日韩**一区毛片| 久久成人免费电影| 国内精品嫩模私拍在线| 国产成人综合视频| 成人91在线观看| 99综合影院在线| 一本大道av一区二区在线播放| 91久久一区二区| 欧美日韩视频第一区| 欧美一区二区三区播放老司机| 在线不卡中文字幕| 欧美va在线播放| 欧美经典一区二区| 亚洲女爱视频在线| 亚洲成人黄色影院| 久久成人av少妇免费| 岛国一区二区三区| 日本高清无吗v一区| 777精品伊人久久久久大香线蕉| 欧美一区二区三区视频免费| 精品噜噜噜噜久久久久久久久试看 | 91精品国产入口| 久久久噜噜噜久噜久久综合| 中文字幕日韩欧美一区二区三区| 1区2区3区国产精品| 五月婷婷另类国产| 国产精品 日产精品 欧美精品| 色狠狠色噜噜噜综合网| 欧美一卡在线观看| 国产精品国产三级国产aⅴ无密码| 亚洲乱码国产乱码精品精98午夜| 日韩成人精品在线观看| 欧美一二三区在线观看| 久久精品一级爱片| 午夜欧美电影在线观看| 国精品**一区二区三区在线蜜桃| 91免费版pro下载短视频| 日韩亚洲欧美一区二区三区| 中文字幕高清一区| 免费观看日韩电影| 在线观看不卡一区| 国产午夜精品理论片a级大结局| 亚洲国产综合在线| youjizz久久| 日韩精品一区二区三区蜜臀 | 亚洲最新在线观看|