/* ------------------------------------------------------------------
 * Copyright (C) 1998-2009 PacketVideo
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 * -------------------------------------------------------------------
 */
#ifndef TEST_PV_PLAYER_ENGINE_H_INCLUDED
#define TEST_PV_PLAYER_ENGINE_H_INCLUDED

#ifndef TEST_CASE_H_INCLUDED
#include "test_case.h"
#endif

#ifndef TEXT_TEST_INTERPRETER_H_INCLUDED
#include "text_test_interpreter.h"
#endif

#ifndef OSCL_SCHEDULER_AO_H_INCLUDED
#include "oscl_scheduler_ao.h"
#endif

#ifndef OSCL_EXCEPTION_H_INCLUDE
#include "oscl_exception.h"
#endif

#ifndef PV_PLAYER_FACTORY_H_INCLUDED
#include "pv_player_factory.h"
#endif

#ifndef PV_PLAYER_INTERFACE_H_INCLUDE
#include "pv_player_interface.h"
#endif

#ifndef PV_ENGINE_OBSERVER_H_INCLUDED
#include "pv_engine_observer.h"
#endif

#ifndef PVLOGGER_H_INCLUDED
#include "pvlogger.h"
#endif

#ifndef PVLOGGER_STDERR_APPENDER_H_INCLUDED
#include "pvlogger_stderr_appender.h"
#endif

#ifndef PVLOGGER_TIME_AND_ID_LAYOUT_H_INCLUDED
#include "pvlogger_time_and_id_layout.h"
#endif

#ifndef PVMI_MEDIA_IO_FILEOUTPUT_H_INCLUDED
#include "pvmi_media_io_fileoutput.h"
#endif

#ifndef TEST_PV_PLAYER_ENGINE_CONFIG_H_INCLUDED
#include "test_pv_player_engine_config.h"
#endif

#ifndef MEDIA_CLOCK_CONVERTER
#include "media_clock_converter.h"
#endif

template<class DestructClass>
class LogAppenderDestructDealloc : public OsclDestructDealloc
{
    public:
        virtual void destruct_and_dealloc(OsclAny *ptr)
        {
            delete((DestructClass*)ptr);
        }
};

class pvplayer_engine_test_suite : public test_case
{
    public:
        pvplayer_engine_test_suite(char *aFilename, PVMFFormatType aFiletype, int32 aFirstTest, int32 aLastTest, bool aCompV, bool aCompA, bool aFInput, bool aBCS, int32 aLogLevel, int32 aLogNode, int32 aLogText, int32 aLogMem, int32 aFileFormatType, bool  aProxyEnabled);
};


// Observer class for pvPlayer async test to notify completion of test
class pvplayer_async_test_observer
{
    public:
        // Signals completion of test. Test instance can be deleted after this callback completes.
        virtual void TestCompleted(test_case &) = 0;
};


class PVPlayerAsyncTestParam
{
    public:
        pvplayer_async_test_observer* iObserver;
        test_case* iTestCase;
        FILE* iTestMsgOutputFile;
        const char* iFileName;
        PVMFFormatType iFileType;
        bool iCompressedVideo;
        bool iCompressedAudio;
        bool iFileInput;
        bool iBCS;
        int iCurrentTestNumber;
        bool iProxyEnabled;
        //explicit copy constructor
        void Copy(const PVPlayerAsyncTestParam& aParam)
        {
            iObserver = aParam.iObserver;
            iTestCase = aParam.iTestCase;
            iTestMsgOutputFile = aParam.iTestMsgOutputFile;
            iFileName = aParam.iFileName;
            iFileType = aParam.iFileType;
            iCompressedVideo = aParam.iCompressedVideo;
            iCompressedAudio = aParam.iCompressedAudio;
            iFileInput = aParam.iFileInput;
            iBCS = aParam.iBCS;
            iCurrentTestNumber = aParam.iCurrentTestNumber;
            iProxyEnabled = aParam.iProxyEnabled;
        }
} ;

#define PVPATB_TEST_IS_TRUE(condition) (iTestCase->test_is_true_stub( (condition), (#condition), __FILE__, __LINE__ ))

typedef enum
{
    STATE_CREATE,
    STATE_QUERYINTERFACE,
    STATE_ADDDATASOURCE,
    STATE_CONFIGPARAMS,
    STATE_INIT,
    STATE_QUERYLICENSEACQIF,
    STATE_ACQUIRELICENSE,
    STATE_CANCEL_ACQUIRELICENSE,
    STATE_INIT2,
    STATE_GETMETADATAKEYLIST,
    STATE_GETMETADATAVALUELIST,
    STATE_ADDDATASINK_VIDEO,
    STATE_ADDDATASINK_AUDIO,
    STATE_PREPARE,
    STATE_WAIT_FOR_DATAREADY,
    STATE_WAIT_FOR_BUFFCOMPLETE,
    STATE_CANCELALL,
    STATE_WAIT_FOR_CANCELALL,
    STATE_START,
    STATE_SETPLAYBACKRANGE,
    STATE_PAUSE,
    STATE_RESUME,
    STATE_EOSNOTREACHED,
    STATE_STOP,
    STATE_REMOVEDATASINK_VIDEO,
    STATE_REMOVEDATASINK_AUDIO,
    STATE_RESET,
    STATE_REMOVEDATASOURCE,
    STATE_CLEANUPANDCOMPLETE,
    STATE_PROTOCOLROLLOVER,
    STATE_RECONNECT
} PVTestState;

/*!
** PVPlayerTestMioFactory: MIO Factory functions
*/
class PvmiMIOControl;
class PVPlayerTestMioFactory
{
    public:
        static PVPlayerTestMioFactory* Create();
        virtual ~PVPlayerTestMioFactory() {}

        virtual PvmiMIOControl* CreateAudioOutput(OsclAny* aParam) = 0;
        virtual PvmiMIOControl* CreateAudioOutput(OsclAny* aParam, MediaType aMediaType, bool aCompressedAudio = false)
        {
            OSCL_UNUSED_ARG(aParam);
            OSCL_UNUSED_ARG(aMediaType);
            OSCL_UNUSED_ARG(aCompressedAudio);
            return 0;
        };
        virtual PvmiMIOControl* CreateAudioOutput(OsclAny* aParam, PVRefFileOutputTestObserver* aObserver, bool aActiveTiming, uint32 aQueueLimit, bool aSimFlowControl, bool logStrings = true) = 0;
        virtual void DestroyAudioOutput(PvmiMIOControl* aMio) = 0;
        virtual PvmiMIOControl* CreateVideoOutput(OsclAny* aParam) = 0;
        virtual PvmiMIOControl* CreateVideoOutput(OsclAny* aParam, MediaType aMediaType, bool aCompressedVideo = false)
        {
            OSCL_UNUSED_ARG(aParam);
            OSCL_UNUSED_ARG(aMediaType);
            OSCL_UNUSED_ARG(aCompressedVideo);
            return 0;
        };
        virtual PvmiMIOControl* CreateVideoOutput(OsclAny* aParam, PVRefFileOutputTestObserver* aObserver, bool aActiveTiming, uint32 aQueueLimit, bool aSimFlowControl, bool logStrings = true) = 0;
        virtual void DestroyVideoOutput(PvmiMIOControl* aMio) = 0;
        virtual PvmiMIOControl* CreateTextOutput(OsclAny* aParam) = 0;
        virtual PvmiMIOControl* CreateTextOutput(OsclAny* aParam, MediaType aMediaType)
        {
            OSCL_UNUSED_ARG(aParam);
            OSCL_UNUSED_ARG(aMediaType);
            return 0;
        };
        virtual void DestroyTextOutput(PvmiMIOControl* aMio) = 0;
};

