videoeditorengine/mp3aacManipLib/inc/mstream.h
branchRCL_3
changeset 3 e0b5df5c0969
parent 0 951a5db380a0
child 7 4c409de21d23
--- a/videoeditorengine/mp3aacManipLib/inc/mstream.h	Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,666 +0,0 @@
-/*
-* 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:
-*
-*/
-
-
-#ifndef MP_STREAM_H_
-#define MP_STREAM_H_
-
-/**************************************************************************
-  External Objects Needed
-  *************************************************************************/
-
-/*-- Project Headers --*/
-#include "nok_bits.h"
-#include "defines.h"
-#include "param.h"
-#include "mp3def.h"
-#include "auddef.h"
-#include <e32base.h>
-
-
-
-/**************************************************************************
-  External Objects Provided
-  *************************************************************************/
-
-/**************************************************************************
-                Common structure definitions for all layers
-  *************************************************************************/
-
-/*
-   Purpose:     Parent structure for error checking.
-   Explanation: The number of bits that are protected varies between different 
-                versions (MPEG-1, MPEG-2). */
-class TCRC_Check
-{
-public:
-  uint8 crc_payload[CRC_MAX_PAYLOAD]; /* Protected bits.         */
-  uint16 bufLen;                       /* Length of 'crc_payload' */
-  int16 crc;                         /* CRC error-check word.   */
-
-};
-
-/*
-   Purpose:     Parent structure for mp1, mp2, and mp3 header.
-   Explanation: - */
-
-class TMPEG_Header
-{
-public:
-  uint32 header; // Header bits. 
-
-};
-
-/*
-   Purpose:     Parent Structure for mp1, mp2, and mp3 frames.
-   Explanation: - */
-class TMPEG_Frame
-{
-public:
-  uint8 *scale_factors;           /* Scale factor of each subband and group. */
-  int16 *quant;                  /* Quantized spectral data for this frame. */
-  int16 *ch_quant[MAX_CHANNELS]; /* Channel pointers.                       */
-
-};
-
- /*
-   Purpose:     Parent Structure for mp1, mp2, and mp3 buffer.
-   Explanation: - */
-class TMPEG_Buffer
-{
-public:
-  FLOAT *synthesis_buffer[MAX_CHANNELS]; /* Samples for windowing.     */
-  int16 buf_idx[MAX_CHANNELS];           /* Start index for windowing. */
-  int16 dct_idx[MAX_CHANNELS];           /* DCT buffer index.          */
-  FLOAT *reconstructed;                  /* Dequantized samples.       */
-  FLOAT *ch_reconstructed[MAX_CHANNELS]; /* Channel pointers.          */
-
-};
-
- /*
-   Purpose:     Parent Structure for frame detection.
-   Explanation: - */
-class TSyncInfoMix
-{
-public:
-  int16 sync_length;       /* Length of sync word.                    */
-  int16 sync_word;         /* Synchronization word.                   */
-  int16 sync_mask;         /* Bitmask for sync word detection.        */
-  MIX_SYNC_STATUS sync_status; /* Which layer we supposed to be decoding. */
-
-};
-
-/**************************************************************************
-               Structure definitions applicable only to layer III
-  *************************************************************************/
-/*
-   Purpose:     Parent Structure for layer III Granule Info.
-   Explanation: - */
-class TGranule_Info
-{
-public:
-  uint8 global_gain;
-  uint8 flags;
-  uint8 table_select[3];
-  uint8 subblock_gain[3];
-  uint8 region0_count;
-  uint8 region1_count;
-  int32 part2_3_length;
-  int32 big_values;
-  int32 scalefac_compress;
-  MP3_WINDOW_TYPE block_mode;
-  int16 zero_part_start;
-
-};
-
-/*
-   Purpose:     Parent Structure for layer III Scale Factors.
-   Explanation: - */
-class CIII_Scale_Factors : public CBase
-{
-
-public:
-
-  uint8 *scalefac_long;     /* Scalefactors for long blocks.  */
-  uint8 *scalefac_short[3]; /* Scalefactors for short blocks. */
-
-
-};
-
-/*
-   Purpose:     Parent Structure for layer III Channel Info.
-   Explanation: - */
-class CIII_Channel_Info : public CBase
-{
-public:
-
-  static CIII_Channel_Info* NewL();
-  ~CIII_Channel_Info();
-  TGranule_Info *gr_info[2];     /* Granule info for this channel. */
-  CIII_Scale_Factors *scale_fac; /* Scalefactors for this channel. */
-
-private:
-   void ConstructL();
-   CIII_Channel_Info();
-
-};
-
-/*
-   Purpose:     Structure to hold MPEG-2 IS stereo positions.
-   Explanation: - */
-class TIS_Info
-{
-public:
-  int16 is_len[3];
-  int16 nr_sfb[3];
-
-};
-
-/*
-   Purpose:     Structure to hold scalefactor band tables
-                and related parameters.
-   Explanation: - */
-class CIII_SfbData : public CBase
-{
-public:
-
-  static CIII_SfbData* NewL();
-  ~CIII_SfbData();
-
-  /* Scalefactor band boundaries for long and short blocks. */
-  int16* sfbOffsetLong;
-  int16* sfbOffsetShort;
-
-  /* Scalefactor band widths for short blocks. */
-  int16* sfbWidthShort;
-
-  int16 *sfbLong;  /* Pointer to long sfb offset table.  */
-  int16 *sfbShort; /* Pointer to short sfb offset table. */
-  int16 *sfbWidth; /* Pointer to short sfb width table.  */
-  int16 bandLimit; /* # of spectral bins to be decoded.  */ 
-
-private:
-    void ConstructL();
-    CIII_SfbData();
-
-};
-
-/*
-   Purpose:     Structure to map the file parameters into
-                total length, average bitrate, etc.
-   Explanation: - */
-class TMP_BrInfo
-{
-public:
-  BOOL vbr;          /* TRUE for VBR files, FALSE otherwise.        */
-  BOOL tmp;          /* Used for counting the verage bitrate.       */
-  BOOL true_br;      /* The 'start_br' represents the true bitrate. */
-  BOOL free_br;      /* Free format flag.                           */
-  uint32 cum_br;     /* Cumulative bitrate.                         */
-  uint32 cum_frames; /* Cumulative # of frames.                     */
-  uint16 start_br;   /* Initial and/or average bitrate.             */
-  
-};
-
-/*
-   Purpose:     Parent Structure for Layer III Side Information.
-   Explanation: - */
-class CIII_Side_Info : public CBase
-{
-public:
-
-  static CIII_Side_Info* NewL();
-  ~CIII_Side_Info();
-
-  /*-- Side information read from the bit stream. --*/
-  uint8 private_bits;
-  uint8 scfsi[2][4];
-  int32 main_data_begin;
-  CIII_Channel_Info *ch_info[MAX_CHANNELS];
-
-  /*-- General side information. --*/
-  StereoMode *s_mode_long;    /* Stereo modes for long blocks.               */
-  StereoMode *s_mode_short[3];/* Stereo modes for short blocks.              */
-  
-  int16 max_gr;               /* Number of granules within each stream frame.*/
-  BOOL ms_stereo;             /* MS (Mid/Side) stereo used.                  */
-  BOOL is_stereo;             /* Intensity stereo used.                      */
-  BOOL lsf;                   /* MPEG-2 LSF stream present.                  */
-  BOOL mpeg25;                /* MPEG-2.5 stream present.                    */
-  int16 sb_limit;
-  TIS_Info is_info;
-  CIII_SfbData* sfbData;
-
-private:
-  void ConstructL();
-  CIII_Side_Info();
-
-};
-
-/*
-   Purpose:     Parent Structure for Huffman Decoding.
-   Explanation: This structure can be used if dynamic memory allocation
-                is not available or if memory consumption is important.
-                At worst we have to process the number of codewords equal to
-                the size of the codebook. */
-class CHuffman : public CBase
-{
-public:
-  int16 tree_len;        /* Size of the Huffman tree.                      */
-  int16 linbits;         /* Number of extra bits.                          */
-  const int16 *codeword;       /* Huffman codewords.                             */
-  const int16 *packed_symbols; /* x, y and length of the corresponding codeword. */
-
-};
-
-/*
-   Purpose:     Structure for buffer handling.
-   Explanation: - */
-class CMCUBuf : public CBase
-{
-public:
-
-   static CMCUBuf* NewL(TInt aBufLen);
-  ~CMCUBuf();
-
-  TBitStream *bs;      /* Bitstream parser.                 */
-  uint32 bufOffset;   /* Current file or buffer offset.    */
-  uint32 bufLen;      /* Length of 'mcuBufbits', in bytes. */
-  uint32 writeIdx;    /* Write index of the buffer.        */
-  uint32 readSlots;   /* Bytes read from the buffer.       */
-  uint8 *mcuBufbits;  /* Buffer for the compressed bits.   */
-
-private:
-    
-    void ConstructL(TInt aBufLen);
-    CMCUBuf();
-
-};
-
-/*
-   Purpose:     More definitions for the buffer handling.
-   Explanation: - */
-typedef enum StreamMode
-{
-  IS_UNKNOWN,
-  IS_FILE,
-  IS_STREAM,
-  READ_MODE,
-  WRITE_MODE,
-  APPEND_MODE
-
-} StreamMode;
-
-
-/*
-   Purpose:     Structure implementing ring buffer.
-   Explanation: - */
-class CRingBuffer : public CBase
-{
-public:
-  TBitStream *bs;    /* Bit parser for the 'bitBuffer'.  */
-  uint32 bufLen;    /* Length of 'bitBuffer', in bytes. */
-  uint32 readIdx;   /* Read index.                      */
-  uint8 *bitBuffer; /* Buffer holding encoded data.     */
-
-};
-
-/*
-   Purpose:     Layer 3 bitstream formatter (encoder side).
-                The header+side info and payload are in separate
-        buffers. The output mp3 frames are a combination
-        of these two buffers.
-   Explanation: - */
-class CL3FormatBitstream : public CBase
-{
-public:
-    static CL3FormatBitstream* NewL(uint16 sideInfoEntries, 
-            uint16 sideInfoBytes, uint32 dataBytesBuffer);
-
-
-    ~CL3FormatBitstream();
-
-    void L3FormatBitstreamAddMainDataEntry(uint16 dataBytes);
-    void L3FormatBitstreamAddMainDataBits(uint32 dataBits);
-    uint32 L3WriteOutFrame(uint8 *outBuf);
-  /* Number of bits present in 'frameData'. */
-  uint32 numDataBits;
-
-  /* Number of bytes reserved for payload part of the frame. */
-  uint16 *payloadBytes;
-
-  /* Read index to field 'payloadBytes'. */
-  uint16 payloadReadIdx;
-
-  /* Write index to field 'payloadBytes'. */
-  uint16 payloadWriteIdx;
-
-  /* Number of items in field 'payloadBytes'. */
-  uint16 numPayloads;
-
-  /* Payload data for layer 3 frames. */
-  CRingBuffer *frameData;
-
-
-  /* Number of frames present in 'frameHeader'. */
-  uint32 framesPresent;
-
-  /* Number of bytes reserved for side info per frame (fixed value). */
-  uint16 sideInfoBytes;
-
-  /* Buffer holding header and side info frames. */
-  CRingBuffer *frameHeader;
-  
-private:
-    
-    void ConstructL(uint16 sideInfoEntries, uint16 sideInfoBytes, uint32 dataBytesBuffer);
-    CL3FormatBitstream();
-};
-
-/*
-   Purpose:     Bitrate of the mixer.
-   Explanation: - */
-class TL3BitRate
-{
-public:
-  /*-- Bitrate of mixed stream and index of the rate. --*/
-  uint16 bitRate;
-  uint8 bitRateIdx;
-
-  /*-- Status of padding bit in frame header. --*/
-  uint8 padding;
-  
-  /*-- Number of bytes available for a frame. --*/
-  uint16 frameBytes;
-  
-  /*-- Fractional part of the bytes reserved for each frame. --*/
-  FLOAT frac_SpF;
-  FLOAT slot_lag;
-
-};
-
-class THuffmanData
-{
-public:
-  /* # of bits reserved for 'hufWord'. */
-  uint8 hufBits;
-  /* total # of bits reserved for codeword + sign bits + linbits. */
-  uint8 hufBitsCount;
-  /* Huffman codeword. */
-  uint16 hufWord;
-
-};
-
-/*
-   Purpose:     Huffman table parameters for layer 3.
-   Explanation: - */
-class CHuffmanCodTab : public CBase
-{
-public:
-  uint8 xlen;
-  uint8 ylen;
-  uint8 linbits;
-  uint8 xoffset;
-  uint16 linmax;
-  THuffmanData *hData;
-
-};
-
-/*
-   Purpose:     # of pair and quadruple tables.
-   Explanation: - */
-#define L3HUFPAIRTBLS  (31)
-#define L3HUFFQUADTBLS ( 2)
-
-/*
-   Purpose:     Parent structure to hold layer 3 Huffman 
-                coding parameters.
-   Explanation: - */
-class CL3HuffmanTab : public CBase
-{
-public:
-
-    static CL3HuffmanTab* NewL();
-    ~CL3HuffmanTab();
-
-    THuffmanData *quadTable[L3HUFFQUADTBLS];  // Tables 32 - 33. 
-    CHuffmanCodTab *pairTable[L3HUFPAIRTBLS]; // Tables 1 - 31.  
-
-    CHuffmanCodTab* tree;
-
-private:
-    CL3HuffmanTab();
-    void ConstructL();
-
-};
-
-/*
-   Purpose:     Helper parameters for mp3 mixer.
-   Explanation: - */
-class CL3MixerHelper : public CBase
-{
-public:
-  /*-------- Encoding related parameters. --------*/
-
-  /*-- Scalefactor encoding patterns for LSF streams. --*/
-  uint8 blkNum;
-  uint8 slen[4];
-  uint8 blkTypeNum;
-  int16 numRegions;
-
-  /*-- Huffman tables for layer 3. --*/
-  CL3HuffmanTab *l3Huf;
-  
-  /*-- Bitstream formatter for layer 3 encoder. --*/
-  CL3FormatBitstream *l3bs;
-  
-  /*-- Window sequence of previous frame. --*/
-  MP3_WINDOW_TYPE winTypeOld[MAX_CHANNELS];
-  
-  /*-- Window sequence of previous frame (source stream). --*/
-  uint32 winTypeIdx;
-  MP3_WINDOW_TYPE *winTypeCurrentFrame;
-  MP3_WINDOW_TYPE *winTypePreviousFrame;
-  MP3_WINDOW_TYPE *winTypePrt[MAX_CHANNELS];
-  MP3_WINDOW_TYPE _winTypeOld1[2 * MAX_CHANNELS];
-  MP3_WINDOW_TYPE _winTypeOld2[2 * MAX_CHANNELS];
-
-  /*-- Overlap buffer for MDCT. --*/
-  FLOAT** L3EncOverlapBuf;//[MAX_CHANNELS][MAX_MONO_SAMPLES];
-  FLOAT* L3EncOverlapBufMem;
-
-  /*-- Granule parameters of previous frame. --*/
-  TGranule_Info *grInfoSave[MAX_CHANNELS];
-
-  
-  /*-- Scalefactors of previous frame. --*/
-  CIII_Scale_Factors *scaleFacSave[MAX_CHANNELS];
-
-  /*-- Spectrum limit of previous frame. --*/
-  int16 specBinsPresent;
-
-  /*-- Scalefactor selection information of previous frame. --*/
-  BOOL IsScfsi;
-  uint8 scfsi[2][4];
-  
-  /*-- Number of bits unused (bit reservoir). --*/
-  uint32 bitPool;
- 
-  /*-- Level adjustment for the spectrum to be mixed. --*/
-  FLOAT mixGain;
-  
-  /*-- Level adjustment for the mixed spectrum. --*/
-  FLOAT overallGain;
-
-  /*-- Level adjustment for the global gain. --*/
-  int16 gainDec;
-
-  /*-- Number of spectral bins to be mixed. --*/
-  int16 mixSpectralBins;
-
-
-  /*-------- Bitrate related parameters. --------*/
-  
-  /*-- Bytes reserved for side info. --*/
-  int16 sideInfoBytes;
-
-  /*-- Bitrate mappings. --*/
-  BOOL needVBR;
-  uint32 brIdx;
-  TL3BitRate *l3br;
-  TL3BitRate *_l3br[2];
-  TL3BitRate l3brLong;
-  TL3BitRate l3brShort;
-  uint32 numFramesLong;
-  uint32 numFramesShort;
-
-  /*-- # of bytes reserved for the payload part of current frame. --*/
-  int16 nSlots;
-  
-  /*-- 'main_data_begin' for next frame. --*/
-  int16 main_data_begin;
-  
-  /*-- Max value of 'main_data_begin'. --*/
-  int16 max_br_value;
-  
-};
-
-
-/*
-   Purpose:     Stream seeking constants.
-   Explanation: - */
-typedef enum StreamPos
-{
-  CURRENT_POS,
-  START_POS,
-  END_POS
-
-} StreamPos;
-
-/*
-   Purpose:     Parameters of core engine.
-   Explanation: - */
-class CMP_Stream : public CBase
-{
-
-public:
-  /*-- Common to all layers. --*/
-  TBitStream *bs;
-  TMPEG_Header *header;
-  TMPEG_Header headerOld;
-  TMPEG_Frame *frame;
-  TMPEG_Buffer *buffer;
-  TSyncInfoMix syncInfo;
-  TMP_BrInfo brInfo;
-  TCRC_Check mp3_crc;
-
-  /*-- Layer III specific parameters. --*/
-  TBitStream *br;
-  CIII_Side_Info *side_info;
-  CHuffman *huffman;
-  FLOAT *spectrum[MAX_CHANNELS][SBLIMIT];
-  uint16 OverlapBufPtr[MAX_CHANNELS];
-  FLOAT OverlapBlck[2][MAX_CHANNELS][MAX_MONO_SAMPLES];
-  /*
-    Purpose:     Indices for reordering the short blocks.
-    Explanation: First row describes the destination and second row 
-                 the source index. */
-  int16 reorder_idx[2][MAX_MONO_SAMPLES];
-  
-  /*-- Common complexity reduction and output stream parameters. --*/
-  Out_Complexity *complex;
-  Out_Param *out_param;
-
-  int16 idx_increment;
-  int16 FreeFormatSlots;
-  int16 PrevSlots;
-  int32 FrameStart;
-  BOOL SkipBr;
-  BOOL WasSeeking;
-  int16 SlotTable[15];
-  int16 FrameTable[15];
-  int32 PrevStreamInfo[2];
-
-  
-};
-
-
-BOOL InitBrInfo(CMP_Stream *mp, TMP_BrInfo *brInfo);
-inline void SetBitrate(CMP_Stream *mp, int16 br)
-{ mp->brInfo.cum_br += br; mp->brInfo.cum_frames++; }
-BOOL CountAveBr(CMP_Stream *mp, TBitStream *bs_mcu, TMP_BrInfo *brInfo);
-void FinishAveBr(TMP_BrInfo *brInfo, BOOL FullCount);
-
-/* Implementations defined in module 'mstream.cpp'. */
-CMP_Stream *GetMP3HandleL(void);
-void ReleaseMP3Decoder(CMP_Stream *mp);
-int32 main_data_slots(CMP_Stream *mp);
-void decode_header(CMP_Stream *mp, TBitStream *bs);
-void  MP3DecPrepareInit(CMP_Stream *mp, Out_Param *out_param, 
-            Out_Complexity *complex, DSP_BYTE *br_buffer, 
-            uint32 br_size);
-void MP3DecCompleteInit(CMP_Stream *mp, int16 *frameBytes);
-
-/* Implementations defined in module 'mp3.cpp'. */
-SEEK_STATUS FreeFormat(CMP_Stream *mp, TBitStream *bs_mcu, 
-               ExecState *execState, int16 *nSlots);
-SEEK_STATUS SeekSync(CMP_Stream *mp, TBitStream *bs_mcu, 
-             ExecState *execState, int16 *frameBytes);
-void ReInitEngine(CMP_Stream *mp);
-void ResetEngine(CMP_Stream *mp);
-MP3_Error DecodeFrame(CMP_Stream *mp, int16 *pcm_sample, int16 idx_increment);
-int16 L3BitReservoir(CMP_Stream *mp);
-
-/* Implementations defined in module 'sfb.cpp'. */
-void III_SfbDataInit(CIII_SfbData *sfbData, TMPEG_Header *header);
-void III_BandLimit(CIII_SfbData *sfbData, uint16 binLimit);
-
-
-/*
- * Low level implementations for the mp3 engine. 
- */
-
-/* Implementations defined in module 'layer3.cpp'. */
-BOOL III_get_side_info(CMP_Stream *mp, TBitStream *bs);
-void III_get_scale_factors(CMP_Stream *mp, int16 gr, int16 ch);
-void init_III_reorder(int16 reorder_idx[2][MAX_MONO_SAMPLES],
-              int16 *sfb_table, int16 *sfb_width_table);
-void III_reorder(CMP_Stream *mp, int16 ch, int16 gr);
-
-/* Implementations defined in module 'mp3_q.cpp'. */
-void III_dequantize(CMP_Stream *mp, int16 gr);
-
-/* Implementations defined in module 'stereo.cpp'. */
-void III_stereo_mode(CMP_Stream *mp, int16 gr);
-
-/* Implementations defined in module 'huffman.cpp'. */
-int16 III_huffman_decode(CMP_Stream *mp, int16 gr, int16 ch, int32 part2);
-void
-pairtable(CMP_Stream *mp, int16 section_length, int16 table_num, int16 *quant);
-int16
-quadtable(CMP_Stream *mp, int16 start, int16 part2, int16 table_num, int16 *quant,
-          int16 max_sfb_bins);
-
-void init_huffman(CHuffman *h);
-
-/*-- Include encoder interface. --*/
-#ifdef L3ENC
-//#include "l3enc.h"
-#endif /*-- L3ENC --*/
-
-#endif /* MP_STREAM_H_ */