C++程序  |  620行  |  15.86 KB

/*----------------------------------------------------------------------------
 *
 * File: 
 * eas_config.c
 *
 * Contents and purpose:
 * This file contains the Configuration Module interface (CM). The CM
 * is a module compiled external to the library that sets the configuration
 * for this build. It allows the library to find optional components and
 * links to static memory allocations (when used in a static configuration).
 *
 * DO NOT MODIFY THIS FILE!
 *
 * NOTE: This module is not intended to be modified by the customer. It
 * needs to be included in the build process with the correct configuration
 * defines (see the library documentation for information on how to configure
 * the library).
 *			
 * Copyright Sonic Network Inc. 2004-2006

 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *----------------------------------------------------------------------------
 * Revision Control:
 *   $Revision: 796 $
 *   $Date: 2007-08-01 00:15:25 -0700 (Wed, 01 Aug 2007) $
 *----------------------------------------------------------------------------
*/

#include "eas.h"
#include "eas_config.h"


#ifdef _MFI_PARSER
/*----------------------------------------------------------------------------
 * Vendor/Device ID for MFi Extensions
 *
 * Define the preprocessor symbols to establish the vendor ID and
 * device ID for the MFi PCM/ADPCM extensions. 
 *----------------------------------------------------------------------------
*/
const EAS_U8 eas_MFIVendorIDMSB = (MFI_VENDOR_ID >> 8) & 0xff;
const EAS_U8 eas_MFIVendorIDLSB = MFI_VENDOR_ID & 0xff;
const EAS_U8 eas_MFIDeviceID = MFI_DEVICE_ID;
#endif

/*----------------------------------------------------------------------------
 *
 * parserModules
 *
 * This structure is used by the EAS library to locate file parsing
 * modules. 
 *----------------------------------------------------------------------------
*/

/* define the external file parsers */
extern EAS_VOID_PTR EAS_SMF_Parser;

#ifdef _XMF_PARSER
extern EAS_VOID_PTR EAS_XMF_Parser;
#endif

#ifdef _SMAF_PARSER
extern EAS_VOID_PTR EAS_SMAF_Parser;
#endif

#ifdef _WAVE_PARSER
extern EAS_VOID_PTR EAS_Wave_Parser;
#endif

#ifdef _OTA_PARSER
extern EAS_VOID_PTR EAS_OTA_Parser;
#endif

#ifdef _IMELODY_PARSER
extern EAS_VOID_PTR EAS_iMelody_Parser;
#endif

#ifdef _RTTTL_PARSER
extern EAS_VOID_PTR EAS_RTTTL_Parser;
#endif

#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
extern EAS_VOID_PTR EAS_CMF_Parser;
#endif

/* initalize pointers to parser interfaces */
/*lint -e{605} not pretty, but it works */
EAS_VOID_PTR const parserModules[] = 
{
	&EAS_SMF_Parser,
		
#ifdef _XMF_PARSER
	&EAS_XMF_Parser,
#endif

#ifdef _WAVE_PARSER
	&EAS_Wave_Parser,
#endif

#ifdef _SMAF_PARSER
	&EAS_SMAF_Parser,
#endif

#ifdef _OTA_PARSER
	&EAS_OTA_Parser,
#endif

#ifdef _IMELODY_PARSER
	&EAS_iMelody_Parser,
#endif

#ifdef _RTTTL_PARSER
	&EAS_RTTTL_Parser,
#endif

#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
	&EAS_CMF_Parser
#endif
};
#define NUM_PARSER_MODULES (sizeof(parserModules) / sizeof(EAS_VOID_PTR))

/*----------------------------------------------------------------------------
 * Data Modules
 *----------------------------------------------------------------------------
*/

#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR eas_SMFData;
extern EAS_VOID_PTR eas_Data;
extern EAS_VOID_PTR eas_MixBuffer;
extern EAS_VOID_PTR eas_Synth;
extern EAS_VOID_PTR eas_MIDI;
extern EAS_VOID_PTR eas_PCMData;
extern EAS_VOID_PTR eas_MIDIData;

#ifdef _XMF_PARSER
extern EAS_VOID_PTR eas_XMFData;
#endif

#ifdef _SMAF_PARSER
extern EAS_VOID_PTR eas_SMAFData;
#endif

#ifdef _OTA_PARSER
extern EAS_VOID_PTR eas_OTAData;
#endif