// The base class for all pvplayer engine asynchronous tests
class pvplayer_async_test_base : public OsclTimerObject,
            public PVCommandStatusObserver,
            public PVInformationalEventObserver,
            public PVErrorEventObserver
{
    public:
        pvplayer_async_test_base(PVPlayerAsyncTestParam aTestParam) :
                OsclTimerObject(OsclActiveObject::EPriorityNominal, "PVPlayerEngineAsyncTestBase")
        {
            OSCL_ASSERT(aTestParam.iObserver != NULL);
            OSCL_ASSERT(aTestParam.iTestCase != NULL);
            iObserver = aTestParam.iObserver;
            iTestCase = aTestParam.iTestCase;
            iTestMsgOutputFile = aTestParam.iTestMsgOutputFile;
            iFileName = aTestParam.iFileName;
            iFileType = aTestParam.iFileType;
            iCompressedVideo = aTestParam.iCompressedVideo;
            iCompressedAudio = aTestParam.iCompressedAudio;
            iFileInput = aTestParam.iFileInput;
            iBCS = aTestParam.iBCS;
            iTestCaseName = _STRLIT_CHAR(" ");
            iTestNumber = aTestParam.iCurrentTestNumber;
            iProxyEnabled = aTestParam.iProxyEnabled;

            // Initialize the variables to use for context data testing
            iContextObjectRefValue = 0x5C7A; // some random number
            iContextObject = iContextObjectRefValue;

            iMioFactory = PVPlayerTestMioFactory::Create();
            OSCL_ASSERT(iMioFactory);
        }

        virtual ~pvplayer_async_test_base()
        {
            if (iMioFactory)
            {
                delete iMioFactory;
                iMioFactory = NULL;
            }
        }

        virtual void StartTest() = 0;

        virtual void CommandCompleted(const PVCmdResponse& /*aResponse*/) {}
        virtual void HandleErrorEvent(const PVAsyncErrorEvent& /*aEvent*/) {}
        virtual void HandleInformationalEvent(const PVAsyncInformationalEvent& /*aEvent*/) {}

        // Utility function to retrieve the filename from string and replace ',' with '_'
        void RetrieveFilename(const oscl_wchar* aSource, OSCL_wHeapString<OsclMemAllocator>& aFilename)
        {
            if (aSource == NULL)
            {
                return;
            }

            // Find the last '\' or '/' in the string
            oscl_wchar* lastslash = (oscl_wchar*)aSource;
            bool foundlastslash = false;
            while (!foundlastslash)
            {
                const oscl_wchar* tmp1 = oscl_strstr(lastslash, _STRLIT_WCHAR("\\"));
                const oscl_wchar* tmp2 = oscl_strstr(lastslash, _STRLIT_WCHAR("/"));
                if (tmp1 != NULL)
                {
                    lastslash = (oscl_wchar*)tmp1 + 1;
                }
                else if (tmp2 != NULL)
                {
                    lastslash = (oscl_wchar*)tmp2 + 1;
                }
                else
                {
                    foundlastslash = true;
                }
            }

            // Now copy the filename
            if (lastslash)
            {
                aFilename = lastslash;
            }

            // Replace each '.' in filename with '_'
            bool finishedreplace = false;
            while (!finishedreplace)
            {
                oscl_wchar* tmp = OSCL_CONST_CAST(oscl_wchar*, oscl_strstr(aFilename.get_cstr(), _STRLIT_WCHAR(".")));
                if (tmp != NULL)
                {
                    oscl_strncpy(tmp, _STRLIT_WCHAR("_"), 1);
                }
                else
                {
                    finishedreplace = true;
                }
            }
        }

        pvplayer_async_test_observer* iObserver;
        test_case* iTestCase;
        FILE* iTestMsgOutputFile;
        const char *iFileName;
        PVMFFormatType iFileType;
        bool iCompressedVideo;
        bool iCompressedAudio;
        bool iProxyEnabled;
        bool iFileInput;
        bool iBCS;

        OSCL_HeapString<OsclMemAllocator> iTestCaseName;

        uint32 iContextObject;
        uint32 iContextObjectRefValue;

        int32 iTestNumber;

        // Media IO Factory
        PVPlayerTestMioFactory* iMioFactory;
};


