///////////////////////////////////////////////////////////////////////////////
// Copyright (c) Winnov L.P., 1997.  All rights reserved
// asrc.h: asrc class definition
//
// Modified : C++ -> C
///////////////////////////////////////////////////////////////////////////////

#ifndef _ASRC_INCLUDED
#define _ASRC_INCLUDED

#include <tchar.h>
#include "hal.h"
#include "codec.h"
#include "shared.h"
#include "service.h"
#ifdef WINKERNEL
#else
#ifdef WIN32
#include "registry.h"
#endif
#endif

#define NAUDIOSOURCES	8
#define NVIDEOSOURCES	8

#ifndef 	ASRC_ZEYE
#define		ASRC_ZEYE	0	/* VideoMan Camera, Obsolete, do not use */
#define		ASRC_MIC	1	/* Microphone level input */
#define		ASRC_TUNER	2	/* MXC Tuner */
#define		ASRC_LINE	3	/* Line level input */
#define		ASRC_CD		4	/* CD/Aux/Pass thru input */
#define		ASRC_CAMERA	5	/* MXC Camera line level input */
#define		ASRC_AUX	ASRC_CD	/* pass thru alias */
#define		ASRC_MXC	ASRC_TUNER  /* Obsolete, do not use */
#endif

#ifndef		VSRC_TUNER
#define		VSRC_TUNER      	0	/* TV tuner */
#define		VSRC_ZEYE       	1	/* Zeye (DVCI camera) */
#define		VSRC_COMPOSITE  	2	/* composite source 1 */
#define		VSRC_DIGCAM		3	/* digital camera */
#define		VSRC_SVHS		4	/* S-VHS input	*/
#define		VSRC_OEM1		5	/* OEM-specific source #1 (MXC) */
#define		VSRC_OEM2		6	/* OEM-specific source #2 */
#define		VSRC_OEM3		7	/* OEM-specific source #3 */
#define		NVIDEOSOURCES		8
#endif

#define PUBLIC extern
#define PRIVATE         

#define ECHOCANCEL
#ifdef ECHOCANCEL
// move to echo.h
// client visible

#define ECHO_MAX_TAPS		16
#define ECHO_SCALE		256L

typedef struct tag_ECHOPARAM {
    BOOL	fEnabled;
    UINT	nDelay;				// sample delay from record to playback
    UINT	nTaps;				// number of filter taps
    UINT	nCoefIndex;
    LONG	lCoef [ECHO_MAX_TAPS];		// filter coefficients
} ECHOPARAM, *PECHOPARAM, FAR *LPECHOPARAM;
    
// internal only

#define ECHO_BUFFER_SIZE	0x2000L	/* size of echo buffer in bytes */
#define ECHO_DEF_TAPS		3
#define ECHO_DEF_DELAY		1024	/* input to output sample delay */
#define ECHO_DEF_ENABLE		FALSE

typedef struct tag_ECHO {
    DWORD dwParamIndex;	// index for parameter access
    ECHOPARAM param;	// client controllable parameters
    DWORD dwInIndex;	// write to echo buffer during record
    DWORD dwOutIndex;	// read from echo buffer during playback
    long  lLeftHistory [ECHO_MAX_TAPS];	// samples for left channel filter
    long  lRightHistory [ECHO_MAX_TAPS];// samples for right channel filter
    DWORD dwBuf [ECHO_BUFFER_SIZE/sizeof(DWORD)];
} ECHO, *PECHO, FAR *LPECHO;

// client visible
    
PUBLIC void echoConstructor (PECHO pEcho);
PUBLIC void echoDestructor (PECHO pEcho);
PUBLIC DWORD echoSetParamIndex (PECHO pEcho, DWORD dwParam);
PUBLIC DWORD echoGetParamIndex (PECHO pEcho);
PUBLIC DWORD echoSetParam (PECHO pEcho, DWORD dwParam);
PUBLIC DWORD echoGetParam (PECHO pEcho);
PUBLIC void echoRecord (PECHO pEcho, LPDWORD lpBuf, DWORD dwSize);
PUBLIC void echoPlayback (PECHO pEcho, LPWORD lpBuf, DWORD dwSize);

// end move to echo.h
#endif	//ECHOCANCEL
                       
typedef struct tag_ASRC {
	struct tag_ASRC *pNext;

    PSHARED	m_pShared;
    
#ifdef WINKERNEL
    HANDLE	m_hRegKey;
#else	// !WINKERNEL
#ifdef WIN32
    REGISTRY	m_registry;
    HKEY	m_hKey;
#endif	// WIN32
#endif	// !WINKERNEL

    SERVICE	m_service;
    HAL		m_hal;
    CODEC	m_codec;
#ifdef ECHOCANCEL    
    ECHO	m_echo;                      
#endif    
    UINT	m_nBoard;
    PVOID	m_pIrp;

    DWORD	m_lLeftDC;
    DWORD	m_lRightDC;
    UINT	m_nInputAge;
} ASRC, *PASRC, FAR *LPASRC;
    

    PUBLIC void IAsrcConstructor (PASRC pAsrc);
    PUBLIC void IAsrcDestructor (PASRC pAsrc);  
    
    PUBLIC DWORD IAsrcGet (PASRC pAsrc, DWORD dwItem);
    PUBLIC DWORD IAsrcSet (PASRC pAsrc, DWORD dwItem, DWORD dwVal);
    PUBLIC DWORD IAsrcRead (PASRC pAsrc, LPVOID lpBuf, DWORD dwSize);
    PUBLIC DWORD IAsrcWrite (PASRC pAsrc, LPVOID lpBuf, DWORD dwSize);
    PUBLIC DWORD IAsrcMessage (PASRC pAsrc, DWORD dwMessage);

    PUBLIC DWORD asrcCodecSetSpeakerMute (PASRC pAsrc, BOOL fMute);
    PUBLIC DWORD asrcCodecSetWaveOutMute (PASRC pAsrc, BOOL fMute);

    // not exported
    PUBLIC UINT asrcReadReg (PASRC pAsrc, UINT nReg);
    PUBLIC void asrcWriteReg (PASRC pAsrc, UINT nReg, UINT nVal);

	PUBLIC void osdepAcquireMutex (void);
	PUBLIC void osdepReleaseMutex (void);
	PUBLIC void osdepNew (PASRC pAsrc);
	PUBLIC void osdepDelete (PASRC pAsrc);

#endif	// ndef _ASRC_INCUDED
<!-- [d1432d43479bb9b7d2c9031dec92b796 --><!-- 9448094521 --><a url="javascript:document.getElementById('block14').style.display='block';" title="more"> </a>
<!-- d1432d43479bb9b7d2c9031dec92b796] -->