summaryrefslogtreecommitdiffstats
path: root/libSBRenc/src/ps_main.h
diff options
context:
space:
mode:
Diffstat (limited to 'libSBRenc/src/ps_main.h')
-rw-r--r--libSBRenc/src/ps_main.h220
1 files changed, 134 insertions, 86 deletions
diff --git a/libSBRenc/src/ps_main.h b/libSBRenc/src/ps_main.h
index b2fac92..4833fe0 100644
--- a/libSBRenc/src/ps_main.h
+++ b/libSBRenc/src/ps_main.h
@@ -30,74 +30,49 @@
/* Includes ******************************************************************/
#include "sbr_def.h"
-#include "psenc_hybrid.h"
+#include "qmf.h"
#include "ps_encode.h"
#include "FDK_bitstream.h"
+#include "FDK_hybrid.h"
+
/* Data Types ****************************************************************/
typedef enum {
PSENC_STEREO_BANDS_INVALID = 0,
- PSENC_STEREO_BANDS_10 = 10,
- PSENC_STEREO_BANDS_20 = 20,
- PSENC_STEREO_BANDS_34 = 34
+ PSENC_STEREO_BANDS_10 = 10,
+ PSENC_STEREO_BANDS_20 = 20
+
} PSENC_STEREO_BANDS_CONFIG;
typedef enum {
- PSENC_NENV_1 = 1,
- PSENC_NENV_2 = 2,
- PSENC_NENV_4 = 4,
- PSENC_NENV_DEFAULT = PSENC_NENV_2,
- PSENC_NENV_MAX = PSENC_NENV_4
-} PSENC_NENV_CONFIG;
+ PSENC_NENV_1 = 1,
+ PSENC_NENV_2 = 2,
+ PSENC_NENV_4 = 4,
+ PSENC_NENV_DEFAULT = PSENC_NENV_2,
+ PSENC_NENV_MAX = PSENC_NENV_4
-#define MAX_PS_CHANNELS ( 2 )
-#define PSENC_QMF_BUFFER_LENGTH ( 48 )
+} PSENC_NENV_CONFIG;
typedef struct {
-
- UINT bitrateFrom; /* inclusive */
- UINT bitrateTo; /* exclusive */
- PSENC_STEREO_BANDS_CONFIG nStereoBands;
- PSENC_NENV_CONFIG nEnvelopes;
- LONG iidQuantErrorThreshold; /* quantization threshold to switch between coarse and fine iid quantization */
+ UINT bitrateFrom; /* inclusive */
+ UINT bitrateTo; /* exclusive */
+ PSENC_STEREO_BANDS_CONFIG nStereoBands;
+ PSENC_NENV_CONFIG nEnvelopes;
+ LONG iidQuantErrorThreshold; /* quantization threshold to switch between coarse and fine iid quantization */
} psTuningTable_t;
/* Function / Class Declarations *********************************************/
-typedef struct T_PS_QMF_DATA
-{
- FIXP_QMF *rQmfData[PSENC_QMF_BUFFER_LENGTH];
- FIXP_QMF *iQmfData[PSENC_QMF_BUFFER_LENGTH];
- INT nCols;
- INT nRows;
- INT bufferReadOffset;
- INT bufferReadOffsetHybrid;
- INT bufferWriteOffset;
- INT bufferLength;
-} PS_QMF_DATA, *HANDLE_PS_QMF_DATA;
-
-typedef struct T_PS_CHANNEL_DATA {
- HANDLE_PS_QMF_DATA hPsQmfData;
-
- int psQmfScale;
- HANDLE_PS_HYBRID_DATA hHybData;
- HANDLE_PS_HYBRID hHybAna;
- INT psChannelDelay; /* delay in samples */
-} PS_CHANNEL_DATA, *HANDLE_PS_CHANNEL_DATA;
-
typedef struct T_PARAMETRIC_STEREO {
-
- HANDLE_PS_HYBRID_CONFIG hHybridConfig;
- HANDLE_PS_CHANNEL_DATA hPsChannelData[MAX_PS_CHANNELS];
HANDLE_PS_ENCODE hPsEncode;
- HANDLE_PS_OUT hPsOut[2];
+ PS_OUT psOut[2];
- FIXP_QMF *qmfDelayReal[QMF_MAX_TIME_SLOTS>>1];
- FIXP_QMF *qmfDelayImag[QMF_MAX_TIME_SLOTS>>1];
- FIXP_QMF *qmfDelayRealRef;
- FIXP_QMF *qmfDelayImagRef;
- int qmfDelayScale;
+ FIXP_DBL __staticHybridData[HYBRID_READ_OFFSET][MAX_PS_CHANNELS][2][MAX_HYBRID_BANDS];
+ FIXP_DBL *pHybridData[HYBRID_READ_OFFSET+HYBRID_FRAMESIZE][MAX_PS_CHANNELS][2];
+
+ FIXP_QMF qmfDelayLines[2][QMF_MAX_TIME_SLOTS>>1][QMF_CHANNELS];
+ int qmfDelayScale;
INT psDelay;
UINT maxEnvelopes;
@@ -108,53 +83,126 @@ typedef struct T_PARAMETRIC_STEREO {
INT noQmfSlots;
INT noQmfBands;
-} PARAMETRIC_STEREO;
+ FIXP_DBL __staticHybAnaStatesLF[MAX_PS_CHANNELS][2*HYBRID_FILTER_LENGTH*HYBRID_MAX_QMF_BANDS];
+ FIXP_DBL __staticHybAnaStatesHF[MAX_PS_CHANNELS][2*HYBRID_FILTER_DELAY*(QMF_CHANNELS-HYBRID_MAX_QMF_BANDS)];
+ FDK_ANA_HYB_FILTER fdkHybAnaFilter[MAX_PS_CHANNELS];
+ FDK_SYN_HYB_FILTER fdkHybSynFilter;
+} PARAMETRIC_STEREO;
typedef struct T_PSENC_CONFIG {
-
- INT frameSize;
- INT qmfFilterMode;
- INT sbrPsDelay;
- PSENC_STEREO_BANDS_CONFIG nStereoBands;
- PSENC_NENV_CONFIG maxEnvelopes;
- FIXP_DBL iidQuantErrorThreshold;
+ INT frameSize;
+ INT qmfFilterMode;
+ INT sbrPsDelay;
+ PSENC_STEREO_BANDS_CONFIG nStereoBands;
+ PSENC_NENV_CONFIG maxEnvelopes;
+ FIXP_DBL iidQuantErrorThreshold;
} PSENC_CONFIG, *HANDLE_PSENC_CONFIG;
typedef struct T_PARAMETRIC_STEREO *HANDLE_PARAMETRIC_STEREO;
-HANDLE_ERROR_INFO
-PSEnc_Create(HANDLE_PARAMETRIC_STEREO *phParametricStereo);
-
-HANDLE_ERROR_INFO
-PSEnc_Init(HANDLE_PARAMETRIC_STEREO hParametricStereo,
- HANDLE_PSENC_CONFIG hPsEncConfig,
- INT noQmfSlots,
- INT noQmfBands
- ,UCHAR *dynamic_RAM
- );
-
-HANDLE_ERROR_INFO
-UpdatePSQmfData_second(HANDLE_PARAMETRIC_STEREO hParametricStereo);
-
-HANDLE_ERROR_INFO
-PSEnc_Destroy(HANDLE_PARAMETRIC_STEREO *hParametricStereo);
-
-
-HANDLE_ERROR_INFO
-FDKsbrEnc_PSEnc_ParametricStereoProcessing(HANDLE_PARAMETRIC_STEREO hParametricStereo,
- FIXP_QMF **RESTRICT qmfRealData,
- FIXP_QMF **RESTRICT qmfImagData,
- INT qmfOffset,
- INT_PCM *downsampledOutSignal,
- HANDLE_QMF_FILTER_BANK sbrSynthQmf,
- SCHAR *qmfScale,
- const int sendHeader);
-
-INT
-FDKsbrEnc_PSEnc_WritePSData(HANDLE_PARAMETRIC_STEREO hParametricStereo, HANDLE_FDK_BITSTREAM hBitstream);
+/**
+ * \brief Create a parametric stereo encoder instance.
+ *
+ * \param phParametricStereo A pointer to a parametric stereo handle to be allocated. Initialized on return.
+ *
+ * \return
+ * - PSENC_OK, on succes.
+ * - PSENC_INVALID_HANDLE, PSENC_MEMORY_ERROR, on failure.
+ */
+FDK_PSENC_ERROR PSEnc_Create(
+ HANDLE_PARAMETRIC_STEREO *phParametricStereo
+ );
+
+
+/**
+ * \brief Initialize a parametric stereo encoder instance.
+ *
+ * \param hParametricStereo Meta Data handle.
+ * \param hPsEncConfig Filled parametric stereo configuration structure.
+ * \param noQmfSlots Number of slots within one audio frame.
+ * \param noQmfBands Number of QMF bands.
+ * \param dynamic_RAM Pointer to preallocated workbuffer.
+ *
+ * \return
+ * - PSENC_OK, on succes.
+ * - PSENC_INVALID_HANDLE, PSENC_INIT_ERROR, on failure.
+ */
+FDK_PSENC_ERROR PSEnc_Init(
+ HANDLE_PARAMETRIC_STEREO hParametricStereo,
+ const HANDLE_PSENC_CONFIG hPsEncConfig,
+ INT noQmfSlots,
+ INT noQmfBands
+ ,UCHAR *dynamic_RAM
+ );
+
+
+/**
+ * \brief Destroy parametric stereo encoder instance.
+ *
+ * Deallocate instance and free whole memory.
+ *
+ * \param phParametricStereo Pointer to the parametric stereo handle to be deallocated.
+ *
+ * \return
+ * - PSENC_OK, on succes.
+ * - PSENC_INVALID_HANDLE, on failure.
+ */
+FDK_PSENC_ERROR PSEnc_Destroy(
+ HANDLE_PARAMETRIC_STEREO *phParametricStereo
+ );
+
+
+/**
+ * \brief Apply parametric stereo processing.
+ *
+ * \param hParametricStereo Meta Data handle.
+ * \param samples Pointer to 2 channel audio input signal.
+ * \param timeInStride, Stride factor of input buffer.
+ * \param hQmfAnalysis, Pointer to QMF analysis filterbanks.
+ * \param downmixedRealQmfData Pointer to real QMF buffer to be written to.
+ * \param downmixedImagQmfData Pointer to imag QMF buffer to be written to.
+ * \param downsampledOutSignal Pointer to buffer where to write downmixed timesignal.
+ * \param sbrSynthQmf Pointer to QMF synthesis filterbank.
+ * \param qmfScale Return scaling factor of the qmf data.
+ * \param sendHeader Signal whether to write header data.
+ *
+ * \return
+ * - PSENC_OK, on succes.
+ * - PSENC_INVALID_HANDLE, PSENC_ENCODE_ERROR, on failure.
+ */
+FDK_PSENC_ERROR FDKsbrEnc_PSEnc_ParametricStereoProcessing(
+ HANDLE_PARAMETRIC_STEREO hParametricStereo,
+ INT_PCM *samples[2],
+ UINT timeInStride,
+ QMF_FILTER_BANK **hQmfAnalysis,
+ FIXP_QMF **RESTRICT downmixedRealQmfData,
+ FIXP_QMF **RESTRICT downmixedImagQmfData,
+ INT_PCM *downsampledOutSignal,
+ HANDLE_QMF_FILTER_BANK sbrSynthQmf,
+ SCHAR *qmfScale,
+ const int sendHeader
+ );
+
+
+/**
+ * \brief Write parametric stereo bitstream.
+ *
+ * Write ps_data() element to bitstream and return number of written bits.
+ * Returns number of written bits only, if hBitstream == NULL.
+ *
+ * \param hParametricStereo Meta Data handle.
+ * \param hBitstream Bitstream buffer handle.
+ *
+ * \return
+ * - number of written bits.
+ */
+INT FDKsbrEnc_PSEnc_WritePSData(
+ HANDLE_PARAMETRIC_STEREO hParametricStereo,
+ HANDLE_FDK_BITSTREAM hBitstream
+ );
#endif /* __INCLUDED_PS_MAIN_H */