audio/ARM_CMMF_codecs/FrameTable/Src/FrameTable.cpp
changeset 34 31d6e1ae5283
parent 33 0267baa9dea9
child 36 6320e299b97a
child 38 4269ca484c7b
--- a/audio/ARM_CMMF_codecs/FrameTable/Src/FrameTable.cpp	Wed Jun 23 19:56:04 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1404 +0,0 @@
-/*
-
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies).
-
-* All rights reserved.
-
-* This component and the accompanying materials are made available
-
-* under the terms of "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:
-
-*
-
-* Description:  Class definition for the frame table functions.
-
- *
-
-*/
-
-
-
-
-
-//  INCLUDES
-
-#include "FrameTable.h"
-
-#include "DebugMacros.h"
-
-#include <e32debug.h>
-
-
-
-// CONSTANTS
-
-const TInt KBuffersToKeep = 3;
-
-const TInt KLowResPeriodMs = 1000; // approximate interval for entries stored in low res table is 1 sec
-
-
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::CFrameTable
-
-// C++ default constructor can NOT contain any code, that
-
-// might leave.
-
-// -----------------------------------------------------------------------------
-
-//
-
-CFrameTable::CFrameTable()
-
-    {
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::ConstructL
-
-// Symbian 2nd phase constructor can leave.
-
-// -----------------------------------------------------------------------------
-
-//
-
-void CFrameTable::ConstructL()
-
-    {
-
-    DP0(_L("CFrameTable::ConstructL"));
-
-    SetSourceReference(0,0);
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::NewL
-
-// Two-phased constructor.
-
-// -----------------------------------------------------------------------------
-
-//
-
-EXPORT_C CFrameTable* CFrameTable::NewL()
-
-    {
-
-    DP0(_L("CFrameTable::NewL"));
-
-
-
-    CFrameTable* self = new(ELeave) CFrameTable;
-
-    CleanupStack::PushL(self);
-
-    self->ConstructL();
-
-    CleanupStack::Pop(self);
-
-    return self;
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::~CFrameTable
-
-// -----------------------------------------------------------------------------
-
-//
-
-EXPORT_C CFrameTable::~CFrameTable()
-
-    {
-
-    DP0(_L("CFrameTable::~CFrameTable"));
-
-    iFrameTable.Close();
-
-    iLowResFrameTable.Close();
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::InitFrameTable
-
-// -----------------------------------------------------------------------------
-
-//
-
-EXPORT_C TInt CFrameTable::InitFrameTable(TInt aSampleRate, TInt aSamplesPerFrame)
-
-    { // this is only intended to be used at the very beginning of play since it clears the table
-
-    DP2(_L("CFrameTable::InitFrameTable aSampleRate[%d], aSamplesPerFrame[%d]"), aSampleRate, aSamplesPerFrame);
-
-    TInt status = KErrNone;
-
-    ResetTable();
-
-    iSampleRate = aSampleRate;
-
-    iSamplesPerFrame = aSamplesPerFrame;
-
-
-
-    if ((iSampleRate> 0) && (iSamplesPerFrame> 0))
-
-        {
-
-        iMsecPerFrame = (iSamplesPerFrame*1000)/iSampleRate;
-
-        iFramesPerLowResInterval = ((iSampleRate*KLowResPeriodMs/1000) / iSamplesPerFrame);
-
-        iLowResIntervalMs = (iSamplesPerFrame*1000*iFramesPerLowResInterval)/iSampleRate;
-
-        }
-
-    else
-
-        {
-
-        status = KErrArgument;
-
-        }
-
-
-
-    return status;
-
-    }
-
-
-
-//  0   1   2   3   4
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::SubmitTableEntry
-
-// -----------------------------------------------------------------------------
-
-//
-
-// The table will always have contiguous frames in it.
-
-EXPORT_C TInt CFrameTable::SubmitTableEntry(TUint aPos)
-
-    {
-
-    DP2(_L("CFrameTable::SubmitTableEntry aPos[%u], event pos[%u]"), aPos, iPosEventMs);
-
-    TInt status = KErrNone;
-
-    TBufRefPosEntry lastEntry;
-
-    lastEntry.iPos = 0;
-
-    TBufRefPosEntry bufRefPos;
-
-    TUint frameNum;
-
-
-
-    TUint pos = aPos+iOffset; // pos = absolute position (not including any header)
-
-
-
-    if (aPos> 0)
-
-        {
-
-        iCurrentFrameCount++; // not a total frame count, but count from last reference set
-
-        DP1(_L("CFrameTable::SubmitTableEntry iCurrentFrameCount[%u]"), iCurrentFrameCount);
-
-        }
-
-
-
-    TUint numEntries = iFrameTable.Count(); // this table will stay short - seeking backward resets it
-
-
-
-    if (numEntries == 0)
-
-        { // table gets reset if seeking in source
-
-        bufRefPos.iPos = pos;
-
-        bufRefPos.iFrameNum = iFrameNum; // first frame num is 0 so calculations for time 0 would point to frame 0
-
-        status = iFrameTable.Append(bufRefPos);
-
-        ASSERT(status == KErrNone);
-
-        numEntries = 1;
-
-        DP2(_L("CFrameTable::SubmitTableEntry init pos[%u] framenum[%u]"), pos, iFrameNum);
-
-        }
-
-    else
-
-        {
-
-        lastEntry = iFrameTable[numEntries-1];
-
-
-
-        if (pos> lastEntry.iPos)
-
-            {
-
-            frameNum = lastEntry.iFrameNum + 1;
-
-            bufRefPos.iPos = pos;
-
-            bufRefPos.iFrameNum = frameNum;
-
-
-
-            DP3 (_L ("CFrameTable::SubmitTableEntry, new entry iPos[%u], iFrameNum[%u], cnt[%u]"), bufRefPos.iPos, bufRefPos.iFrameNum, numEntries+1);
-
-
-
-            status = iFrameTable.Append(bufRefPos);
-
-            ASSERT(status == KErrNone);
-
-            if (iOkToShrink)
-
-                {
-
-                DP0(_L("CFrameTable::SubmitTableEntry removing an entry "));
-
-                iFrameTable.Remove(0);
-
-                }
-
-            }
-
-        else
-
-            {
-
-            status = KErrArgument;
-
-            }
-
-        }
-
-
-
-    if (status == KErrNone)
-
-        {
-
-        SubmitLowResTableEntry(bufRefPos); // do this before events are detected below
-
-
-
-        // total average bitrate - not instantaneous bitrate - used for duration calculation
-
-        if (pos> iLastBytePos)
-
-            { // don't recalculate if we rewind
-
-            iLastBytePos = pos; // pos is absolute position - relative to the start of actual data content (not file start - no metadata) as set by the user. User maintains metadata offsets.
-
-            TUint totalTimeMs = bufRefPos.iFrameNum*iMsecPerFrame; // total time in the table
-
-                DP1(_L("CFrameTable::SubmitTableEntry totalTimeMs[%u]"), totalTimeMs);
-
-            if (totalTimeMs> 0)
-
-                {
-
-                // cast calculation to TIn64 or it could lose precision
-
-                TUint64 p = pos;
-
-                p = p*8*1000;
-
-                TUint64 t = totalTimeMs;
-
-                iAvgBitrate = p/t;
-
-                }
-
-            }
-
-        }
-
-
-
-    // need to convert current position to time
-
-    TInt currentTimeMs = iCurrentFrameCount*iMsecPerFrame + iTimeRefMs; // current time position being played
-
-    DP3(_L("CFrameTable::SubmitTableEntry current calculated time ms[%u] iCurrentFrameCount[%u] timeref[%u]"), currentTimeMs, iCurrentFrameCount, iTimeRefMs);
-
-    if (iPosEventMs> 0)
-
-        { // used for seeking
-
-        if (currentTimeMs >= iPosEventMs)
-
-            {
-
-            iPosEventMs = 0;
-
-            DP0(_L("CFrameTable::SubmitTableEntry handle event pos reached"));
-
-            iEventPos = pos;
-
-            iObserver->HandleFrameTableEvent(EPosReached);
-
-            }
-
-        }
-
-
-
-    if (iPlayWindowEndPosEventMs> 0)
-
-        {
-
-        if (currentTimeMs >= iPlayWindowEndPosEventMs)
-
-            {
-
-            iPlayWindowEndPosEventMs = 0;
-
-            DP0(_L("CFrameTable::SubmitTableEntry handle event play window end pos reached"));
-
-            iObserver->HandleFrameTableEvent(EPlayWindowEndPosReached);
-
-            }
-
-        }
-
-
-
-    if (iIntervalEvent> 0)
-
-        {
-
-        if (iIntervalRef == 0)
-
-            {
-
-            iIntervalRef = currentTimeMs;
-
-            }
-
-
-
-        if ((currentTimeMs - iIntervalRef) >= iIntervalEvent)
-
-            {
-
-            iIntervalRef = currentTimeMs;
-
-            iObserver->HandleFrameTableEvent(EDecodeInterval);
-
-            }
-
-        }
-
-
-
-    DP1 (_L ("CFrameTable::SubmitTableEntry, avgBitRate[%u]"), iAvgBitrate);
-
-    return status;
-
-    }
-
-
-
-TInt CFrameTable::SubmitLowResTableEntry(TBufRefPosEntry& aEntry)
-
-    {
-
-    TInt status = KErrNone;
-
-    TBufRefPosEntry lastEntry;
-
-
-
-    TUint numEntries = iLowResFrameTable.Count();
-
-    if (numEntries == 0)
-
-        {
-
-        status = iLowResFrameTable.Append(aEntry);
-
-        ASSERT(status == KErrNone);
-
-        return status;
-
-        }
-
-
-
-    lastEntry = iLowResFrameTable[numEntries-1];
-
-
-
-    ASSERT(aEntry.iFrameNum <= lastEntry.iFrameNum + iFramesPerLowResInterval);
-
-    // note that 0 position table entries can be submitted to the table before it is initialized.
-
-    // If this happens, iFramesPerLowResInterval would still be 0 and the same entry might be appended again
-
-    // so we have a check to make sure that doesn't happen.
-
-    if ((aEntry.iFrameNum == lastEntry.iFrameNum + iFramesPerLowResInterval) && 
-
-        (iFramesPerLowResInterval != 0))
-
-        {
-
-        DP3 (_L ("CFrameTable::SubmitLowResTableEntry, new entry aEntry.iFrameNum[%u], lastEntry.iFrameNum[%u], iFramesPerLowResInterval[%u]"), aEntry.iFrameNum, lastEntry.iFrameNum, iFramesPerLowResInterval);
-
-        DP3 (_L ("CFrameTable::SubmitLowResTableEntry, new entry iPos[%u], iFrameNum[%u], cnt[%u]"), aEntry.iPos, aEntry.iFrameNum, numEntries+1);
-
-
-
-        status = iLowResFrameTable.Append(aEntry);
-
-        ASSERT(status == KErrNone);
-
-        }
-
-    else
-
-        {
-
-        status = KErrArgument;
-
-        }
-
-
-
-    return status;
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::FindFramePosFromTime
-
-// -----------------------------------------------------------------------------
-
-//
-
-/*
-
- Looks in the table for the frame position associated with the given time.
-
- It will return the position and also the time for that frame.
-
- If not found, an error will be returned, and the time and position will be
-
- the closest available in the table.
-
- */
-
-EXPORT_C TInt CFrameTable::FindFramePosFromTime(TUint& aTimeMs, TUint& aPos)
-
-    {
-
-    DP2(_L("CFrameTable::FindFramePosFromTime time[%u], pos[%u]"), aTimeMs, aPos);
-
-    TInt stat = KErrNone;
-
-    // TUint in msec can represent 1193 hours
-
-    TInt tableIndex;
-
-
-
-    // special case for time = 0
-
-    if (aTimeMs == 0)
-
-        {
-
-        aPos = 0;
-
-        DP0(_L("CFrameTable::FindFramePosFromTime time=0 pos=0"));
-
-        return KErrNone;
-
-        }
-
-
-
-    TUint countlr = iLowResFrameTable.Count();
-
-    if ((countlr == 0) || (iMsecPerFrame == 0))
-
-        {
-
-        DP2(_L("CFrameTable::FindFramePosFromTime not ready countlr[%u] iMsecPerFrame[%u]"), countlr, iMsecPerFrame);
-
-        return KErrNotReady;
-
-        }
-
-    TUint frame = aTimeMs/iMsecPerFrame; // calc frame number
-
-    DP1(_L("CFrameTable::FindFramePosFromTime looking for frame[%u]"), frame);
-
-
-
-    // check hi-res table first
-
-    TUint count = iFrameTable.Count();
-
-    if (count == 0)
-
-        {
-
-        stat = KErrNotFound; // use low-res table
-
-        }
-
-    else
-
-        {
-
-        TUint frame0 = iFrameTable[0].iFrameNum; // first frame available (table can shrink)
-
-        DP1(_L("CFrameTable::FindFramePosFromTime frame0[%u]"), frame0);
-
-        if (frame >= frame0) // frame might be in table
-
-
-
-            {
-
-            tableIndex = frame - frame0; // calc index into table
-
-            DP1(_L("CFrameTable::FindFramePosFromTime tableIndex[%u]"), tableIndex);
-
-            if (tableIndex >= count)
-
-                {
-
-                stat = KErrNotFound; // use low-res table
-
-                DP0(_L("CFrameTable::FindFramePosFromTime not found in hi-res"));
-
-                }
-
-            else
-
-                {
-
-                aPos = iFrameTable[tableIndex].iPos;
-
-                iFrameNum = iFrameTable[tableIndex].iFrameNum; // iFrameNum provides frame num after hi-res table is reset
-
-                aTimeMs = iFrameNum * iMsecPerFrame;
-
-                DP4(_L("CFrameTable::FindFramePosFromTime aTimeMs[%u] iFrameNum[%u] iSamplesPerFrame[%u] iSampleRate[%u]"),
-
-                        aTimeMs,iFrameNum,iSamplesPerFrame,iSampleRate);
-
-                }
-
-            }
-
-        else
-
-            {
-
-            stat = KErrNotFound; // use low-res table
-
-            }
-
-        }
-
-    if (stat == KErrNotFound)
-
-        { // check low-res table
-
-        DP0(_L("CFrameTable::FindFramePosFromTime looking in low-res table"));
-
-        if (iFramesPerLowResInterval> 0)
-
-    		{  // first frame is always 0 in low res table - don't need to subtract frame[0]
-
-            tableIndex = frame/iFramesPerLowResInterval; // calc index into table
-
-            DP3(_L("CFrameTable::FindFramePosFromTime tableIndex[%d] frame[%u] iFramesPerLowResInterval[%u]"),
-
-                    tableIndex,frame,iFramesPerLowResInterval);
-
-            if (tableIndex < countlr)
-
-                {
-
-                aPos = iLowResFrameTable[tableIndex].iPos;
-
-                iFrameNum = iLowResFrameTable[tableIndex].iFrameNum; // iFrameNum provides frame num after hi-res table is reset
-
-                aTimeMs = iFrameNum * iMsecPerFrame;
-
-                stat = KErrNone;
-
-                }
-
-            }
-
-        }
-
-
-
-    if (stat == KErrNotFound)
-
-        { // use last in low-res table
-
-        aPos = iLowResFrameTable[countlr-1].iPos;
-
-        iFrameNum = iLowResFrameTable[countlr-1].iFrameNum; // iFrameNum provides frame num after hi-res table is reset
-
-        aTimeMs = iFrameNum * iMsecPerFrame;
-
-        }
-
-    DP4(_L("CFrameTable::FindFramePosFromTime time[%u], pos[%u], stat[%d] iFrameNum sync[%u]"), aTimeMs, aPos, stat, iFrameNum);
-
-    return stat;
-
-    }
-
-
-
-EXPORT_C TInt CFrameTable::FindFrameTimeFromPos(TUint& aTimeMs, TUint& aPos)
-
-    {
-
-    DP1(_L("CFrameTable::FindFrameTimeFromPos pos[%u]"), aPos);
-
-    TInt stat = KErrNotFound;
-
-    //	TBufRefPosEntry temp; // used for array search
-
-    //	temp.iFrameNum = 0;
-
-    //	temp.iPos = aPos;
-
-
-
-    //	stat = iFrameTable.SpecificFindInUnsignedKeyOrder(temp, EArrayFindMode_First);
-
-    TUint count = iFrameTable.Count();
-
-    for (TUint i=0; i<count; i++)
-
-        {
-
-        if (iFrameTable[i].iPos >= aPos)
-
-            {
-
-            stat = i;
-
-            DP4(_L("CFrameTable::FindFrameTimeFromPos hi-res first[%u] last[%u] count[%u] stat[%d]"),
-
-                    iFrameTable[0].iPos, iFrameTable[count-1].iPos, count, stat);
-
-            break;
-
-            }
-
-        }
-
-#ifdef _DEBUG 
-
-    if(count == 0)
-
-        {
-
-        DP0(_L("CFrameTable::FindFrameTimeFromPos hi-res Frame Table: Empty"));
-
-        }
-
-#endif
-
-
-
-    if (stat == KErrNotFound)
-
-        {
-
-        //		stat = iLowResFrameTable.SpecificFindInUnsignedKeyOrder(temp, EArrayFindMode_First);
-
-        count = iLowResFrameTable.Count();
-
-        for (TUint i=0; i<count; i++)
-
-            {
-
-            if (iLowResFrameTable[i].iPos >= aPos)
-
-                {
-
-                stat = i;
-
-                DP4(_L("CFrameTable::FindFrameTimeFromPos lo-res first[%u] last[%u] count[%u] stat[%d]"),
-
-                        iLowResFrameTable[0].iPos, iLowResFrameTable[count-1].iPos, count, stat);
-
-                break;
-
-                }
-
-            }
-
-#ifdef _DEBUG 
-
-        if(count == 0)
-
-            {
-
-            DP0(_L("CFrameTable::FindFrameTimeFromPos lo-res Frame Table: Empty"));
-
-            }
-
-#endif		
-
-
-
-        if (stat != KErrNotFound)
-
-            {
-
-            aPos = iLowResFrameTable[stat].iPos;
-
-            aTimeMs = iLowResFrameTable[stat].iFrameNum * iMsecPerFrame;
-
-            iFrameNum = iLowResFrameTable[stat].iFrameNum; // iFrameNum provides frame num after hi-res table is reset
-
-            DP3(_L("CFrameTable::FindFrameTimeFromPos lo-res iFrameNum[%u] indx[%d] iFrameNum sync[%u]"), iLowResFrameTable[stat].iFrameNum, stat, iFrameNum);
-
-            }
-
-        }
-
-    else
-
-        {
-
-        aPos = iFrameTable[stat].iPos;
-
-        aTimeMs = iFrameTable[stat].iFrameNum * iMsecPerFrame;
-
-        iFrameNum = iFrameTable[stat].iFrameNum; // iFrameNum provides frame num after hi-res table is reset
-
-        DP3(_L("CFrameTable::FindFrameTimeFromPos hi-res iFrameNum[%u] indx[%d] iFrameNum sync[%u]"), iFrameTable[stat].iFrameNum, stat, iFrameNum);
-
-        }
-
-
-
-    DP3(_L("CFrameTable::FindFrameTimeFromPos time[%u] pos[%u] indxstat[%d]"), aTimeMs, aPos, stat);
-
-    if (stat> 0)
-
-        {
-
-        stat = KErrNone;
-
-        }
-
-    return stat;
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::LastFramePos
-
-// -----------------------------------------------------------------------------
-
-//
-
-EXPORT_C TInt CFrameTable::LastFramePos(TUint& aPos)
-
-    {
-
-    TInt stat = KErrNotFound;
-
-    TInt stat1 = KErrNotFound;
-
-    TInt stat2 = KErrNotFound;
-
-    TUint count;
-
-    TInt pos1 = 0;
-
-    TInt pos2 = 0;
-
-
-
-    count = iFrameTable.Count();
-
-    DP1(_L("CFrameTable::LastFramePos count[%u]"), count);
-
-    if (count> 0)
-
-        {
-
-        pos1 = iFrameTable[count-1].iPos;
-
-        stat1 = KErrNone;
-
-        DP1(_L("CFrameTable::LastFramePos last pos in hi-res[%d]"), pos1);
-
-        }
-
-
-
-    count = iLowResFrameTable.Count();
-
-    DP1(_L("CFrameTable::LastFramePos lr count[%u]"), count);
-
-    if (count> 0)
-
-        {
-
-        pos2 = iLowResFrameTable[count-1].iPos;
-
-        stat2 = KErrNone;
-
-        DP1(_L("CFrameTable::LastFramePos last pos in low-res[%d]"), pos2);
-
-        }
-
-
-
-    if ((stat1 == KErrNone) && (stat2 == KErrNone))
-
-        {
-
-        aPos = Max(pos1, pos2);
-
-        stat = KErrNone;
-
-        }
-
-    else if (stat1 == KErrNone)
-
-        {
-
-        aPos = pos1;
-
-        stat = KErrNone;
-
-        }
-
-    else if (stat2 == KErrNone)
-
-        {
-
-        aPos = pos2;
-
-        stat = KErrNone;
-
-        }
-
-    DP1(_L("CFrameTable::LastFramePos aPos[%d]"), aPos);
-
-
-
-    return stat;
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::LastFrameTime
-
-// -----------------------------------------------------------------------------
-
-//
-
-EXPORT_C TInt CFrameTable::LastFrameTime(TUint& aTimeMs)
-
-    {
-
-    DP0(_L("CFrameTable::LastFrameTime"));
-
-    TInt stat = KErrNotFound;
-
-    TInt stat1 = KErrNotFound;
-
-    TInt stat2 = KErrNotFound;
-
-    TUint count;
-
-    TUint frameNum = 0;
-
-    TInt frameNum1 = 0;
-
-    TInt frameNum2 = 0;
-
-
-
-    count = iFrameTable.Count();
-
-    if (count> 0)
-
-        {
-
-        frameNum1 = iFrameTable[count-1].iFrameNum;
-
-        stat1 = KErrNone;
-
-        }
-
-
-
-    count = iLowResFrameTable.Count();
-
-    if (count> 0)
-
-        {
-
-        frameNum2 = iLowResFrameTable[count-1].iFrameNum;
-
-        stat2 = KErrNone;
-
-        }
-
-
-
-    if ((stat1 == KErrNone) && (stat2 == KErrNone))
-
-        {
-
-        frameNum = Max(frameNum1, frameNum2);
-
-        stat = KErrNone;
-
-        }
-
-    else if (stat1 == KErrNone)
-
-        {
-
-        frameNum = frameNum1;
-
-        stat = KErrNone;
-
-        }
-
-    else if (stat2 == KErrNone)
-
-        {
-
-        frameNum = frameNum2;
-
-        stat = KErrNone;
-
-        }
-
-
-
-    aTimeMs = frameNum * iMsecPerFrame;
-
-    DP2(_L("CFrameTable::LastFrameTime time[%u] frame[%u]"),aTimeMs,frameNum);
-
-
-
-    return stat;
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::ResetTable
-
-// -----------------------------------------------------------------------------
-
-//	
-
-EXPORT_C void CFrameTable::ResetTable()
-
-    {
-
-    DP0(_L("CFrameTable::ResetTable"));
-
-
-
-    iFrameTable.Reset();
-
-    iBufCnt = 0;
-
-    iOkToShrink = EFalse;
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::ShrinkTable
-
-// -----------------------------------------------------------------------------
-
-//	
-
-EXPORT_C void CFrameTable::ShrinkTable()
-
-    { // gets called from controller decoder when switching to next buffer
-
-    DP0(_L("CFrameTable::ShrinkTable"));
-
-    if (iBufCnt < KBuffersToKeep)
-
-        {
-
-        iBufCnt++;
-
-        }
-
-    else
-
-        {
-
-        iOkToShrink = ETrue;
-
-        DP0(_L("CFrameTable::ShrinkTable ok to shrink"));
-
-        }
-
-    }
-
-
-
-EXPORT_C TInt CFrameTable::SetSourceReference(TUint aTimeMs, TUint aPos)
-
-    { // if position is unknown it should always be set to 0 as the reference offset and time will be used instead
-
-    // This is used to set the offset which is added to future frame positions submitted
-
-    // This frame table can get reset when seeking and needs to know where it is in the source
-
-    DP2(_L("CFrameTable::SetOffset, aTimeMs[%u], aPos[%u]"), aTimeMs, aPos);
-
-    TInt stat = KErrNone;
-
-    iTimeRefMs = aTimeMs;
-
-    iCurrentFrameCount = 0;
-
-    iIntervalRef = 0;
-
-    iOffset = aPos;
-
-    if (aTimeMs == 0)
-
-        {
-
-        iFrameNum = 0;
-
-        }
-
-    if (iFrameTable.Count() == 0)
-
-        { // this is to make sure the table has at least one entry in case playback looks for a position in the buffers after seeking
-
-        SubmitTableEntry(0);
-
-        //		iCurrentFrameCount--; // since this is not a decoded frame
-
-        }
-
-    return stat;
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::RegisterForEvent
-
-// -----------------------------------------------------------------------------
-
-//
-
-EXPORT_C TInt CFrameTable::RegisterForEvent(TFrameTableEvent aEvent,
-
-        MFrameTableEventObserver* aObserver,
-
-        TUint aParam)
-
-    {
-
-    DP2(_L("CFrameTable::RegisterForEvent event[%d] param[%u]"), aEvent, aParam);
-
-
-
-    TInt status = KErrNone;
-
-    iObserver = aObserver;
-
-
-
-    switch (aEvent)
-
-        {
-
-        case EPosReached:
-
-        iPosEventMs = aParam;
-
-        break;
-
-
-
-        case EPlayWindowEndPosReached:
-
-        iPlayWindowEndPosEventMs = aParam;
-
-        break;
-
-
-
-        case EDecodeInterval:
-
-
-
-        if (aParam> 0) // msec
-
-
-
-            {
-
-            iIntervalRef = 0;
-
-            iIntervalEvent = aParam;
-
-            }
-
-        else
-
-        return KErrArgument;
-
-
-
-        break;
-
-
-
-        default:
-
-        status = KErrUnknown;
-
-        break;
-
-        }
-
-
-
-    return status;
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::UnRegisterForEvent
-
-// -----------------------------------------------------------------------------
-
-//
-
-EXPORT_C TInt CFrameTable::UnRegisterForEvent(TFrameTableEvent aEvent, MFrameTableEventObserver* /*aObserver*/)
-
-    {
-
-    DP1(_L("CFrameTable::UnRegisterForEvent event[%d]"), aEvent);
-
-
-
-    TInt status = KErrNone;
-
-
-
-    switch (aEvent)
-
-        {
-
-        case EPosReached:
-
-        iPosEventMs = 0;
-
-        break;
-
-
-
-        case EPlayWindowEndPosReached:
-
-        iPlayWindowEndPosEventMs = 0;
-
-        break;
-
-
-
-        case EDecodeInterval:
-
-        iIntervalEvent = 0;
-
-        break;
-
-
-
-        default:
-
-        status = KErrUnknown;
-
-        break;
-
-        }
-
-
-
-    return status;
-
-    }
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::Bitrate
-
-// -----------------------------------------------------------------------------
-
-//	
-
-EXPORT_C TInt CFrameTable::Bitrate()
-
-    {
-
-    return iAvgBitrate;
-
-    }
-
-
-
-// ========================== OTHER EXPORTED FUNCTIONS =========================
-
-
-
-// -----------------------------------------------------------------------------
-
-// CFrameTable::CalcFrameFromTimeMs
-
-// -----------------------------------------------------------------------------
-
-//
-
-TUint CFrameTable::CalcFrameFromTimeMs(TUint aTimeMs)
-
-    { // TUint in msec can represent 1193 hours
-
-    TUint frame = 0;
-
-
-
-    if (iMsecPerFrame > 0)
-
-        {
-
-        frame = aTimeMs/iMsecPerFrame;
-
-        }
-
-
-
-    return frame;
-
-    }
-
-
-
-EXPORT_C TInt CFrameTable::IsSeeking(TBool& aIsSeeking)
-
-    {
-
-    aIsSeeking = (iPosEventMs> 0);
-
-    return KErrNone;
-
-    }
-
-
-
-EXPORT_C TInt CFrameTable::GetLastPosEvent(TUint& aPos)
-
-    {
-
-    aPos = iEventPos;
-
-    return KErrNone;
-
-    }
-
-
-
-// End of File
-
-
-