videoeditorengine/audioeditorengine/codecs/AAC/src/ProcADTSInFileHandler.cpp
changeset 9 d87d32eab1a9
parent 0 951a5db380a0
--- a/videoeditorengine/audioeditorengine/codecs/AAC/src/ProcADTSInFileHandler.cpp	Fri Jan 29 14:08:33 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1028 +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 <e32base.h>
-#include <f32file.h>
-#include "AudCommon.h"
-#include "ProcConstants.h"
-#include "ProcADTSInFileHandler.h"
-//#include "mp4aud.h"
-#include "mp4config.h"
-#include "audconstants.h"
-
-#include "ProcTools.h"
-#include "ProcAACFrameHandler.h"
-
-
- 
-CProcADTSInFileHandler* CProcADTSInFileHandler::NewL(const TDesC& aFileName, RFile* aFileHandle,
-                                                     CAudClip* aClip, TInt aReadBufferSize, 
-                                                     TInt aTargetSampleRate, TChannelMode aChannelMode)
-    {
-  
-  CProcADTSInFileHandler* self = NewLC(aFileName, aFileHandle, aClip, aReadBufferSize, aTargetSampleRate, aChannelMode);
-  CleanupStack::Pop(self);
-  return self;
-
-    }
-    
-CProcADTSInFileHandler* CProcADTSInFileHandler::NewLC(const TDesC& aFileName, RFile* aFileHandle,
-                                                      CAudClip* aClip, TInt aReadBufferSize, TInt aTargetSampleRate,
-                                                      TChannelMode aChannelMode)
-
-    {
-
-  CProcADTSInFileHandler* self = new (ELeave) CProcADTSInFileHandler();
-  CleanupStack::PushL(self);
-  self->ConstructL(aFileName, aFileHandle, aClip, aReadBufferSize, aTargetSampleRate, aChannelMode);
-  return self;
-
-    }
-
-void CProcADTSInFileHandler::GetPropertiesL(TAudFileProperties* aProperties)
-    {
-
-    if (iProperties != 0)
-        {
-        *aProperties = *iProperties;
-        return;
-        }
-
-    aProperties->iDuration = 0;
-    aProperties->iSamplingRate = 0;
-    aProperties->iBitrate = 0;
-    aProperties->iChannelMode = EAudChannelModeNotRecognized;
-    aProperties->iFrameLen = 0;
-    aProperties->iFrameCount = 0;
-
-    aProperties->iAudioType = EAudTypeUnrecognized;
-    aProperties->iAudioTypeExtension = EAudExtensionTypeNoExtension;
-    aProperties->iFileFormat = EAudFormatUnrecognized;
-    aProperties->iBitrateMode = EAudBitrateModeNotRecognized;
-    aProperties->iFrameDuration = 0;
-    aProperties->iNumFramesPerSample = 1;
-    aProperties->iChannelModeExtension = EAudChannelModeNotRecognized;
-    aProperties->iAACObjectType = EAudAACObjectTypeNone;
-    
-    if (!iSupportedFile)
-        {
-        User::Leave(KErrNotSupported);
-        return;
-        }
-
-    ReadHeaderInformation(aProperties);
-    ReadOtherInformationL(aProperties);
-
-    aProperties->iBitrateMode = EAudConstant;
-
-    if (iProperties == 0)
-        {
-        iProperties = new (ELeave) TAudFileProperties;
-        *iProperties = *aProperties;
-        }
-
-    }
-
-
-TBool CProcADTSInFileHandler::SeekAudioFrame(TInt32 aTime)
-    {
-    
-    if (!iSupportedFile)
-        {
-        return EFalse;
-        }
-
-    if (aTime == 0) 
-        {
-        FindFirstAACFrame();
-        iCurrentTimeMilliseconds = aTime;
-        return ETrue;
-        }
-    
-    else FindFirstAACFrame();
-
-    TBuf8<6> header;
-
-    if(BufferedFileRead(header, 6) != 6)
-        {
-        return EFalse;
-        }
-
-    if (header.Length() != 6)
-        {
-        return EFalse;
-        }
-
-    TUint8 byte2 = header[1];
-    TBuf8<8> byte2b;
-    ProcTools::Dec2Bin(byte2, byte2b);
-    // lets confirm that we have found a legal AAC header
-    if (header[0] == 0xFF &&
-        byte2b[0] == '1' &&
-        byte2b[1] == '1' &&
-        byte2b[2] == '1' &&
-        byte2b[3] == '1' &&
-        //byte2b[4] == '1' &&
-        byte2b[5] == '0' &&
-        byte2b[6] == '0')
-        {
-        }    
-    else
-        {
-        return EFalse;
-        }
-
-    TUint8 byte4 = header[3];
-    TUint8 byte5 = header[4];
-    TUint8 byte6 = header[5];
-
-    TUint frameLen = CalculateAACFrameLength(byte4, byte5, byte6);    
-    //aFrame = HBufC8::NewL(frameLen);
-
-    TInt dur = 0;
-    
-    while (BufferedFileSetFilePos(iFilePos-6+frameLen))
-        {
-
-        dur = dur + ProcTools::MilliSeconds(iProperties->iFrameDuration);
-        if (dur > aTime)
-            {
-            break;
-            }
-
-        if(BufferedFileRead(header, 6) != 6)
-            {
-            break;
-            }
-
-        if (header.Length() != 6)
-            {
-            break;
-            }
-
-        if (header[0] != 0xFF) break;
-        byte4 = header[3];
-        byte5 = header[4];
-        byte6 = header[5];
-
-        frameLen = CalculateAACFrameLength(byte4, byte5, byte6);    
-    
-        }
-
-
-    aTime = dur;
-    iCurrentTimeMilliseconds = aTime;
-    return ETrue;
-    }
-
-TBool CProcADTSInFileHandler::SeekCutInFrame()
-    {
-    iCurrentTimeMilliseconds = iCutInTime;
-    return SeekAudioFrame(iCutInTime);
-    }
-
-
-
-
-TBool CProcADTSInFileHandler::SetNormalizingGainL(const CProcFrameHandler* aFrameHandler)
-    {
-    
-    
-    HBufC8* point = 0;
-    TInt siz;
-    TInt32 tim = 0;
-    TInt maxGain = 0;
-    RArray<TInt> gains;
-    TInt maxAverage = 0;
-    TInt tmpGain = 0;
-    TInt gainCounter = 0;
-    TInt timeNow = 0;
-    while(GetEncAudioFrameL(point, siz, tim)) 
-    {
-        CleanupStack::PushL(point);
-        
-        aFrameHandler->GetGainL(point, gains, maxGain);
-        timeNow += tim;
-        
-        for (TInt a = 0 ; a < gains.Count() ; a++)
-        {
-            tmpGain += gains[a];
-            gainCounter++;
-        }
-        gains.Reset();
-        
-        if (timeNow > 1000)
-        {
-            if (tmpGain/gainCounter > maxAverage)
-            {
-                maxAverage = tmpGain/gainCounter;
-            }
-            
-            timeNow = 0;
-            tmpGain = 0;
-            gainCounter = 0;
-        }
-        
-        CleanupStack::PopAndDestroy(point);
-        
-    }
-    
-    // bigger value makes normalizing more efficient, but makes
-    // dynamic compression more likely to occur
-    TInt NormalizingFactor = 175;
-    if (iProperties->iBitrate > 20000 && iProperties->iBitrate < 40000)
-    {
-        
-        // 32 kBit/s
-        NormalizingFactor = 170;
-        
-    }
-    else if (iProperties->iBitrate > 80000 && iProperties->iBitrate < 110000)
-    {
-        // 96 kBit/s
-        NormalizingFactor = 170;
-        
-    }
-    
-    
-    else if (iProperties->iBitrate > 110000 && iProperties->iBitrate < 140000)
-    {
-        // 128 kBit/s
-        if (iProperties->iChannelMode == EAudSingleChannel)
-            NormalizingFactor = 160;
-        else
-            NormalizingFactor = 170;
-        
-    }
-    else if (iProperties->iBitrate > 150000)
-    {
-        // 256 kBit/s
-        if (iProperties->iChannelMode == EAudSingleChannel)
-            NormalizingFactor = 150;
-        else
-            NormalizingFactor = 165;
-        
-    }
-    else
-    {
-        
-        if (iProperties->iChannelMode == EAudSingleChannel)
-            NormalizingFactor = 170;
-        
-    }
-    
-    
-    TInt gainBoost = (NormalizingFactor-maxAverage)*3;
-    
-    if (gainBoost < 0) gainBoost = 0;
-    
-    iNormalizingMargin = static_cast<TInt8>(gainBoost);
-    
-    return ETrue;
-
-    }
-
-
-TBool CProcADTSInFileHandler::ReadAudioDecoderSpecificInfoL(HBufC8*& aBytes, TInt aBufferSize)
-    {
-
-    if (aBufferSize < iMP4DecSpecInfo->Size()) return EFalse;
-
-    if (iMP4DecSpecInfo != 0)
-        {    
-        aBytes = HBufC8::NewL(iMP4DecSpecInfo->Size());    
-        aBytes->Des().Append(iMP4DecSpecInfo->Des());
-        return ETrue;
-        }
-    else 
-        {
-        aBytes = 0;
-        return EFalse;
-        }    
-
-    }
-
-
-CProcADTSInFileHandler::~CProcADTSInFileHandler()
-    {
-    ResetAndCloseFile();
-
-    if (iSilentFrame != 0)
-        {
-        delete iSilentFrame;
-        }
-
-    if (iMP4DecSpecInfo != 0)
-        {
-        delete iMP4DecSpecInfo;
-
-        }
-
-
-    if (iFrameInfo != 0)
-        {
-        delete iFrameInfo;
-
-        }
-    
-    delete iFrameHandler;
-        
-    delete iDecoder;
-    
-    }
-
-
-void CProcADTSInFileHandler::ConstructL(const TDesC& aFileName, 
-                                        RFile* aFileHandle,
-                                        CAudClip* aClip, 
-                                        TInt aReadBufferSize,
-                                        TInt aTargetSampleRate,
-                                        TChannelMode aChannelMode)
-    {
-
-    
-
-    iTargetSampleRate = aTargetSampleRate;
-    iChannelMode = aChannelMode;
-
-    InitAndOpenFileL(aFileName, aFileHandle, aReadBufferSize);
-    
-    if (aClip != 0)
-        {
-        iCutInTime = ProcTools::MilliSeconds(aClip->CutInTime());
-        
-        }
-    
-    TBool frameFound = FindFirstAACFrame();
-    
-    if (!frameFound)
-        {
-        iSupportedFile = EFalse;
-        return;
-        }
-    
-    iClip = aClip;
-
-    TAudFileProperties prop;
-    iFrameInfo = new (ELeave) TAACFrameHandlerInfo;
-    GetPropertiesL(&prop);
-
-    if (prop.iAudioTypeExtension != EAudExtensionTypeNoExtension)
-        {
-        // AACPlus frame duration is calculated from sampling rate
-        // the actual sampling rate of AAC plus is twice as high as
-        // the AAC part
-        iProperties->iFrameDuration = iProperties->iFrameDuration.Int64()/2;
-        
-        }
-
-    // fill in aacInfo for retrieving decoder specific information
-    //AACStreamInfo aacInfo;
-    int16 frameLen = 0;
-    int32 sampleRate = 0;
-    uint8 profile = 0;
-    uint8 nChannels = 0;
-
-    // generate a silent frame ------------------>
-
-    if (iProperties->iChannelMode == EAudSingleChannel)
-        {
-
-        iSilentFrame = HBufC8::NewL(KSilentMonoAACFrameLenght);    
-        
-        iSilentFrame->Des().Append(KSilentMonoAACFrame, KSilentMonoAACFrameLenght);
-
-        nChannels = 1;
-        }
-    else if (iProperties->iChannelMode == EAudStereo)
-        {
-
-        iSilentFrame = HBufC8::NewL(KSilentStereoAACFrameLenght);    
-        iSilentFrame->Des().Append(KSilentStereoAACFrame, KSilentStereoAACFrameLenght);
-        
-        nChannels = 2;
-        }
-    else
-        {
-        User::Leave(KErrNotSupported);
-        }
-    
-    // Check that the sample rate is supported    
-    if( (iProperties->iSamplingRate != KAedSampleRate8kHz) &&
-        (iProperties->iSamplingRate != KAedSampleRate11kHz) &&
-        (iProperties->iSamplingRate != KAedSampleRate16kHz) &&
-        (iProperties->iSamplingRate != KAedSampleRate22kHz) &&
-        (iProperties->iSamplingRate != KAedSampleRate24kHz) &&
-        (iProperties->iSamplingRate != KAedSampleRate32kHz) &&
-        (iProperties->iSamplingRate != KAedSampleRate44kHz) &&
-        (iProperties->iSamplingRate != KAedSampleRate48kHz) )
-        {
-        User::Leave(KErrNotSupported);
-        }
-         
-
-
-    uint8 decSpecInfo[16];
-    int16 nConfigBytes;
-  
-    
-    frameLen = 1024;
-    sampleRate = iProperties->iSamplingRate;
-    if (iFrameInfo->iProfileID == 3)
-        {
-        profile = LTP_OBJECT;
-        }
-    else if (iFrameInfo->iProfileID == 1)
-        {
-        profile = LC_OBJECT;
-        }
-    else
-        {
-        User::Leave(KErrNotSupported);
-        }
-
-    //nConfigBytes = AACGetMP4ConfigInfo(&aacInfo, decSpecInfo, 16);
-    nConfigBytes = AACGetMP4ConfigInfo(sampleRate, profile, 
-        nChannels, frameLen, decSpecInfo, 16);
-
-
-    if (nConfigBytes > 0)
-        {
-
-        iMP4DecSpecInfo = HBufC8::NewL(nConfigBytes);
-        iMP4DecSpecInfo->Des().Append(decSpecInfo, nConfigBytes);
-
-        }
-
-
-    mp4_u32 frameDurationMilli = ProcTools::MilliSeconds(iProperties->iFrameDuration);
-    
-    iSilentFrameDuration = frameDurationMilli;
-    
-
-    // <------------------generate a silent frame
-
-    // Generate a decoder ----------------------->
-
-    iDecoder = CProcDecoder::NewL();
-    
-    iDecodingPossible = iDecoder->InitL(*iProperties, aTargetSampleRate, aChannelMode);
-    
-    // <----------------------- Generate a decoder 
-    
-    // Create a frame handler --------------------->
-    
-    iFrameHandler = CProcAACFrameHandler::NewL(*iFrameInfo);
-    
-    if (iClip != 0 && iClip->Normalizing())
-        {
-        SetNormalizingGainL(iFrameHandler);    
-        }
-    
-
-    }
-
-
-
-
-TBool CProcADTSInFileHandler::GetEncAudioFrameL(HBufC8*& aFrame, TInt& aSize, TInt32& aTime)
-    {
-
-    if (!iSupportedFile)
-        {
-        return EFalse;
-        }
-        
-        
-    TBuf8<7> header;
-
-    if(BufferedFileRead(header, 7) != 7)
-        {
-        return EFalse;
-        }
-
-    if (header.Length() != 7)
-        {
-        return EFalse;
-        }
-
-    if (header[0] != 0xFF) return EFalse;
-    TUint8 byte4 = header[3];
-    TUint8 byte5 = header[4];
-    TUint8 byte6 = header[5];
-//    TUint8 byte7 = header[6];
-
-    
-    TInt frameLen = CalculateAACFrameLength(byte4, byte5, byte6);    
-    aFrame = HBufC8::NewL(frameLen);
-
-    BufferedFileSetFilePos(iFilePos-7);
-    TPtr8 tmpDes((TPtr8)aFrame->Des());
-
-    if (BufferedFileRead((TPtr8&)tmpDes, frameLen) != frameLen)
-        {
-        delete aFrame;
-        aFrame = 0;
-        return EFalse;
-        }
-        
-    aSize = frameLen;
-    aTime = ProcTools::MilliSeconds(iProperties->iFrameDuration);
-    
-    // remove ADTS header -------------------------------------------->
-    
-    TInt headerLength = 0;  //  because we need to remove header in case of AAC frame from .aac files
-    //check Header length to be removed from the frame before writting to 3gp file
-    TUint8* dtPtr = (TUint8*)(aFrame->Ptr());
-    if((dtPtr[1]&& 0x01) == 0x00)    //based on bytes decide header length to remove
-        {
-            headerLength =9;
-        }
-    else if((dtPtr[1]&& 0x01)== 0x01)
-        {
-            headerLength =7;
-        }
-        else
-        {
-            headerLength =0;
-        }
-    
-    aFrame->Des().Delete(0,headerLength);
-    aSize -= headerLength;
- 
-    // <--------------------------------------------- remove ADTS header
-    
-    iCurrentTimeMilliseconds += ProcTools::MilliSeconds(iProperties->iFrameDuration);
-    
-    
-    // Fix for synchronizing problem ---------------------------------->
-    // If the accurate frame length cannot be represented in milliseconds
-    // store the remainder and increase the output frame lenght by one ms 
-    // when needed. Accuracy depends on sampling rate
-    
-    TReal accurateFrameLen = TReal(1024000)/iProperties->iSamplingRate;
-    
-    iAACFrameLenRemainderMilli += accurateFrameLen - aTime;
-        
-    if (iAACFrameLenRemainderMilli > 1)
-        {
-        aTime += 1;
-        iCurrentTimeMilliseconds += 1;
-        iAACFrameLenRemainderMilli -= 1;
-        }
-
-    
-    // <---------------------------------- Fix for synchronizing problem
-    
-    
-    if (iProperties->iAudioTypeExtension == EAudExtensionTypeNoExtension)
-        {
-         
-          
-        // AACPlus is handled after decoding
-                
-        TRAPD(err, ManipulateGainL(aFrame));
-        
-        if (err != KErrNone)
-            {
-            // something went wrong with the gain manipulation
-            // continue by returning the original frame
-            }    
-        }
-    
-        
-    aSize = aFrame->Size();
-    
-    return ETrue;
-
-    
-    }
-
-CProcADTSInFileHandler::CProcADTSInFileHandler()  : CProcInFileHandler(), iFrameInfo(0),
-                                                    iSupportedFile(ETrue)
-    {
-    
-
-    }
-
-
-TBool CProcADTSInFileHandler::FindFirstAACFrame()
-    {    
-
-    TBuf8<8> byte2b;
-    TUint8 byte2;
-    TUint8 byte1;
-
-    TBool fileEnded = EFalse;
-    TUint ind = 0;
-    TBool frameFound = EFalse;
-
-  BufferedFileSetFilePos(0);
-
-    while (!fileEnded) 
-        {
-        if (BufferedFileReadChar(ind, byte1) == 0) 
-            {
-            fileEnded = ETrue;
-            }
-        ind++;
-        
-        if (byte1 != 0xFF) continue;
-
-
-        if (BufferedFileReadChar(ind, byte2) == 0) 
-            {
-            fileEnded = ETrue;
-            }
-        ind++;
-        ProcTools::Dec2Bin(byte2, byte2b);
-        
-    
-        if (byte1 == 0xFF &&
-            byte2b[0] == '1' &&
-            byte2b[1] == '1' &&
-            byte2b[2] == '1' &&
-            byte2b[3] == '1' &&
-            //byte2b[4] == '1' &&
-            byte2b[5] == '0' &&
-            byte2b[6] == '0') 
-            {
-                
-            // this looks like AAC frame header, let's confirm...    
-            TUint8 byte3, byte4, byte5, byte6;
-            BufferedFileReadChar(ind, byte3);    
-            BufferedFileReadChar(ind+1, byte4);
-            BufferedFileReadChar(ind+2, byte5);
-            BufferedFileReadChar(ind+3, byte6);
-
-            ind++;
-
-            TUint frameLength = CalculateAACFrameLength(byte4, byte5, byte6);
-            
-            TUint8 testByte1, testByte2, testByte3;
-            BufferedFileReadChar(ind+frameLength-3, testByte1);
-            BufferedFileReadChar(ind+frameLength-2, testByte2);
-            BufferedFileReadChar(ind+frameLength-1, testByte3);
-            
-            if (byte1 == testByte1 && byte2 == testByte2
-                && byte3 == testByte3) 
-                {
-                // this must be the header...
-                iFirstFrame = ind-3;
-                //FillInHeaderValues(byte2, byte3, byte4);
-                frameFound = ETrue;
-                break;
-                }
-    
-            }
-
-        }
-    if (frameFound)
-        {
-        BufferedFileSetFilePos(iFirstFrame);
-        }
-
-    return frameFound;
-    }
-
-
-TUint CProcADTSInFileHandler::CalculateAACFrameLength(TUint8 byte4, TUint8 byte5, TUint8 byte6) 
-    {
-
-    TBuf8<13> headerLengthB;
-    TBuf8<8> byte4b, byte5b, byte6b;
-    ProcTools::Dec2Bin(byte4, byte4b);
-    ProcTools::Dec2Bin(byte5, byte5b);
-    ProcTools::Dec2Bin(byte6, byte6b);
-    
-    headerLengthB.Append(byte4b[6]);
-    headerLengthB.Append(byte4b[7]);
-    headerLengthB.Append(byte5b);
-    headerLengthB.Append(byte6b[0]);
-    headerLengthB.Append(byte6b[1]);
-    headerLengthB.Append(byte6b[2]);
-
-
-    TUint headerLength = 0;
-    TLex8 leks(headerLengthB);
-
-    if (leks.Val(headerLength, EBinary) != KErrNone) 
-        {
-        return 0;
-        }
-
-    return headerLength;
-
-}
-
-
-TBool CProcADTSInFileHandler::ReadHeaderInformation(TAudFileProperties* aProperties)
-    {
-
-    TInt origFilePos = iFilePos;
-    
-    if (aProperties == 0)
-        return EFalse;
-
-    TBuf8<4> header;
-
-    if(BufferedFileRead(header, 4) != 4)
-        {
-        BufferedFileSetFilePos(origFilePos);
-        return EFalse;
-        }
-
-    if (header.Length() != 4)
-        {
-        BufferedFileSetFilePos(origFilePos);
-        return EFalse;
-        }
-
-    TUint8 byte2 = header[1];
-    TBuf8<8> byte2b;
-    ProcTools::Dec2Bin(byte2, byte2b);
-    // lets confirm that we have found a legal AAC header
-    if (header[0] == 0xFF &&
-        byte2b[0] == '1' &&
-        byte2b[1] == '1' &&
-        byte2b[2] == '1' &&
-        byte2b[3] == '1' &&
-        //byte2b[4] == '1' &&
-        byte2b[5] == '0' &&
-        byte2b[6] == '0')
-        {
-        // OK
-        aProperties->iFileFormat = EAudFormatAAC_ADTS;
-    //    aProperties->iFrameDuration = 23000;
-        }    
-    else
-        {
-        return EFalse;
-        }
-    /*
-    if (byte2b[4] == '1')
-        {
-        aProperties->iAudioType = EAudAAC_MPEG2;
-        }
-    else
-        {
-        aProperties->iAudioType = EAudAAC_MPEG4;
-        }
-    */
-    
-    // NOTE: call all MPeg audio EAudAAC_MPEG4
-    aProperties->iAudioType = EAudAAC_MPEG4;
-    
-    
-    TUint8 byte3 = header[2];
-    TUint8 byte4 = header[3];
-
-    TBuf8<8> byte3b;
-    TBuf8<8> byte4b;
-
-    ProcTools::Dec2Bin(byte2, byte2b);
-    ProcTools::Dec2Bin(byte3, byte3b);
-    ProcTools::Dec2Bin(byte4, byte4b);
-
-    TBuf8<2> profileId(byte3b.Left(2));
-    TUint proID = 0;
-    ProcTools::Bin2Dec(profileId, proID);
-    
-    iFrameInfo->iProfileID = static_cast<TUint8>(proID);
-    aProperties->iAACObjectType = TAudAACObjectType(iFrameInfo->iProfileID);
-
-
-    TBuf8<4> samplingRateIndexB;
-    samplingRateIndexB.Append(byte3b[2]);
-    samplingRateIndexB.Append(byte3b[3]);
-    samplingRateIndexB.Append(byte3b[4]);
-    samplingRateIndexB.Append(byte3b[5]);
-
-    TUint srIndex = 0;
-    TLex8 lek(samplingRateIndexB);
-
-    if (lek.Val(srIndex, EBinary) != KErrNone) 
-        {
-        BufferedFileSetFilePos(origFilePos);
-        return EFalse;
-        }
-    // aac sampling rates
-        
-    const TInt KAAC_SAMPLING_RATES[16] = {96000,88200,64000,48000,44100,32000,24000
-            ,22050,16000,12000,11025,8000,0,0,0,0};
-
-    iFrameInfo->iSampleRateID = static_cast<TUint8>(srIndex);
-    aProperties->iSamplingRate = KAAC_SAMPLING_RATES[srIndex];
-    samplingRateIndexB.Delete(0, samplingRateIndexB.Length());
-        
-    // channel configuration
-
-
-    TUint aacChannels = 0;
-    TBuf8<3> channelB;
-    channelB.Append(byte3b[7]);
-    channelB.Append(byte4b[0]);
-    channelB.Append(byte4b[1]);
-
-    TLex8 leks2(channelB);
-    if (leks2.Val(aacChannels, EBinary) != KErrNone) 
-        {
-        BufferedFileSetFilePos(origFilePos);
-        return EFalse;
-        }
-        
-    if (aacChannels == 1)
-        {
-        aProperties->iChannelMode = EAudSingleChannel;
-        }
-    else if (aacChannels == 2)
-        {
-        aProperties->iChannelMode = EAudStereo;
-        }
-    
-    iFrameInfo->iNumChannels = static_cast<TUint8>(aacChannels);
-    iFrameInfo->iNumCouplingChannels = 0;
-    iFrameInfo->iIs960 = 0;
-    
-
-    BufferedFileSetFilePos(origFilePos);
-    return ETrue;
-
-    }
-
-
-TBool CProcADTSInFileHandler::ReadOtherInformationL(TAudFileProperties* aProperties)
-    {
-
-    TInt origFilePos = iFilePos;
-
-    FindFirstAACFrame();
-
-    TBuf8<7> header;
-
-    if(BufferedFileRead(header, 7) != 7)
-        {
-        return EFalse;
-        }
-
-    if (header.Length() != 7)
-        {
-        return EFalse;
-        }
-
-    TUint8 byte2 = header[1];
-    TBuf8<8> byte2b;
-    ProcTools::Dec2Bin(byte2, byte2b);
-    // lets confirm that we have found a legal AAC header
-    if (header[0] == 0xFF &&
-        byte2b[0] == '1' &&
-        byte2b[1] == '1' &&
-        byte2b[2] == '1' &&
-        byte2b[3] == '1' &&
-    //    byte2b[4] == '1' &&
-        byte2b[5] == '0' &&
-        byte2b[6] == '0')
-        {
-        // OK
-        //aProperties->iAudioType = EAudAAC;
-        //aProperties->iFileFormat = EAudFormatAAC_ADTS;
-        }    
-    else
-        {
-        return EFalse;
-        }
-
-    TUint8 byte4 = header[3];
-    TUint8 byte5 = header[4];
-    TUint8 byte6 = header[5];
-
-    aProperties->iFrameDuration = ((1024*1000)/(aProperties->iSamplingRate))*1000;
-
-    TInt frameLen = CalculateAACFrameLength(byte4, byte5, byte6);
-    
-    
-    
-
-     /*-- Allocate resources and read 1st frame. --*/
-    HBufC8 *aFrame = HBufC8::NewL(frameLen);
-    CleanupStack::PushL(aFrame);
-
-    TPtr8 tmpDes((TPtr8)aFrame->Des());
-
-    BufferedFileRead((TPtr8&)tmpDes, frameLen - 7);
-
-    
-    const TInt KShortestAACFrame = 20;
-
-    if (frameLen > KShortestAACFrame) // a silent frame?
-        {
-        
-        
-
-        /*
-         * Get frame parameters for eAAC+ codec. It is possible that the bitstream
-        * is plain AAC but we don't know it before the 1st frame is parsed!
-        */
-
-        TUint8* buf = const_cast<TUint8*>(aFrame->Right(aFrame->Size()).Ptr());
-        CProcAACFrameHandler::GetEnhancedAACPlusParametersL(buf, frameLen - 7, aProperties, iFrameInfo);
-
-        }
-    else
-        {
-        iFrameInfo->iIsParametricStereo = EFalse;
-        iFrameInfo->isSBR = EFalse;
-            
-        }
-
-    CleanupStack::Pop(aFrame);
-    delete aFrame;
-    aFrame = 0;
-
-
-        
-
-
-    if(BufferedFileRead(header, 7) != 7)
-        {
-        return EFalse;
-        }
-
-    if (header.Length() != 7)
-        {
-        return EFalse;
-        }
-
-    byte4 = header[3];
-    byte5 = header[4];
-    byte6 = header[5];
-
-    TInt dur = ProcTools::MilliSeconds(aProperties->iFrameDuration);
-    TInt bytes = frameLen;
-    TInt frames = 1;
-
-    frameLen = CalculateAACFrameLength(byte4, byte5, byte6);
-
-    while (BufferedFileSetFilePos(iFilePos-7+frameLen))
-        {
-
-        dur += ProcTools::MilliSeconds(aProperties->iFrameDuration);
-        bytes += frameLen;
-        frames++;
-
-        if(BufferedFileRead(header, 7) != 7)
-            {
-            break;
-            }
-
-        if (header.Length() != 7)
-            {
-            break;
-            }
-
-        if (header[0] != 0xFF) break;
-        byte4 = header[3];
-        byte5 = header[4];
-        byte6 = header[5];
-
-        frameLen = CalculateAACFrameLength(byte4, byte5, byte6);    
-    
-        }
-    
-    TTimeIntervalMicroSeconds tmp((TInt64)(TInt)dur*1000);
-    aProperties->iDuration = tmp;
-
-    aProperties->iFrameCount = frames;
-    aProperties->iFrameLen = bytes/frames;
-    aProperties->iBitrate = (iFilePos*1000/(dur))*8;
-
-
-    BufferedFileSetFilePos(origFilePos);
-
-    return ETrue;
-    }
-
-TBool CProcADTSInFileHandler::GetInfoForFrameHandler(TAACFrameHandlerInfo& aAACInfo)
-    {
-    
-    aAACInfo = *iFrameInfo;
-    return ETrue;
-    }
-