#ifdef _IMELODY_PARSER
extern EAS_VOID_PTR eas_iMelodyData;
#endif

#ifdef _RTTTL_PARSER
extern EAS_VOID_PTR eas_RTTTLData;
#endif

#ifdef _WAVE_PARSER
extern EAS_VOID_PTR eas_WaveData;
#endif

#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
extern EAS_VOID_PTR eas_CMFData;
#endif
#endif

/*----------------------------------------------------------------------------
 *
 * Effects Modules
 *
 * These declarations are used by the EAS library to locate  
 * effects modules. 
 *----------------------------------------------------------------------------
*/

#ifdef _ENHANCER_ENABLED
extern EAS_VOID_PTR					EAS_Enhancer;
#define EAS_ENHANCER_INTERFACE		&EAS_Enhancer
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_EnhancerData;
#define EAS_ENHANCER_DATA			&eas_EnhancerData
#else
#define EAS_ENHANCER_DATA			NULL
#endif
#else
#define EAS_ENHANCER_INTERFACE		NULL
#define EAS_ENHANCER_DATA			NULL
#endif

#ifdef _COMPRESSOR_ENABLED
extern EAS_VOID_PTR	 				EAS_Compressor;
#define EAS_COMPRESSOR_INTERFACE	&EAS_Compressor
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_CompressorData;
#define EAS_COMPRESSOR_DATA			&eas_CompressorData
#else
#define EAS_COMPRESSOR_DATA			NULL
#endif
#else
#define EAS_COMPRESSOR_INTERFACE	NULL
#define EAS_COMPRESSOR_DATA			NULL
#endif

#ifdef _MAXIMIZER_ENABLED
extern EAS_VOID_PTR	 				EAS_Maximizer;
#define EAS_MAXIMIZER_INTERFACE		&EAS_Maximizer
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_MaximizerData;
#define EAS_MAXIMIZER_DATA			&eas_MaximizerData
#else
#define EAS_MAXIMIZER_DATA			NULL
#endif
#else
#define EAS_MAXIMIZER_INTERFACE	NULL
#define EAS_MAXIMIZER_DATA			NULL
#endif


#ifdef _REVERB_ENABLED
extern EAS_VOID_PTR	 				EAS_Reverb;
#define EAS_REVERB_INTERFACE		&EAS_Reverb
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_ReverbData;
#define EAS_REVERB_DATA				&eas_ReverbData
#else
#define EAS_REVERB_DATA				NULL
#endif
#else
#define EAS_REVERB_INTERFACE		NULL
#define EAS_REVERB_DATA				NULL
#endif

#ifdef _CHORUS_ENABLED
extern EAS_VOID_PTR	 				EAS_Chorus;
#define EAS_CHORUS_INTERFACE		&EAS_Chorus
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_ChorusData;
#define EAS_CHORUS_DATA				&eas_ChorusData
#else
#define EAS_CHORUS_DATA				NULL
#endif
#else
#define EAS_CHORUS_INTERFACE		NULL
#define EAS_CHORUS_DATA				NULL
#endif

#ifdef _WIDENER_ENABLED
extern EAS_VOID_PTR	 				EAS_Widener;
#define EAS_WIDENER_INTERFACE		&EAS_Widener
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_WidenerData;
#define EAS_WIDENER_DATA			&eas_WidenerData
#else
#define EAS_WIDENER_DATA			NULL
#endif
#else
#define EAS_WIDENER_INTERFACE		NULL
#define EAS_WIDENER_DATA			NULL
#endif

#ifdef _GRAPHIC_EQ_ENABLED
extern EAS_VOID_PTR	 				EAS_GraphicEQ;
#define EAS_GRAPHIC_EQ_INTERFACE	&EAS_GraphicEQ
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_GraphicEQData;
#define EAS_GRAPHIC_EQ_DATA			&eas_GraphicEQData
#else
#define EAS_GRAPHIC_EQ_DATA			NULL
#endif
#else
#define EAS_GRAPHIC_EQ_INTERFACE	NULL
#define EAS_GRAPHIC_EQ_DATA			NULL
#endif

#ifdef _WOW_ENABLED
extern EAS_VOID_PTR	 				EAS_Wow;
#define EAS_WOW_INTERFACE			&EAS_Wow
#ifdef _STATIC_MEMORY
#error "WOW module requires dynamic memory model"
#else
#define EAS_WOW_DATA				NULL
#endif
#else
#define EAS_WOW_INTERFACE			NULL
#define EAS_WOW_DATA				NULL
#endif

