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

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

?? hac.c

?? WinCE5.0BSP for Renesas SH7770
?? C
?? 第 1 頁 / 共 4 頁
字號:
		ulSrcSampleCount--;
    }
}

/*****************************************************************************
*   FUNCTION :  	AudioGetBuffer_S16
*   DESCRIPTION :	get audio DMA buffer and convert sample(16bit Stereo)
*   INPUTS :		pSrcPtr - audio buffer address
*                   pDstPtr - wave audio buffer address
*                   ulSrcSampleCount - sampling count
*   OUTPUTS :     	None
*   DESIGN NOTES :  convert packed 16bit to 16bit stereo
*   CAUTIONS :		
*****************************************************************************/
VOID
AudioGetBuffer_S16 (
	PUSHORT pSrcPtr,
	PULONG pDstPtr,
	ULONG ulSrcSampleCount
    )
{
    ULONG       ulSample;

    while (ulSrcSampleCount > 0) {
		// Mic
		if( g_VolumeSettings.dwInputSelect == WPDMX_LINE_MIC ){
			pSrcPtr++;
			ulSample = READ_REGISTER_USHORT(pSrcPtr++);
			((PPCM_SAMPLE)pDstPtr)->s16.sample_left = (USHORT)ulSample;
			((PPCM_SAMPLE)pDstPtr)->s16.sample_right = (USHORT)ulSample;
		}
		// Line In
		else{
			ulSample = READ_REGISTER_USHORT(pSrcPtr++);
			((PPCM_SAMPLE)pDstPtr)->s16.sample_right = (USHORT)ulSample;
			ulSample = READ_REGISTER_USHORT(pSrcPtr++);
			((PPCM_SAMPLE)pDstPtr)->s16.sample_left = (USHORT)ulSample;
		}
		pDstPtr++;
		ulSrcSampleCount--;
    }
}


/*****************************************************************************
*   FUNCTION :  	private_AudioInContinue
*   DESCRIPTION :   continuerecording a sound - occurs at audio in interrupt
*   INPUTS :		pwh: wave header to insert sound into
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		pwh can be null for no buffers available
*****************************************************************************/
VOID
private_WaveInContinue(
   PWAVEHDR pwh
   )
{
	ULONG		*lpAudioBuffer;
	LONG nDstLen, nSrcLen;
	ULONG nSampleCount,nSampleUnit;

	FUNC_VERBOSE("+PDD_WaveInContinue");

	switch (g_pcmtype[WAPI_IN])
	{
	case PCM_TYPE_S16:
        nSampleUnit = 4; // 2 words per sample unit
		break;

	case PCM_TYPE_M16:
        nSampleUnit = 2; // 1 word per sample unit
		break;

	case PCM_TYPE_S8:
        nSampleUnit = 2;  // 2 bytes per sample unit
		break;

	case PCM_TYPE_M8:
        nSampleUnit = 1;  // 1 byte per sample unit
		break;

	}  // end switch

	lpAudioBuffer =  (PULONG)(pRecAudioBufferBase + ((1 - v_recPage) * AUDIO_DMA_PAGE_SIZE));

	// process raw audio samples 
	// copy processed audio sample into WAVEHDR
	nSrcLen = HAC_R_DMA_PAGE_SIZE / sizeof(ULONG);
    while (nSrcLen > 0) {
		try
		{
			if( pwh == 0 ) break;

	        nDstLen = pwh->dwBufferLength - pwh->dwBytesRecorded;
			if (nDstLen <= 0)
			{
				DEBUGMSG(ZONE_TEST,(TEXT("WAVE RECORD: NEXT BUFFER\r\n")));
				pwh = pwh->lpNext;

				if( pwh == 0 )
				{
					DEBUGMSG(ZONE_TEST,(TEXT("WAVE RECORD: NO BUFFERS\r\n")));
					break;
				}
			}
			else{
	            nSampleCount = nDstLen / nSampleUnit;
	            if (nSrcLen < (LONG)nSampleCount) nSampleCount = nSrcLen;
				switch( g_pcmtype[WAPI_IN] )
				{
					case PCM_TYPE_S16:	// 16 bit stereo
						AudioGetBuffer_S16((PUSHORT)lpAudioBuffer, (PULONG)(pwh->lpData + pwh->dwBytesRecorded), nSampleCount);
						break;

					case PCM_TYPE_M16:	// 16 bit mono
						AudioGetBuffer_M16((PUSHORT)lpAudioBuffer, (PUSHORT)(pwh->lpData + pwh->dwBytesRecorded), nSampleCount);
						break;

					case PCM_TYPE_S8:	// 8 bit stereo
						AudioGetBuffer_S8((PUSHORT)lpAudioBuffer, (PUSHORT)(pwh->lpData + pwh->dwBytesRecorded), nSampleCount);
						break;

					case PCM_TYPE_M8:	// 8 bit mono
						AudioGetBuffer_M8((PUSHORT)lpAudioBuffer, (PBYTE)(pwh->lpData + pwh->dwBytesRecorded), nSampleCount);
						break;

					default: // really screwed up if we're here!
						DEBUGMSG(ZONE_ERROR,(TEXT("WAVE RECORD: invalid pcm type %d\r\n"),
							g_pcmtype[WAPI_IN] ));
						break;
				} //end switch
				pwh->dwBytesRecorded += nSampleCount * nSampleUnit;

	            nSrcLen -= nSampleCount;
	            lpAudioBuffer += nSampleCount;
			}
		}
		except ( 1 ) 
		{
			DUMPEXCEPTION();
		}
	} // end while

	v_recPage = 1 - v_recPage;
	pDriverGlobals->aud[AUDIO_NO].rec_address = dma_pageRecPhysicalAddress[v_recPage];
	pDriverGlobals->aud[AUDIO_NO].inInt = (USHORT)NULL;

	FUNC_VERBOSE("-PDD_WaveInContinue");
}