// test_base-based class which will run async tests on pvPlayer engine
class pvplayer_engine_test : public test_case,
            public pvplayer_async_test_observer
{
    public:
        pvplayer_engine_test(char *aFileName, PVMFFormatType aFileType, int32 aFirstTest, int32 aLastTest,
                             bool aCompV, bool aCompA, bool aFInput, bool aBCS, int32 aLogLevel, int32 aLogNode, int32 aLogText, int32 aLogMem, int32 aFileFormatType, bool aProxyEnabled);
        ~pvplayer_engine_test();

        // Note: for command line options to work, the local tests need to be 0-99,
        // Download tests 100-199,
        // Streaming tests 200-299.
        // Interactive test 800-899
        enum PVPlayerEngineAsyncTests
        {
            NewDeleteTest = 0,
            OpenPlayStopResetTest,
            OpenPlayStopResetCPMTest,
            MetaDataTest,
            TimingTest,
            InvalidStateTest,
            PreparedStopTest,
            VideoOnlyPlay7Seconds,
            Play5StopPlay10StopReset,
            PauseResume,

            PlayPauseStop = 10,
            OutsideNodeForVideoSink,
            GetPlayerState,
            GetCurrentPosition,
            PlaySetStopPosition,
            PlaySetStopPositionVidFrameNum,
            SetStartPositionPlayStop,
            SetPlayRangePlay,
            SetPlayRangeVidFrameNumPlay,
            PlaySetPlayRangeStop,

            PlaySetPlayRangeVidFrameNumStop = 20,
            TrackLevelInfoTest,
            SetPlaybackRate2X,
            SetPlaybackRateFifth,
            CapConfigInterfaceTest,
            QueuedCommandsTest,
            LoopingTest,
            WaitForEOSTest,
            MultiplePauseResumeTest,
            MultipleRepositionTest, // Start of local tests using media IO node

            MediaIONodeOpenPlayStopTest = 30,
            MediaIONodePlayStopPlayTest,
            MediaIONodePauseResumeTest,
            MediaIONodePlaySetPlaybackRangeTest,
            MediaIONodeSetPlaybackRate3XTest,
            MediaIONodeSetPlaybackRateHalfTest,
            MediaIONodeLoopingTest,
            MediaIONodeWaitForEOSTest,
            MediaIOMultiplePauseResumeTest,
            MediaIOMultipleRepositionTest,

            MediaIORepositionConfigTest = 40,
            MediaIONodeEOSLoopingTest,
            MediaIONodeRepositionDuringPreparedTest,
            MediaIONodePlaySetPlaybackRangeStopPlayTest,
            MediaIONodePlayStopSetPlaybackRangePlayStopTest,
            MediaIONodeSetPlaybackRangeNearEndStartTest,
            MediaIONodePlayRepositionNearEndOfClipTest,
            MediaIONodeForwardStepToEOSTest,
            MediaIONodeForwardStepTest,
            MediaIONodeForwardStepActiveAudioTest,
            MediaIONodeBackwardTest,

            MP4M4VAMRFileOpenPlayStopTest = 51, // Start of testing various local files
            MP4M4VAMRFilePlayStopPlayStopTest,
            MP4H263AMRFileOpenPlayStopTest,
            MP4H263AMRFilePlayStopPlayStopTest,
            MP4AVCAMRFileOpenPlayStopTest,
            MP4AVCAMRFilePlayStopPlayStopTest,
            MP4AMRFileOpenPlayStopTest,
            MP4AMRFilePlayStopPlayStopTest,
            MP4AACFileOpenPlayStopTest,

            MP4AACFilePlayStopPlayStopTest = 60,
            MP4M4VAMRTextFileOpenPlayStopTest,
            MP4M4VAMRTextFilePlayStopPlayStopTest,
            AMRIETFFileOpenPlayStopTest,
            AMRIETFFilePlayStopPlayStopTest,
            AMRIF2FileOpenPlayStopTest,
            AMRIF2FilePlayStopPlayStopTest,
            AACADTSFileOpenPlayStopTest,
            AACADTSFilePlayStopPlayStopTest,
            AACADIFFileOpenPlayStopTest,

            AACADIFFilePlayStopPlayStopTest = 70,
            AACRawFileOpenPlayStopTest,
            AACRawFilePlayStopPlayStopTest,
            MP3CBRFileOpenPlayStopTest,
            MP3CBRFilePlayStopPlayStopTest,
            MP3VBRFileOpenPlayStopTest,
            MP3VBRFilePlayStopPlayStopTest,
            WAVFileOpenPlayStopTest,
            WAVFilePlayStopPlayStopTest,
            ASFFileOpenPlayStopTest,
            ASFFilePlayStopPlayStopTest = 80,

            //real audio test case
            RealAudioFileOpenPlayStopTest = 81,
            SetPlaybackAfterPrepare,

            MediaIONodeBackwardForwardTest = 83,
            MediaIONodePauseNearEOSBackwardResumeTest,
            MediaIONodeMultiplePauseSetPlaybackRateResumeTest,
            MediaIONodeBackwardNearEOSForwardNearStartTest,

            MultiplePauseSeekResumeTest = 87,
            MultipleSetStartPositionPlayStopTest,

            OpenPlayStopResetCPMRecognizeTest = 89, //Start of testing recognizer using DataStream input

            LastLocalTest,//placeholder

            FirstDownloadTest = 100,  //placeholder

            FTDownloadOpenPlayStopTest = 101,

            ProgDownloadPlayAsapTest, //102
            ProgDownloadDownloadThenPlayTest, //103
            ProgDownloadDownloadOnlyTest, //104
            ProgDownloadCancelDuringInitTest, //105
            ProgDownloadContentTooLarge, //106
            ProgDownloadTruncated, //107
            ProgDownloadProtocolRolloverTest, //108
            ProgDownloadSetPlayBackRangeTest, //109
            ProgDownloadPlayUtilEOSTest, //110
            FTDownloadOpenPlayUntilEOSTest, //111

            ProgDownloadDownloadThenPlayPauseTest,//112
            ProgDownloadDownloadThenPlayRepositionTest,//113
            ProgDownloadCancelDuringInitDelayTest, //114
            ProgDownloadPauseResumeAfterUnderflowTest, //115

            FTDownloadPlayStopPlayTest, //116
            ProgDownloadPlayStopPlayTest, //117

            LastDownloadTest, //placeholder

            ProgPlaybackMP4UntilEOSTest = 150,
            ProgPlaybackMP4ShortTest, //151
            ProgPlaybackMP4ShortPauseResumeTest, //152
            ProgPlaybackMP4LongPauseResumeTest, //153
            ProgPlaybackMP4StartPauseSeekResumeTwiceTest, //154
            ProgPlaybackMP4SeekStartTest, //155
            ProgPlaybackMP4StartPauseSeekResumeLoopTest, //156
            ProgPlaybackMP4SeekForwardStepLoopTest,	//157
            ProgPlaybackPlayStopPlayTest, //158
            ProgPlaybackMP4SeekToBOCAfterDownloadCompleteTest, //159
            ProgPlaybackMP4SeekInCacheAfterDownloadCompleteTest, //160
            ProgPlaybackMP4EOSStopPlayAgainTest, //161

            LastProgressivePlaybackTest, //placeholder

            FirstStreamingTest = 200, //placeholder

            StreamingOpenPlayStopTest, //201
            StreamingOpenPlayPausePlayStopTest, //202
            StreamingOpenPlaySeekStopTest, //203
            StreamingCancelDuringPrepareTest, //204

            LastStreamingTest, //placeholder

            //Multiple Instance tests.
            MultipleInstanceOpenPlayStopTest = 300,
            MultipleThreadOpenPlayStopTest = 301,
            //this range reserved for future multiple instance tests.
            LastMultipleInstanceTest = 325,//placeholder

            FirstProjTest = 700, // placeholder
            // Project specific unit tests should have numbers 701 to 799
            LastProjTest = 799,

            FirstInteractiveTest = 800, // placeholder

            PrintMetadataTest = 801,
            PrintMemStatsTest,
            PlayUntilEOSTest,
            ReleaseMetadataTest,

            StreamingOpenPlayUntilEOSTest = 851,//851
            StreamingOpenPlayPausePlayUntilEOSTest,//852
            StreamingOpenPlaySeekPlayUntilEOSTest, //853
            StreamingJitterBufferAdjustUntilEOSTest, //854
            StreamingCloakingOpenPlayUntilEOSTest, //855
            StreamingPlayBitStreamSwitchPlayUntilEOSTest,//856
            StreamingMultiplePlayUntilEOSTest,//857
            StreamingMultipleCloakingPlayUntilEOSTest, //858
            StreamingProtocolRollOverTest, //859
            StreamingProtocolRollOverTestWithUnknownURLType, //860
            StreamingPlayListSeekTest, //861
            StreamingSeekAfterEOSTest, //862
            /*
             * TC 863: This test case checks the engine behavior when the server responds
             * with any of the following error codes - 404 (URL Not Found), 415 (Media Unsupported),
             * 457 (Invalid Range). In all cases, the test should not error out, and complete as in TC 861
             */
            StreamingPlayListErrorCodeTest, // 863
            StreamingOpenPlayMultipleSeekToEndOfClipUntilEOSTest, //864


            StreamingOpenPlayMultiplePausePlayUntilEOSTest = 875, //875

            DVBH_StreamingOpenPlayStopTest = 876, //876
            DVBH_StreamingOpenPlayUntilEOSTest, //877
            StreamingLongPauseTest, //878

            CPM_DLA_OMA1PASSTRHU_OpenFailAuthPlayStopResetTest, //879
            CPM_DLA_OMA1PASSTRHU_OpenPlayStopResetTest, //880
            CPM_DLA_OMA1PASSTRHU_UnknownContentOpenPlayStopResetTest, //881

            StreamingOpenPlayUntilEOSTestWithFileHandle,//882
            //883-888 available

            //GetLicense returns commandCompleted before CancelLic could be triggered
            CPM_DLA_OMA1PASSTRHU_CancelAcquireLicenseTooLate_CancelFails = 889, //889
            //GetLicense does not commandComplete, cancelLic is triggered
            CPM_DLA_OMA1PASSTRHU_CancelAcquireLicense_CancelSucceeds, //890
            CPM_DLA_OMA1PASSTRHU_ContentNotSupported, //891

            StreamingOpenPlayForwardPlayUntilEOSTest, //892

            //Multiple CPM Plugins
            OpenPlayStop_MultiCPMTest, //893
            StreamingLongPauseSeekTest,	//894

            GenericReset_AddDataSource = 900,
            GenericReset_Init,
            GenericReset_AddDataSinkVideo,
            GenericReset_AddDataSinkAudio,
            GenericReset_Prepare,
            GenericReset_Start,
            GenericReset_Pause,
            GenericReset_Resume,
            GenericReset_Stop,
            //GenericReset_Reset,
            GenericReset_SetPlaybackRange,

            GenericDelete_AddDataSource = 910,
            GenericDelete_Init,
            GenericDelete_AddDataSinkVideo,
            GenericDelete_AddDataSinkAudio,
            GenericDelete_Prepare,
            GenericDelete_Start,
            GenericDelete_Pause,
            GenericDelete_Resume,
            GenericDelete_Stop,
            //GenericDelete_Reset,
            GenericDelete_SetPlaybackRange,

            GenericDeleteWhileProc_AddDataSource = 920,
            GenericDeleteWhileProc_Init,
            GenericDeleteWhileProc_AddDataSinkVideo,
            GenericDeleteWhileProc_AddDataSinkAudio,
            GenericDeleteWhileProc_Prepare,
            GenericDeleteWhileProc_Start,
            GenericDeleteWhileProc_Pause,
            GenericDeleteWhileProc_Resume,
            GenericDeleteWhileProc_Stop,
            //GenericDeleteWhileProc_Reset,
            GenericDeleteWhileProc_SetPlaybackRange,

            GenericCancelAll_AddDataSource = 930,
            GenericCancelAll_Init,
            GenericCancelAll_AddDataSinkVideo,
            GenericCancelAll_AddDataSinkAudio,
            GenericCancelAll_Prepare,
            GenericCancelAll_Start,
            GenericCancelAll_Pause,
            GenericCancelAll_Resume,
            GenericCancelAll_Stop,
            //GenericCancelAll_Reset,
            GenericCancelAll_SetPlaybackRange,

            GenericCancelAllWhileProc_AddDataSource = 940,
            GenericCancelAllWhileProc_Init,
            GenericCancelAllWhileProc_AddDataSinkVideo,
            GenericCancelAllWhileProc_AddDataSinkAudio,
            GenericCancelAllWhileProc_Prepare,
            GenericCancelAllWhileProc_Start,
            GenericCancelAllWhileProc_Pause,
            GenericCancelAllWhileProc_Resume,
            GenericCancelAllWhileProc_Stop,
            //GenericCancelAllWhileProc_Reset,
            GenericCancelAllWhileProc_SetPlaybackRange,

            // ACCESS DRM plugin tests
            FirstAccessCPMTest = 960,
            QueryEngine_AccessCPMTest,			//961
            OpenPlayStop_AccessCPMTest, 		//962
            PlayStopPlayStop_AccessCPMTest,		//963
            StartupMeasurement_AccessCPMTest, 	//964
            LastAccessCPMTest,

            GenericNetworkDisconnect_AddDataSource = 1051,
            GenericNetworkDisconnect_Init,
            GenericNetworkDisconnect_AddDataSinkVideo,
            GenericNetworkDisconnect_AddDataSinkAudio,
            GenericNetworkDisconnect_Prepare,
            GenericNetworkDisconnect_Start,
            GenericNetworkDisconnect_Pause,
            GenericNetworkDisconnect_Resume,
            GenericNetworkDisconnect_Stop,
            GenericNetworkDisconnect_SetPlaybackRange,

            GenericNetworkDisconnectWhileProc_AddDataSource = 1061,
            GenericNetworkDisconnectWhileProc_Init,
            GenericNetworkDisconnectWhileProc_AddDataSinkVideo,
            GenericNetworkDisconnectWhileProc_AddDataSinkAudio,
            GenericNetworkDisconnectWhileProc_Prepare,
            GenericNetworkDisconnectWhileProc_Start,
            GenericNetworkDisconnectWhileProc_Pause,
            GenericNetworkDisconnectWhileProc_Resume,
            GenericNetworkDisconnectWhileProc_Stop,
            GenericNetworkDisconnectWhileProc_SetPlaybackRange,

            GenericNetworkDisconnectReconnect_AddDataSource = 1071,
            GenericNetworkDisconnectReconnect_Init,
            GenericNetworkDisconnectReconnect_AddDataSinkVideo,
            GenericNetworkDisconnectReconnect_AddDataSinkAudio,
            GenericNetworkDisconnectReconnect_Prepare,
            GenericNetworkDisconnectReconnect_Start,
            GenericNetworkDisconnectReconnect_Pause,
            GenericNetworkDisconnectReconnect_Resume,
            GenericNetworkDisconnectReconnect_Stop,
            GenericNetworkDisconnectReconnect_SetPlaybackRange,

            GenericNetworkDisconnectReconnectWhileProc_AddDataSource = 1081,
            GenericNetworkDisconnectReconnectWhileProc_Init,
            GenericNetworkDisconnectReconnectWhileProc_AddDataSinkVideo,
            GenericNetworkDisconnectReconnectWhileProc_AddDataSinkAudio,
            GenericNetworkDisconnectReconnectWhileProc_Prepare,
            GenericNetworkDisconnectReconnectWhileProc_Start,
            GenericNetworkDisconnectReconnectWhileProc_Pause,
            GenericNetworkDisconnectReconnectWhileProc_Resume,
            GenericNetworkDisconnectReconnectWhileProc_Stop,
            GenericNetworkDisconnectReconnectWhileProc_SetPlaybackRange,

            GenericNetworkDisconnectCancelAll_AddDataSource = 1091,
            GenericNetworkDisconnectCancelAll_Init,
            GenericNetworkDisconnectCancelAll_AddDataSinkVideo,
            GenericNetworkDisconnectCancelAll_AddDataSinkAudio,
            GenericNetworkDisconnectCancelAll_Prepare,
            GenericNetworkDisconnectCancelAll_Start,
            GenericNetworkDisconnectCancelAll_Pause,
            GenericNetworkDisconnectCancelAll_Resume,
            GenericNetworkDisconnectCancelAll_Stop,
            GenericNetworkDisconnectCancelAll_SetPlaybackRange,

            GenericNetworkDisconnectCancelAllWhileProc_AddDataSource = 1101,
            GenericNetworkDisconnectCancelAllWhileProc_Init,
            GenericNetworkDisconnectCancelAllWhileProc_AddDataSinkVideo,
            GenericNetworkDisconnectCancelAllWhileProc_AddDataSinkAudio,
            GenericNetworkDisconnectCancelAllWhileProc_Prepare,
            GenericNetworkDisconnectCancelAllWhileProc_Start,
            GenericNetworkDisconnectCancelAllWhileProc_Pause,
            GenericNetworkDisconnectCancelAllWhileProc_Resume,
            GenericNetworkDisconnectCancelAllWhileProc_Stop,
            GenericNetworkDisconnectCancelAllWhileProc_SetPlaybackRange,

            GenericNetworkDisconnectCancelAllWhileProtocolRollover,

            GenericOpenPlayMultiplePauseResumeUntilEOSTest = 1112,
            GenericOpenPlayMultipleSeekUntilEOSTest,

            GenericOpenPlayStop_SleepAddDataSource = 1114,
            GenericOpenPlayStop_SleepInit,
            GenericOpenPlayStop_SleepAddDataSinkVideo,
            GenericOpenPlayStop_SleepAddDataSinkAudio,
            GenericOpenPlayStop_SleepPrepare,
            GenericOpenPlayStop_SleepGetMetaDataValueList,
            GenericOpenPlayStop_SleepStop,

            GenericOpenPlayPauseResumeSeekStopProfiling = 1125,
            GenericOpenPlayPauseRepositionResumeUntilEOSTest,
            GenericOpenPlayPauseRepositionResumeNetworkDisconnectCancelAllTest,
            GenericOpenSetPlaybackRangeStartPlayStopTest,
            GenericOpenPlayRepositionToEndTest,
            GenericPVMFErrorCorruptReNotified,
            GenericOpenPlayPauseGetMetaDataUntilEOSTest,
            GenericOpenGetMetaDataPicTest,//1132

            //1133-1149 available.

            //BEGIN JANUS CPM TESTS
            CleanDrmData_JanusCPMTest = 1150,
            LoadLicense_JanusCPMTest,//1151
            OpenPlayStop_JanusCPMTest, //1152
            PlayStopPlayStop_JanusCPMTest,//1153
            QueryEngine_JanusCPMTest,//1154
            StartupMeasurement_JanusCPMTest, //1155
            //Janus DLA tests
            DLA_CleanDrmData_JanusCPMTest,//1156
            DLA_OpenPlayStop_JanusCPMTest,//1157
            DLA_LicenseCapture_JanusCPMTest,//1158
            DLA_CancelAcquireLicense_JanusCPMTest,//1159
            //Janus streaming tests.
            DLA_StreamingOpenPlayUntilEOST_JanusCPMTest,//1160
            DLA_StreamingOpenPlayPausePlayUntilEOS_JanusCPMTest,//1161
            DLA_StreamingOpenPlaySeekPlayUntilEOS_JanusCPMTest,//1162
            DLA_StreamingMultiplePlayUntilEOS_JanusCPMTest,//1163
            DLA_StreamingProtocolRollOverTest_JanusCPMTest,//1164
            DLA_StreamingProtocolRollOverTestWithUnknownURLType_JanusCPMTest,//1165
            DLA_StreamingCancelAcquireLicense_JanusCPMTest,//1166
            //Janus PDL tests
            DLA_PDL_OpenPlayUntilEOS_JanusCPMTest,//1167

            //this range RESERVED for future Janus tests.

            FirstDLAStreamingTest = 1200, //placeholder
            //note these are all Janus CPM tests

            DLA_StreamingCancelAll_AddDataSource = 1201,
            DLA_StreamingCancelAll_Init,
            DLA_StreamingCancelAll_LicenseAcquired,
            DLA_StreamingCancelAll_AddDataSinkVideo,
            DLA_StreamingCancelAll_AddDataSinkAudio,
            DLA_StreamingCancelAll_Prepare,
            DLA_StreamingCancelAll_Start,
            DLA_StreamingCancelAll_Pause,
            DLA_StreamingCancelAll_Resume,
            DLA_StreamingCancelAll_Stop,
            DLA_StreamingCancelAll_SetPlaybackRange,

            DLA_StreamingCancelAllWhileProc_AddDataSource = 1212,
            DLA_StreamingCancelAllWhileProc_Init,
            DLA_StreamingCancelAllWhileProc_LicenseAcquired,
            DLA_StreamingCancelAllWhileProc_AddDataSinkVideo,
            DLA_StreamingCancelAllWhileProc_AddDataSinkAudio,
            DLA_StreamingCancelAllWhileProc_Prepare,
            DLA_StreamingCancelAllWhileProc_Start,
            DLA_StreamingCancelAllWhileProc_Pause,
            DLA_StreamingCancelAllWhileProc_Resume,
            DLA_StreamingCancelAllWhileProc_Stop,
            DLA_StreamingCancelAllWhileProc_SetPlaybackRange,

            DLA_StreamingNetworkDisconnect_AddDataSource = 1223,
            DLA_StreamingNetworkDisconnect_Init,
            DLA_StreamingNetworkDisconnect_LicenseAcquired,
            DLA_StreamingNetworkDisconnect_AddDataSinkVideo,
            DLA_StreamingNetworkDisconnect_AddDataSinkAudio,
            DLA_StreamingNetworkDisconnect_Prepare,
            DLA_StreamingNetworkDisconnect_Start,
            DLA_StreamingNetworkDisconnect_Pause,
            DLA_StreamingNetworkDisconnect_Resume,
            DLA_StreamingNetworkDisconnect_Stop,
            DLA_StreamingNetworkDisconnect_SetPlaybackRange,

            DLA_StreamingNetworkDisconnectWhileProc_AddDataSource = 1234,
            DLA_StreamingNetworkDisconnectWhileProc_Init,
            DLA_StreamingNetworkDisconnectWhileProc_LicenseAcquired,
            DLA_StreamingNetworkDisconnectWhileProc_AddDataSinkVideo,
            DLA_StreamingNetworkDisconnectWhileProc_AddDataSinkAudio,
            DLA_StreamingNetworkDisconnectWhileProc_Prepare,
            DLA_StreamingNetworkDisconnectWhileProc_Start,
            DLA_StreamingNetworkDisconnectWhileProc_Pause,
            DLA_StreamingNetworkDisconnectWhileProc_Resume,
            DLA_StreamingNetworkDisconnectWhileProc_Stop,
            DLA_StreamingNetworkDisconnectWhileProc_SetPlaybackRange,

            DLA_StreamingNetworkDisconnectReconnect_AddDataSource = 1245,
            DLA_StreamingNetworkDisconnectReconnect_Init,
            DLA_StreamingNetworkDisconnectReconnect_LicenseAcquired,
            DLA_StreamingNetworkDisconnectReconnect_AddDataSinkVideo,
            DLA_StreamingNetworkDisconnectReconnect_AddDataSinkAudio,
            DLA_StreamingNetworkDisconnectReconnect_Prepare,
            DLA_StreamingNetworkDisconnectReconnect_Start,
            DLA_StreamingNetworkDisconnectReconnect_Pause,
            DLA_StreamingNetworkDisconnectReconnect_Resume,
            DLA_StreamingNetworkDisconnectReconnect_Stop,
            DLA_StreamingNetworkDisconnectReconnect_SetPlaybackRange,

            DLA_StreamingNetworkDisconnectReconnectWhileProc_AddDataSource = 1256,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_Init,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_LicenseAcquired,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_AddDataSinkVideo,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_AddDataSinkAudio,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_Prepare,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_Start,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_Pause,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_Resume,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_Stop,
            DLA_StreamingNetworkDisconnectReconnectWhileProc_SetPlaybackRange,

            DLA_StreamingNetworkDisconnectCancelAll_AddDataSource = 1267,
            DLA_StreamingNetworkDisconnectCancelAll_Init,
            DLA_StreamingNetworkDisconnectCancelAll_LicenseAcquired,
            DLA_StreamingNetworkDisconnectCancelAll_AddDataSinkVideo,
            DLA_StreamingNetworkDisconnectCancelAll_AddDataSinkAudio,
            DLA_StreamingNetworkDisconnectCancelAll_Prepare,
            DLA_StreamingNetworkDisconnectCancelAll_Start,
            DLA_StreamingNetworkDisconnectCancelAll_Pause,
            DLA_StreamingNetworkDisconnectCancelAll_Resume,
            DLA_StreamingNetworkDisconnectCancelAll_Stop,
            DLA_StreamingNetworkDisconnectCancelAll_SetPlaybackRange,

            DLA_StreamingNetworkDisconnectCancelAllWhileProc_AddDataSource = 1278,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_Init,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_LicenseAcquired,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_AddDataSinkVideo,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_AddDataSinkAudio,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_Prepare,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_Start,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_Pause,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_Resume,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_Stop,
            DLA_StreamingNetworkDisconnectCancelAllWhileProc_SetPlaybackRange,

            DLA_StreamingOpenPlayMultiplePauseResumeUntilEOSTest = 1289,
            DLA_StreamingOpenPlayMultipleSeekUntilEOSTest,

            DLA_StreamingOpenPlayStop_SleepAddDataSource = 1291,
            DLA_StreamingOpenPlayStop_SleepInit,
            DLA_StreamingOpenPlayStop_SleepLicenseAcquired,
            DLA_StreamingOpenPlayStop_SleepAddDataSinkVideo,
            DLA_StreamingOpenPlayStop_SleepAddDataSinkAudio,
            DLA_StreamingOpenPlayStop_SleepPrepare,
            DLA_StreamingOpenPlayStop_SleepStop = 1301,
            //END JANUS CPM TESTS

            GenericOpenPlaySeekBeyondClipDurationTest = 1302,

            //tests various modes of track selection
            //refer to test_pv_player_engine_testset_apptrackselection.h
            //for definition of modes
            ApplicationInvolvedTrackSelectionTestDefault = 1303,
            ApplicationInvolvedTrackSelectionTestPassthru = 1304,
            ApplicationInvolvedTrackSelectionTestAudioOnly = 1305,
            ApplicationInvolvedTrackSelectionTestVideoOnly = 1306,
            ApplicationInvolvedTrackSelectionTestTextOnly = 1307,
            ApplicationInvolvedTrackSelectionTestNoTracks = 1308,

            //Metadata Query tests
            DLA_QueryEngine_JupiterCPMTest_v2_WMA = 1400,
            DLA_QueryEngine_JupiterCPMTest_v24_WMA,//1401
            DLA_QueryEngine_JupiterCPMTest_v4_Enveloped_ASF,//1402
            DLA_QueryEngine_JupiterCPMTest_v4_Enveloped_MP4,//1403
            DLA_QueryEngine_JupiterCPMTest_v4_Enveloped_Image,//1404
            //Enveloped image tests
            DLA_EnvelopeRead_JupiterCPMTest_v4_Enveloped_Image,//1405
            //Multi-media format tests
            DLA_OpenPlayStop_JupiterCPMTest_v2_WMA,//1406
            DLA_OpenPlayStop_JupiterCPMTest_v2_WMV,//1407
            DLA_OpenPlayStop_JupiterCPMTest_v24_WMA,//1408
            DLA_OpenPlayStop_JupiterCPMTest_v24_WMV,//1409
            DLA_OpenPlayStop_JupiterCPMTest_v4_WMA,//1410
            DLA_OpenPlayStop_JupiterCPMTest_v4_WMV,//1411
            DLA_OpenPlayStop_JupiterCPMTest_v4_AAC,//1412
            DLA_OpenPlayStop_JupiterCPMTest_v4_H264,//1413
            DLA_OpenPlayStop_JupiterCPMTest_v4_Enveloped_ASF,//1414
            DLA_OpenPlayStop_JupiterCPMTest_v4_Enveloped_MP4,//1415
            DLA_OpenPlayStop_JupiterCPMTest_unprotected_H264,//1416
            DLA_OpenPlayStop_JupiterCPMTest_unprotected_AAC,//1417
            //Special license protocol sequence tests
            DLA_OpenPlayStop_JupiterCPMTest_redirect,//1418
            DLA_OpenPlayStop_JupiterCPMTest_v24_WMA_fallback,//1419
            DLA_OpenPlayStop_JupiterCPMTest_v4_WMA_ringtone,//1420
            DLA_OpenPlayStop_JupiterCPMTest_v4_WMA_domain,//1421
            DLA_OpenPlayStop_JupiterCPMTest_v4_WMA_domain_renew,//1422
            DLA_OpenPlayStop_JupiterCPMTest_v4_WMA_domain_offline,//1423
            DLA_OpenPlayStop_JupiterCPMTest_v4_WMA_domain_history,//1424
            //Jupiter utility tests
            DLA_JoinDomain_JupiterCPMTest,//1425
            DLA_LeaveDomain_JupiterCPMTest,//1426
            DLA_DeleteLicense_JupiterCPMTest_v2_Content,//1427
            DLA_DeleteLicense_JupiterCPMTest_v24_Content,//1428
            DLA_MeteringByCert_JupiterCPMTest,//1429
            DLA_MeteringByMID_JupiterCPMTest,//1430
            DLA_MeteringAll_JupiterCPMTest,//1431
            DLA_LicenseUpdateAll_JupiterCPMTest,//1432
            DLA_LicenseUpdateExpired_JupiterCPMTest,//1433
            //Jupiter CancelAcquireLicense tests
            DLA_CancelAcquireLicense_JupiterCPMTest_v4_Enveloped_Image,//1434
            DLA_CancelAcquireLicense_JupiterCPMTest_v2_Content,//1435
            DLA_CancelAcquireLicense_JupiterCPMTest_v24_Content,//1436
            DLA_CancelAcquireLicense_JupiterCPMTest_v4_Enveloped_MP4,//1437
            //Jupiter streaming tests.
            DLA_StreamingOpenPlayUntilEOST_JupiterCPMTest,//1438
            DLA_StreamingOpenPlayPausePlayUntilEOS_JupiterCPMTest,//1439
            DLA_StreamingOpenPlaySeekPlayUntilEOS_JupiterCPMTest,//1440
            DLA_StreamingMultiplePlayUntilEOS_JupiterCPMTest,//1441
            DLA_StreamingCancelAcquireLicense_JupiterCPMTest,//1442
            DLA_StreamingProtocolRollOverTest_JupiterCPMTest,//1443
            DLA_StreamingProtocolRollOverTestWithUnknownURLType_JupiterCPMTest,//1444
            //RESERVED FOR FUTURE JUPITER CPM TESTS.
            LastJupiterCPMTest = 1599,//placeholder
            //End JUPITER CPM TESTS.
            /*
             * Note: Starting PVR tests from 1600 since the number of tests exceed the range
             * from 895 and 900 (the earlier location of the tests)
             */
            /*
             * =========== Basic PVR tests ===========
             */

            /*
             * 1600:        Play->pause->resume->stop test
             * Description: Self-explanatory
             */

            /**
            PVR Memory Live Buffer tests start at 1600
            */

            PVR_MLB_StreamingOpenPlayLivePausePlayStopTest = 1600,//1600
            PVR_MLB_StreamingOpenPlayLivePausePlaySeekStopTest,//1601
            PVR_MLB_StreamingOpenPlayLiveBufferBoundaryCheckTest,//1602
            /*
             * 1601:        Reposition after a play pause
             * Description: See TC 1611
             */

            /*
             * 1602:        Check live buffer boundary
             * Description: To maintain TC numbers, this test case
             *              does a play followed by a stop.
             */

            /*
             * =========== Live pause tests ===========
             */

            /*
             * 1603:        Quick successive pause/resume
             * Description: This test case will call pause/resume in a quick and
             *              repetitive sequence to test quick successive pause/resume stress condition.
             * Input:       1. repeat count
             */
            PVR_MLB_StreamingOpenPlayMultipleLivePausePlayTest,//1603
            /*
             * 1604:        Pause with random duration
             * Description: This test case will call pause/resume repeatedly.
             *              Each pause has random duration in a range.
             * Inputs:      1. repeat count.
             *              2. pause duration range
             */
            PVR_MLB_StreamingOpenPlayMultipleLivePauseRandomDurationPlayTest,//1604
            /*
             * 1605:        Long pause
             * Description: This test case will pause long period of time (> live buffer duration)
             * Input:       1. pause duration
             */
            PVR_MLB_StreamingOpenPlayLongLivePausePlayTest,//1605
            /*
             * 1606:        Stop during live pause
             * Description: This test case stop the session during live pause.
             *              Then it starts the same session again.
             */
            PVR_MLB_StreamingOpenPlayLivePauseStopTest,//1606

            /*
             * =========== Random position tests ===========
             */

            /*
             * 1607:        Jump to live after pause
             * Description: This test case jumps to live session (not buffer) after a pause.
             *				The above step is repeated several times, after pausing for a random duration.
             * Inputs:      1. Repeat count
             *              2. Pause duration range
             */
            PVR_MLB_StreamingOpenPauseJumpToLiveStopTest, //1607
            /*
             * 1608:        Jump to live after pause/resume
             * Description: This test case pauses a live session for a random duration, resumes
             *              a for random duration that is less than the pause duration, and then
             *              jumps to live. This is repeated several times.
             * Inputs:      1. Repeat count
             *              2. Pause duration range
             *              3. Resume duration range
             */
            PVR_MLB_StreamingOpenPauseResumeJumpToLiveStopTest, //1608
            /*
             * 1609:        Stop during playing back from live buffer
             * Description: This test case pauses a live session for a random duration, resumes
             *              and then stops the session while playing from the live buffer. The same
             *              session is started after the stop.
             */
            PVR_MLB_StreamingOpenPauseResumeStopTest, //1609
            /*
             * 1610:        RTSP URL test
             * Description: This test case uses an RTSP URL as the input for the streaming session.
             *              Both live and VOD cases are handled.
             */
            PVR_MLB_StreamingRTSPUrlPauseResumeStopTest, //1610

            /*
             * 1611:        PVR Repositioning test
             * Description: This test case does a sequence of repositioning requests within the live buffer.
             *              The followed sequence is: start, pause, resume, repositioning sequence, stop.
            				The repos. sequence consists of 6 repositioning requests back and forward.
             */
            PVR_MLB_StreamingPauseResumeRepositionStopTest, //1611

            /*
            * 1612:        PVR Repositioning test
            * Description: This test case does a sequence of repositioning requests within the live buffer.
            *              The followed sequence is: start, pause, repositioning, resume. This sequence is
               			done six times, followed by a stop.
            */
            PVR_MLB_StreamingPauseRepositionResumeStopTest, //1612

            /*
             * 1613:        RTSP END_OF_STREAM test for memory live buffer.
             * Description: This test is design to test the case where and RTSP END_OF_STREAM arrives
             *              during a live pause. Total playback time must equal the cumulative playlist clip
             *              duration.
             * Input:
             */
            PVR_MLB_StreamingOpenPlayLivePauseWaitForRTSPEOSResumeTest = 1613,//1613


            /*
            * 1614:        PVR Playlist switch with a full live buffer after JTL
            * Description: This test case makes a live pause it resumes once the live buffer gets full, and makes
            *              a JTL followed by a channel switch, the channel switch time is measured.

            */
            PVR_MLB_StreamingOpenPauseJmpToLiveChannelSwitchTest, //1614



            /*
            * 1615       PVR Bitrate estimation test
            * Description: Test case for mismatch between advertised and real bitrate,
            *              the root of the problem with higher-than-advertised bitrates is that it
            *              may cause overwrites in the LiveBuffer, which is then reflected in quality artifacts.
            *
            *              PLEASE USE A SDP FILE THAT ANOUNCES A SMALLER BITRATE THAN THE REAL ONE

            */
            PVR_MLB_StreamingBitrateEstimationTest = 1615,

            /**
            PVR FileSystem Live Buffer tests start at 1630
            */
            PVR_FSLB_StreamingOpenPlayLivePausePlayStopTest = 1630,//1630
            PVR_FSLB_StreamingOpenPlayLivePausePlaySeekStopTest,//1631
            PVR_FSLB_StreamingOpenPlayLiveBufferBoundaryCheckTest,//1632
            /*
             * =========== Live pause tests ===========
             */

            /*
             * 1633:        Quick successive pause/resume
             * Description: This test case will call pause/resume in a quick and
             *              repetitive sequence to test quick successive pause/resume stress condition.
             * Input:       1. repeat count
             */
            PVR_FSLB_StreamingOpenPlayMultipleLivePausePlayTest,//1633
            /*
             * 1634:        Pause with random duration
             * Description: This test case will call pause/resume repeatedly.
             *              Each pause has random duration in a range.
             * Inputs:      1. repeat count.
             *              2. pause duration range
             */
            PVR_FSLB_StreamingOpenPlayMultipleLivePauseRandomDurationPlayTest,//1634
            /*
             * 1635:        Long pause
             * Description: This test case will pause long period of time (> live buffer duration)
             * Input:       1. pause duration
             */
            PVR_FSLB_StreamingOpenPlayLongLivePausePlayTest,//1635
            /*
             * 1636:        Stop during live pause
             * Description: This test case stop the session during live pause.
             *              Then it starts the same session again.
             */
            PVR_FSLB_StreamingOpenPlayLivePauseStopTest,//1636

            /*
             * =========== Random position tests ===========
             */

            /*
             * 1637:        Jump to live after pause
             * Description: This test case jumps to live session (not buffer) after a pause.
             *				The above step is repeated several times, after pausing for a random duration.
             * Inputs:      1. Repeat count
             *              2. Pause duration range
             */
            PVR_FSLB_StreamingOpenPauseJumpToLiveStopTest, //1637
            /*
             * 1638:        Jump to live after pause/resume
             * Description: This test case pauses a live session for a random duration, resumes
             *              a for random duration that is less than the pause duration, and then
             *              jumps to live. This is repeated several times.
             * Inputs:      1. Repeat count
             *              2. Pause duration range
             *              3. Resume duration range
             */
            PVR_FSLB_StreamingOpenPauseResumeJumpToLiveStopTest, //1638
            /*
             * 1639:        Stop during playing back from live buffer
             * Description: This test case pauses a live session for a random duration, resumes
             *              and then stops the session while playing from the live buffer. The same
             *              session is started after the stop.
             */
            PVR_FSLB_StreamingOpenPauseResumeStopTest, //1639

            /*
             * 1640:        RTSP URL test
             * Description: This test case uses an RTSP URL as the input for the streaming session.
             *              Both live and VOD cases are handled.
             */
            PVR_FSLB_StreamingRTSPUrlPauseResumeStopTest, //1640

            /*
             * 1641:        PVR Repositioning test
             * Description: This test case does a sequence of repositioning requests within the live buffer.
             *              The followed sequence is: start, pause, resume, repositioning sequence, stop.
            				The repos. sequence consists of 6 repositioning requests back and forward.
             */
            PVR_FSLB_StreamingPauseResumeRepositionStopTest, //1641

            /*
            * 1642:        PVR Repositioning test
            * Description: This test case does a sequence of repositioning requests within the live buffer.
            *              The followed sequence is: start, pause, repositioning, resume. This sequence is
               			done six times, followed by a stop.
            */
            PVR_FSLB_StreamingPauseRepositionResumeStopTest, //1642

            /*
            * 1643:        RTSP END_OF_STREAM test for file system live buffer.
            * Description: Same as 1643.
            * Input:
            */

            PVR_FSLB_StreamingOpenPlayLivePauseWaitForRTSPEOSResumeTest, //1643

            /*
            * 1644:        PVR Playlist switch with a full live buffer after JTL
            * Description: This test case makes a live pause it resumes once the live buffer gets full, and makes
            *              a JTL followed by a channel switch, the channel switch time is measured.

            */
            PVR_FSLB_StreamingOpenPauseJmpToLiveChannelSwitchTest, //1644


            /**
            PVR local file playback tests start at 1660
            */

            PVR_FILEPLAYBACK_OpenPlayUntilEOFTest = 1660,// 1660

            /*
            * 1661       PVR Local Playback Open-Play-Reposition-Play-Stop
            * Description: This test case plays a local pvr file for 10 seconds, then
            *              it repositions to 50, 75, 40, 0, 60 and 95% of the local file
            *              and then it stops playback.
            *

            */

            PVR_FILEPLAYBACK_OpenPlayRepositionPlayStopTest,  // 1661


            /*
            * 1662       PVR Local Playback Open-Play-Pause-Reposition
            * Description: This test case plays a local pvr file for 10 seconds, then pauses playback
            *              it repositions to 50, 75, 40, 0, 60 and 95% of the local file
            *              and then it stops playback.
            *

            */

            PVR_FILEPLAYBACK_OpenPlayPauseRepositionTest,  // 1662

            /*
            * 1663       PVR Local Playback Retrieved duration is correct
            * Description: This test case plays a local pvr file for 3 seconds and
            *              verifies if the retrieved duration is correct
            *

            */

            PVR_FILEPLAYBACK_OpenPlayVerifyDurationTest,  // 1663




            /*===========================PVR Recorder Test cases============================*/

            /*
            * 1680       PVR_Recorder_RecordOnStartUp
            * Description: - Recording will start from NPT zero until playback is stopped.
            *              - Pass criteria will be: No playback or recording errors.
            */

            PVR_Recorder_RecordOnStartUp = 1680,

            /*
            * 1681       PVR_Recorder_RecordOnDemand
            * Description: - Recording will start from an arbitrary NPT different than zero to a point before playback is stopped.
            *              - Pass criteria will be: No playback or recording errors.
            */

            PVR_Recorder_RecordOnDemand,

            /*
            * 1682       PVR_Recorder_MultiplePause
            * Description: - Recording will start from NPT zero.
            *              - Multiple pause/resume resume will be performed
            *              - Pass criteria will be: No playback or recording errors.
            */

            PVR_Recorder_MultiplePause,

            /*
            * 1683       PVR_Recorder_MultiplePauseJTL
            * Description: - Recording will start from NPT zero.
            *              - Multiple pause/resume will be performed
            *              - After last pause JTL
            *              - Pass criteria will be: No playback or recording errors.
            */

            PVR_Recorder_MultiplePauseJTL,

            /*
            * 1684       PVR_Recorder_MultipleRepos
            * Description: - Recording will start from NPT zero.
            *              - Multiple Reposition/resume will be performed
            *              - Pass criteria will be: No playback or recording errors.
            */

            PVR_Recorder_MultipleRepos,

            /*
            * 1685       PVR_Recorder_MultipleRecord
            * Description: - Recording will start from an arbitrary NPT different than zero.
            *              - Multiple StartRecord/StopRecord will be performed
            *              - Pass criteria will be: No playback or recording errors
            */

            PVR_Recorder_MultipleRecord,

            LastInteractiveTest = 2000, // placeholder


            BeyondLastTest = 9999 //placeholder
        };

        // From test_case
        virtual void test();

        // From pvplayer_async_test_observer
        void TestCompleted(test_case&);

        //Validating file format specific player test cases
        bool ValidateTestCase(int& aCurrentTestCaseNumber);

        void SetupLoggerScheduler();

    private:
        const char *iFileName;
        PVMFFormatType iFileType;

        int iCurrentTestNumber;
        pvplayer_async_test_base* iCurrentTest;
        int32 iFirstTest;
        int32 iLastTest;
        bool iCompressedVideoOutput;
        bool iCompressedAudioOutput;
        bool iFileInput;
        bool iBCS;
        //for proxy support
        bool iProxyEnabled;

        // For test results
        int iTotalSuccess;
        int iTotalError;
        int iTotalFail;

        // For logging
        int32 iLogLevel;
        int32 iLogNode;
        int32 iLogFile;
        int32 iLogMem;

        // For memory statistics
        uint32 iTotalAlloc;
        uint32 iTotalBytes;
        uint32 iAllocFails;
        uint32 iNumAllocs;
        //Flag for checking the file type
        int32 iFileFormatType;
};

/**
 * Factory class for project specific unit test cases
 */
class PVPlayerProjTestFactory
{
    public:
        /**
         * Creates customer project test case object as specified by test case number.  Default
         * implementation returns NULL.  Customer projects that wish to extend pvPlayer unit
         * test to implement customer specific test cases should implement this function
         *
         * @param aTestCaseNumber - Unit test case number
         * @param aTestParam - Parameters to the unit test case
         * @return Newly created project specific test case object, or NULL if the test case
         *              number is not supported.
         */
        virtual pvplayer_async_test_base* GetProjTest(uint aTestCaseNumber, PVPlayerAsyncTestParam aTestParam)
        {
            OSCL_UNUSED_ARG(aTestCaseNumber);
            OSCL_UNUSED_ARG(aTestParam);
            return NULL;
        }
};

#endif