#ifdef _TONECONTROLEQ_ENABLED
extern EAS_VOID_PTR					EAS_ToneControlEQ;
#define EAS_TONECONTROLEQ_INTERFACE	&EAS_ToneControlEQ
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_ToneControlEQData;
#define EAS_TONECONTROLEQ_DATA		&eas_ToneControlEQData
#else
#define EAS_TONECONTROLEQ_DATA		NULL
#endif
#else
#define EAS_TONECONTROLEQ_INTERFACE	NULL
#define EAS_TONECONTROLEQ_DATA		NULL
#endif

/*lint -e{605} not pretty, but it works */
EAS_VOID_PTR const effectsModules[] = 
{
	EAS_ENHANCER_INTERFACE,
	EAS_COMPRESSOR_INTERFACE,
	EAS_REVERB_INTERFACE,
	EAS_CHORUS_INTERFACE,
	EAS_WIDENER_INTERFACE,
	EAS_GRAPHIC_EQ_INTERFACE,
	EAS_WOW_INTERFACE,
	EAS_MAXIMIZER_INTERFACE,
	EAS_TONECONTROLEQ_INTERFACE
};

EAS_VOID_PTR const effectsData[] =
{
	EAS_ENHANCER_DATA,
	EAS_COMPRESSOR_DATA,
	EAS_REVERB_DATA,
	EAS_CHORUS_DATA,
	EAS_WIDENER_DATA,
	EAS_GRAPHIC_EQ_DATA,
	EAS_WOW_DATA,
	EAS_MAXIMIZER_DATA,
	EAS_TONECONTROLEQ_DATA
};

/*----------------------------------------------------------------------------
 *
 * Optional Modules
 *
 * These declarations are used by the EAS library to locate  
 * effects modules. 
 *----------------------------------------------------------------------------
*/

#ifdef _METRICS_ENABLED
extern EAS_VOID_PTR					EAS_Metrics;
#define EAS_METRICS_INTERFACE		&EAS_Metrics
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_MetricsData;
#define EAS_METRICS_DATA			&eas_MetricsData
#else
#define EAS_METRICS_DATA			NULL
#endif
#else
#define EAS_METRICS_INTERFACE		NULL
#define EAS_METRICS_DATA			NULL
#endif

#ifdef MMAPI_SUPPORT
extern EAS_VOID_PTR					EAS_TC_Parser;
#define EAS_TONE_CONTROL_PARSER		&EAS_TC_Parser
#ifdef _STATIC_MEMORY
extern EAS_VOID_PTR					eas_TCData;
#define EAS_TONE_CONTROL_DATA		&eas_TCData
#else
#define EAS_TONE_CONTROL_DATA		NULL
#endif
#else
#define EAS_TONE_CONTROL_PARSER		NULL
#define EAS_TONE_CONTROL_DATA		NULL
#endif

/*lint -e{605} not pretty, but it works */
EAS_VOID_PTR const optionalModules[] = 
{
	EAS_TONE_CONTROL_PARSER,
	EAS_METRICS_INTERFACE
};

EAS_VOID_PTR const optionalData[] =
{
	EAS_TONE_CONTROL_DATA,
	EAS_METRICS_DATA
};

