/*----------------------------------------------------------------------------
 *
 * File: 
 * eas_data.h
 *
 * Contents and purpose:
 * This header defines all types, to support dynamic allocation of the
 * memory resources needed for persistent EAS data.
 *
 * Copyright 2004 Sonic Network Inc.

 * 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: 842 $
 *   $Date: 2007-08-23 14:32:31 -0700 (Thu, 23 Aug 2007) $
 *----------------------------------------------------------------------------
*/

#ifndef _EAS_DATA_H
#define _EAS_DATA_H

#include "eas_types.h"
#include "eas_synthcfg.h"
#include "eas.h"
#include "eas_audioconst.h"
#include "eas_sndlib.h"
#include "eas_pcm.h"
#include "eas_pcmdata.h"
#include "eas_synth.h"
#include "eas_miditypes.h"
#include "eas_effects.h"

#ifdef AUX_MIXER
#include "eas_auxmixdata.h"
#endif

#ifdef JET_INTERFACE
#include "jet.h"
#endif

#ifdef _METRICS_ENABLED
#include "eas_perf.h"
#endif

#ifndef MAX_NUMBER_STREAMS
#define MAX_NUMBER_STREAMS			4
#endif

/* flags for S_EAS_STREAM */
#define STREAM_FLAGS_PARSED			1
#define STREAM_FLAGS_PAUSE			2
#define STREAM_FLAGS_LOCATE			4
#define STREAM_FLAGS_RESUME			8

/* structure for parsing a stream */
typedef struct s_eas_stream_tag
{
	void							*pParserModule;
	EAS_U32							time;
	EAS_U32							frameLength;
	EAS_I32							repeatCount;
	EAS_VOID_PTR					handle;
	EAS_U8							volume;
	EAS_BOOL8						streamFlags;
} S_EAS_STREAM;

/* default master volume is -10dB */
#define DEFAULT_VOLUME				90
#define DEFAULT_STREAM_VOLUME		100
#define DEFAULT_STREAM_GAIN			14622

/* 10 dB of boost available for individual parsers */
#define STREAM_VOLUME_HEADROOM		10

/* amalgamated persistent data type */
typedef struct s_eas_data_tag
{
#ifdef _CHECKED_BUILD
	EAS_U32							handleCheck;
#endif
	EAS_HW_DATA_HANDLE				hwInstData;

	S_EFFECTS_MODULE				effectsModules[NUM_EFFECTS_MODULES];

#ifdef _METRICS_ENABLED	
	S_METRICS_INTERFACE				*pMetricsModule;
	EAS_VOID_PTR					pMetricsData;
#endif

	EAS_I32							*pMixBuffer;
	EAS_PCM							*pOutputAudioBuffer;

#ifdef AUX_MIXER
	S_EAS_AUX_MIXER					auxMixer;
#endif

#ifdef _MAXIMIZER_ENABLED
	EAS_VOID_PTR					pMaximizerData;
#endif

	S_EAS_STREAM					streams[MAX_NUMBER_STREAMS];
	
	S_PCM_STATE						*pPCMStreams;

	S_VOICE_MGR						*pVoiceMgr;

#ifdef JET_INTERFACE
	JET_DATA_HANDLE					jetHandle;
#endif
	
	EAS_U32							renderTime;
	EAS_I16							masterGain;
	EAS_U8							masterVolume;
	EAS_BOOL8						staticMemoryModel;
	EAS_BOOL8						searchHeaderFlag;
} S_EAS_DATA;

#endif

