videoeditorengine/mp3aacManipLib/MP3Gain/src/mpaud.cpp
changeset 0 951a5db380a0
--- /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);
+}