--- a/videoeditorengine/mp3aacManipLib/src/mstream.cpp Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,565 +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:
-*
-*/
-
-
-/**************************************************************************
- External Objects Needed
- *************************************************************************/
-
-/*-- Project Headers --*/
-#include "mstream.h"
-#include "mpheader.h"
-#include "mp3Tool.h"
-
-
-
-CIII_Channel_Info* CIII_Channel_Info::NewL()
- {
-
-
- CIII_Channel_Info* self = new (ELeave) CIII_Channel_Info();
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-void CIII_Channel_Info::ConstructL()
- {
-
- }
-
-CIII_Channel_Info::CIII_Channel_Info()
- {
-
-
- }
-
-CIII_Channel_Info::~CIII_Channel_Info()
- {
-
-
- }
-
-
-CIII_SfbData* CIII_SfbData::NewL()
- {
-
- CIII_SfbData* self = new (ELeave) CIII_SfbData();
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-void CIII_SfbData::ConstructL()
- {
- sfbOffsetLong = new (ELeave) int16[MAX_LONG_SFB_BANDS + 1];
- sfbOffsetShort = new (ELeave) int16[MAX_SHORT_SFB_BANDS + 1];
- sfbWidthShort = new (ELeave) int16[MAX_SHORT_SFB_BANDS + 1];
- }
-
-CIII_SfbData::CIII_SfbData()
- {
-
-
- }
-
-CIII_SfbData::~CIII_SfbData()
- {
- if (sfbOffsetLong != 0) delete[] sfbOffsetLong;
- if (sfbOffsetShort != 0) delete[] sfbOffsetShort;
- if (sfbWidthShort != 0) delete[] sfbWidthShort;
-
- }
-
-CIII_Side_Info* CIII_Side_Info::NewL()
- {
-
- CIII_Side_Info* self = new (ELeave) CIII_Side_Info();
- CleanupStack::PushL(self);
- self->ConstructL();
- CleanupStack::Pop(self);
- return self;
- }
-
-void CIII_Side_Info::ConstructL()
- {
- sfbData = GET_SYMBIAN_CHUNK(CIII_SfbData);
-
- }
-
-CIII_Side_Info::CIII_Side_Info()
- {
-
- }
-
-CIII_Side_Info::~CIII_Side_Info()
- {
- if (sfbData != 0) SAFE_SYMBIAN_DELETE(sfbData);
-
- }
-
-CMCUBuf* CMCUBuf::NewL(TInt aBufLen)
- {
-
- CMCUBuf* self = new (ELeave) CMCUBuf();
- CleanupStack::PushL(self);
- self->ConstructL(aBufLen);
- CleanupStack::Pop(self);
- return self;
- }
-
-void CMCUBuf::ConstructL(TInt aBufLen)
- {
-
- bs = new (ELeave) TBitStream();
-
- mcuBufbits = new (ELeave) uint8[aBufLen];
-
-
- }
-
-CMCUBuf::CMCUBuf()
- {
-
- }
-
-CMCUBuf::~CMCUBuf()
- {
-
- if (bs != 0) delete bs;
- if (mcuBufbits != 0)
- {
- delete[] mcuBufbits;
- mcuBufbits = 0;
- }
-
- }
-
-/**************************************************************************
- Title : decode_header
-
- Purpose : Reads header information (excluding syncword) from the bitstream.
-
- Usage : decode_header(mp)
-
- Input : mp - mp3 bitstream parameters
-
- Explanation : Header information is commmon to all layers. Note also that
- this function doesn't interprete the fields of the header.
-
- Author(s) : Juha Ojanpera
- *************************************************************************/
-
-void
-decode_header(CMP_Stream *mp, TBitStream *bs)
-{
- uint32 header;
-
- mp->headerOld.header = mp->header->header;
- header = (!mp->side_info->mpeg25) << HEADER_BITS;
- header |= BsGetBits(bs, HEADER_BITS);
- mp->header->header = header;
-
- /*-- Store the header bits 16-31 for CRC error checking. --*/
- mp->mp3_crc.crc_payload[0] = (uint8)((header >> 8) & 255);
- mp->mp3_crc.crc_payload[1] = (uint8) (header & 255);
-
- if(error_protection(mp->header))
- mp->mp3_crc.crc = (int16)(BsGetBits(bs, 16));
-}
-
-/**************************************************************************
- Title : FillDataSlotTable
-
- Purpose : Pre-computes (to avoid division operation during decoding)
- the payload size of layer III for all bitrates.
-
- Usage : y = FillDataSlotTable(mp)
-
- Input : mp - mp3 stream parameters
-
- Author(s) : Juha Ojanpera
- *************************************************************************/
-
-void
-FillDataSlotTable(CMP_Stream *mp)
-{
- const int16 *brTbl;
- int16 nSlots;
-
- brTbl = GetBitRateTable(mp->header);
- /*
- * index 0 is free format and index 14 illegal bitrate.
- */
- for(int16 i = 1; i < 15; i++)
- {
- nSlots = (int16)((144 * brTbl[i]) / (frequency(mp->header) / 1000.0f));
-
- if(version(mp->header) == MPEG_PHASE2_LSF)
- nSlots >>= 1;
-
- mp->FrameTable[i] = nSlots;
-
- nSlots = (int16)(nSlots - (GetSideInfoSlots(mp->header) + 4));
- mp->SlotTable[i] = nSlots;
- }
-}
-
-/**************************************************************************
- Title : main_data_slots
-
- Purpose : Computes the number of bytes for the layer III payload. The
- payload consists of the scalefactors and quantized data of
- the channel(s).
-
- Usage : y = main_data_slots(mp)
-
- Input : mp - mp3 stream parameters
-
- Output : y - # of payload bytes for this frame
-
- Author(s) : Juha Ojanpera
- *************************************************************************/
-
-int32
-main_data_slots(CMP_Stream *mp)
-{
- int16 nSlots;
-
- if(bit_rate(mp->header))
- {
- nSlots = mp->SlotTable[bit_rate_idx(mp->header)];
-
- if(padding(mp->header))
- nSlots++;
- if(error_protection(mp->header))
- nSlots -= 2;
- }
- else
- {
- nSlots = mp->FreeFormatSlots;
-
- if(padding(mp->header))
- nSlots++;
- }
-
- return(nSlots);
-}
-
-/**************************************************************************
- Title : ReleaseMP3Decoder
-
- Purpose : Releases resources allocated to the mp3 decoder core.
-
- Usage : ReleaseMP3Decoder(mp)
-
- Input : mp - mp3 decoder core
-
- Author(s) : Juha Ojanpera
- *************************************************************************/
-
-void
-ReleaseMP3Decoder(CMP_Stream *mp)
- {
- int16 i, j;
-
- if(mp)
- {
- /* Scalefactors. */
- SAFE_DELETE(mp->frame->scale_factors);
-
- /* Quantized samples. */
- SAFE_DELETE(mp->frame->quant);
-
- /* Synthesis buffer. */
- for(i = 0; i < MAX_CHANNELS; i++)
- {
- SAFE_DELETE(mp->buffer->synthesis_buffer[i]);
- }
-
-
- /* Dequantized samples. */
- SAFE_DELETE(mp->buffer->reconstructed);
-
- /* Huffman codebooks. */
- SAFE_DELETE(mp->huffman);
-
- if(mp->side_info)
- {
- for(i = 0; i < MAX_CHANNELS; i++)
- {
- SAFE_DELETE(mp->side_info->ch_info[i]->scale_fac);
-
- for(j = 0; j < 2; j++)
- {
- SAFE_DELETE(mp->side_info->ch_info[i]->gr_info[j]);
- }
-
-
- SAFE_SYMBIAN_DELETE(mp->side_info->ch_info[i]);
- }
-
- SAFE_DELETE(mp->side_info->s_mode_long);
-
- for(i = 0; i < 3; i++)
- {
- SAFE_DELETE(mp->side_info->s_mode_short[i]);
- }
-
-
- SAFE_SYMBIAN_DELETE(mp->side_info);
- }
-
- SAFE_DELETE(mp->header);
- SAFE_DELETE(mp->frame);
- SAFE_DELETE(mp->buffer);
- SAFE_DELETE(mp->br);
-// SAFE_DELETE(mp->bs);
- }
- }
-
-/**************************************************************************
- Title : GetMP3Handle
-
- Purpose : Returns mp3 decoder core handle to the callee.
-
- Usage : GetMP3Handle()
-
- Output : mp - handle of mp3 decoder core
-
- Author(s) : Juha Ojanpera
- *************************************************************************/
-
-CMP_Stream *
-GetMP3HandleL(void)
-{
- int16 i, j, groups, idx[] = {0, 23, 36, 49, 62, 85, 98, 111};
- CIII_Scale_Factors *scale_fac;
- CMP_Stream *mp;
-
- //mp = (CMP_Stream *) GET_CHUNK(sizeof(CMP_Stream));
-
- mp = new (ELeave) CMP_Stream();
- IS_ERROR(mp);
-
-
-
- //mp->bs = (TBitStream *) GET_CHUNK(sizeof(TBitStream));
- //IS_ERROR(mp->bs);
-
- mp->header = (TMPEG_Header *) GET_CHUNK(sizeof(TMPEG_Header));
- IS_ERROR(mp->header);
-
- mp->frame = (TMPEG_Frame *) GET_CHUNK(sizeof(TMPEG_Frame));
- IS_ERROR(mp->frame);
-
- mp->buffer = (TMPEG_Buffer *) GET_CHUNK(sizeof(TMPEG_Buffer));
- IS_ERROR(mp->buffer);
-
- mp->side_info = (CIII_Side_Info *) GET_SYMBIAN_CHUNK(CIII_Side_Info);
- IS_ERROR(mp->side_info);
-
- mp->frame->scale_factors = (uint8 *) GET_CHUNK(MAX_CHANNELS * SBLIMIT * 3 * sizeof(uint8));
- Mem::FillZ (mp->frame->scale_factors, MAX_CHANNELS * SBLIMIT * 3 * sizeof(uint8));
-
- IS_ERROR(mp->frame->scale_factors);
-
- mp->huffman = (CHuffman *) GET_CHUNK(33 * sizeof(CHuffman));
- IS_ERROR(mp->huffman);
-
- mp->br = (TBitStream *) GET_CHUNK(sizeof(TBitStream));
- IS_ERROR(mp->br);
-
- Mem::Fill(mp->PrevStreamInfo, sizeof(uint32) * 2, 0);
-
- for(i = 0; i < MAX_CHANNELS; i++)
- {
- //mp->side_info->ch_info[i] = (CIII_Channel_Info *) GET_CHUNK(sizeof(CIII_Channel_Info));
- mp->side_info->ch_info[i] = GET_SYMBIAN_CHUNK(CIII_Channel_Info);
- IS_ERROR(mp->side_info->ch_info[i]);
- for(j = 0; j < 2; j++)
- {
- mp->side_info->ch_info[i]->gr_info[j] = (TGranule_Info *) GET_CHUNK(sizeof(TGranule_Info));
- IS_ERROR(mp->side_info->ch_info[i]->gr_info[j]);
- }
- }
-
- mp->side_info->s_mode_long = (StereoMode *) GET_CHUNK(22 * sizeof(StereoMode));
- IS_ERROR(mp->side_info->s_mode_long);
- for(i = 0; i < 3; i++)
- {
- mp->side_info->s_mode_short[i] = (StereoMode *) GET_CHUNK(13 * sizeof(StereoMode));
- IS_ERROR(mp->side_info->s_mode_short[i]);
- }
-
- for(i = j = 0; i < MAX_CHANNELS; i++)
- {
- mp->side_info->ch_info[i]->scale_fac = (CIII_Scale_Factors *) GET_CHUNK(sizeof(CIII_Scale_Factors));
- IS_ERROR(mp->side_info->ch_info[i]->scale_fac);
- scale_fac = mp->side_info->ch_info[i]->scale_fac;
-
- scale_fac->scalefac_long = mp->frame->scale_factors + idx[j++];
- scale_fac->scalefac_short[0] = mp->frame->scale_factors + idx[j++];
- scale_fac->scalefac_short[1] = mp->frame->scale_factors + idx[j++];
- scale_fac->scalefac_short[2] = mp->frame->scale_factors + idx[j++];
- }
-
- groups = MAX_MONO_SAMPLES * MAX_CHANNELS;
-
- TInt a = 0;
- mp->frame->quant = (int16 *) GET_CHUNK((groups + 10) * sizeof(int16));
- for (a = 0 ; a < groups ; a++) mp->frame->quant[a] = 0;
-
- IS_ERROR(mp->frame->quant);
-
- mp->buffer->reconstructed = (FLOAT *) GET_CHUNK(groups * sizeof(FLOAT));
- IS_ERROR(mp->buffer->reconstructed);
- for (a = 0 ; a < groups ; a++) mp->buffer->reconstructed[a] = 0;
-
- for(i = 0; i < MAX_CHANNELS; i++)
- {
- mp->frame->ch_quant[i] = mp->frame->quant + i * MAX_MONO_SAMPLES;
- mp->buffer->ch_reconstructed[i] = mp->buffer->reconstructed + i * MAX_MONO_SAMPLES;
- for(j = 0; j < SBLIMIT; j++)
- mp->spectrum[i][j] = &mp->buffer->ch_reconstructed[i][j * SSLIMIT];
- }
-
- for(i = 0; i < MAX_CHANNELS; i++)
- {
- mp->buffer->buf_idx[i] = mp->buffer->dct_idx[i] = 0;
- mp->buffer->synthesis_buffer[i] = (FLOAT *) GET_CHUNK((HAN_SIZE << 1) * sizeof(FLOAT));
- IS_ERROR(mp->buffer->synthesis_buffer[i]);
- }
-
- //-- Get the Huffman codebooks. --
- //init_huffman(mp->huffman);
- InitL3Huffman(mp->huffman);
- return (mp);
-
-// error_exit:
-
- //ReleaseMP3Decoder(mp);
-
- //return (NULL);
-}
-
-/**************************************************************************
- Title : MP3DecPrepareInit
-
- Purpose : Prepares the core engine parameters for the search of
- first mp3 frame.
-
- Usage : MP3DecPrepareInit(mp, out_param, complex, br_buffer, br_size)
-
- Input : mp - handle of mp3 decoder core
- out_param - output parameters of current track
- complex - decoding complexity parameters
- br_buffer - address of bit reservoir buffer
- br_size - size of bit reservoir buffer
-
- Author(s) : Juha Ojanpera
- *************************************************************************/
-
-void
-MP3DecPrepareInit(CMP_Stream *mp, Out_Param *out_param, Out_Complexity *complex,
- DSP_BYTE *br_buffer, uint32 br_size)
-{
- mp->complex = complex;
- mp->out_param = out_param;
-
- BsInit2(mp->br, br_buffer, br_size);
-
- mp->mp3_crc.crc = 0;
-
- mp->header->header = 0;
-
- mp->syncInfo.sync_word = (int16)SYNC_WORD;
- mp->syncInfo.sync_length = (int16)SYNC_WORD_LENGTH;
- mp->syncInfo.sync_mask = (int16)((1 << mp->syncInfo.sync_length) - 1);
- mp->syncInfo.sync_status = FIRST_FRAME_WITH_LAYER3;
-
- mp->FreeFormatSlots = 0;
- mp->idx_increment = 0;
- mp->PrevSlots = 0;
- mp->FrameStart = 0;
- mp->SkipBr = FALSE;
- mp->WasSeeking = FALSE;
- mp->OverlapBufPtr[0] = mp->OverlapBufPtr[1] = 0;
-}
-
-/**************************************************************************
- Title : MP3DecCompleteInit
-
- Purpose : Completes the initialization of the core engine parameters.
-
- Usage : MP3DecPrepareInit(mp, frameBytes)
-
- Input : mp - handle of mp3 decoder core
-
- Output : frameBytes - # of bytes for the first frame
-
- Author(s) : Juha Ojanpera
- *************************************************************************/
-
-void
-MP3DecCompleteInit(CMP_Stream *mp, int16 *frameBytes)
-{
- //-- Fixed size (unit is bytes !!). --
- mp->mp3_crc.bufLen = (uint16)(2 + GetSideInfoSlots(mp->header));
-
- //-- MPEG-1 --/
- if(version(mp->header) == MPEG_AUDIO_ID)
- {
- mp->side_info->lsf = FALSE;
- mp->side_info->max_gr = 2;
- }
- //-- MPEG-2 LSF or MPEG-2.5 --
- else
- {
- mp->side_info->lsf = TRUE;
- mp->side_info->max_gr = 1;
- }
-
- //-- Determine the size of the payload only when necessary. --/
- if(bit_rate(mp->header))
- {
- mp->FreeFormatSlots = 0;
-
- if((int32)(frequency(mp->header) != mp->PrevStreamInfo[0]) ||
- (int32)(channels(mp->header) != mp->PrevStreamInfo[1]))
- FillDataSlotTable(mp);
- }
- else FillDataSlotTable(mp);
-
- mp->PrevStreamInfo[0] = frequency(mp->header);
- mp->PrevStreamInfo[1] = channels(mp->header);
-
- //-- Get the scalefactor band related parameters. --/
- III_SfbDataInit(mp->side_info->sfbData, mp->header);
-
- //-- Init re-ordering table. --//
- init_III_reorder(mp->reorder_idx, mp->side_info->sfbData->sfbShort,
- mp->side_info->sfbData->sfbWidth);
-
- //-- Number of bytes for next frame. --/
- *frameBytes = (int16)(main_data_slots(mp) + GetSideInfoSlots(mp->header) + 3);
- if(error_protection(mp->header))
- *frameBytes += 2;
-}