/*****************************************************************************
*   FUNCTION :  	set_volume
*   DESCRIPTION :	sample set to DMA Buffer
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
VOID
set_volume( ULONG v )
{
	ULONG	Loop_r;
	ULONG	lvol, rvol;

	Loop_r = 0;

    lvol = (USHORT)((0x0000F800 - (v & 0x0000F800)) >> 3);
    rvol = (USHORT)((0xF8000000 - (v & 0xF8000000)) >> 27);
    ulMasterVol = (lvol | rvol)<<4;

    if (v == 0) {
        ulMasterVol |= (0x8000 << 4); // bit 15 means mute. Use this to get total attenuation.
    }
	DEBUGMSG(ZONE_TEST,(TEXT("set_volume 0x%08x => 0x%08x\r\n"),v ,ulMasterVol));

retry_set_volume:
	Loop_r++;
	if (Write_codec( (ULONG)0x00002000, ulMasterVol ) == FALSE){	// Set Master Volume
		DEBUGMSG(ZONE_ERROR,(TEXT("Change Master Volume Error !\r\n")));
		if(Loop_r < AC97_RETRTY_MAX) goto retry_set_volume;
		RETAILMSG(1, (TEXT("AC97: Change Master Volume Error!\r\n")));
	}
}

/*****************************************************************************
*   FUNCTION :  	SetMute
*   DESCRIPTION :	Mute
*   INPUTS :		Codec Register, Mute
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
void	SetMute(BOOL muted)
{
	if (muted) {
		ulMasterVol |= (0x8000 << 4);
	}
	else{
		ulMasterVol &= ~(0x8000 << 4);
	}
	Write_codec( (ULONG)0x00002000, (ULONG)ulMasterVol );
}

/*****************************************************************************
*   FUNCTION :  	check_SamplesPerSec
*   DESCRIPTION :	Check Samples Per Sec
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
BOOL
check_SamplesPerSec(
	int ch,
	DWORD s
)
{
	// Samples Per Sec is 8kHz, 11.025kHz, 22.050kHz, 44.1kHz, 48kHz
	if( s == 8000 || s == 11025 || s == 22050 || s == 44100 || s == 48000 ){
		return	TRUE;
	}
	else{
		return	FALSE;
	}
}


/*****************************************************************************
*   FUNCTION :  	set_aud_index
*   DESCRIPTION :	set aud index
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
VOID
set_aud_index(
	PDRIVER_GLOBALS	globals,	
	int i
)
{
	globals->aud_index_hac = i;
}

/*****************************************************************************
*   FUNCTION :  	check_PlayInRec
*   DESCRIPTION :	Check Playback in Recording(simultaneously)
*   INPUTS :		PlayFlag - device open flag for playback
*                   RecFlag - device open flag for recording
*   OUTPUTS :     	Return MMSYSERR_NOERROR for success, other for failure
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
MMRESULT
check_PlayInRec(
	int PlayFlag,
	int RecFlag
)
{
	return	MMSYSERR_NOERROR;
}

/*****************************************************************************
*   FUNCTION :  	check_RecInPlay
*   DESCRIPTION :	Check Recording in Playback(simultaneously)
*   INPUTS :		PlayFlag - device open flag for playback
*                   RecFlag - device open flag for recording
*   OUTPUTS :     	Return MMSYSERR_NOERROR for success, other for failure
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
MMRESULT
check_RecInPlay(
	int PlayFlag,
	int RecFlag
)
{
	return	MMSYSERR_NOERROR;
}

VOID	codec_updateRecordSelect( USHORT input_select )
{
	// Set Record Select
	Write_codec( (ULONG)0x0001A000, ((ULONG)input_select) << 4 );
}

VOID	codec_updateRecordGain( ULONG regval )
{
	// Set Record Gain
	Write_codec( (ULONG)0x0001C000, regval << 4 );
}

/*****************************************************************************
*   FUNCTION :  	UpdateInputSelect
*   DESCRIPTION :   Input Select mic or line-in
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
void UpdateInputSelect(void)
{
    USHORT input_select;
    ULONG volume, regval;
	ULONG	lvol, rvol;

    switch (g_VolumeSettings.dwInputSelect) {
        case WPDMX_LINE_MIC:
            input_select = 0x0000;
            if (g_VolumeSettings.fMicMute) {
                volume = 0;
            }
            else {
                volume = g_VolumeSettings.dwMicVolume & 0xffff;
                volume = volume | (volume << 16); // incoming volume is mono, cvt. to stereo
            }
            break;
        case WPDMX_LINE_IN:
            input_select = 0x0404;
            if (g_VolumeSettings.fLineInMute) {
                volume = 0;
            }
            else {
                volume = g_VolumeSettings.dwLineInVolume;
            }
            break;
        default:
            DEBUGMSG(ZONE_ERROR, (TEXT("UpdateInputSelect: illegal setting %04x\r\n"), g_VolumeSettings.dwInputSelect));
            return;
    }
    if (volume == 0) {
        regval = 0x8000;
    }
    else {
	    lvol = (USHORT)((0xF8000000 - (volume & 0xF8000000)) >> 19);
	    rvol = (USHORT)((0x0000F800 - (volume & 0x0000F800)) >> 11);
	    regval = (lvol | rvol);
    }
    DEBUGMSG(ZONE_TEST, (TEXT("UpdateInputSelect: sel=%04x vol=%04x\r\n"), input_select, regval));

    codec_updateRecordSelect( input_select );
    codec_updateRecordGain( regval );
}

/*****************************************************************************
*   FUNCTION :  	private_SetMixerValue
*   DESCRIPTION :   Set Mixer Value
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
MMRESULT
private_SetMixerValue(DWORD dwControl, DWORD dwSetting)
{
    DWORD dwControlType = dwSetting & WPDMX_CTL_MASK;
    DWORD dwLine = dwSetting & WPDMX_LINE_MASK;

    DEBUGMSG(ZONE_TEST, (TEXT("private_SetMixerValue(%04x, %08x)\r\n"), dwControl, dwSetting));

    switch (dwControl) {
        // volume controls
        case WPDMX_MASTER_VOL:
            private_waveOutSetVolume(dwSetting);
            break;
        case WPDMX_LINEIN_VOL:
            g_VolumeSettings.dwLineInVolume = dwSetting;
            UpdateInputSelect();
            break;
        case WPDMX_MIC_VOL:
            g_VolumeSettings.dwMicVolume = dwSetting;
            UpdateInputSelect();
            break;

        // Mute controls
        case WPDMX_MASTER_MUTE:
            g_VolumeSettings.fMasterMute = dwSetting;
            SetMute(g_VolumeSettings.fMasterMute);
            break;
        case WPDMX_LINEIN_MUTE:
            g_VolumeSettings.fLineInMute = dwSetting;
            UpdateInputSelect();
            break;
        case WPDMX_MIC_MUTE:
            g_VolumeSettings.fMicMute = dwSetting;
            UpdateInputSelect();
            break;
        // The input Mux
        case WPDMX_INPUT_MUX:
            g_VolumeSettings.dwInputSelect = dwSetting;
            UpdateInputSelect();
            break;
        default:
            DEBUGMSG(ZONE_ERROR, (TEXT("private_SetMixerValue: unsupported control %d\r\n"), dwControl));
            return MMSYSERR_NOTSUPPORTED;
    }
    return MMSYSERR_NOERROR;
}

/*****************************************************************************
*   FUNCTION :  	private_SetDefaultVolume
*   DESCRIPTION :   Set master volume and default input
*   INPUTS :		None
*   OUTPUTS :     	None
*   DESIGN NOTES :  
*   CAUTIONS :		
*****************************************************************************/
void private_SetDefaultVolume()
{
    // Set the global master volume to max 
	private_waveOutSetVolume(0xffffffff);

#if AC97_USE_MIC == 1
	private_SetMixerValue(WPDMX_INPUT_MUX, WPDMX_LINE_MIC);
#endif
#if AC97_USE_LINE_IN == 1
	private_SetMixerValue(WPDMX_INPUT_MUX, WPDMX_LINE_IN);
#endif

    // set default for input
    private_SetMixerValue(WPDMX_MIC_VOL,     0xAAAAAAAA);
    private_SetMixerValue(WPDMX_MIC_MUTE,    0);
    private_SetMixerValue(WPDMX_LINEIN_VOL,  0xAAAAAAAA);
    private_SetMixerValue(WPDMX_LINEIN_MUTE, 0);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
黄一区二区三区| 欧美理论片在线| 国产精品白丝在线| 国产成人亚洲综合a∨婷婷 | 激情小说欧美图片| 日韩免费视频一区| 国内精品嫩模私拍在线| 97久久超碰国产精品| 成人欧美一区二区三区白人| 99视频国产精品| 亚洲成人免费在线| 欧美电影免费观看高清完整版在线观看 | 一区二区三区免费| 中文成人av在线| 狠狠色伊人亚洲综合成人| 国产日韩欧美一区二区三区综合| 日韩精品亚洲专区| 91精品国产综合久久小美女| 久久久噜噜噜久久中文字幕色伊伊| 成人av在线一区二区三区| 久久久久高清精品| 亚洲一区二区三区四区五区黄 | 日韩欧美你懂的| 国产一区二区三区国产| 国产精品色哟哟| 91在线免费看| 麻豆久久久久久| 国产精品私人影院| 国产成人午夜电影网| 久久精品久久精品| 亚洲女同ⅹxx女同tv| 精品入口麻豆88视频| 欧美视频中文字幕| 欧美专区亚洲专区| 国产精品一区二区视频| 美女视频黄a大片欧美| 日本午夜一区二区| 五月天中文字幕一区二区| 亚洲国产综合91精品麻豆| 亚洲日本乱码在线观看| 国产精品美女久久福利网站| 日本一区二区动态图| 亚洲素人一区二区| 综合中文字幕亚洲| 亚洲国产va精品久久久不卡综合 | 欧美大片在线观看一区二区| 4438x成人网最大色成网站| 欧美一级在线免费| 欧美α欧美αv大片| 精品美女一区二区三区| 中文字幕乱码亚洲精品一区| 国产精品美日韩| 亚洲综合自拍偷拍| 免费成人在线观看| 福利电影一区二区| 色婷婷精品大视频在线蜜桃视频| 91麻豆精东视频| 日韩欧美一二区| 国产精品成人一区二区三区夜夜夜| 国产精品污污网站在线观看| 日韩一区二区三区在线视频| 国产精品免费看片| 麻豆视频观看网址久久| 91色在线porny| 国产欧美中文在线| 日韩电影免费一区| 日本韩国精品一区二区在线观看| 精品国产乱码久久久久久久久 | 在线影院国内精品| 国产精品网曝门| 国产成人福利片| 美女国产一区二区三区| 欧美图区在线视频| 亚洲欧美日韩一区二区三区在线观看| 裸体歌舞表演一区二区| 午夜精品久久久久久不卡8050| jvid福利写真一区二区三区| 日本一区二区动态图| 色呦呦日韩精品| 亚洲一区二区精品3399| 99久久精品国产网站| 亚洲免费观看高清完整版在线| 色噜噜狠狠一区二区三区果冻| 国产色产综合色产在线视频| av一二三不卡影片| 亚洲视频你懂的| 欧美在线观看视频一区二区 | 美女高潮久久久| 国产日韩亚洲欧美综合| 一本色道久久综合亚洲aⅴ蜜桃| 国产精品嫩草久久久久| 在线一区二区三区四区五区| 欧美吞精做爰啪啪高潮| 日韩高清在线不卡| 国产精品视频免费看| 欧美亚洲禁片免费| 国产成人免费高清| 亚洲精品视频免费观看| 亚洲精品在线观看网站| 91国产成人在线| 精品国产精品网麻豆系列| 成人高清av在线| 麻豆成人久久精品二区三区红| 中文字幕视频一区| 亚洲精品一区二区三区在线观看| 99国产精品国产精品久久| 久久成人免费网站| 亚洲一区二区免费视频| 九九九久久久精品| 中文字幕一区免费在线观看| 欧美大片在线观看| 555www色欧美视频| 91福利在线免费观看| 国产91色综合久久免费分享| 精品亚洲porn| 婷婷亚洲久悠悠色悠在线播放| 国产裸体歌舞团一区二区| 日韩中文字幕一区二区三区| 亚洲欧美激情视频在线观看一区二区三区 | 韩国女主播成人在线| 亚洲欧美日本韩国| 久久久久国产一区二区三区四区| 91免费视频网| 99久久精品国产精品久久| 国产激情视频一区二区在线观看| 久久激情五月激情| 成人高清免费观看| 一卡二卡三卡日韩欧美| 亚洲日本一区二区三区| 亚洲电影第三页| 国产制服丝袜一区| 91麻豆福利精品推荐| 欧美日韩免费在线视频| 8v天堂国产在线一区二区| 精品欧美一区二区久久| 亚洲成人福利片| 国产剧情av麻豆香蕉精品| 色综合视频一区二区三区高清| 欧美色窝79yyyycom| 日韩一区二区三区电影在线观看| 欧美电影免费观看高清完整版在| 国产精品―色哟哟| 亚洲国产成人tv| 91在线观看下载| 久久久无码精品亚洲日韩按摩| 色狠狠综合天天综合综合| 欧美在线免费播放| 久久免费精品国产久精品久久久久| 国产精品私人影院| 老司机一区二区| 欧美成人在线直播| 蜜臀av一区二区在线免费观看 | 精品国产91洋老外米糕| 亚洲成人福利片| 91国产成人在线| 色噜噜夜夜夜综合网| 欧美岛国在线观看| 天天色 色综合| 一区二区成人在线视频| 国产.欧美.日韩| 久久久久99精品一区| 热久久一区二区| 欧美一区二区福利在线| 日韩不卡一二三区| 欧美日韩国产欧美日美国产精品| 综合自拍亚洲综合图不卡区| 亚洲综合丝袜美腿| 日韩精品一二区| 九九视频精品免费| 久久久99免费| 日本乱人伦一区| 午夜在线成人av| 精品国精品国产| 一本一道久久a久久精品| 一区二区三区视频在线看| 99久久国产免费看| 石原莉奈在线亚洲三区| 日本中文字幕不卡| 欧美变态口味重另类| 99re成人在线| 日韩激情视频在线观看| 久久男人中文字幕资源站| 成人综合在线网站| 亚洲与欧洲av电影| 久久久精品天堂| 欧美日韩国产首页在线观看| 日韩影院精彩在线| 亚洲欧洲韩国日本视频| 欧美大片国产精品| 色综合久久六月婷婷中文字幕| 午夜精品福利一区二区蜜股av| 欧美一区二区三区在线电影| 97国产一区二区| 国产成人午夜精品影院观看视频 | 日韩精品一区二区三区中文不卡| 亚洲激情在线播放| 亚洲国产精品ⅴa在线观看| 777亚洲妇女| 欧美精品视频www在线观看| 色综合天天综合狠狠|