diff -r 000000000000 -r 951a5db380a0 videoeditorengine/mp3aacManipLib/MP3Gain/src/mpaud.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/videoeditorengine/mp3aacManipLib/MP3Gain/src/mpaud.cpp Fri Jan 29 14:08:33 2010 +0200 @@ -0,0 +1,165 @@ +/* +* 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: +* +*/ + + +/************************************************************************** + mpaud.cpp - MPEG-1, MPEG-2 LSF and MPEG-2.5 layer III bitstream decoder. + + Author(s): Juha Ojanpera + Copyright (c) 1999-2004 by Nokia Research Center, Speech and Audio Systems. + *************************************************************************/ + +/*-- project headers --*/ +#include "mpaud.h" +#include "mpheader.h" +#include "mp3tool.h" + +/************************************************************************** + Internal Objects + *************************************************************************/ + +/************************************************************************** + Title : L3BitReservoir + + Purpose : Layer III bit reservoir subroutine. + + Usage : y = L3BitReservoir(mp) + + Input : mp - mp3 stream parameters + + Output : y - # of bytes discarded from the bit reservoir buffer. + Value -1 indicates that an error has occured during + decoding (invalid bitstream syntax found) + + Explanation : Return value -1 should be regarded as a fatal error in the + sense that decoding of current frame should not be continued. + Instead, the decoder should be re-initialized. + + Author(s) : Juha Ojanpera + *************************************************************************/ + +INLINE int16 +L3BitReservoir(CMPAudDec *mp) +{ + int16 bytes_to_discard; + int16 flush_main; + int32 bits_read; + TBitStream *br; + + br = &mp->br; + + /*------------ Start of bit reservoir processing. ------------------*/ + + if(mp->WasSeeking == FALSE) + { + /*-- Byte alignment. --*/ + bits_read = BsGetBitsRead(br); + flush_main = (int16) (bits_read & 7); + if(flush_main) + BsSkipBits(br, (int16) (8 - flush_main)); + + /* + * Determine how many bits were left from the previous frame. + */ + if(mp->SkipBr == FALSE) + { + BsClearBitsRead(br); + BsSetBitsRead(br, (mp->PrevSlots << 3) - bits_read); + } + + /* + * Determine how many bytes need to be discarded from the previous + * frame to find the start of next frame. + */ + bytes_to_discard = (int16) ((BsGetBitsRead(br) >> 3) - mp->side_info->main_data_begin); + + /*-- Reset the bit reservoir bit counter. --*/ + BsClearBitsRead(br); + + /*-- # of slots available for this frame. --*/ + mp->PrevSlots = (int16) (mp->mpFileFormat->mainDataSlots + mp->side_info->main_data_begin); + + if(bytes_to_discard < 0) + { + BsClearBitsRead(br); + BsSetBitsRead(br, mp->mpFileFormat->mainDataSlots << 3); + mp->SkipBr = TRUE; + return (-1); + } + + mp->SkipBr = FALSE; + + if(bytes_to_discard) + { + mp->PrevSlots = (int16) (mp->PrevSlots + bytes_to_discard); + BsSkipNBits(br, bytes_to_discard << 3); + } + } + else + { + bytes_to_discard = 0; + + /*-- # of slots available for this frame. --*/ + mp->PrevSlots = (int16) (mp->mpFileFormat->mainDataSlots + mp->side_info->main_data_begin); + + mp->SkipBr = FALSE; + mp->WasSeeking = FALSE; + + if(mp->side_info->main_data_begin) + BsRewindNBits(br, mp->side_info->main_data_begin << 3); + + /*-- Reset the bit reservoir bit counter. --*/ + BsClearBitsRead(br); + } + /*-------------- End of bit reservoir processing. ------------------*/ + + return (bytes_to_discard); +} + +/************************************************************************** + Title : DeleteMPAudDec + + Purpose : Releases resources allocated to the mp3 decoder core. + + Usage : y = DeleteMPAudDec(mpAud) + + Input : mpAud - Layer I/II/III decoder core + + Output : y - NULL + + Author(s) : Juha Ojanpera + *************************************************************************/ + + +INLINE uint8 +GetLayer3Version(TMpTransportHandle *tHandle) +{ + uint8 mp_version; + + /* + * Which version of mp3 ? + */ + if(version(&tHandle->header)) + mp_version = 1; /*-- MPEG-1 --*/ + else if(!mp25version(&tHandle->header)) + mp_version = 2; /*-- MPEG-2 --*/ + else + mp_version = 3; /*-- MPEG-2.5 --*/ + + return (mp_version); +}