diff -r 951a5db380a0 -r e0b5df5c0969 videoeditorengine/mp3aacManipLib/src/Mp3API.cpp --- a/videoeditorengine/mp3aacManipLib/src/Mp3API.cpp Fri Jan 29 14:08:33 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,409 +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: -* -*/ - - - -#include "Mp3API.h" -#include "mpif.h" -#include "mpaud.h" -#include "mpheader.h" -#include "mp3tool.h" - - - - -// Exception handler for FLOATS -void handler(TExcType /*aType*/) -{ -#ifndef __WINS__ -// CMp3Mix::WriteL(_L("Exception cought!!!")); -#endif - -} - -//const int16 Kmp3BufSize = 8; - -EXPORT_C CMp3Edit* CMp3Edit::NewL() - { - - CMp3Edit* self = new (ELeave) CMp3Edit(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - } - -void CMp3Edit::ConstructL() - { - - } - - -EXPORT_C CMp3Edit::~CMp3Edit() - { - - } - -CMp3Edit::CMp3Edit() - { - - } - - -EXPORT_C uint32 -CMp3Edit::FileLengthInMs(TMpTransportHandle *tHandle, int32 fileSize) const - { - return MP_FileLengthInMs(tHandle, fileSize); - } - -EXPORT_C int32 -CMp3Edit::GetSeekOffset(TMpTransportHandle *tHandle, int32 seekPos) const - { - return MP_GetSeekOffset(tHandle, seekPos); - } - -EXPORT_C int32 -CMp3Edit::GetFrameTime(TMpTransportHandle *tHandle) const - { - return MP_GetFrameTime(tHandle); - } - -EXPORT_C void -CMp3Edit::InitTransport(TMpTransportHandle *tHandle) const - { - - mpInitTransport(tHandle); - } - -EXPORT_C int16 -CMp3Edit::SeekSync(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, int16 *readBytes, - int16 *frameBytes, int16 *headerBytes, - uint8 initMode) const - - { - - return MP_SeekSync(tHandle, syncBuf, - syncBufLen, readBytes, - frameBytes, headerBytes, - initMode); - } - -EXPORT_C int16 -CMp3Edit::FreeMode(TMpTransportHandle *tHandle, uint8 *syncBuf, - uint32 syncBufLen, int16 *readBytes, - int16 *frameBytes, int16 *headerBytes) const - { - return MP_FreeMode(tHandle, syncBuf, - syncBufLen, readBytes, - frameBytes, headerBytes); - } - -EXPORT_C int16 -CMp3Edit::EstimateBitrate(TMpTransportHandle *tHandle, uint8 isVbr) const - { - return MP_EstimateBitrate(tHandle, isVbr) ; - - } - - - -/* - * Saves modified 'global_gain' bitstream elements to specified layer I/II/III data buffer. - */ -EXPORT_C void -CMp3Edit::SetMPGlobalGains(TBitStream *bs, uint8 numGains, uint8 *globalGain, uint32 *gainPos) -{ - int16 i; - - /*-- Store the gain element back to bitstream. --*/ - for(i = 0; i < numGains; i++) - { - BsSkipNBits(bs, gainPos[i]); - BsPutBits(bs, 8, globalGain[i]); - } -} - - - -EXPORT_C uint8 -CMp3Edit::GetMPGlobalGains(TBitStream *bs, TMpTransportHandle *tHandle, uint8 *globalGain, uint32 *gainPos) -{ - uint32 bufBitOffset; - uint8 numGains, nVersion, nChannels; - - numGains = 0; - nVersion = (uint8) version(&tHandle->header); - nChannels =(uint8) channels(&tHandle->header); - - bufBitOffset = BsGetBitsRead(bs); - - /*-- Get the gain for each channel and granule. --*/ - switch(nVersion) - { - /*-- MPEG-1. --*/ - case 1: - switch(nChannels) - { - /* - * Mono frame consists of 2 granules. - */ - case 1: - numGains = 2; - - /*-- Left channel, granules 0 and granule 1. --*/ - BsSkipNBits(bs, 0x27); - gainPos[0] = BsGetBitsRead(bs) - bufBitOffset; - globalGain[0] = (uint8) BsGetBits(bs, 8); - BsSkipNBits(bs, 0x33); - gainPos[1] = 0x33; - globalGain[1] = (uint8) BsGetBits(bs, 8); - break; - - /* - * Two channels, 2 granules. - */ - case 2: - numGains = 4; - - /*-- Left and right channel, granule 0. --*/ - BsSkipNBits(bs, 0x29); - gainPos[0] = BsGetBitsRead(bs) - bufBitOffset; - globalGain[0] = (uint8) BsGetBits(bs, 8); - BsSkipNBits(bs, 0x33); - gainPos[1] = 0x33; - globalGain[1] = (uint8) BsGetBits(bs, 8); - - /*-- Left and right channel, granule 1. --*/ - BsSkipNBits(bs, 0x33); - gainPos[2] = 0x33; - globalGain[2] = (uint8) BsGetBits(bs, 8); - BsSkipNBits(bs, 0x33); - gainPos[3] = 0x33; - globalGain[3] = (uint8) BsGetBits(bs, 8); - break; - } - break; - - /*-- MPEG-2 LSF and MPEG-2.5. --*/ - default: - switch(nChannels) - { - /* - * Mono channel, 1 granule. - */ - case 1: - numGains = 1; - BsSkipNBits(bs, 0x1E); - gainPos[0] = BsGetBitsRead(bs) - bufBitOffset; - globalGain[0] = (uint8) BsGetBits(bs, 8); - break; - - /* - * Two channels, 1 granule. - */ - case 2: - numGains = 2; - BsSkipNBits(bs, 0x1F); - gainPos[0] = BsGetBitsRead(bs) - bufBitOffset; - globalGain[0] = (uint8) BsGetBits(bs, 8); - BsSkipNBits(bs, 0x37); - gainPos[1] = 0x37; - globalGain[1] = (uint8) BsGetBits(bs, 8); - break; - } - break; - } - - - return (numGains); -} - -EXPORT_C CMPAudDec* CMPAudDec::NewL() - { - CMPAudDec* self = new (ELeave) CMPAudDec(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - - - } - -CMPAudDec::CMPAudDec() - { - - - } - -EXPORT_C CMPAudDec::~CMPAudDec() - { - - - int16 i; - - /* --Scalefactors. --*/ - if (frame->scale_factors != 0) delete[] frame->scale_factors; - - /*-- Quantized samples. --*/ - if (frame->quant != 0) delete[] frame->quant; - - /*-- Huffman codebooks. --*/ - if (huffman != 0) delete[] huffman; - - /*-- Layer III side info. --*/ - if(side_info) - { - for(i = 0; i < MAX_CHANNELS; i++) - { - int16 j; - - if(side_info->ch_info[i]) - { - if (side_info->ch_info[i]->scale_fac != 0) delete side_info->ch_info[i]->scale_fac; - - for(j = 0; j < 2; j++) - if (side_info->ch_info[i]->gr_info[j] != 0) delete side_info->ch_info[i]->gr_info[j]; - } - if (side_info->ch_info[i] != 0) delete side_info->ch_info[i]; - } - - if (side_info->s_mode_long != 0) delete[] side_info->s_mode_long; - - for(i = 0; i < 3; i++) - if (side_info->s_mode_short[i] != 0) delete[] side_info->s_mode_short[i]; - - if (side_info != 0) delete side_info; - } - - if (frame != 0) delete frame; - if (bitReserv != 0) delete[] bitReserv; - - - - } - -void CMPAudDec::ConstructL() - { - - int16 i, j, groups; - - /*-- Create handle. --*/ - - /*-- Create bit reservoir buffer. --*/ - bitReserv = new (ELeave) uint8[4 * MAX_BITRESER_SIZE]; - ZERO_MEMORY(bitReserv, 4 * MAX_BITRESER_SIZE * sizeof(uint8)); - - BsInit(&br, bitReserv, 4 * MAX_BITRESER_SIZE); - - /*-- Create frame parameters. --*/ - frame = new (ELeave) TMPEG_Frame; - - /*-- Create side info parameters. --*/ - side_info = CIII_Side_Info::NewL(); - - /*-- Create scalefactors. --*/ - frame->scale_factors = new (ELeave) uint8[MAX_CHANNELS * SBLIMIT * 3]; - ZERO_MEMORY(frame->scale_factors, MAX_CHANNELS * SBLIMIT * 3 * sizeof(uint8)); - - - /*-- Create L3 side info. --*/ - for(i = 0; i < MAX_CHANNELS; i++) - { - - side_info->ch_info[i] = CIII_Channel_Info::NewL(); - - for(j = 0; j < 2; j++) - { - side_info->ch_info[i]->gr_info[j] = new (ELeave) TGranule_Info; - - } - } - - side_info->s_mode_long = new (ELeave) StereoMode[22]; - - ZERO_MEMORY(side_info->s_mode_long, 22 * sizeof(StereoMode)); - - for(i = 0; i < 3; i++) - { - side_info->s_mode_short[i] = new (ELeave) StereoMode[13]; //GET_CHUNK(13 * sizeof(StereoMode)); - ZERO_MEMORY(side_info->s_mode_short[i], 13 * sizeof(StereoMode)); - } - - /*-- Initialize scalefactors. --*/ - for(i = j = 0; i < MAX_CHANNELS; i++) - { - uint8 idx[] = {0, 23, 36, 49, 62, 85, 98, 111}; - - CIII_Scale_Factors *scale_fac; - - side_info->ch_info[i]->scale_fac = new (ELeave) CIII_Scale_Factors(); - - scale_fac = side_info->ch_info[i]->scale_fac; - - scale_fac->scalefac_long = frame->scale_factors + idx[j++]; - scale_fac->scalefac_short[0] = frame->scale_factors + idx[j++]; - scale_fac->scalefac_short[1] = frame->scale_factors + idx[j++]; - scale_fac->scalefac_short[2] = frame->scale_factors + idx[j++]; - } - - groups = MAX_MONO_SAMPLES * MAX_CHANNELS; - - /*-- Create buffer for quantized samples. --*/ - frame->quant = new (ELeave) int16[groups + 10];//(int16 *) GET_CHUNK((groups + 10) * sizeof(int16)); - - ZERO_MEMORY(frame->quant, (groups + 10) * sizeof(int16)); - - for(i = 0; i < MAX_CHANNELS; i++) - frame->ch_quant[i] = frame->quant + i * MAX_MONO_SAMPLES; - - /*-- Create Huffman handle. --*/ - huffman = new (ELeave) CHuffman[33];// *) GET_CHUNK(33 * sizeof(CHuffman)); - - /*-- Get the Huffman codebooks. --*/ - InitL3Huffman(huffman); - - } - - /*-- Initializes MPEG Layer I/II/III decoder handle. --*/ -EXPORT_C void -CMPAudDec::Init(TMpTransportHandle *aMpFileFormat) -{ - mpFileFormat = aMpFileFormat; - - /*-- MPEG-1 --*/ - if(version(&mpFileFormat->header) == MPEG_AUDIO_ID) - { - side_info->lsf = FALSE; - side_info->max_gr = 2; - } - - /*-- MPEG-2 LSF or MPEG-2.5 --*/ - else - { - side_info->lsf = TRUE; - side_info->max_gr = 1; - } - - /*-- Get the scalefactor band related parameters. --*/ - III_SfbDataInit(side_info->sfbData, &mpFileFormat->header); -} - - -