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

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

?? waveout.c

?? 基于wince 操作系統的開發的i2s驅動程序
?? C
字號:
/*++
Copyright (c) 1999-2004  BSQUARE Corporation.  All rights reserved.

Module Name:

    waveout.c

Module Description:

    This module contains the implementation of the audio output driver.

Author:

Revision History:

--*/

#include <windows.h>
#include <bceddk.h>
#include "psc_i2s.h"

#include <wavedbg.h>

extern PWAVE_DEVICE_INSTANCE WaveDevice;
extern PWAVE_RESOURCE WaveOutResource;

//
// Private Routines.
//

static int
FillOutputBuffer (
	IN OUT PWAVE_RESOURCE WaveResource
	)
{
    PWAVEHDR Header = WaveResource->WaveHeader;
	PUCHAR pDMABuffer;
	ULONG bytesCopied;

	// Check Wave header is valid
	if ((Header==NULL) || (Header->dwBufferLength==0)) {
		return 0;
	}

	pDMABuffer = HalGetNextDMABuffer(WaveDevice->DMAChannelOutput);

	// copy as much data as possible
	bytesCopied = min(WaveResource->DmaBufferSize, (Header->dwBufferLength-Header->dwBytesRecorded));

	// copy the data
	memcpy(pDMABuffer, Header->lpData+Header->dwBytesRecorded, bytesCopied);
	
	// Update bytes recorded 
	Header->dwBytesRecorded += bytesCopied;

	// Send DMA buffer
	HalActivateDMABuffer(WaveDevice->DMAChannelOutput, pDMABuffer, bytesCopied);

    return bytesCopied;
}

static int
FillTwoOutputBuffers (
	IN OUT PWAVE_RESOURCE WaveResource
	)
{
    PWAVEHDR Header = WaveResource->WaveHeader;
	PUCHAR pDMABuffer;
	ULONG bytesCopied;

	// Check Wave header is valid
    if ((Header == NULL) || (Header->dwBufferLength==0)) {
		return 0;
	}

	// work out how much data we can copy
	bytesCopied = min(WaveResource->DmaBufferSize,
	                  (Header->dwBufferLength-Header->dwBytesRecorded)/2);

	// Do the first buffer
	pDMABuffer = HalGetNextDMABuffer(WaveDevice->DMAChannelOutput);
	memcpy(pDMABuffer, Header->lpData+Header->dwBytesRecorded, bytesCopied);
	Header->dwBytesRecorded += bytesCopied;
	// Send DMA buffer
	HalActivateDMABuffer(WaveDevice->DMAChannelOutput, pDMABuffer, bytesCopied);

	// Now do the second buffer
	pDMABuffer = HalGetNextDMABuffer(WaveDevice->DMAChannelOutput);
	memcpy(pDMABuffer, Header->lpData+Header->dwBytesRecorded, bytesCopied);
	Header->dwBytesRecorded += bytesCopied;
	// Send DMA buffer
	HalActivateDMABuffer(WaveDevice->DMAChannelOutput, pDMABuffer, bytesCopied);

    return bytesCopied*2;
}


//
// Exported Routines.
//

MMRESULT
GetOutputVolume(
    IN PWAVE_DEVICE_INSTANCE WaveInstance,
    OUT PULONG VolumeSetting
    )

/*++

Routine Description:

    

Arguments:

    VolumeSetting - Pointer to the volume variable.

Return Value:

    Returns MMSYSERR_NOERROR if successful, MMSYSERR_NOMEM if
    unsuccessful.  Note that this is probably not a good error
    code to return, but it's the best of the bunch to choose from.

--*/

{
   ULONG Volume = 0;

   Volume = CodecGetVolume(WaveInstance->hSMBus);
   *VolumeSetting = Volume;

   return MMSYSERR_NOERROR;
}


MMRESULT
SetOutputVolume(
    IN PWAVE_DEVICE_INSTANCE WaveInstance,
    IN ULONG VolumeSetting
    )

/*++

Routine Description:

    Takes the input volume setting and sets the attenuation
    accordingly.  The input volume has a scale from 0 to 0xFFFF,
    where 0 is for silence and 0xFFFF for the highest volume
    setting.  Note that the high order 16-bits are masked
    because for stereo sound, it is the right channel volume.

Arguments:

    VolumeSetting - Requested volume variable.

Return Value:

    Returns MMSYSERR_NOERROR if successful, MMSYSERR_NOMEM if
    unsuccessful.  Note that this is probably not a good error
    code to return, but it's the best of the bunch to choose from.

--*/

