diff -r 000000000000 -r 951a5db380a0 videoeditorengine/mp3aacManipLib/AACGain/inc/sbr_codec.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/mp3aacManipLib/AACGain/inc/sbr_codec.h Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,314 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - Initial contribution
+*
+* Contributors:
+* Ixonos Plc
+*
+* Description:
+*
+*/
+
+
+/*
+ \file
+ \brief SBR codec interface $Revision: 1.1.1.1.4.1 $
+*/
+
+/**************************************************************************
+ sbr_codec.h - SBR codec interface.
+
+ Author(s): Juha Ojanpera
+ Copyright (c) 2004 by Nokia Research Center, Multimedia Technologies.
+ *************************************************************************/
+
+#ifndef SBR_CODEC_H_
+#define SBR_CODEC_H_
+
+/*-- Project Headers. --*/
+#include "nok_bits.h"
+#include "defines.h"
+
+#pragma warning( disable : 4244)
+
+#define SBR_EXTENSION (13) /*-- 1101 --*/
+#define SBR_EXTENSION_CRC (14) /*-- 1110 --*/
+#define MAX_NR_ELEMENTS (2)
+#define MAX_SBR_BYTES (128)
+
+/**
+ * Error codes for SBR processing.
+ */
+typedef enum
+{
+ SBRDEC_OK = 0,
+ SBRDEC_CONCEAL,
+ SBRDEC_NOSYNCH,
+ SBRDEC_ILLEGAL_PROGRAM,
+ SBRDEC_ILLEGAL_TAG,
+ SBRDEC_ILLEGAL_CHN_CONFIG,
+ SBRDEC_ILLEGAL_SECTION,
+ SBRDEC_ILLEGAL_SCFACTORS,
+ SBRDEC_ILLEGAL_PULSE_DATA,
+ SBRDEC_MAIN_PROFILE_NOT_IMPLEMENTED,
+ SBRDEC_GC_NOT_IMPLEMENTED,
+ SBRDEC_ILLEGAL_PLUS_ELE_ID,
+ SBRDEC_CREATE_ERROR,
+ SBRDEC_NOT_INITIALIZED
+
+} SBR_ERROR;
+
+/**
+ * SBR element tags, these are the same as used in AAC also.
+ */
+typedef enum
+{
+ SBR_ID_SCE = 0,
+ SBR_ID_CPE,
+ SBR_ID_CCE,
+ SBR_ID_LFE,
+ SBR_ID_DSE,
+ SBR_ID_PCE,
+ SBR_ID_FIL,
+ SBR_ID_END
+
+} SBR_ELEMENT_ID;
+
+/**
+ * Bitstream element for SBR payload data.
+ */
+typedef struct
+{
+ /**
+ * Length of payload data.
+ */
+ int16 Payload;
+
+ /**
+ * Channel element ID for the associated SBR data.
+ */
+ int16 ElementID;
+
+ /**
+ * Offset to the start of the channel element, in bits.
+ */
+ int32 elementOffset;
+
+ /**
+ * Length of the channel element, in bits.
+ */
+ int32 chElementLen;
+
+ /**
+ * Decoding status of SBR header.
+ */
+ uint8 headerStatus;
+
+ /**
+ * Type of SBR element (with or without CRC codeword).
+ */
+ int16 ExtensionType;
+
+ /**
+ * SBR bitstream data.
+ */
+ uint8 *Data;
+
+} SbrElementStream;
+
+typedef struct
+{
+ int16 NrElements;
+ SbrElementStream sbrElement[MAX_NR_ELEMENTS];
+
+} SbrBitStream;
+
+/**
+ * SBR handle.
+ */
+typedef struct SBR_Decoder_Instance SBR_Decoder;
+
+/**
+ * Creates SBR bitstream handle.
+ *
+ * Possible leave codes:
+ * - KErrNoMemory
if memory allocation fails
+ *
+ * @return Handle to SBR bitstream handle
+ *
+ */
+SbrBitStream *
+OpenSBRBitStreamL(void);
+
+/**
+ * Closes SBR bitstream handle.
+ *
+ * @param Bitstr Handle to SBR bitstream to be deleted
+ * @return NULL
+ *
+ */
+SbrBitStream *
+CloseSBRBitStream(SbrBitStream *Bitstr);
+
+/**
+ * Creates SBR decoding/parsing handle.
+ *
+ * Possible leave codes:
+ * - KErrNoMemory
if memory allocation fails
+ *
+ * @param sampleRate Sample rate of the AAC bitstream
+ * @param samplesPerFrame Frame length of the AAC stream (1024 or 960)
+ * @param isStereo 1 if stereo AAC stream, 0 otherwise (=mono)
+ * @param isDualMono 1 if two single channel elements present in the AAC bistream, 0 otherwise
+ * @return Handle to SBR decoding/parsing handle
+ *
+ */
+SBR_Decoder *
+OpenSBRDecoderL(int32 sampleRate,
+ int16 samplesPerFrame,
+ uint8 isStereo,
+ uint8 isDualMono);
+
+/**
+ * Closes SBR decoding handle.
+ *
+ * @param Bitstr Handle to SBR decoding/parsing to be deleted
+ * @return NULL
+ *
+ */
+SBR_Decoder *
+CloseSBR(SBR_Decoder *self);
+
+/**
+ * Parses the SBR payload data and writes the modified bitstream element(s)
+ * to output AAC bitstream.
+ *
+ * @param bsIn Handle to AAC input bitstream
+ * @param bsOut Handle to AAC output bitstream
+ * @param self Handle to SBR parser
+ * @param Bitstr Handle to SBR bitstream element(s)
+ * @param decVal Volume level adjustment factor
+ * @return Number of bytes written to output bitstream
+ *
+ */
+int16
+ParseSBR(TBitStream *bsIn,
+ TBitStream *bsOut,
+ SBR_Decoder *self,
+ SbrBitStream *Bitstr,
+ int16 decVal);
+
+/**
+ * Chacks whether parametric stereo tool is enabled in the SBR elements.
+ *
+ * @param self Handle to SBR parser
+ * @param Bitstr Handle to SBR bitstream element(s)
+ * @return 1 if parametric stereo found, 0 otherwise
+ *
+ */
+uint8
+IsSBRParametricStereoEnabled(SBR_Decoder *self, SbrBitStream *Bitstr);
+
+/**
+ * Chacks whether SBR elements present in the bistream.
+ *
+ * @param Bitstr Handle to SBR bitstream element(s)
+ * @return 1 if SBR elements found, 0 otherwise
+ *
+ */
+uint8
+IsSBREnabled(SbrBitStream *Bitstr);
+
+/**
+ * Reads SBR payload data from AAC bitstream into SBR bitstream handle.
+ *
+ * @param bs Handle to AAC bitstream
+ * @param streamSBR Handle to SBR bitstream handle
+ * @param extension_type SBR payload type
+ * @param prev_element Channel element type prior the fill element
+ * @param dataCount Length of SBR payload data, in bytes
+ * @return 1 if SBR read, 0 otherwise (in which case the callee should read the data)
+ *
+ */
+int16
+ReadSBRExtensionData(TBitStream *bs,
+ SbrBitStream *streamSBR,
+ int16 extension_type,
+ int16 prev_element,
+ int16 dataCount);
+
+/**
+ * Initializes SBR handle for silence data generation.
+ *
+ * @param sbrDec Handle to SBR decoder
+ * @param isStereo 1 if stereo AAC stream, 0 otherwise (=mono)
+ * @param isParametricStereo 1 if parametric stereo should be included in the SBR data
+ *
+ */
+void
+InitSBRSilenceData(SBR_Decoder *sbrDec, uint8 isStereo, uint8 isParametricStereo);
+
+/**
+ * Writes silence to SBR channel element. Please note that this method is supposed
+ * to be called inside AAC bitstream multiplexer and is therefore part of encoding.
+ * If you want to upgrade plain AAC bitstream to eAAC+, use 'GenerateSBRSilenceDataL()'
+ * first to generate the silence bits for SBR, then parse the AAC bitstream (so that the
+ * channel element positions and their length are known) and finally call
+ * 'WriteSBRSilence()' to write the output eAAC+ bitstream.
+ *
+ * @param sbrDecoder Handle to SBR codec
+ * @param bsOut Handle to output (AAC) bitstream
+ * @param isStereo 1 if stereo AAC stream, 0 otherwise (=mono)
+ * @return Length of SBR silence data, in bits
+ *
+ */
+int16
+WriteSBRSilenceElement(SBR_Decoder *sbrDecoder, TBitStream *bsOut, uint8 isStereo);
+
+/**
+ * Generates silence bits for SBR bitstream.
+ *
+ * Possible leave codes:
+ * - KErrNoMemory
if memory allocation fails
+ *
+ * @param OutBuffer Output buffer receiving silence data bits
+ * @param OutBufferSize Size of output buffer
+ * @param sampleRate Sample rate of the AAC bitstream
+ * @param isStereo 1 if stereo AAC stream, 0 otherwise (=mono)
+ * @param isParametricStereo 1 if parametric stereo should be included in the SBR data
+ * @return Length of SBR silence data, in bits
+ *
+ */
+int16
+GenerateSBRSilenceDataL(uint8 *OutBuffer,
+ int16 OutBufferSize,
+ int32 sampleRate,
+ uint8 isStereo,
+ uint8 isParametricStereo);
+
+/**
+ * Writes silence to the SBR part of the AAC bitstream.
+ *
+ * @param bsIn AAC input bitstream
+ * @param bsOut Output bitstream (AAC + SBR)
+ * @param streamSBR Handle to SBR bitstream element
+ * @param SbrBuffer Payload data to generate SBR silence
+ * @param SbrBits Length of SBR silence, in bits
+ * @return Length of AAC + SBR bitstream, in bytes
+ *
+ */
+int16
+WriteSBRSilence(TBitStream *bsIn,
+ TBitStream *bsOut,
+ SbrBitStream *streamSBR,
+ uint8 *SbrBuffer,
+ int16 SbrBits);
+
+#endif /*-- SBR_CODEC_H_ --*/