/*
 ** Copyright 2003-2010, VisualOn, 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.
 */
/*******************************************************************************
	File:		qc_main.h

	Content:	Quantizing & coding functions

*******************************************************************************/

#ifndef _QC_MAIN_H
#define _QC_MAIN_H

#include "qc_data.h"
#include "interface.h"
#include "memalign.h"

/* Quantizing & coding stage */

Word16 QCOutNew(QC_OUT *hQC, Word16 nChannels, VO_MEM_OPERATOR *pMemOP);

void QCOutDelete(QC_OUT *hQC, VO_MEM_OPERATOR *pMemOP);

Word16 QCNew(QC_STATE *hQC, VO_MEM_OPERATOR *pMemOP);

Word16 QCInit(QC_STATE *hQC,
              struct QC_INIT *init);

void QCDelete(QC_STATE *hQC, VO_MEM_OPERATOR *pMemOP);


Word16 QCMain(QC_STATE *hQC,
              ELEMENT_BITS* elBits,
              ATS_ELEMENT* adjThrStateElement,
              PSY_OUT_CHANNEL psyOutChannel[MAX_CHANNELS], /* may be modified in-place */
              PSY_OUT_ELEMENT* psyOutElement,
              QC_OUT_CHANNEL  qcOutChannel[MAX_CHANNELS],   /* out                      */
              QC_OUT_ELEMENT* qcOutElement,
              Word16 nChannels,
			  Word16 ancillaryDataBytes);     /* returns error code       */

void updateBitres(QC_STATE* qcKernel,
                  QC_OUT* qcOut);

Word16 FinalizeBitConsumption(QC_STATE *hQC,
                              QC_OUT* qcOut);

Word16 AdjustBitrate(QC_STATE *hQC,
                     Word32 bitRate,
                     Word32 sampleRate);

#endif /* _QC_MAIN_H */