{
    MMRESULT ReturnValue;
    BOOLEAN Success;
    DEBUGMSG(1|ZONE_WODM, (TEXT("+SetOutputVolume(%x)\r\n"),VolumeSetting));

    ReturnValue = MMSYSERR_ERROR;

    Success = CodecSetVolume(WaveInstance->hSMBus,
                             VolumeSetting);

    if (Success == FALSE) {

        DEBUGMSG(ZONE_WODM, (
                 TEXT("SetOutputVolume: Failed codec write.\r\n")));

        goto ErrorReturn;
    }

    ReturnValue = MMSYSERR_NOERROR;

ErrorReturn:
    DEBUGMSG(ZONE_WODM, (TEXT("-SetOutputVolume\r\n")));

    return ReturnValue;
}

VOID
WaveOutStart(
    IN OUT PWAVE_RESOURCE WaveResource,
    IN OUT PWAVEHDR WaveHeader
    )

/*++

Routine Description:

    This routine handles set up of a new wave output stream.

Arguments:

    WaveResource - Pointer to the wave resource structure corresponding to the
        stream to be started.

    WaveHeader - Pointer to the wave header information.

Return Value:

    None.

--*/

{
    WaveResource->MoreData = TRUE;
	WaveResource->WaveHeader = WaveHeader;
	FillTwoOutputBuffers(WaveResource);
	StartDma(WaveResource);
}



VOID
WaveOutContinue (
    IN OUT PWAVE_RESOURCE WaveResource,
    IN OUT PWAVEHDR WaveHeader
    )

/*++

Routine Description:

    This routine handles continuation of a playing audio output stream.
    The operations are similar to starting wave output.

Arguments:

    WaveHeader - Pointer to the wave header information.

Return Value:

    None.

--*/

{
	WaveResource->WaveHeader = WaveHeader;
	
	if (HalDMAIsUnderflowed(WaveResource->DMAChannel)) {
		FillTwoOutputBuffers(WaveResource);
	} else {
		FillOutputBuffer(WaveResource);
	}
}



VOID
WaveOutEndOfData(
    IN OUT PWAVE_RESOURCE WaveResource
    )

/*++

Routine Description:

    This routine handles clean up of audio output when the wave
    output stream has ended.  It stops any output DMA transfer
    in progress and mutes audio output on the codec.

Arguments:



Return Value:

    None.

--*/