/*----------------------------------------------------------------------------
 * EAS_CMStaticMemoryModel()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function returns true if EAS has been configured for 
 * a static memory model. There are some limitations in the
 * static memory model, see the documentation for more
 * information.
 *
 * Outputs:
 *  returns EAS_TRUE if a module is found
 *----------------------------------------------------------------------------
*/
EAS_BOOL EAS_CMStaticMemoryModel (void)
{
#ifdef _STATIC_MEMORY
	return EAS_TRUE;
#else
	return EAS_FALSE;
#endif
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumModules()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to optional modules. 
 *
 * Inputs:
 *  module			- module number
 *
 * Outputs:
 *  returns a pointer to the module function table or NULL if no module
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumModules (EAS_INT module)
{

	if (module >= (EAS_INT) NUM_PARSER_MODULES)
		return NULL;
	return parserModules[module];
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumData()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to static memory allocations. 
 *
 * Inputs:
 *  dataModule			- enumerated module number
 *
 * Outputs:
 * Returns handle to data or NULL if not found
 *----------------------------------------------------------------------------
*/
/*lint -esym(715, dataModule) used only when _STATIC_MEMORY is defined */
EAS_VOID_PTR EAS_CMEnumData (EAS_INT dataModule)
{

#ifdef _STATIC_MEMORY
	switch (dataModule)
	{

	/* main instance data for synthesizer */
	case EAS_CM_EAS_DATA:
		return &eas_Data;

	/* mix buffer for mix engine */
	case EAS_CM_MIX_BUFFER:
		/*lint -e{545} lint doesn't like this because it sees the underlying type */
		return &eas_MixBuffer;

	/* instance data for synth */
	case EAS_CM_SYNTH_DATA:
		return &eas_Synth;

	/* instance data for MIDI parser */
	case EAS_CM_MIDI_DATA:
		return &eas_MIDI;
	
	/* instance data for SMF parser */
	case EAS_CM_SMF_DATA:
		return &eas_SMFData;

#ifdef _XMF_PARSER
	/* instance data for XMF parser */
	case EAS_CM_XMF_DATA:
		return &eas_XMFData;
#endif		

#ifdef _SMAF_PARSER
	/* instance data for SMAF parser */
	case EAS_CM_SMAF_DATA:
		return &eas_SMAFData;
#endif		

	/* instance data for the PCM engine */
	case EAS_CM_PCM_DATA:
		/*lint -e{545} lint doesn't like this because it sees the underlying type */
		return &eas_PCMData;

	case EAS_CM_MIDI_STREAM_DATA:
		return &eas_MIDIData;

#ifdef _OTA_PARSER
	/* instance data for OTA parser */
	case EAS_CM_OTA_DATA:
		return &eas_OTAData;
#endif		
		
#ifdef _IMELODY_PARSER
	/* instance data for iMelody parser */
	case EAS_CM_IMELODY_DATA:
		return &eas_iMelodyData;
#endif		

#ifdef _RTTTL_PARSER
	/* instance data for RTTTL parser */
	case EAS_CM_RTTTL_DATA:
		return &eas_RTTTLData;
#endif		

#ifdef _WAVE_PARSER
	/* instance data for WAVE parser */
	case EAS_CM_WAVE_DATA:
		return &eas_WaveData;
#endif		

#if defined (_CMX_PARSER) || defined(_MFI_PARSER)
	/* instance data for CMF parser */
	case EAS_CM_CMF_DATA:
		return &eas_CMFData;
#endif

	default:
		return NULL;
	}

#else
	return NULL;
#endif
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumFXModules()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to optional effects modules. 
 *
 * Inputs:
 *  module			- enumerated module number
 *  pModule			- pointer to module interface
 *
 * Outputs:
 *  Returns pointer to function table or NULL if not found
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumFXModules (EAS_INT module)
{

	if (module >= NUM_EFFECTS_MODULES)
		return NULL;
	return effectsModules[module];
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumFXData()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to static memory allocations. 
 *
 * Inputs:
 *  dataModule			- enumerated module number
 *  pData				- pointer to handle variable
 *
 * Outputs:
 * Returns handle to data or NULL if not found
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumFXData (EAS_INT dataModule)
{

	if (dataModule >= NUM_EFFECTS_MODULES)
		return NULL;
	return effectsData[dataModule];
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumOptModules()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to optional modules. 
 *
 * Inputs:
 *  module			- enumerated module number
 *
 * Outputs:
 *  returns pointer to function table or NULL if no module
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumOptModules (EAS_INT module)
{

	/* sanity check */
	if (module >= NUM_OPTIONAL_MODULES)
		return EAS_FALSE;
	return optionalModules[module];
}

/*----------------------------------------------------------------------------
 * EAS_CMEnumOptData()
 *----------------------------------------------------------------------------
 * Purpose:
 * This function is used to find pointers to static memory allocations. 
 *
 * Inputs:
 *  dataModule			- enumerated module number
 *
 * Outputs:
 * Returns handle to data or NULL if not found
 *----------------------------------------------------------------------------
*/
EAS_VOID_PTR EAS_CMEnumOptData (EAS_INT dataModule)
{

	if (dataModule >= NUM_OPTIONAL_MODULES)
		return NULL;
	return optionalData[dataModule];
}