videoeditorengine/audioeditorengine/codecs/MP4/src/mp4aud.cpp
changeset 9 d87d32eab1a9
parent 0 951a5db380a0
--- a/videoeditorengine/audioeditorengine/codecs/MP4/src/mp4aud.cpp	Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,330 +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:
-*
-*/
-
-
-/**************************************************************************
-  mp4aud.cpp - MPEG-4 Audio interface to MPEG-4 Systems layer.
-
-  Author(s): Juha Ojanpera
-  Copyright (c) 2001-2004 by Nokia Research Center, Speech and Audio Systems.
-  *************************************************************************/
-
-/*-- Project Headers. --*/
-#include "nok_bits.h"
-#include "mp4aud.h"
-#include "AACAPI.h"
-const int32 sample_rates[] = {
-  96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 
-  11025, 8000, 0, 0, 0, 0
-};
-
-/*
- * Reads program configuration element from the specified bitstream.
- */
-static INLINE int16
-GetPCE(TBitStream *bs, ProgConfig *p, TInt *numChans)
-{
-  int16 i;
-
-  p->tag = (int16) BsGetBits(bs, LEN_TAG);
-  p->profile = (int16) BsGetBits(bs, LEN_PROFILE);
-  p->sample_rate_idx = (int16) BsGetBits(bs, LEN_SAMP_IDX);
-  p->front.num_ele = (int16) BsGetBits(bs, LEN_NUM_ELE);
-  p->side.num_ele = (int16) BsGetBits(bs, LEN_NUM_ELE);
-  p->back.num_ele = (int16) BsGetBits(bs, LEN_NUM_ELE);
-  p->lfe.num_ele = (int16) BsGetBits(bs, LEN_NUM_LFE);
-  p->data.num_ele = (int16) BsGetBits(bs, LEN_NUM_DAT);
-  p->coupling.num_ele = (int16) BsGetBits(bs, LEN_NUM_CCE);
-
-  p->mono_mix.present = (int16) BsGetBits(bs, 1);
-  if(p->mono_mix.present == 1)
-    p->mono_mix.ele_tag = (int16) BsGetBits(bs, LEN_TAG);
-
-  p->stereo_mix.present = (int16) BsGetBits(bs, 1);
-  if(p->stereo_mix.present == 1)
-    p->stereo_mix.ele_tag = (int16) BsGetBits(bs, LEN_TAG);
-
-  p->matrix_mix.present = (int16) BsGetBits(bs, 1);
-  if(p->matrix_mix.present == 1)
-  {
-    p->matrix_mix.ele_tag = (int16) BsGetBits(bs, LEN_MMIX_IDX);
-    p->matrix_mix.pseudo_enab = (int16) BsGetBits(bs, LEN_PSUR_ENAB);
-  }
-
-  for(i = 0; i < p->front.num_ele; i++)
-  {
-    p->front.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE);
-    p->front.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG);
-
-    *numChans += (p->front.ele_is_cpe[i] == 1) ? 2 : 1;
-  }
-
-  for(i = 0; i < p->side.num_ele; i++)
-  {
-    p->side.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE);
-    p->side.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG);
-
-    *numChans += (p->front.ele_is_cpe[i] == 1) ? 2 : 1;
-  }
-
-  for(i = 0; i < p->back.num_ele; i++)
-  {
-    p->back.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE);
-    p->back.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG);
-
-    *numChans += (p->front.ele_is_cpe[i] == 1) ? 2 : 1;
-  }
-
-  for(i = 0; i < p->lfe.num_ele; i++)
-  {
-    *numChans += 1;
-
-    p->lfe.ele_is_cpe[i] = 0;
-    p->lfe.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG);
-  }
-
-  for(i = 0; i < p->data.num_ele; i++)
-  {
-    p->data.ele_is_cpe[i] = 0;
-    p->data.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG);
-  }
-
-  for(i = 0; i < p->coupling.num_ele; i++)
-  {
-    p->coupling.ele_is_cpe[i] = (int16) BsGetBits(bs, LEN_ELE_IS_CPE);
-    p->coupling.ele_tag[i] = (int16) BsGetBits(bs, LEN_TAG);
-  }
-
-  BsByteAlign(bs);
-
-  p->num_comment_bytes = (int16) BsGetBits(bs, LEN_COMMENT_BYTES);
-  for(i = 0; i < p->num_comment_bytes; i++)
-    p->comments[i] = (uint8) BsGetBits(bs, LEN_BYTE);
-  p->comments[i] = 0;
-
-  return (p->tag);
-}
-
-/*
- * Determines sampling rate index for the MPEG-4 decoder. The input sampling
- * rate as specified in the audio config part is not one of the rates listed
- * in the standard.
- */
-static INLINE int16
-DetermineSamplingFreqIdx(int32 samplingFreq)
-{
-  int16 idx;
-
-  if(samplingFreq >= 92017L)                               idx = 0;
-  else if(samplingFreq < 92017L && samplingFreq >= 75132L) idx = 1;
-  else if(samplingFreq < 75132L && samplingFreq >= 55426)  idx = 2;
-  else if(samplingFreq < 55426L && samplingFreq >= 46009L) idx = 3;
-  else if(samplingFreq < 46009L && samplingFreq >= 37566L) idx = 4;
-  else if(samplingFreq < 37566L && samplingFreq >= 27713L) idx = 5;
-  else if(samplingFreq < 27713L && samplingFreq >= 23004L) idx = 6;
-  else if(samplingFreq < 23004L && samplingFreq >= 18783L) idx = 7;
-  else if(samplingFreq < 18783L && samplingFreq >= 13856L) idx = 8;
-  else if(samplingFreq < 13856L && samplingFreq >= 11502L) idx = 9;
-  else if(samplingFreq < 11502L && samplingFreq >= 9391L)  idx = 10;
-  else                                                     idx = 11;
-
-  return (idx);
-}
-
-/*
- * Reads GA decoder configuration information from the specified bitstream.
- */
-static INLINE BOOL
-ReadGASpecificInfo(TBitStream *bs, AudioSpecificInfo *audInfo, ProgConfig *progCfg)
-{
-  int16 extensionFlag;
-  GaSpecificInfo *gaInfo = &audInfo->gaInfo;
-
-  gaInfo->FrameLengthFlag = (BOOL) BsGetBits(bs, 1);
-  gaInfo->DependsOnCoreCoder = (BOOL) BsGetBits(bs, 1);
-  gaInfo->CoreCoderDelay = (gaInfo->DependsOnCoreCoder) ? (int16) BsGetBits(bs, 14) : (int16)0;
-  extensionFlag = (int16) BsGetBits(bs, 1);
-
-  if(audInfo->channelConfiguration == 0)
-  {
-    TInt numChans = 0;
-
-    GetPCE(bs, progCfg, &numChans);
-    audInfo->channelConfiguration = (uint8) numChans;
-    if (audInfo->samplingFreqIdx != (uint8) progCfg->sample_rate_idx)
-        {
-        return FALSE;
-        }
-  }
-
-  /*
-   * Determine the sampling rate index so that sampling rate dependent
-   * tables can be initialized.
-   */
-  if(audInfo->samplingFreqIdx == 0xf && audInfo->channelConfiguration != 0)
-  {
-    audInfo->samplingFreqIdx = (uint8) DetermineSamplingFreqIdx(audInfo->samplingFrequency);
-    progCfg->sample_rate_idx = audInfo->samplingFreqIdx;
-  }
-  else
-    {
-
-    audInfo->samplingFreqIdx = (uint8) progCfg->sample_rate_idx;
-  
-    }
-
-  if(audInfo->audioObject == AAC_SCALABLE || audInfo->audioObject == ER_AAC_SCALABLE)
-    gaInfo->layerNr = (uint8) BsGetBits(bs, 3);
-  
-  if(extensionFlag)
-  {
-    if(audInfo->audioObject == ER_BSAC)
-    {
-      gaInfo->numOfSubframe = (uint8) BsGetBits(bs, 5);
-      gaInfo->layer_length = (uint8) BsGetBits(bs, 11);
-    }
-    
-    switch(audInfo->audioObject)
-    {
-      case ER_AAC_LC:
-      case ER_AAC_LTP:
-      case ER_AAC_SCALABLE:
-      case ER_TWINVQ:
-      case ER_AAC_LD:
-        gaInfo->aacSectionDataResilienceFlag = (BOOL) BsGetBits(bs, 1);
-        gaInfo->aacScalefactorDataResilienceFlag = (BOOL) BsGetBits(bs, 1);
-        gaInfo->aacSpectralDataResilienceFlag = (BOOL) BsGetBits(bs, 1);
-        break;
-
-      default:
-        break;
-    }
-
-    extensionFlag = (int16) BsGetBits(bs, 1);
-    if(extensionFlag)
-    {
-      ;
-    }
-  }
-  return TRUE;
-}
-
-/*
- * Reads MPEG-4 audio decoder specific configuration information.
- *
- * Retuns TRUE on success, FALSE otherwise. FALSE indicates that 
- * unsupported decoder configuration (e.g., object type) was detected.
- */
-static INLINE BOOL
-ReadAudioSpecificConfig(TBitStream *bs, AudioSpecificInfo *audInfo, 
-            ProgConfig *progCfg, int32 bufLen)
-{
-  int16 bitsLeft;
-  AudioObjectType audObj;
-
-  /*-- Read common configuration information. --*/
-  audObj = audInfo->audioObject = (AudioObjectType)(BsGetBits(bs, 5) - 1);
-  audInfo->samplingFreqIdx = (uint8) BsGetBits(bs, 4);
-  audInfo->samplingFrequency = sample_rates[audInfo->samplingFreqIdx];
-  if(audInfo->samplingFreqIdx == 0xf)
-    audInfo->samplingFrequency = (int32) BsGetBits(bs, 24);
-  audInfo->channelConfiguration = (uint8) BsGetBits(bs, 4);
-
-  audInfo->extAudioObject = (AudioObjectType) 0;
-  audInfo->sbrPresentFlag = 0;
-
-  if(audInfo->audioObject == AAC_SBR)
-  {
-    audInfo->extAudioObject = audInfo->audioObject;
-    audInfo->sbrPresentFlag = 1;
-    audInfo->extSamplingFreqIdx = (uint8) BsGetBits(bs, 4);
-    if(audInfo->extSamplingFreqIdx == 0xf)
-      audInfo->extSamplingFrequency = (int32) BsGetBits(bs, 24);
-    audObj = audInfo->audioObject = (AudioObjectType)(BsGetBits(bs, 5) - 1);
-  }
-
-  /*-- Read object type specific configuration information. --*/
-  switch(audInfo->audioObject)
-  {
-    case AAC_MAIN:
-    case AAC_LC:
-    case AAC_LTP:
-      progCfg->profile = (int16) audObj;
-      progCfg->sample_rate_idx = audInfo->samplingFreqIdx;
-      if (ReadGASpecificInfo(bs, audInfo, progCfg) == FALSE)
-        {
-        return FALSE;
-        }
-      if(audInfo->samplingFreqIdx != 0xf)
-        audInfo->samplingFrequency = sample_rates[audInfo->samplingFreqIdx];
-      break;
-
-    default:
-      audObj = NULL_OBJECT;
-      break;
-  }
-
-  bitsLeft = (int16) ((bufLen << 3) - BsGetBitsRead(bs));
-  if(audInfo->extAudioObject != AAC_SBR && bitsLeft >= 16)
-  {
-    audInfo->syncExtensionType = (int16) BsGetBits(bs, 11);
-    if(audInfo->syncExtensionType == 0x2b7)
-    {
-      audInfo->extAudioObject = (AudioObjectType)(BsGetBits(bs, 5) - 1);
-      if(audInfo->extAudioObject == AAC_SBR)
-      {
-        audInfo->sbrPresentFlag = (uint8) BsGetBits(bs, 1);
-        if(audInfo->sbrPresentFlag)
-        {
-          audInfo->extSamplingFreqIdx = (uint8) BsGetBits(bs, 4);
-          if(audInfo->extSamplingFreqIdx == 0xf)
-            audInfo->extSamplingFrequency = (int32) BsGetBits(bs, 24);
-        }
-      }
-    }
-  }
-
-  return ((audObj == NULL_OBJECT) ? (BOOL) FALSE : (BOOL) TRUE);
-}
-
-BOOL
-ReadMP4AudioConfig(uint8 *buffer, uint32 bufLen, mp4AACTransportHandle *mp4AAC_ff)
-{
-  TBitStream bs;
-  BOOL retValue;
-
-  BsInit(&bs, buffer, bufLen);
-
-  retValue = ReadAudioSpecificConfig(&bs, &mp4AAC_ff->audioInfo, &mp4AAC_ff->progCfg, bufLen);
-
-  return (retValue);
-}
-
-void
-WriteMP4AudioConfig(uint8 *buffer, uint32 bufLen, mp4AACTransportHandle /* *mp4AAC_ff*/)
-{
-
-  TBitStream bs;
-
-  BsInit(&bs, buffer, bufLen);
-
-  /*-- Change object type to LC. --*/
-  BsPutBits(&bs, 5, 2);
-
-}
-