{
    DEBUGMSG(ZONE_WODM, (TEXT("+WaveOutEndOfData\r\n")));
	HalWaitForDMA(WaveResource->DMAChannel);
    WaveResource->MoreData = FALSE;
	ShutdownDma(WaveResource);
    DEBUGMSG(ZONE_WODM, (TEXT("-WaveOutEndOfData\r\n")));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99免费精品在线观看| 精品国产一区二区三区忘忧草| 不卡的看片网站| 91一区二区在线| 666欧美在线视频| 久久九九久久九九| 一区二区成人在线| 国内精品第一页| 欧美中文字幕一区二区三区亚洲 | 亚洲乱码国产乱码精品精的特点| 亚洲妇女屁股眼交7| 狠狠色综合播放一区二区| 91丝袜美腿高跟国产极品老师 | 蜜桃视频免费观看一区| 不卡在线观看av| 欧美一区二区高清| 中文字幕一区二区三区四区不卡| 一区二区免费在线播放| 国产美女在线观看一区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美刺激午夜性久久久久久久| 中文字幕一区二区三区色视频| 寂寞少妇一区二区三区| 精品污污网站免费看| 国产精品日产欧美久久久久| 日韩国产高清影视| 91免费看片在线观看| 久久众筹精品私拍模特| 亚洲aⅴ怡春院| 91视频免费播放| 国产日韩成人精品| 久久99久久精品欧美| 欧美精品精品一区| 亚洲精品国久久99热| 国产成人综合视频| 日韩精品一区二区三区蜜臀 | 欧美精选午夜久久久乱码6080| 中文字幕一区二区三区在线观看| 精品一区二区国语对白| 欧美一二三四在线| 亚洲成人黄色小说| 欧日韩精品视频| 国产精品理论片在线观看| 国产成人在线网站| 久久这里只有精品视频网| 日韩免费电影一区| 欧美精品三级在线观看| 欧美在线视频你懂得| 亚洲色图.com| 91在线国产观看| 国产精品欧美精品| 成人综合婷婷国产精品久久| 久久久久久久性| 国产呦萝稀缺另类资源| wwwwww.欧美系列| 国产一区高清在线| 亚洲精品一区二区三区四区高清 | 欧美午夜宅男影院| 亚洲国产美女搞黄色| 欧美亚洲一区二区三区四区| 一区二区欧美视频| 欧美绝品在线观看成人午夜影视| 亚洲成人激情自拍| 日韩午夜激情av| 激情文学综合丁香| 久久久久9999亚洲精品| 成人黄色免费短视频| 亚洲欧洲一区二区三区| 91高清在线观看| 午夜电影久久久| 日韩视频在线一区二区| 国产一区高清在线| 国产精品色婷婷久久58| 色综合久久66| 日本亚洲免费观看| 欧美精品一区二区高清在线观看| 国产麻豆91精品| 一区二区三区四区激情 | 成人午夜精品一区二区三区| 日韩激情视频网站| 精品久久久久久久久久久久久久久久久| 精品一区二区免费| 国产精品久久久久久久午夜片| 91麻豆免费观看| 丝袜美腿一区二区三区| 久久久久九九视频| 日本高清不卡aⅴ免费网站| 五月天欧美精品| 久久精品一区二区三区不卡 | 欧美丝袜丝交足nylons图片| 日本伊人午夜精品| 欧美国产禁国产网站cc| 在线观看亚洲精品| 久久91精品久久久久久秒播| 亚洲人成小说网站色在线| 欧美精品一级二级三级| 国产精品一级黄| 亚洲国产精品天堂| 国产欧美一区二区三区网站 | 91精品免费观看| 岛国一区二区三区| 日精品一区二区三区| 国产精品欧美久久久久无广告| 欧美日韩精品一区二区天天拍小说| 国产在线乱码一区二区三区| 伊人开心综合网| 久久久精品免费网站| 欧美亚日韩国产aⅴ精品中极品| 国产在线不卡一区| 亚洲高清视频中文字幕| 国产精品视频免费| 日韩午夜av一区| 欧美在线免费播放| 波多野结衣中文字幕一区二区三区 | 欧美激情综合五月色丁香小说| 欧美精品在线一区二区三区| 成人性视频免费网站| 日韩在线卡一卡二| 亚洲欧美偷拍三级| 国产精品系列在线| 日韩欧美国产电影| 欧美精品粉嫩高潮一区二区| 99久久夜色精品国产网站| 国产主播一区二区| 久久国产精品一区二区| 午夜一区二区三区视频| 亚洲蜜臀av乱码久久精品| 欧美国产禁国产网站cc| 久久久久久麻豆| 一区二区三区视频在线看| 国产情人综合久久777777| 欧美精品一区二区在线观看| 欧美一区二区精品在线| 欧美日韩国产经典色站一区二区三区| av资源站一区| 99久久国产综合精品麻豆| 成人免费毛片aaaaa**| 国产电影一区在线| 国产精品99久久久久久宅男| 久久er精品视频| 久久er99热精品一区二区| 精品一区二区在线视频| 极品少妇xxxx精品少妇偷拍| 激情偷乱视频一区二区三区| 美女视频免费一区| 青青国产91久久久久久| 免费看日韩精品| 精品亚洲porn| 风流少妇一区二区| 国产精品一区二区91| 粉嫩aⅴ一区二区三区四区五区| 经典一区二区三区| 懂色av一区二区三区免费看| 成人中文字幕合集| 99久久国产综合精品女不卡 | 91美女视频网站| 在线看不卡av| 91麻豆精品国产综合久久久久久| 777精品伊人久久久久大香线蕉| 91精品黄色片免费大全| 日韩欧美国产一区二区三区| 欧美哺乳videos| 国产女人水真多18毛片18精品视频| 国产亚洲精品bt天堂精选| 国产精品乱码妇女bbbb| 亚洲欧美欧美一区二区三区| 亚洲一区影音先锋| 日本欧美一区二区在线观看| 国产成a人亚洲精| 97久久精品人人爽人人爽蜜臀| 色成人在线视频| 91精品国产福利在线观看| 精品第一国产综合精品aⅴ| 国产精品久久久久一区| 亚洲第一电影网| 国产综合色产在线精品| 99re在线精品| 51精品久久久久久久蜜臀| 国产亚洲精品福利| 亚洲制服丝袜在线| 国内久久精品视频| 91高清在线观看| 精品国产一二三区| 一区二区三国产精华液| 久久av资源网| 在线视频国产一区| 久久久久9999亚洲精品| 一区二区在线观看免费| 久久国产视频网| 国产农村妇女毛片精品久久麻豆| 亚洲另类春色国产| 经典一区二区三区| 欧洲精品视频在线观看| 亚洲精品一区二区三区蜜桃下载 | 樱花草国产18久久久久| 国产在线视频不卡二| 欧美性猛片aaaaaaa做受| 久久综合给合久久狠狠狠97色69| 一区二区三区中文在线| 国产精品69毛片高清亚洲|