Home | History | Annotate | Download | only in src
      1 /* ------------------------------------------------------------------
      2  * Copyright (C) 1998-2009 PacketVideo
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
     13  * express or implied.
     14  * See the License for the specific language governing permissions
     15  * and limitations under the License.
     16  * -------------------------------------------------------------------
     17  */
     18 #ifndef TEST_PV_PLAYER_ENGINE_TESTSET1_H_INCLUDED
     19 #define TEST_PV_PLAYER_ENGINE_TESTSET1_H_INCLUDED
     20 
     21 /**
     22  *  @file test_pv_player_engine_testset1.h
     23  *  @brief This file contains the class definitions for the first set of
     24  *         test cases for PVPlayerEngine
     25  *
     26  */
     27 
     28 #ifndef TEST_PV_PLAYER_ENGINE_H_INCLUDED
     29 #include "test_pv_player_engine.h"
     30 #endif
     31 
     32 #ifndef PV_PLAYER_DATASOURCEURL_H_INCLUDED
     33 #include "pv_player_datasourceurl.h"
     34 #endif
     35 
     36 #ifndef PVMF_NODE_INTERFACE_H_INCLUDED
     37 #include "pvmf_node_interface.h"
     38 #endif
     39 
     40 #ifndef PV_ENGINE_TYPES_H_INCLUDED
     41 #include "pv_engine_types.h"
     42 #endif
     43 
     44 #ifndef TEST_PV_PLAYER_ENGINE_CONFIG_H_INCLUDED
     45 #include "test_pv_player_engine_config.h"
     46 #endif
     47 
     48 #ifndef OSCL_FILE_IO_H_INCLUDED
     49 #include "oscl_file_io.h"
     50 #endif
     51 
     52 #ifndef PVMI_CONFIG_AND_CAPABILITY_OBSERVER_H_INCLUDED
     53 #include "pvmi_config_and_capability_observer.h"
     54 #endif
     55 
     56 #ifndef PVMF_CPMPLUGIN_FACTORY_REGISTRY_H_INCLUDED
     57 #include "pvmf_cpmplugin_factory_registry.h"
     58 #endif
     59 
     60 #ifndef PVMF_STREAMING_DATA_SOURCE_H_INCLUDED
     61 #include "pvmf_streaming_data_source.h"
     62 #endif
     63 
     64 #ifndef PVMF_SOURCE_CONTEXT_DATA_H_INCLUDED
     65 #include "pvmf_source_context_data.h"
     66 #endif
     67 
     68 
     69 
     70 #define AMR_MPEG4_RTSP_URL "rtsp://pvserveroha.pv.com/public/Interop/3GPP/pv2/pv-amr-475_mpeg4-20.3gp"
     71 
     72 
     73 class PVPlayerDataSink;
     74 class PVPlayerDataSinkFilename;
     75 class PvmfFileOutputNodeConfigInterface;
     76 class PvmiCapabilityAndConfig;
     77 class PVRefFileOutput;
     78 
     79 
     80 /*!
     81  *  A test case to instantiate and destroy the player engine object via the factory class
     82  *  - Data Source: N/A
     83  *  - Data Sink(s): N/A
     84  *  - Sequence:
     85  *             -# CreatePlayer()/DeletePlayer()
     86  *
     87  */
     88 class pvplayer_async_test_newdelete : public pvplayer_async_test_base
     89 {
     90     public:
     91         pvplayer_async_test_newdelete(PVPlayerAsyncTestParam aTestParam):
     92                 pvplayer_async_test_base(aTestParam)
     93         {
     94             iTestCaseName = _STRLIT_CHAR("New-Delete");
     95         }
     96 
     97         ~pvplayer_async_test_newdelete() {}
     98 
     99         void StartTest();
    100         void Run();
    101 
    102         void CommandCompleted(const PVCmdResponse& aResponse);
    103         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    104         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    105 };
    106 
    107 
    108 /*!
    109  *  A test case to test the normal engine sequence of playing a specified source
    110  *  - Data Source: Passed in parameter
    111  *  - Data Sink(s): Video[FileOutputNode-test_player_openplaystop_[SRCFILENAME]_video.dat]\n
    112  *                  Audio[FileOutputNode-test_player_openplaystop_[SRCFILENAME]_audio.dat]\n
    113  *                  Text[FileOutputNode-test_player_openplaystop_[SRCFILENAME]_text.dat]
    114  *  - Sequence:
    115  *             -# CreatePlayer()
    116  *             -# AddDataSource()
    117  *             -# Init()
    118  *             -# AddDataSink() (video)
    119  *             -# AddDataSink() (audio)
    120  *             -# AddDataSink() (text)
    121  *             -# Prepare()
    122  *             -# Start()
    123  *             -# WAIT 15 sec.
    124  *             -# Stop()
    125  *             -# RemoveDataSink() (video)
    126  *             -# RemoveDataSink() (audio)
    127  *             -# RemoveDataSink() (text)
    128  *             -# Reset()
    129  *             -# RemoveDataSource()
    130  *             -# DeletePlayer()
    131  *
    132  */
    133 class pvplayer_async_test_openplaystopreset : public pvplayer_async_test_base
    134 {
    135     public:
    136         pvplayer_async_test_openplaystopreset(PVPlayerAsyncTestParam aTestParam):
    137                 pvplayer_async_test_base(aTestParam)
    138                 , iPlayer(NULL)
    139                 , iDataSource(NULL)
    140                 , iDataSinkVideo(NULL)
    141                 , iIONodeVideo(NULL)
    142                 , iMIOFileOutVideo(NULL)
    143                 , iDataSinkAudio(NULL)
    144                 , iIONodeAudio(NULL)
    145                 , iMIOFileOutAudio(NULL)
    146                 , iDataSinkText(NULL)
    147                 , iIONodeText(NULL)
    148                 , iMIOFileOutText(NULL)
    149                 , iCurrentCmdId(0)
    150         {
    151             iTestCaseName = _STRLIT_CHAR("Open-Play-Stop-Reset");
    152         }
    153 
    154         ~pvplayer_async_test_openplaystopreset() {}
    155 
    156         void StartTest();
    157         void Run();
    158 
    159         void CommandCompleted(const PVCmdResponse& aResponse);
    160         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    161         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    162 
    163         enum PVTestState
    164         {
    165             STATE_CREATE,
    166             STATE_ADDDATASOURCE,
    167             STATE_INIT,
    168             STATE_ADDDATASINK_VIDEO,
    169             STATE_ADDDATASINK_AUDIO,
    170             STATE_ADDDATASINK_TEXT,
    171             STATE_PREPARE,
    172             STATE_START,
    173             STATE_STOP,
    174             STATE_REMOVEDATASINK_VIDEO,
    175             STATE_REMOVEDATASINK_AUDIO,
    176             STATE_REMOVEDATASINK_TEXT,
    177             STATE_RESET,
    178             STATE_REMOVEDATASOURCE,
    179             STATE_CLEANUPANDCOMPLETE
    180         };
    181 
    182         PVTestState iState;
    183 
    184         PVPlayerInterface* iPlayer;
    185         PVPlayerDataSourceURL* iDataSource;
    186         PVPlayerDataSink* iDataSinkVideo;
    187         PVMFNodeInterface* iIONodeVideo;
    188         PvmiMIOControl* iMIOFileOutVideo;
    189         PVPlayerDataSink* iDataSinkAudio;
    190         PVMFNodeInterface* iIONodeAudio;
    191         PvmiMIOControl* iMIOFileOutAudio;
    192         PVPlayerDataSink* iDataSinkText;
    193         PVMFNodeInterface* iIONodeText;
    194         PvmiMIOControl* iMIOFileOutText;
    195         PVCommandId iCurrentCmdId;
    196 
    197     private:
    198         OSCL_wHeapString<OsclMemAllocator> wFileName;
    199         oscl_wchar output[512];
    200 };
    201 
    202 
    203 class PVMFLocalDataSource;
    204 class PVMFOma1PassthruPluginFactory;
    205 class PVMFCPMPluginAccessInterfaceFactory;
    206 class PVMFSourceContextData;
    207 
    208 /*!
    209  *  A test case to test the normal engine sequence of playing a specified source with pass-through CPM plug-in
    210  *  - Data Source: Passed in parameter
    211  *  - Data Sink(s): Video[FileOutputNode-test_player_cpmopenplaystop_[SRCFILENAME]_video.dat]\n
    212  *                  Audio[FileOutputNode-test_player_cpmopenplaystop_[SRCFILENAME]_audio.dat]\n
    213  *                  Text[FileOutputNode-test_player_cpmopenplaystop_[SRCFILENAME]_text.dat]
    214  *  - Sequence:
    215  *             -# CreatePlayer()
    216  *             -# AddDataSource() with pass-through CPM plug-in
    217  *             -# Init()
    218  *             -# AddDataSink() (video)
    219  *             -# AddDataSink() (audio)
    220  *             -# AddDataSink() (text)
    221  *             -# Prepare()
    222  *             -# Start()
    223  *             -# WAIT 15 sec.
    224  *             -# Stop()
    225  *             -# RemoveDataSink() (video)
    226  *             -# RemoveDataSink() (audio)
    227  *             -# RemoveDataSink() (text)
    228  *             -# Reset()
    229  *             -# RemoveDataSource()
    230  *             -# DeletePlayer()
    231  *
    232  */
    233 class pvplayer_async_test_cpmopenplaystopreset : public pvplayer_async_test_base
    234 {
    235     public:
    236         pvplayer_async_test_cpmopenplaystopreset(PVPlayerAsyncTestParam aTestParam, bool aUsingDataStreamInput = false):
    237                 pvplayer_async_test_base(aTestParam)
    238                 , iPlayer(NULL)
    239                 , iDataSource(NULL)
    240                 , iDataSinkVideo(NULL)
    241                 , iIONodeVideo(NULL)
    242                 , iMIOFileOutVideo(NULL)
    243                 , iDataSinkAudio(NULL)
    244                 , iIONodeAudio(NULL)
    245                 , iMIOFileOutAudio(NULL)
    246                 , iDataSinkText(NULL)
    247                 , iIONodeText(NULL)
    248                 , iMIOFileOutText(NULL)
    249                 , iCurrentCmdId(0)
    250                 , iDataStreamFactory(NULL)
    251                 , iSourceContextData(NULL)
    252                 , iUsingDataStreamInput(aUsingDataStreamInput)
    253         {
    254             if (aUsingDataStreamInput)
    255             {
    256                 iTestCaseName = _STRLIT_CHAR("CPM Open-Play-Stop-Reset Using DataStream Input");
    257             }
    258             else
    259             {
    260                 iTestCaseName = _STRLIT_CHAR("CPM Open-Play-Stop-Reset");
    261             }
    262             iLocalDataSource = NULL;
    263             iPluginFactory = NULL;
    264         }
    265 
    266         ~pvplayer_async_test_cpmopenplaystopreset() {}
    267 
    268         void StartTest();
    269         void Run();
    270 
    271         void CommandCompleted(const PVCmdResponse& aResponse);
    272         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    273         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    274 
    275         enum PVTestState
    276         {
    277             STATE_CREATE,
    278             STATE_ADDDATASOURCE,
    279             STATE_INIT,
    280             STATE_ADDDATASINK_VIDEO,
    281             STATE_ADDDATASINK_AUDIO,
    282             STATE_ADDDATASINK_TEXT,
    283             STATE_PREPARE,
    284             STATE_START,
    285             STATE_STOP,
    286             STATE_REMOVEDATASINK_VIDEO,
    287             STATE_REMOVEDATASINK_AUDIO,
    288             STATE_REMOVEDATASINK_TEXT,
    289             STATE_RESET,
    290             STATE_REMOVEDATASOURCE,
    291             STATE_CLEANUPANDCOMPLETE
    292         };
    293 
    294         PVTestState iState;
    295 
    296         PVPlayerInterface* iPlayer;
    297         PVPlayerDataSourceURL* iDataSource;
    298         PVPlayerDataSink* iDataSinkVideo;
    299         PVMFNodeInterface* iIONodeVideo;
    300         PvmiMIOControl* iMIOFileOutVideo;
    301         PVPlayerDataSink* iDataSinkAudio;
    302         PVMFNodeInterface* iIONodeAudio;
    303         PvmiMIOControl* iMIOFileOutAudio;
    304         PVPlayerDataSink* iDataSinkText;
    305         PVMFNodeInterface* iIONodeText;
    306         PvmiMIOControl* iMIOFileOutText;
    307         PVCommandId iCurrentCmdId;
    308 
    309         PVMFLocalDataSource* iLocalDataSource;
    310         PVMFCPMPluginFactoryRegistryClient iPluginRegistryClient;
    311         PVMFOma1PassthruPluginFactory* iPluginFactory;
    312         OSCL_HeapString<OsclMemAllocator> iPluginMimeType;
    313         PVMFCPMPluginAccessInterfaceFactory* iDataStreamFactory;
    314         PVMFSourceContextData* iSourceContextData;
    315 
    316     private:
    317         OSCL_wHeapString<OsclMemAllocator> wFileName;
    318         oscl_wchar output[512];
    319         bool iUsingDataStreamInput;
    320 };
    321 
    322 
    323 /*!
    324  *  A test case to test metadata retrieval APIs on a local MP4 file
    325  *  - Data Source: test_metadata.mp4
    326  *  - Data Sink(s): Video[FileOutputNode-test_player_metadata_video.dat]\n
    327  *                  Audio[FileOutputNode-test_player_metadata_audio.dat]
    328  *  - Sequence:
    329  *             -# CreatePlayer()
    330  *             -# AddDataSource()
    331  *             -# Init()
    332  *             =# GetMetadataKeys()
    333  *             -# GetMetadataValues() Check the metadata values
    334  *             -# AddDataSink() (video)
    335  *             -# AddDataSink() (audio)
    336  *             -# Prepare()
    337  *             -# GetMetadataKeys() with key query string
    338  *             -# GetMetadataValues() Check the metadata values
    339  *             -# GetMetadataKeys() full list
    340  *             -# GetMetadataValues() full list
    341  *             -# GetMetadataValues() segment 1 (0-5)
    342  *             -# GetMetadataValues() segment 2 (6-end) Check that total of two segments is same as full list
    343  *             -# Start()
    344  *             -# WAIT 3 sec.
    345  *             -# Stop()
    346  *             -# GetMetadataKeys() Check that list of keys shrunk
    347  *             -# GetMetadataValues() Check the metadata values
    348  *             -# RemoveDataSink() (video)
    349  *             -# RemoveDataSink() (audio)
    350  *             -# Reset()
    351  *             -# RemoveDataSource()
    352  *             -# DeletePlayer()
    353  *
    354  */
    355 class pvplayer_async_test_metadata : public pvplayer_async_test_base
    356 {
    357     public:
    358         pvplayer_async_test_metadata(PVPlayerAsyncTestParam aTestParam):
    359                 pvplayer_async_test_base(aTestParam)
    360                 , iPlayer(NULL)
    361                 , iDataSource(NULL)
    362                 , iDataSinkVideo(NULL)
    363                 , iDataSinkAudio(NULL)
    364                 , iIONodeVideo(NULL)
    365                 , iIONodeAudio(NULL)
    366                 , iMIOFileOutVideo(NULL)
    367                 , iMIOFileOutAudio(NULL)
    368                 , iCurrentCmdId(0)
    369         {
    370             iTestCaseName = _STRLIT_CHAR("Metadata");
    371         }
    372 
    373         ~pvplayer_async_test_metadata() {}
    374 
    375         void StartTest();
    376         void Run();
    377 
    378         void CommandCompleted(const PVCmdResponse& aResponse);
    379         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    380         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    381 
    382         enum PVTestState
    383         {
    384             STATE_CREATE,
    385             STATE_ADDDATASOURCE,
    386             STATE_INIT,
    387             STATE_GETMETADATAKEYS1,
    388             STATE_GETMETADATAVALUES1,
    389             STATE_ADDDATASINK_VIDEO,
    390             STATE_ADDDATASINK_AUDIO,
    391             STATE_PREPARE,
    392             STATE_GETMETADATAKEYS2,
    393             STATE_GETMETADATAVALUES2,
    394             STATE_GETMETADATAKEYSSEG,
    395             STATE_GETMETADATAVALUESSEG1,
    396             STATE_GETMETADATAVALUESSEG2,
    397             STATE_GETMETADATAVALUESSEG3,
    398             STATE_START,
    399             STATE_STOP,
    400             STATE_GETMETADATAKEYS3,
    401             STATE_GETMETADATAVALUES3,
    402             STATE_REMOVEDATASINK_VIDEO,
    403             STATE_REMOVEDATASINK_AUDIO,
    404             STATE_RESET,
    405             STATE_REMOVEDATASOURCE,
    406             STATE_CLEANUPANDCOMPLETE
    407         };
    408 
    409         PVTestState iState;
    410 
    411         PVPlayerInterface* iPlayer;
    412         PVPlayerDataSourceURL* iDataSource;
    413 
    414         PVPlayerDataSink* iDataSinkVideo;
    415         PVPlayerDataSink* iDataSinkAudio;
    416         PVMFNodeInterface* iIONodeVideo;
    417         PVMFNodeInterface* iIONodeAudio;
    418         PvmiMIOControl* iMIOFileOutVideo;
    419         PvmiMIOControl* iMIOFileOutAudio;
    420 
    421         PVCommandId iCurrentCmdId;
    422 
    423     private:
    424         PVPMetadataList iKeyList;
    425         int32 iNumAvailableValues;
    426         Oscl_Vector<PvmiKvp, OsclMemAllocator> iValueList;
    427         Oscl_Vector<PvmiKvp, OsclMemAllocator> iValueListSeg1;
    428         Oscl_Vector<PvmiKvp, OsclMemAllocator> iValueListSeg2;
    429         OSCL_HeapString<OsclMemAllocator> iKeyQueryString;
    430 
    431         int32 CheckMetadataValue(Oscl_Vector<PvmiKvp, OsclMemAllocator>& aValueList);
    432 };
    433 
    434 
    435 /*!
    436  *  A test case to start a normal playback of local MP4 file, check the playback position periodically, and stop.
    437  *  - Data Source: test.mp4
    438  *  - Data Sink(s): Video[FileOutputNode-test_player_timing_video.dat]\n
    439  *                  Audio[FileOutputNode-test_player_timing_audio.dat]
    440  *  - Sequence:
    441  *             -# CreatePlayer()
    442  *             -# AddDataSource()
    443  *             -# Init()
    444  *             -# AddDataSink() (video)
    445  *             -# AddDataSink() (audio)
    446  *             -# Prepare()
    447  *             -# Start()
    448  *             -# Check playback position every 100 millisec and stop after 4 sec
    449  *             -# Stop()
    450  *             -# RemoveDataSink() (video)
    451  *             -# RemoveDataSink() (audio)
    452  *             -# Reset()
    453  *             -# RemoveDataSource()
    454  *             -# DeletePlayer()
    455  *
    456  */
    457 class pvplayer_async_test_timing : public pvplayer_async_test_base
    458 {
    459     public:
    460         pvplayer_async_test_timing(PVPlayerAsyncTestParam aTestParam):
    461                 pvplayer_async_test_base(aTestParam)
    462                 , iPlayer(NULL)
    463                 , iDataSource(NULL)
    464                 , iDataSinkVideo(NULL)
    465                 , iDataSinkAudio(NULL)
    466                 , iIONodeVideo(NULL)
    467                 , iIONodeAudio(NULL)
    468                 , iMIOFileOutVideo(NULL)
    469                 , iMIOFileOutAudio(NULL)
    470                 , iCurrentCmdId(0)
    471                 , iStartTime(0)
    472         {
    473             iTestCaseName = _STRLIT_CHAR("Timing");
    474         }
    475 
    476         ~pvplayer_async_test_timing() {}
    477 
    478         void StartTest();
    479         void Run();
    480 
    481         void CommandCompleted(const PVCmdResponse& aResponse);
    482         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    483         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    484 
    485         enum PVTestState
    486         {
    487             STATE_CREATE,
    488             STATE_ADDDATASOURCE,
    489             STATE_INIT,
    490             STATE_ADDDATASINK_VIDEO,
    491             STATE_ADDDATASINK_AUDIO,
    492             STATE_PREPARE,
    493             STATE_START,
    494             STATE_STOP,
    495             STATE_REMOVEDATASINK_VIDEO,
    496             STATE_REMOVEDATASINK_AUDIO,
    497             STATE_RESET,
    498             STATE_REMOVEDATASOURCE,
    499             STATE_CLEANUPANDCOMPLETE,
    500             STATE_WAIT
    501         };
    502 
    503         PVTestState iState;
    504 
    505         PVPlayerInterface* iPlayer;
    506         PVPlayerDataSourceURL* iDataSource;
    507         PVPlayerDataSink* iDataSinkVideo;
    508         PVPlayerDataSink* iDataSinkAudio;
    509         PVMFNodeInterface* iIONodeVideo;
    510         PVMFNodeInterface* iIONodeAudio;
    511         PvmiMIOControl* iMIOFileOutVideo;
    512         PvmiMIOControl* iMIOFileOutAudio;
    513         PVCommandId iCurrentCmdId;
    514         PVPPlaybackPosition aPos;
    515         uint32 iStartTime;
    516 };
    517 
    518 
    519 
    520 /*!
    521  *  A test case to test the invalid states of the player engine
    522  *  - Data Source: test.mp4
    523  *  - Data Sink(s): Video[FileOutputNode-test_player_invalid_video.dat]\n
    524  *                  Audio[FileOutputNode-test_player_invalid_audio.dat]
    525  *  - Sequence:
    526  *             -# CreatePlayer()
    527  *             -# Start() (Invalid State)
    528  *             -# Stop() (Invalid State)
    529  *             -# AddDataSource()
    530  *             -# Init()
    531  *             -# AddDataSource() (Invalid State)
    532  *             -# Start() (Invalid State)
    533  *             -# AddDataSink() (video)
    534  *             -# AddDataSink() (audio)
    535  *             -# Prepare()
    536  *             -# Init() (Invalid State)
    537  *             -# Pause() (Invalid State)
    538  *             -# Start()
    539  *             -# Resume() (Invalid State)
    540  *             -# Prepare() (Invalid State)
    541  *             -# Pause()
    542  *             -# Init() (Invalid State)
    543  *             -# Prepare() (Invalid State)
    544  *             -# Stop()
    545  *             -# RemoveDataSink() (video)
    546  *             -# RemoveDataSink() (audio)
    547  *             -# Reset()
    548  *             -# RemoveDataSource()
    549  *             -# DeletePlayer()
    550  *
    551  */
    552 class pvplayer_async_test_invalidstate : public pvplayer_async_test_base
    553 {
    554     public:
    555         pvplayer_async_test_invalidstate(PVPlayerAsyncTestParam aTestParam):
    556                 pvplayer_async_test_base(aTestParam)
    557                 , iPlayer(NULL)
    558                 , iDataSource(NULL)
    559                 , iDataSinkVideo(NULL)
    560                 , iDataSinkAudio(NULL)
    561                 , iIONodeVideo(NULL)
    562                 , iIONodeAudio(NULL)
    563                 , iMIOFileOutVideo(NULL)
    564                 , iMIOFileOutAudio(NULL)
    565                 , iCurrentCmdId(0)
    566         {
    567             iTestCaseName = _STRLIT_CHAR("Invalid State");
    568         }
    569 
    570         ~pvplayer_async_test_invalidstate() {}
    571 
    572         void StartTest();
    573         void Run();
    574 
    575         void CommandCompleted(const PVCmdResponse& aResponse);
    576         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    577         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    578 
    579         enum PVTestState
    580         {
    581             STATE_CREATE,
    582             STATE_IDLE_INVALID_START,
    583             STATE_IDLE_INVALID_STOP,
    584             STATE_ADDDATASOURCE,
    585             STATE_INIT,
    586             STATE_INITIALIZED_INVALID_ADDDATASOURCE,
    587             STATE_INITIALIZED_INVALID_START,
    588             STATE_ADDDATASINK_VIDEO,
    589             STATE_ADDDATASINK_AUDIO,
    590             STATE_PREPARE,
    591             STATE_PREPARED_INVALID_INIT,
    592             STATE_PREPARED_INVALID_PAUSE,
    593             STATE_START,
    594             STATE_STARTED_INVALID_RESUME,
    595             STATE_STARTED_INVALID_PREPARE,
    596             STATE_PAUSE,
    597             STATE_PAUSED_INVALID_INIT,
    598             STATE_PAUSED_INVALID_PREPARE,
    599             STATE_STOP,
    600             STATE_REMOVEDATASINK_VIDEO,
    601             STATE_REMOVEDATASINK_AUDIO,
    602             STATE_RESET,
    603             STATE_REMOVEDATASOURCE,
    604             STATE_CLEANUPANDCOMPLETE
    605         };
    606 
    607         PVTestState iState;
    608 
    609         PVPlayerInterface* iPlayer;
    610         PVPlayerDataSourceURL* iDataSource;
    611         PVPlayerDataSink* iDataSinkVideo;
    612         PVPlayerDataSink* iDataSinkAudio;
    613         PVMFNodeInterface* iIONodeVideo;
    614         PVMFNodeInterface* iIONodeAudio;
    615         PvmiMIOControl* iMIOFileOutVideo;
    616         PvmiMIOControl* iMIOFileOutAudio;
    617         PVCommandId iCurrentCmdId;
    618 };
    619 
    620 
    621 /*!
    622  *  A test case to test the normal engine sequence of calling stop immediately after prepare
    623  *  - Data Source: test.mp4
    624  *  - Data Sink(s): Video[FileOutputNode-test_player_preparedstop_video.dat]\n
    625  *                  Audio[FileOutputNode-test_player_preparedstop_audio.dat]
    626  *  - Sequence:
    627  *             -# CreatePlayer()
    628  *             -# AddDataSource()
    629  *             -# Init()
    630  *             -# AddDataSink() (video)
    631  *             -# AddDataSink() (audio)
    632  *             -# Prepare()
    633  *             -# Stop()
    634  *             -# RemoveDataSink() (video)
    635  *             -# RemoveDataSink() (audio)
    636  *             -# Reset()
    637  *             -# RemoveDataSource()
    638  *             -# DeletePlayer()
    639  *
    640  */
    641 class pvplayer_async_test_preparedstop : public pvplayer_async_test_base
    642 {
    643     public:
    644         pvplayer_async_test_preparedstop(PVPlayerAsyncTestParam aTestParam):
    645                 pvplayer_async_test_base(aTestParam)
    646                 , iPlayer(NULL)
    647                 , iDataSource(NULL)
    648                 , iDataSinkVideo(NULL)
    649                 , iDataSinkAudio(NULL)
    650                 , iIONodeVideo(NULL)
    651                 , iIONodeAudio(NULL)
    652                 , iMIOFileOutVideo(NULL)
    653                 , iMIOFileOutAudio(NULL)
    654                 , iCurrentCmdId(0)
    655         {
    656             iTestCaseName = _STRLIT_CHAR("Stop When Prepared");
    657         }
    658 
    659         ~pvplayer_async_test_preparedstop() {}
    660 
    661         void StartTest();
    662         void Run();
    663 
    664         void CommandCompleted(const PVCmdResponse& aResponse);
    665         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    666         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    667 
    668         enum PVTestState
    669         {
    670             STATE_CREATE,
    671             STATE_ADDDATASOURCE,
    672             STATE_INIT,
    673             STATE_ADDDATASINK_VIDEO,
    674             STATE_ADDDATASINK_AUDIO,
    675             STATE_PREPARE,
    676             STATE_STOP,
    677             STATE_REMOVEDATASINK_VIDEO,
    678             STATE_REMOVEDATASINK_AUDIO,
    679             STATE_RESET,
    680             STATE_REMOVEDATASOURCE,
    681             STATE_CLEANUPANDCOMPLETE
    682         };
    683 
    684         PVTestState iState;
    685 
    686         PVPlayerInterface* iPlayer;
    687         PVPlayerDataSourceURL* iDataSource;
    688         PVPlayerDataSink* iDataSinkVideo;
    689         PVPlayerDataSink* iDataSinkAudio;
    690         PVMFNodeInterface* iIONodeVideo;
    691         PVMFNodeInterface* iIONodeAudio;
    692         PvmiMIOControl* iMIOFileOutVideo;
    693         PvmiMIOControl* iMIOFileOutAudio;
    694         PVCommandId iCurrentCmdId;
    695 };
    696 
    697 
    698 /*!
    699  *  A test case to test the video only play back for 7 seconds
    700  *  - Data Source: test.mp4
    701  *  - Data Sink(s): Video[FileOutputNode-test_player_videoonly7s_video.dat]\n
    702  *  - Sequence:
    703  *             -# CreatePlayer()
    704  *             -# AddDataSource()
    705  *             -# Init()
    706  *             -# AddDataSink() (video)
    707  *             -# Prepare()
    708  *             -# Start()
    709  *             -# WAIT 7 sec.
    710  *             -# Stop()
    711  *             -# RemoveDataSink() (video)
    712  *             -# Reset()
    713  *             -# RemoveDataSource()
    714  *             -# DeletePlayer()
    715  *
    716  */
    717 class pvplayer_async_test_videoonlyplay7seconds: public pvplayer_async_test_base
    718 {
    719     public:
    720         pvplayer_async_test_videoonlyplay7seconds(PVPlayerAsyncTestParam aTestParam):
    721                 pvplayer_async_test_base(aTestParam)
    722                 , iPlayer(NULL)
    723                 , iDataSource(NULL)
    724                 , iDataSinkVideo(NULL)
    725                 , iIONodeVideo(NULL)
    726                 , iMIOFileOutVideo(NULL)
    727                 , iCurrentCmdId(0)
    728         {
    729             iTestCaseName = _STRLIT_CHAR("Video-only Play 7 Sec");
    730         }
    731 
    732         ~pvplayer_async_test_videoonlyplay7seconds() {}
    733 
    734         void StartTest();
    735         void Run();
    736 
    737         void CommandCompleted(const PVCmdResponse& aResponse);
    738         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    739         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    740 
    741         enum PVTestState
    742         {
    743             STATE_CREATE,
    744             STATE_ADDDATASOURCE,
    745             STATE_INIT,
    746             STATE_ADDDATASINK_VIDEO,
    747             STATE_PREPARE,
    748             STATE_START,
    749             STATE_STOP,
    750             STATE_REMOVEDATASINK_VIDEO,
    751             STATE_RESET,
    752             STATE_REMOVEDATASOURCE,
    753             STATE_CLEANUPANDCOMPLETE
    754         };
    755 
    756         PVTestState iState;
    757 
    758         PVPlayerInterface* iPlayer;
    759         PVPlayerDataSourceURL* iDataSource;
    760         PVPlayerDataSink* iDataSinkVideo;
    761         PVMFNodeInterface* iIONodeVideo;
    762         PvmiMIOControl* iMIOFileOutVideo;
    763         PVCommandId iCurrentCmdId;
    764 };
    765 
    766 
    767 /*!
    768  *  A test case to test playback of 5 sec, stopping, and then playing for 10 sec from beginning again
    769  *  - Data Source: test.mp4
    770  *  - Data Sink(s): Video[FileOutputNode-test_player_playstop2times_video.dat]\n
    771  *                  Audio[FileOutputNode-test_player_playstop2times_audio.dat]
    772  *  - Sequence:
    773  *             -# CreatePlayer()
    774  *             -# AddDataSource()
    775  *             -# Init()
    776  *             -# AddDataSink() (video)
    777  *             -# AddDataSink() (audio)
    778  *             -# Prepare()
    779  *             -# Start()
    780  *             -# WAIT 5 sec.
    781  *             -# Stop()
    782  *             -# Prepare()
    783  *             -# Start()
    784  *             -# WAIT 10 sec.
    785  *             -# Stop()
    786  *             -# RemoveDataSink() (video)
    787  *             -# RemoveDataSink() (audio)
    788  *             -# Reset()
    789  *             -# RemoveDataSource()
    790  *             -# DeletePlayer()
    791  *
    792  */
    793 class pvplayer_async_test_play5stopplay10stopreset: public pvplayer_async_test_base
    794 {
    795     public:
    796         pvplayer_async_test_play5stopplay10stopreset(PVPlayerAsyncTestParam aTestParam):
    797                 pvplayer_async_test_base(aTestParam)
    798                 , iPlayer(NULL)
    799                 , iDataSource(NULL)
    800                 , iDataSinkVideo(NULL)
    801                 , iDataSinkAudio(NULL)
    802                 , iIONodeVideo(NULL)
    803                 , iIONodeAudio(NULL)
    804                 , iMIOFileOutVideo(NULL)
    805                 , iMIOFileOutAudio(NULL)
    806                 , iCurrentCmdId(0)
    807         {
    808             iTestCaseName = _STRLIT_CHAR("Play 5 Sec-Stop-Play 10 Sec-Stop-Reset");
    809         }
    810 
    811         ~pvplayer_async_test_play5stopplay10stopreset() {}
    812 
    813         void StartTest();
    814         void Run();
    815 
    816         void CommandCompleted(const PVCmdResponse& aResponse);
    817         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    818         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    819 
    820         enum PVTestState
    821         {
    822             STATE_CREATE,
    823             STATE_ADDDATASOURCE,
    824             STATE_INIT,
    825             STATE_ADDDATASINK_VIDEO,
    826             STATE_ADDDATASINK_AUDIO,
    827             STATE_PREPARE_FIRST,
    828             STATE_START_FIRST,
    829             STATE_STOP_FIRST,
    830             STATE_PREPARE_SECOND,
    831             STATE_START_SECOND,
    832             STATE_STOP_SECOND,
    833             STATE_REMOVEDATASINK_VIDEO,
    834             STATE_REMOVEDATASINK_AUDIO,
    835             STATE_RESET,
    836             STATE_REMOVEDATASOURCE,
    837             STATE_CLEANUPANDCOMPLETE
    838         };
    839 
    840         PVTestState iState;
    841 
    842         PVPlayerInterface* iPlayer;
    843         PVPlayerDataSourceURL* iDataSource;
    844         PVPlayerDataSink* iDataSinkVideo;
    845         PVPlayerDataSink* iDataSinkAudio;
    846         PVMFNodeInterface* iIONodeVideo;
    847         PVMFNodeInterface* iIONodeAudio;
    848         PvmiMIOControl* iMIOFileOutVideo;
    849         PvmiMIOControl* iMIOFileOutAudio;
    850         PVCommandId iCurrentCmdId;
    851 };
    852 
    853 
    854 /*!
    855  *  A test case to test pausing and resuming during normal playback
    856  *  - Data Source: test.mp4
    857  *  - Data Sink(s): Video[FileOutputNode-test_player_pauseresume_video.dat]\n
    858  *                  Audio[FileOutputNode-test_player_pauseresume_audio.dat]
    859  *  - Sequence:
    860  *             -# CreatePlayer()
    861  *             -# AddDataSource()
    862  *             -# Init()
    863  *             -# AddDataSink() (video)
    864  *             -# AddDataSink() (audio)
    865  *             -# Prepare()
    866  *             -# Start()
    867  *             -# WAIT 10 sec.
    868  *             -# Pause()
    869  *             -# WAIT 5 sec
    870  *             -# Resume()
    871  *             -# WAIT 10 sec.
    872  *             -# Stop()
    873  *             -# RemoveDataSink() (video)
    874  *             -# RemoveDataSink() (audio)
    875  *             -# Reset()
    876  *             -# RemoveDataSource()
    877  *             -# DeletePlayer()
    878  *
    879  */
    880 class pvplayer_async_test_pauseresume : public pvplayer_async_test_base
    881 {
    882     public:
    883         pvplayer_async_test_pauseresume(PVPlayerAsyncTestParam aTestParam):
    884                 pvplayer_async_test_base(aTestParam)
    885                 , iPlayer(NULL)
    886                 , iDataSource(NULL)
    887                 , iDataSinkVideo(NULL)
    888                 , iDataSinkAudio(NULL)
    889                 , iIONodeVideo(NULL)
    890                 , iIONodeAudio(NULL)
    891                 , iMIOFileOutVideo(NULL)
    892                 , iMIOFileOutAudio(NULL)
    893                 , iCurrentCmdId(0)
    894         {
    895             iTestCaseName = _STRLIT_CHAR("Pause-Resume");
    896         }
    897 
    898         ~pvplayer_async_test_pauseresume() {}
    899 
    900         void StartTest();
    901         void Run();
    902 
    903         void CommandCompleted(const PVCmdResponse& aResponse);
    904         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    905         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    906 
    907         enum PVTestState
    908         {
    909             STATE_CREATE,
    910             STATE_ADDDATASOURCE,
    911             STATE_INIT,
    912             STATE_ADDDATASINK_VIDEO,
    913             STATE_ADDDATASINK_AUDIO,
    914             STATE_PREPARE,
    915             STATE_START,
    916             STATE_PAUSE,
    917             STATE_RESUME,
    918             STATE_STOP,
    919             STATE_REMOVEDATASINK_VIDEO,
    920             STATE_REMOVEDATASINK_AUDIO,
    921             STATE_RESET,
    922             STATE_REMOVEDATASOURCE,
    923             STATE_CLEANUPANDCOMPLETE
    924         };
    925 
    926         PVTestState iState;
    927 
    928         PVPlayerInterface* iPlayer;
    929         PVPlayerDataSourceURL* iDataSource;
    930         PVPlayerDataSink* iDataSinkVideo;
    931         PVPlayerDataSink* iDataSinkAudio;
    932         PVMFNodeInterface* iIONodeVideo;
    933         PVMFNodeInterface* iIONodeAudio;
    934         PvmiMIOControl* iMIOFileOutVideo;
    935         PvmiMIOControl* iMIOFileOutAudio;
    936         PVCommandId iCurrentCmdId;
    937 };
    938 
    939 
    940 /*!
    941  *  A test case to test stop when playback is paused
    942  *  - Data Source: test.mp4
    943  *  - Data Sink(s): Video[FileOutputNode-test_player_playpausestop_vidoe.dat]\n
    944  *                  Audio[FileOutputNode-test_player_playpausestop_audio.dat]
    945  *  - Sequence:
    946  *             -# CreatePlayer()
    947  *             -# AddDataSource()
    948  *             -# Init()
    949  *             -# AddDataSink() (video)
    950  *             -# AddDataSink() (audio)
    951  *             -# Prepare()
    952  *             -# Start()
    953  *             -# WAIT 20 sec.
    954  *             -# Pause()
    955  *             -# Stop()
    956  *             -# RemoveDataSink() (video)
    957  *             -# RemoveDataSink() (audio)
    958  *             -# Reset()
    959  *             -# RemoveDataSource()
    960  *             -# DeletePlayer()
    961  *
    962  */
    963 class pvplayer_async_test_playpausestop : public pvplayer_async_test_base
    964 {
    965     public:
    966         pvplayer_async_test_playpausestop(PVPlayerAsyncTestParam aTestParam):
    967                 pvplayer_async_test_base(aTestParam)
    968                 , iPlayer(NULL)
    969                 , iDataSource(NULL)
    970                 , iDataSinkVideo(NULL)
    971                 , iDataSinkAudio(NULL)
    972                 , iIONodeVideo(NULL)
    973                 , iIONodeAudio(NULL)
    974                 , iMIOFileOutVideo(NULL)
    975                 , iMIOFileOutAudio(NULL)
    976                 , iCurrentCmdId(0)
    977         {
    978             iTestCaseName = _STRLIT_CHAR("Play-Pause-Stop");
    979         }
    980 
    981         ~pvplayer_async_test_playpausestop() {}
    982 
    983         void StartTest();
    984         void Run();
    985 
    986         void CommandCompleted(const PVCmdResponse& aResponse);
    987         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
    988         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
    989 
    990         enum PVTestState
    991         {
    992             STATE_CREATE,
    993             STATE_ADDDATASOURCE,
    994             STATE_INIT,
    995             STATE_ADDDATASINK_VIDEO,
    996             STATE_ADDDATASINK_AUDIO,
    997             STATE_PREPARE,
    998             STATE_START,
    999             STATE_PAUSE,
   1000             STATE_STOP,
   1001             STATE_REMOVEDATASINK_VIDEO,
   1002             STATE_REMOVEDATASINK_AUDIO,
   1003             STATE_RESET,
   1004             STATE_REMOVEDATASOURCE,
   1005             STATE_CLEANUPANDCOMPLETE
   1006         };
   1007 
   1008         PVTestState iState;
   1009 
   1010         PVPlayerInterface* iPlayer;
   1011         PVPlayerDataSourceURL* iDataSource;
   1012         PVPlayerDataSink* iDataSinkVideo;
   1013         PVPlayerDataSink* iDataSinkAudio;
   1014         PVMFNodeInterface* iIONodeVideo;
   1015         PVMFNodeInterface* iIONodeAudio;
   1016         PvmiMIOControl* iMIOFileOutVideo;
   1017         PvmiMIOControl* iMIOFileOutAudio;
   1018         PVCommandId iCurrentCmdId;
   1019 };
   1020 
   1021 
   1022 /*!
   1023  *  A test case to test whether engine can accept outside node for video sink
   1024  *  - Data Source: test.mp4
   1025  *  - Data Sink(s): Video[FileOutputNode-test_player_outsidevideosink_video.dat]\n
   1026  *                  Audio[FileOutputNode-test_player_outsidevideosink_audio.dat]
   1027  *  - Sequence:
   1028  *             -# CreatePlayer()
   1029  *             -# AddDataSource()
   1030  *             -# Init()
   1031  *             -# AddDataSink() (video)Where we will pass the outside node
   1032  *             -# AddDataSink() (audio)
   1033  *             -# Prepare()
   1034  *             -# Start()
   1035  *             -# WAIT 10 sec.
   1036  *             -# Stop()
   1037  *             -# RemoveDataSink() (video)
   1038  *             -# RemoveDataSink() (audio)
   1039  *             -# Reset()
   1040  *             -# RemoveDataSource()
   1041  *             -# DeletePlayer()
   1042  *
   1043  */
   1044 class pvplayer_async_test_outsidenodeforvideosink : public pvplayer_async_test_base,
   1045         public PVMFNodeCmdStatusObserver,
   1046         public PVMFNodeInfoEventObserver,
   1047         public PVMFNodeErrorEventObserver
   1048 {
   1049     public:
   1050         pvplayer_async_test_outsidenodeforvideosink(PVPlayerAsyncTestParam aTestParam):
   1051                 pvplayer_async_test_base(aTestParam)
   1052                 , iPlayer(NULL)
   1053                 , iDataSource(NULL)
   1054                 , iDataSinkVideo(NULL)
   1055                 , iDataSinkAudio(NULL)
   1056                 , iIONodeVideo(NULL)
   1057                 , iIONodeAudio(NULL)
   1058                 , iMOutVideo(NULL)
   1059                 , iMOutAudio(NULL)
   1060                 , iCurrentCmdId(0)
   1061         {
   1062             iTestCaseName = _STRLIT_CHAR("Outside Node for Video Sink");
   1063         }
   1064 
   1065         ~pvplayer_async_test_outsidenodeforvideosink() {}
   1066 
   1067         void StartTest();
   1068         void Run();
   1069 
   1070         void CommandCompleted(const PVCmdResponse& aResponse);
   1071         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1072         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1073 
   1074         void NodeCommandCompleted(const PVMFCmdResp& aResponse);
   1075         void HandleNodeInformationalEvent(const PVMFAsyncEvent& /*aEvent*/) {}
   1076         void HandleNodeErrorEvent(const PVMFAsyncEvent& /*aEvent*/) {}
   1077 
   1078         enum PVTestState
   1079         {
   1080             STATE_CREATE,
   1081             STATE_ADDDATASOURCE,
   1082             STATE_INIT,
   1083             STATE_ADDDATASINK_VIDEO,
   1084             STATE_ADDDATASINK_AUDIO,
   1085             STATE_PREPARE,
   1086             STATE_START,
   1087             STATE_STOP,
   1088             STATE_REMOVEDATASINK_VIDEO,
   1089             STATE_REMOVEDATASINK_AUDIO,
   1090             STATE_RESET,
   1091             STATE_REMOVEDATASOURCE,
   1092             STATE_CLEANUPANDCOMPLETE
   1093         };
   1094 
   1095         PVTestState iState;
   1096 
   1097         PVPlayerInterface* iPlayer;
   1098         PVPlayerDataSourceURL* iDataSource;
   1099         PVPlayerDataSink* iDataSinkVideo;
   1100         PVPlayerDataSink* iDataSinkAudio;
   1101         PVMFNodeInterface* iIONodeVideo;
   1102         PVMFNodeInterface* iIONodeAudio;
   1103         PvmiMIOControl* iMOutVideo;
   1104         PvmiMIOControl* iMOutAudio;
   1105         PVCommandId iCurrentCmdId;
   1106 };
   1107 
   1108 
   1109 /*!
   1110  *  A test case to test the whether the engine is in correct state or not
   1111  *  - Data Source: test.mp4
   1112  *  - Data Sink(s): Video[FileOutputNode-test_player_getplayerstate_video.dat]\n
   1113  *                  Audio[FileOutputNode-test_player_getplayerstate_audio.dat]
   1114  *  - Sequence:
   1115  *             -# CreatePlayer()
   1116  *             -# AddDataSource()
   1117  *             -# GetPVPlayerStateSync()
   1118  *             -# Init()
   1119  *             -# GetPVPlayerStateSync()
   1120  *             -# AddDataSink() (video)
   1121  *             -# GetPVPlayerStateSync()
   1122  *             -# AddDataSink() (audio)
   1123  *             -# GetPVPlayerStateSync()
   1124  *             -# Prepare()
   1125  *             -# GetPVPlayerStateSync()
   1126  *             -# Start()
   1127  *             -# GetPVPlayerStateSync()
   1128  *             -# WAIT 20 sec.
   1129  *             -# Stop()
   1130  *             -# GetPVPlayerState()
   1131  *             -# RemoveDataSink() (video)
   1132  *             -# GetPVPlayerState()
   1133  *             -# RemoveDataSink() (audio)
   1134  *             -# GetPVPlayerState()
   1135  *             -# Reset()
   1136  *             -# GetPVPlayerState()
   1137  *             -# RemoveDataSource()
   1138  *             -# DeletePlayer()
   1139  *
   1140  */
   1141 class pvplayer_async_test_getplayerstate : public pvplayer_async_test_base
   1142 {
   1143     public:
   1144         pvplayer_async_test_getplayerstate(PVPlayerAsyncTestParam aTestParam):
   1145                 pvplayer_async_test_base(aTestParam)
   1146                 , iPlayer(NULL)
   1147                 , iDataSource(NULL)
   1148                 , iDataSinkVideo(NULL)
   1149                 , iIONodeVideo(NULL)
   1150                 , iMIOFileOutVideo(NULL)
   1151                 , iDataSinkAudio(NULL)
   1152                 , iIONodeAudio(NULL)
   1153                 , iMIOFileOutAudio(NULL)
   1154                 , iCurrentCmdId(0)
   1155         {
   1156             iTestCaseName = _STRLIT_CHAR("GetPlayerState");
   1157         }
   1158 
   1159         ~pvplayer_async_test_getplayerstate() {}
   1160 
   1161         void StartTest();
   1162         void Run();
   1163 
   1164         void CommandCompleted(const PVCmdResponse& aResponse);
   1165         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1166         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1167 
   1168         enum PVTestState
   1169         {
   1170             STATE_CREATE,
   1171             STATE_ADDDATASOURCE,
   1172             STATE_INIT,
   1173             STATE_ADDDATASINK_VIDEO,
   1174             STATE_ADDDATASINK_AUDIO,
   1175             STATE_PREPARE,
   1176             STATE_START,
   1177             STATE_STOP,
   1178             STATE_PLAYER_STATE_FIRST,
   1179             STATE_REMOVEDATASINK_VIDEO,
   1180             STATE_PLAYER_STATE_SECOND,
   1181             STATE_REMOVEDATASINK_AUDIO,
   1182             STATE_PLAYER_STATE_THIRD,
   1183             STATE_RESET,
   1184             STATE_PLAYER_STATE_FOURTH,
   1185             STATE_REMOVEDATASOURCE,
   1186             STATE_CLEANUPANDCOMPLETE
   1187         };
   1188 
   1189         PVTestState iState;
   1190         PVPlayerState aState;
   1191 
   1192         PVPlayerInterface* iPlayer;
   1193         PVPlayerDataSourceURL* iDataSource;
   1194         PVPlayerDataSink* iDataSinkVideo;
   1195         PVMFNodeInterface* iIONodeVideo;
   1196         PvmiMIOControl* iMIOFileOutVideo;
   1197         PVPlayerDataSink* iDataSinkAudio;
   1198         PVMFNodeInterface* iIONodeAudio;
   1199         PvmiMIOControl* iMIOFileOutAudio;
   1200         PVCommandId iCurrentCmdId;
   1201 };
   1202 
   1203 
   1204 /*!
   1205  *  A test case to test current position of the play back
   1206  *  - Data Source: test.mp4
   1207  *  - Data Sink(s): Video[FileOutputNode-test_player_getcurrentposition_video.dat]\n
   1208  *                  Audio[FileOutputNode-test_player_getcurrentposition_audio.dat]
   1209  *  - Sequence:
   1210  *             -# CreatePlayer()
   1211  *             -# AddDataSource()
   1212  *             -# Init()
   1213  *             -# AddDataSink() (video)
   1214  *             -# AddDataSink() (audio)
   1215  *             -# Prepare()
   1216  *             -# Start()
   1217  *             -# GetCurrentPositionSync()(Call this synchronous API after every 1 sec)
   1218  *             -# GetCurrentPosition()(Call this asynchronous API after every 1 sec)
   1219  *             -# Stop()
   1220  *             -# RemoveDataSink() (video)
   1221  *             -# RemoveDataSink() (audio)
   1222  *             -# Reset()
   1223  *             -# RemoveDataSource()
   1224  *             -# DeletePlayer()
   1225  *
   1226  */
   1227 class pvplayer_async_test_getcurrentposition : public pvplayer_async_test_base
   1228 {
   1229     public:
   1230         pvplayer_async_test_getcurrentposition(PVPlayerAsyncTestParam aTestParam):
   1231                 pvplayer_async_test_base(aTestParam)
   1232                 , iPlayer(NULL)
   1233                 , iDataSource(NULL)
   1234                 , iDataSinkVideo(NULL)
   1235                 , iIONodeVideo(NULL)
   1236                 , iMIOFileOutVideo(NULL)
   1237                 , iDataSinkAudio(NULL)
   1238                 , iIONodeAudio(NULL)
   1239                 , iMIOFileOutAudio(NULL)
   1240                 , iCurrentCmdId(0)
   1241                 , iCount(0)
   1242         {
   1243             iTestCaseName = _STRLIT_CHAR("GetCurrentPosition");
   1244         }
   1245 
   1246         ~pvplayer_async_test_getcurrentposition() {}
   1247 
   1248         void StartTest();
   1249         void Run();
   1250 
   1251         void CommandCompleted(const PVCmdResponse& aResponse);
   1252         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1253         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1254 
   1255         enum PVTestState
   1256         {
   1257             STATE_CREATE,
   1258             STATE_ADDDATASOURCE,
   1259             STATE_INIT,
   1260             STATE_ADDDATASINK_VIDEO,
   1261             STATE_ADDDATASINK_AUDIO,
   1262             STATE_PREPARE,
   1263             STATE_START,
   1264             STATE_GETCURRENT_POSITION_SYNC,
   1265             STATE_GETCURRENT_POSITION,
   1266             STATE_STOP,
   1267             STATE_REMOVEDATASINK_VIDEO,
   1268             STATE_REMOVEDATASINK_AUDIO,
   1269             STATE_RESET,
   1270             STATE_REMOVEDATASOURCE,
   1271             STATE_CLEANUPANDCOMPLETE
   1272         };
   1273 
   1274         PVTestState iState;
   1275 
   1276         PVPlayerInterface* iPlayer;
   1277         PVPlayerDataSourceURL* iDataSource;
   1278         PVPlayerDataSink* iDataSinkVideo;
   1279         PVMFNodeInterface* iIONodeVideo;
   1280         PvmiMIOControl* iMIOFileOutVideo;
   1281         PVPlayerDataSink* iDataSinkAudio;
   1282         PVMFNodeInterface* iIONodeAudio;
   1283         PvmiMIOControl* iMIOFileOutAudio;
   1284         PVCommandId iCurrentCmdId;
   1285         PVMFStatus Status;
   1286         PVPPlaybackPosition Position ;
   1287         uint32 iCount;
   1288 };
   1289 
   1290 
   1291 /*!
   1292  *  A test case to test the play and stops the play at specified position
   1293  *  - Data Source: test_reposition.mp4
   1294  *  - Data Sink(s): Video[FileOutputNode-test_player_playsetstopposition_video.dat]\n
   1295  *                  Audio[FileOutputNode-test_player_playsetstopposition_audio.dat]
   1296  *  - Sequence:
   1297  *             -# CreatePlayer()
   1298  *             -# AddDataSource()
   1299  *             -# Init()
   1300  *             -# AddDataSink() (video)
   1301  *             -# AddDataSink() (audio)
   1302  *             -# Prepare()
   1303  *             -# Start()
   1304  *             -# SetPlaybackRange(blank,stop at 15 sec)
   1305  *             -# WAIT 20 sec. for end time reached event
   1306  *             -# Stop()
   1307  *             -# RemoveDataSink() (video)
   1308  *             -# RemoveDataSink() (audio)
   1309  *             -# Reset()
   1310  *             -# RemoveDataSource()
   1311  *             -# DeletePlayer()
   1312  *
   1313  */
   1314 class pvplayer_async_test_playsetstopposition : public pvplayer_async_test_base
   1315 {
   1316     public:
   1317         pvplayer_async_test_playsetstopposition(PVPlayerAsyncTestParam aTestParam):
   1318                 pvplayer_async_test_base(aTestParam)
   1319                 , iPlayer(NULL)
   1320                 , iDataSource(NULL)
   1321                 , iDataSinkVideo(NULL)
   1322                 , iIONodeVideo(NULL)
   1323                 , iMIOFileOutVideo(NULL)
   1324                 , iDataSinkAudio(NULL)
   1325                 , iIONodeAudio(NULL)
   1326                 , iMIOFileOutAudio(NULL)
   1327                 , iCurrentCmdId(0)
   1328         {
   1329             iTestCaseName = _STRLIT_CHAR("Play-Set End Time");
   1330         }
   1331 
   1332         ~pvplayer_async_test_playsetstopposition() {}
   1333 
   1334         void StartTest();
   1335         void Run();
   1336 
   1337         void CommandCompleted(const PVCmdResponse& aResponse);
   1338         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1339         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1340 
   1341         enum PVTestState
   1342         {
   1343             STATE_CREATE,
   1344             STATE_ADDDATASOURCE,
   1345             STATE_INIT,
   1346             STATE_ADDDATASINK_VIDEO,
   1347             STATE_ADDDATASINK_AUDIO,
   1348             STATE_PREPARE,
   1349             STATE_START,
   1350             STATE_SETPLAYBACKRANGE,
   1351             STATE_STOPTIMENOTREACHED,
   1352             STATE_STOP,
   1353             STATE_REMOVEDATASINK_VIDEO,
   1354             STATE_REMOVEDATASINK_AUDIO,
   1355             STATE_RESET,
   1356             STATE_REMOVEDATASOURCE,
   1357             STATE_CLEANUPANDCOMPLETE
   1358         };
   1359 
   1360         PVTestState iState;
   1361 
   1362         PVPlayerInterface* iPlayer;
   1363         PVPlayerDataSourceURL* iDataSource;
   1364         PVPlayerDataSink* iDataSinkVideo;
   1365         PVMFNodeInterface* iIONodeVideo;
   1366         PvmiMIOControl* iMIOFileOutVideo;
   1367         PVPlayerDataSink* iDataSinkAudio;
   1368         PVMFNodeInterface* iIONodeAudio;
   1369         PvmiMIOControl* iMIOFileOutAudio;
   1370         PVCommandId iCurrentCmdId;
   1371 };
   1372 
   1373 
   1374 /*!
   1375  *  A test case to test the play and stops the play at specified video frame number
   1376  *  - Data Source: test_reposition.mp4
   1377  *  - Data Sink(s): Video[FileOutputNode-test_player_playsetstoppositionvidframenum_video.dat]\n
   1378  *                  Audio[FileOutputNode-test_player_playsetstoppositionvidframenum_audio.dat]
   1379  *  - Sequence:
   1380  *             -# CreatePlayer()
   1381  *             -# AddDataSource()
   1382  *             -# Init()
   1383  *             -# AddDataSink() (video)
   1384  *             -# AddDataSink() (audio)
   1385  *             -# Prepare()
   1386  *             -# Start()
   1387  *             -# SetPlaybackRange(blank,stop at 150 frame=~15 sec)
   1388  *             -# WAIT 20 sec. for end time reached event
   1389  *             -# Stop()
   1390  *             -# RemoveDataSink() (video)
   1391  *             -# RemoveDataSink() (audio)
   1392  *             -# Reset()
   1393  *             -# RemoveDataSource()
   1394  *             -# DeletePlayer()
   1395  *
   1396  */
   1397 class pvplayer_async_test_playsetstoppositionvidframenum : public pvplayer_async_test_base
   1398 {
   1399     public:
   1400         pvplayer_async_test_playsetstoppositionvidframenum(PVPlayerAsyncTestParam aTestParam):
   1401                 pvplayer_async_test_base(aTestParam)
   1402                 , iPlayer(NULL)
   1403                 , iDataSource(NULL)
   1404                 , iDataSinkVideo(NULL)
   1405                 , iIONodeVideo(NULL)
   1406                 , iMIOFileOutVideo(NULL)
   1407                 , iDataSinkAudio(NULL)
   1408                 , iIONodeAudio(NULL)
   1409                 , iMIOFileOutAudio(NULL)
   1410                 , iCurrentCmdId(0)
   1411         {
   1412             iTestCaseName = _STRLIT_CHAR("Play-Set End Time by VidFrameNum");
   1413         }
   1414 
   1415         ~pvplayer_async_test_playsetstoppositionvidframenum() {}
   1416 
   1417         void StartTest();
   1418         void Run();
   1419 
   1420         void CommandCompleted(const PVCmdResponse& aResponse);
   1421         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1422         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1423 
   1424         enum PVTestState
   1425         {
   1426             STATE_CREATE,
   1427             STATE_ADDDATASOURCE,
   1428             STATE_INIT,
   1429             STATE_ADDDATASINK_VIDEO,
   1430             STATE_ADDDATASINK_AUDIO,
   1431             STATE_PREPARE,
   1432             STATE_START,
   1433             STATE_SETPLAYBACKRANGE,
   1434             STATE_STOPTIMENOTREACHED,
   1435             STATE_STOP,
   1436             STATE_REMOVEDATASINK_VIDEO,
   1437             STATE_REMOVEDATASINK_AUDIO,
   1438             STATE_RESET,
   1439             STATE_REMOVEDATASOURCE,
   1440             STATE_CLEANUPANDCOMPLETE
   1441         };
   1442 
   1443         PVTestState iState;
   1444 
   1445         PVPlayerInterface* iPlayer;
   1446         PVPlayerDataSourceURL* iDataSource;
   1447         PVPlayerDataSink* iDataSinkVideo;
   1448         PVMFNodeInterface* iIONodeVideo;
   1449         PvmiMIOControl* iMIOFileOutVideo;
   1450         PVPlayerDataSink* iDataSinkAudio;
   1451         PVMFNodeInterface* iIONodeAudio;
   1452         PvmiMIOControl* iMIOFileOutAudio;
   1453         PVCommandId iCurrentCmdId;
   1454 };
   1455 
   1456 
   1457 /*!
   1458  *  A test case to test the start of play at specified position and then stop
   1459  *  - Data Source: test_reposition.mp4
   1460  *  - Data Sink(s): Video[FileOutputNode-test_player_setstartpositionplaystop_video.dat]\n
   1461  *                  Audio[FileOutputNode-test_player_setstartpositionplaystop_audio.dat]
   1462  *  - Sequence:
   1463  *             -# CreatePlayer()
   1464  *             -# AddDataSource()
   1465  *             -# Init()
   1466  *             -# AddDataSink() (video)
   1467  *             -# AddDataSink() (audio)
   1468  *             -# SetPlaybackRange(start at 10 sec, blank)
   1469  *             -# Prepare()
   1470  *             -# Start()
   1471  *             -# WAIT 20 sec.
   1472  *             -# Stop()
   1473  *             -# RemoveDataSink() (video)
   1474  *             -# RemoveDataSink() (audio)
   1475  *             -# Reset()
   1476  *             -# RemoveDataSource()
   1477  *             -# DeletePlayer()
   1478  *
   1479  */
   1480 class pvplayer_async_test_setstartpositionplaystop : public pvplayer_async_test_base
   1481 {
   1482     public:
   1483         pvplayer_async_test_setstartpositionplaystop(PVPlayerAsyncTestParam aTestParam):
   1484                 pvplayer_async_test_base(aTestParam)
   1485                 , iPlayer(NULL)
   1486                 , iDataSource(NULL)
   1487                 , iDataSinkVideo(NULL)
   1488                 , iIONodeVideo(NULL)
   1489                 , iMIOFileOutVideo(NULL)
   1490                 , iDataSinkAudio(NULL)
   1491                 , iIONodeAudio(NULL)
   1492                 , iMIOFileOutAudio(NULL)
   1493                 , iCurrentCmdId(0)
   1494                 , iSourceContextData(NULL)
   1495         {
   1496             iTestCaseName = _STRLIT_CHAR("Set Begin Position-Play-Stop");
   1497             iTargetNumSeek = 1;
   1498             iNumSeek = 0;
   1499         }
   1500 
   1501         ~pvplayer_async_test_setstartpositionplaystop() {}
   1502 
   1503         void StartTest();
   1504         void Run();
   1505 
   1506         void CommandCompleted(const PVCmdResponse& aResponse);
   1507         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1508         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1509 
   1510         enum PVTestState
   1511         {
   1512             STATE_CREATE,
   1513             STATE_ADDDATASOURCE,
   1514             STATE_INIT,
   1515             STATE_ADDDATASINK_VIDEO,
   1516             STATE_ADDDATASINK_AUDIO,
   1517             STATE_SETPLAYBACKRANGE,
   1518             STATE_PREPARE,
   1519             STATE_START,
   1520             STATE_STOP,
   1521             STATE_REMOVEDATASINK_VIDEO,
   1522             STATE_REMOVEDATASINK_AUDIO,
   1523             STATE_RESET,
   1524             STATE_REMOVEDATASOURCE,
   1525             STATE_CLEANUPANDCOMPLETE
   1526         };
   1527 
   1528         PVTestState iState;
   1529 
   1530         PVPlayerInterface* iPlayer;
   1531         PVPlayerDataSourceURL* iDataSource;
   1532         PVPlayerDataSink* iDataSinkVideo;
   1533         PVMFNodeInterface* iIONodeVideo;
   1534         PvmiMIOControl* iMIOFileOutVideo;
   1535         PVPlayerDataSink* iDataSinkAudio;
   1536         PVMFNodeInterface* iIONodeAudio;
   1537         PvmiMIOControl* iMIOFileOutAudio;
   1538         PVCommandId iCurrentCmdId;
   1539 
   1540         void setMultipleSeekMode(uint32 aNum)
   1541         {
   1542             iTargetNumSeek = aNum;
   1543         }
   1544 
   1545     private:
   1546         OSCL_wHeapString<OsclMemAllocator> wFileName;
   1547         oscl_wchar output[512];
   1548         uint32 iTargetNumSeek;
   1549         uint32 iNumSeek;
   1550 
   1551         PVMFSourceContextData* iSourceContextData;
   1552 };
   1553 
   1554 
   1555 /*!
   1556  *  A test case to test the start and stop of play at specified position using the play range
   1557  *  - Data Source: test_reposition.mp4
   1558  *  - Data Sink(s): Video[FileOutputNode-test_player_setplayrange_video.dat]\n
   1559  *                  Audio[FileOutputNode-test_player_setplayrange_audio.dat]
   1560  *  - Sequence:
   1561  *             -# CreatePlayer()
   1562  *             -# AddDataSource()
   1563  *             -# Init()
   1564  *             -# AddDataSink() (video)
   1565  *             -# AddDataSink() (audio)
   1566  *             =# SetPlaybackRange(start at 10 sec, stop at 25 sec)
   1567  *             -# Prepare()
   1568  *             -# Start()
   1569  *             -# WAIT 20 sec. for end time reached event
   1570  *             -# Stop()
   1571  *             -# RemoveDataSink() (video)
   1572  *             -# RemoveDataSink() (audio)
   1573  *             -# Reset()
   1574  *             -# RemoveDataSource()
   1575  *             -# DeletePlayer()
   1576  *
   1577  */
   1578 class pvplayer_async_test_setplayrangeplay : public pvplayer_async_test_base
   1579 {
   1580     public:
   1581         pvplayer_async_test_setplayrangeplay(PVPlayerAsyncTestParam aTestParam):
   1582                 pvplayer_async_test_base(aTestParam)
   1583                 , iPlayer(NULL)
   1584                 , iDataSource(NULL)
   1585                 , iDataSinkVideo(NULL)
   1586                 , iIONodeVideo(NULL)
   1587                 , iMIOFileOutVideo(NULL)
   1588                 , iDataSinkAudio(NULL)
   1589                 , iIONodeAudio(NULL)
   1590                 , iMIOFileOutAudio(NULL)
   1591                 , iCurrentCmdId(0)
   1592         {
   1593             iTestCaseName = _STRLIT_CHAR("SetPlaybackRange-Play");
   1594         }
   1595 
   1596         ~pvplayer_async_test_setplayrangeplay() {}
   1597 
   1598         void StartTest();
   1599         void Run();
   1600 
   1601         void CommandCompleted(const PVCmdResponse& aResponse);
   1602         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1603         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1604 
   1605         enum PVTestState
   1606         {
   1607             STATE_CREATE,
   1608             STATE_ADDDATASOURCE,
   1609             STATE_INIT,
   1610             STATE_ADDDATASINK_VIDEO,
   1611             STATE_ADDDATASINK_AUDIO,
   1612             STATE_SETPLAYBACKRANGE,
   1613             STATE_PREPARE,
   1614             STATE_START,
   1615             STATE_STOPTIMENOTREACHED,
   1616             STATE_STOP,
   1617             STATE_REMOVEDATASINK_VIDEO,
   1618             STATE_REMOVEDATASINK_AUDIO,
   1619             STATE_RESET,
   1620             STATE_REMOVEDATASOURCE,
   1621             STATE_CLEANUPANDCOMPLETE
   1622         };
   1623 
   1624         PVTestState iState;
   1625 
   1626         PVPlayerInterface* iPlayer;
   1627         PVPlayerDataSourceURL* iDataSource;
   1628         PVPlayerDataSink* iDataSinkVideo;
   1629         PVMFNodeInterface* iIONodeVideo;
   1630         PvmiMIOControl* iMIOFileOutVideo;
   1631         PVPlayerDataSink* iDataSinkAudio;
   1632         PVMFNodeInterface* iIONodeAudio;
   1633         PvmiMIOControl* iMIOFileOutAudio;
   1634         PVCommandId iCurrentCmdId;
   1635 };
   1636 
   1637 
   1638 /*!
   1639  *  A test case to test the start and stop of play at specified position using the play range
   1640  *  with start position in video frame number
   1641  *  - Data Source: test_reposition.mp4
   1642  *  - Data Sink(s): Video[FileOutputNode-test_player_setplayrangevidframenum_video.dat]\n
   1643  *                  Audio[FileOutputNode-test_player_setplayrangevidframenum_audio.dat]
   1644  *  - Sequence:
   1645  *             -# CreatePlayer()
   1646  *             -# AddDataSource()
   1647  *             -# Init()
   1648  *             -# AddDataSink() (video)
   1649  *             -# AddDataSink() (audio)
   1650  *             =# SetPlaybackRange(start at frame 100=~10 sec, stop at 20sec)
   1651  *             -# Prepare()
   1652  *             -# Start()
   1653  *             -# WAIT 20 sec. for end time reached event
   1654  *             -# Stop()
   1655  *             -# RemoveDataSink() (video)
   1656  *             -# RemoveDataSink() (audio)
   1657  *             -# Reset()
   1658  *             -# RemoveDataSource()
   1659  *             -# DeletePlayer()
   1660  *
   1661  */
   1662 class pvplayer_async_test_setplayrangevidframenumplay : public pvplayer_async_test_base
   1663 {
   1664     public:
   1665         pvplayer_async_test_setplayrangevidframenumplay(PVPlayerAsyncTestParam aTestParam):
   1666                 pvplayer_async_test_base(aTestParam)
   1667                 , iPlayer(NULL)
   1668                 , iDataSource(NULL)
   1669                 , iDataSinkVideo(NULL)
   1670                 , iIONodeVideo(NULL)
   1671                 , iMIOFileOutVideo(NULL)
   1672                 , iDataSinkAudio(NULL)
   1673                 , iIONodeAudio(NULL)
   1674                 , iMIOFileOutAudio(NULL)
   1675                 , iCurrentCmdId(0)
   1676         {
   1677             iTestCaseName = _STRLIT_CHAR("SetPlaybackRange by VidFrameNum-Play");
   1678         }
   1679 
   1680         ~pvplayer_async_test_setplayrangevidframenumplay() {}
   1681 
   1682         void StartTest();
   1683         void Run();
   1684 
   1685         void CommandCompleted(const PVCmdResponse& aResponse);
   1686         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1687         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1688 
   1689         enum PVTestState
   1690         {
   1691             STATE_CREATE,
   1692             STATE_ADDDATASOURCE,
   1693             STATE_INIT,
   1694             STATE_ADDDATASINK_VIDEO,
   1695             STATE_ADDDATASINK_AUDIO,
   1696             STATE_SETPLAYBACKRANGE,
   1697             STATE_PREPARE,
   1698             STATE_START,
   1699             STATE_STOPTIMENOTREACHED,
   1700             STATE_STOP,
   1701             STATE_REMOVEDATASINK_VIDEO,
   1702             STATE_REMOVEDATASINK_AUDIO,
   1703             STATE_RESET,
   1704             STATE_REMOVEDATASOURCE,
   1705             STATE_CLEANUPANDCOMPLETE
   1706         };
   1707 
   1708         PVTestState iState;
   1709 
   1710         PVPlayerInterface* iPlayer;
   1711         PVPlayerDataSourceURL* iDataSource;
   1712         PVPlayerDataSink* iDataSinkVideo;
   1713         PVMFNodeInterface* iIONodeVideo;
   1714         PvmiMIOControl* iMIOFileOutVideo;
   1715         PVPlayerDataSink* iDataSinkAudio;
   1716         PVMFNodeInterface* iIONodeAudio;
   1717         PvmiMIOControl* iMIOFileOutAudio;
   1718         PVCommandId iCurrentCmdId;
   1719 };
   1720 
   1721 
   1722 /*!
   1723  *  A test case to test the repositioning during playback
   1724  *  - Data Source: test_reposition.mp4
   1725  *  - Data Sink(s): Video[FileOutputNode-test_player_playsetplayrangestop_video.dat]\n
   1726  *                  Audio[FileOutputNode-test_player_playsetplayrangestop_audio.dat]
   1727  *  - Sequence:
   1728  *             -# CreatePlayer()
   1729  *             -# AddDataSource()
   1730  *             -# Init()
   1731  *             -# AddDataSink() (video)
   1732  *             -# AddDataSink() (audio)
   1733  *             -# Prepare()
   1734  *             -# Start()
   1735  *             -# WAIT 10 sec.
   1736  *             -# SetPlaybackRange(start at 20 sec, blank)
   1737  *             -# WAIT 10 sec.
   1738  *             -# Stop()
   1739  *             -# RemoveDataSink() (video)
   1740  *             -# RemoveDataSink() (audio)
   1741  *             -# Reset()
   1742  *             -# RemoveDataSource()
   1743  *             -# DeletePlayer()
   1744  *
   1745  */
   1746 class pvplayer_async_test_playsetplayrangestop : public pvplayer_async_test_base
   1747 {
   1748     public:
   1749         pvplayer_async_test_playsetplayrangestop(PVPlayerAsyncTestParam aTestParam):
   1750                 pvplayer_async_test_base(aTestParam)
   1751                 , iPlayer(NULL)
   1752                 , iDataSource(NULL)
   1753                 , iDataSinkVideo(NULL)
   1754                 , iIONodeVideo(NULL)
   1755                 , iMIOFileOutVideo(NULL)
   1756                 , iDataSinkAudio(NULL)
   1757                 , iIONodeAudio(NULL)
   1758                 , iMIOFileOutAudio(NULL)
   1759                 , iCurrentCmdId(0)
   1760         {
   1761             iTestCaseName = _STRLIT_CHAR("Play-SetPlaybackRange-Stop");
   1762         }
   1763 
   1764         ~pvplayer_async_test_playsetplayrangestop() {}
   1765 
   1766         void StartTest();
   1767         void Run();
   1768 
   1769         void CommandCompleted(const PVCmdResponse& aResponse);
   1770         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1771         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1772 
   1773         enum PVTestState
   1774         {
   1775             STATE_CREATE,
   1776             STATE_ADDDATASOURCE,
   1777             STATE_INIT,
   1778             STATE_ADDDATASINK_VIDEO,
   1779             STATE_ADDDATASINK_AUDIO,
   1780             STATE_PREPARE,
   1781             STATE_START,
   1782             STATE_SETPLAYBACKRANGE,
   1783             STATE_STOP,
   1784             STATE_REMOVEDATASINK_VIDEO,
   1785             STATE_REMOVEDATASINK_AUDIO,
   1786             STATE_RESET,
   1787             STATE_REMOVEDATASOURCE,
   1788             STATE_CLEANUPANDCOMPLETE
   1789         };
   1790 
   1791         PVTestState iState;
   1792 
   1793         PVPlayerInterface* iPlayer;
   1794         PVPlayerDataSourceURL* iDataSource;
   1795         PVPlayerDataSink* iDataSinkVideo;
   1796         PVMFNodeInterface* iIONodeVideo;
   1797         PvmiMIOControl* iMIOFileOutVideo;
   1798         PVPlayerDataSink* iDataSinkAudio;
   1799         PVMFNodeInterface* iIONodeAudio;
   1800         PvmiMIOControl* iMIOFileOutAudio;
   1801         PVCommandId iCurrentCmdId;
   1802 };
   1803 
   1804 
   1805 /*!
   1806  *  A test case to test the repositioning during playback using video frame number
   1807  *  - Data Source: test_reposition.mp4
   1808  *  - Data Sink(s): Video[FileOutputNode-test_player_playsetplayrangevidframenumstop_video.dat]\n
   1809  *                  Audio[FileOutputNode-test_player_playsetplayrangevidframenumstop_audio.dat]
   1810  *  - Sequence:
   1811  *             -# CreatePlayer()
   1812  *             -# AddDataSource()
   1813  *             -# Init()
   1814  *             -# AddDataSink() (video)
   1815  *             -# AddDataSink() (audio)
   1816  *             -# Prepare()
   1817  *             -# Start()
   1818  *             -# WAIT 10 sec.
   1819  *             -# SetPlaybackRange(start at video frame 100=~10sec, blank)
   1820  *             -# WAIT 10 sec.
   1821  *             -# Stop()
   1822  *             -# RemoveDataSink() (video)
   1823  *             -# RemoveDataSink() (audio)
   1824  *             -# Reset()
   1825  *             -# RemoveDataSource()
   1826  *             -# DeletePlayer()
   1827  *
   1828  */
   1829 class pvplayer_async_test_playsetplayrangevidframenumstop : public pvplayer_async_test_base
   1830 {
   1831     public:
   1832         pvplayer_async_test_playsetplayrangevidframenumstop(PVPlayerAsyncTestParam aTestParam):
   1833                 pvplayer_async_test_base(aTestParam)
   1834                 , iPlayer(NULL)
   1835                 , iDataSource(NULL)
   1836                 , iDataSinkVideo(NULL)
   1837                 , iIONodeVideo(NULL)
   1838                 , iMIOFileOutVideo(NULL)
   1839                 , iDataSinkAudio(NULL)
   1840                 , iIONodeAudio(NULL)
   1841                 , iMIOFileOutAudio(NULL)
   1842                 , iCurrentCmdId(0)
   1843         {
   1844             iTestCaseName = _STRLIT_CHAR("Play-SetPlaybackRange by VidFrameNum-Stop");
   1845         }
   1846 
   1847         ~pvplayer_async_test_playsetplayrangevidframenumstop() {}
   1848 
   1849         void StartTest();
   1850         void Run();
   1851 
   1852         void CommandCompleted(const PVCmdResponse& aResponse);
   1853         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1854         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1855 
   1856         enum PVTestState
   1857         {
   1858             STATE_CREATE,
   1859             STATE_ADDDATASOURCE,
   1860             STATE_INIT,
   1861             STATE_ADDDATASINK_VIDEO,
   1862             STATE_ADDDATASINK_AUDIO,
   1863             STATE_PREPARE,
   1864             STATE_START,
   1865             STATE_SETPLAYBACKRANGE,
   1866             STATE_STOP,
   1867             STATE_REMOVEDATASINK_VIDEO,
   1868             STATE_REMOVEDATASINK_AUDIO,
   1869             STATE_RESET,
   1870             STATE_REMOVEDATASOURCE,
   1871             STATE_CLEANUPANDCOMPLETE
   1872         };
   1873 
   1874         PVTestState iState;
   1875 
   1876         PVPlayerInterface* iPlayer;
   1877         PVPlayerDataSourceURL* iDataSource;
   1878         PVPlayerDataSink* iDataSinkVideo;
   1879         PVMFNodeInterface* iIONodeVideo;
   1880         PvmiMIOControl* iMIOFileOutVideo;
   1881         PVPlayerDataSink* iDataSinkAudio;
   1882         PVMFNodeInterface* iIONodeAudio;
   1883         PvmiMIOControl* iMIOFileOutAudio;
   1884         PVCommandId iCurrentCmdId;
   1885 };
   1886 
   1887 
   1888 /*!
   1889  *  A test case to test the track level information extension interface
   1890  *  - Data Source: test_trackinfo.mp4
   1891  *  - Data Sink(s): Video[FileOutputNode-test_player_tracklevelinfo_video.dat]\n
   1892  *                  Audio[FileOutputNode-test_player_tracklevelinfo_audio.dat]
   1893  *  - Sequence:
   1894  *             -# CreatePlayer()
   1895  *             -# QueryInterface() (track level info extension IF) THIS SHOULD FAIL
   1896  *             -# AddDataSource()
   1897  *             -# Init()
   1898  *             -# AddDataSink() (video)
   1899  *             -# AddDataSink() (audio)
   1900  *             -# Prepare()
   1901  *             -# Start()
   1902  *             -# QueryInterface() (track level info extension IF)
   1903  *             -# Call track level info APIs
   1904  *             -# Stop()
   1905  *             -# RemoveDataSink() (video)
   1906  *             -# RemoveDataSink() (audio)
   1907  *             -# Reset()
   1908  *             -# RemoveDataSource()
   1909  *             -# QueryInterface() (track level info extension IF) THIS SHOULD FAIL
   1910  *             -# DeletePlayer()
   1911  *
   1912  */
   1913 class PVMFTrackLevelInfoExtensionInterface;
   1914 
   1915 class pvplayer_async_test_tracklevelinfo : public pvplayer_async_test_base
   1916 {
   1917     public:
   1918         pvplayer_async_test_tracklevelinfo(PVPlayerAsyncTestParam aTestParam):
   1919                 pvplayer_async_test_base(aTestParam)
   1920                 , iPlayer(NULL)
   1921                 , iDataSource(NULL)
   1922                 , iDataSinkVideo(NULL)
   1923                 , iIONodeVideo(NULL)
   1924                 , iMIOFileOutVideo(NULL)
   1925                 , iDataSinkAudio(NULL)
   1926                 , iIONodeAudio(NULL)
   1927                 , iMIOFileOutAudio(NULL)
   1928                 , iTrackLevelInfoIF(NULL)
   1929                 , iCurrentCmdId(0)
   1930         {
   1931             iTestCaseName = _STRLIT_CHAR("Track-Level Info");
   1932         }
   1933 
   1934         ~pvplayer_async_test_tracklevelinfo() {}
   1935 
   1936         void StartTest();
   1937         void Run();
   1938 
   1939         void CommandCompleted(const PVCmdResponse& aResponse);
   1940         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   1941         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   1942 
   1943         enum PVTestState
   1944         {
   1945             STATE_CREATE,
   1946             STATE_INVALIDQUERYINTERFACE1,
   1947             STATE_ADDDATASOURCE,
   1948             STATE_INIT,
   1949             STATE_ADDDATASINK_VIDEO,
   1950             STATE_ADDDATASINK_AUDIO,
   1951             STATE_PREPARE,
   1952             STATE_START,
   1953             STATE_QUERYINTERFACE,
   1954             STATE_TRACKLEVELINFOTEST,
   1955             STATE_STOP,
   1956             STATE_REMOVEDATASINK_VIDEO,
   1957             STATE_REMOVEDATASINK_AUDIO,
   1958             STATE_RESET,
   1959             STATE_REMOVEDATASOURCE,
   1960             STATE_INVALIDQUERYINTERFACE2,
   1961             STATE_CLEANUPANDCOMPLETE
   1962         };
   1963 
   1964         PVTestState iState;
   1965 
   1966         PVPlayerInterface* iPlayer;
   1967         PVPlayerDataSourceURL* iDataSource;
   1968         PVPlayerDataSink* iDataSinkVideo;
   1969         PVMFNodeInterface* iIONodeVideo;
   1970         PvmiMIOControl* iMIOFileOutVideo;
   1971         PVPlayerDataSink* iDataSinkAudio;
   1972         PVMFNodeInterface* iIONodeAudio;
   1973         PvmiMIOControl* iMIOFileOutAudio;
   1974         PVMFTrackLevelInfoExtensionInterface* iTrackLevelInfoIF;
   1975         PVCommandId iCurrentCmdId;
   1976     private:
   1977         OSCL_wHeapString<OsclMemAllocator> wFileName;
   1978         oscl_wchar output[512];
   1979 };
   1980 
   1981 
   1982 /*!
   1983  *  A test case to test playback at a rate faster than "real-time"
   1984  *  - Data Source: test_reposition.mp4
   1985  *  - Data Sink(s): Video[FileOutputNode-test_player_setplaybackrate2X_video.dat]\n
   1986  *                  Audio[FileOutputNode-test_player_setplaybackrate2X_audio.dat]
   1987  *  - Sequence:
   1988  *             -# CreatePlayer()
   1989  *             -# AddDataSource()
   1990  *             -# Init()
   1991  *             -# AddDataSink() (video)
   1992  *             -# AddDataSink() (audio)
   1993  *             =# SetPlaybackRate(200000)
   1994  *             -# Prepare()
   1995  *             -# Start()
   1996  *             -# WAIT 15 sec
   1997  *             -# RemoveDataSink() (video)
   1998  *             -# RemoveDataSink() (audio)
   1999  *             -# Reset()
   2000  *             -# RemoveDataSource()
   2001  *             -# DeletePlayer()
   2002  *
   2003  */
   2004 class pvplayer_async_test_setplaybackrate2X : public pvplayer_async_test_base
   2005 {
   2006     public:
   2007         pvplayer_async_test_setplaybackrate2X(PVPlayerAsyncTestParam aTestParam):
   2008                 pvplayer_async_test_base(aTestParam)
   2009                 , iPlayer(NULL)
   2010                 , iDataSource(NULL)
   2011                 , iDataSinkVideo(NULL)
   2012                 , iIONodeVideo(NULL)
   2013                 , iMIOFileOutVideo(NULL)
   2014                 , iDataSinkAudio(NULL)
   2015                 , iIONodeAudio(NULL)
   2016                 , iMIOFileOutAudio(NULL)
   2017                 , iCurrentCmdId(0)
   2018         {
   2019             iTestCaseName = _STRLIT_CHAR("SetPlaybackRate 2X");
   2020         }
   2021 
   2022         ~pvplayer_async_test_setplaybackrate2X() {}
   2023 
   2024         void StartTest();
   2025         void Run();
   2026 
   2027         void CommandCompleted(const PVCmdResponse& aResponse);
   2028         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2029         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2030 
   2031         enum PVTestState
   2032         {
   2033             STATE_CREATE,
   2034             STATE_ADDDATASOURCE,
   2035             STATE_INIT,
   2036             STATE_ADDDATASINK_VIDEO,
   2037             STATE_ADDDATASINK_AUDIO,
   2038             STATE_PREPARE,
   2039             STATE_SETPLAYBACKRATE,
   2040             STATE_START,
   2041             STATE_STOP,
   2042             STATE_REMOVEDATASINK_VIDEO,
   2043             STATE_REMOVEDATASINK_AUDIO,
   2044             STATE_RESET,
   2045             STATE_REMOVEDATASOURCE,
   2046             STATE_CLEANUPANDCOMPLETE
   2047         };
   2048 
   2049         PVTestState iState;
   2050 
   2051         PVPlayerInterface* iPlayer;
   2052         PVPlayerDataSourceURL* iDataSource;
   2053         PVPlayerDataSink* iDataSinkVideo;
   2054         PVMFNodeInterface* iIONodeVideo;
   2055         PvmiMIOControl* iMIOFileOutVideo;
   2056         PVPlayerDataSink* iDataSinkAudio;
   2057         PVMFNodeInterface* iIONodeAudio;
   2058         PvmiMIOControl* iMIOFileOutAudio;
   2059         PVCommandId iCurrentCmdId;
   2060 };
   2061 
   2062 
   2063 /*!
   2064  *  A test case to test playback at a rate slower than "real-time"
   2065  *  - Data Source: test_reposition.mp4
   2066  *  - Data Sink(s): Video[FileOutputNode-test_player_setplaybackratefifth_video.dat]\n
   2067  *                  Audio[FileOutputNode-test_player_setplaybackratefifth_audio.dat]
   2068  *  - Sequence:
   2069  *             -# CreatePlayer()
   2070  *             -# AddDataSource()
   2071  *             -# Init()
   2072  *             -# AddDataSink() (video)
   2073  *             -# AddDataSink() (audio)
   2074  *             =# SetPlaybackRate(20000)
   2075  *             -# Prepare()
   2076  *             -# Start()
   2077  *             -# WAIT 15 sec
   2078  *             -# RemoveDataSink() (video)
   2079  *             -# RemoveDataSink() (audio)
   2080  *             -# Reset()
   2081  *             -# RemoveDataSource()
   2082  *             -# DeletePlayer()
   2083  *
   2084  */
   2085 class pvplayer_async_test_setplaybackratefifth : public pvplayer_async_test_base
   2086 {
   2087     public:
   2088         pvplayer_async_test_setplaybackratefifth(PVPlayerAsyncTestParam aTestParam):
   2089                 pvplayer_async_test_base(aTestParam)
   2090                 , iPlayer(NULL)
   2091                 , iDataSource(NULL)
   2092                 , iDataSinkVideo(NULL)
   2093                 , iIONodeVideo(NULL)
   2094                 , iMIOFileOutVideo(NULL)
   2095                 , iDataSinkAudio(NULL)
   2096                 , iIONodeAudio(NULL)
   2097                 , iMIOFileOutAudio(NULL)
   2098                 , iCurrentCmdId(0)
   2099         {
   2100             iTestCaseName = _STRLIT_CHAR("SetPlaybackRate 1/5X");
   2101         }
   2102 
   2103         ~pvplayer_async_test_setplaybackratefifth() {}
   2104 
   2105         void StartTest();
   2106         void Run();
   2107 
   2108         void CommandCompleted(const PVCmdResponse& aResponse);
   2109         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2110         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2111 
   2112         enum PVTestState
   2113         {
   2114             STATE_CREATE,
   2115             STATE_ADDDATASOURCE,
   2116             STATE_INIT,
   2117             STATE_ADDDATASINK_VIDEO,
   2118             STATE_ADDDATASINK_AUDIO,
   2119             STATE_PREPARE,
   2120             STATE_SETPLAYBACKRATE,
   2121             STATE_START,
   2122             STATE_STOP,
   2123             STATE_REMOVEDATASINK_VIDEO,
   2124             STATE_REMOVEDATASINK_AUDIO,
   2125             STATE_RESET,
   2126             STATE_REMOVEDATASOURCE,
   2127             STATE_CLEANUPANDCOMPLETE
   2128         };
   2129 
   2130         PVTestState iState;
   2131 
   2132         PVPlayerInterface* iPlayer;
   2133         PVPlayerDataSourceURL* iDataSource;
   2134         PVPlayerDataSink* iDataSinkVideo;
   2135         PVMFNodeInterface* iIONodeVideo;
   2136         PvmiMIOControl* iMIOFileOutVideo;
   2137         PVPlayerDataSink* iDataSinkAudio;
   2138         PVMFNodeInterface* iIONodeAudio;
   2139         PvmiMIOControl* iMIOFileOutAudio;
   2140         PVCommandId iCurrentCmdId;
   2141 };
   2142 
   2143 
   2144 /*!
   2145  *  A test case to test the normal engine sequence of playing a specified source when queueing commands together
   2146  *  - Data Source: Specified source
   2147  *  - Data Sink(s): Video[FileOutputNode-test_player_queuedcmd_[SRCFILENAME]_video.dat]\n
   2148  *                  Audio[FileOutputNode-test_player_queuedcmd_[SRCFILENAME]_audio.dat]
   2149  *  - Sequence:
   2150  *             -# CreatePlayer()
   2151  *             -# AddDataSource()/Init()/AddDataSink() (video)/AddDataSink() (audio)
   2152  *             -# Prepare()/Start()
   2153  *             -# WAIT 10 sec.
   2154  *             -# Stop()/RemoveDataSink() (video)
   2155  *             -# RemoveDataSink() (audio)/Reset()/RemoveDataSource()
   2156  *             -# DeletePlayer()
   2157  *
   2158  */
   2159 class pvplayer_async_test_queuedcommands : public pvplayer_async_test_base
   2160 {
   2161     public:
   2162         pvplayer_async_test_queuedcommands(PVPlayerAsyncTestParam aTestParam):
   2163                 pvplayer_async_test_base(aTestParam)
   2164                 , iPlayer(NULL)
   2165                 , iDataSource(NULL)
   2166                 , iDataSinkVideo(NULL)
   2167                 , iIONodeVideo(NULL)
   2168                 , iMIOFileOutVideo(NULL)
   2169                 , iDataSinkAudio(NULL)
   2170                 , iIONodeAudio(NULL)
   2171                 , iMIOFileOutAudio(NULL)
   2172                 , iCurrentCmdId(0)
   2173         {
   2174             iTestCaseName = _STRLIT_CHAR("Queued Commands");
   2175         }
   2176 
   2177         ~pvplayer_async_test_queuedcommands() {}
   2178 
   2179         void StartTest();
   2180         void Run();
   2181 
   2182         void CommandCompleted(const PVCmdResponse& aResponse);
   2183         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2184         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2185 
   2186         enum PVTestState
   2187         {
   2188             STATE_CREATE,
   2189             STATE_QUEUEDCMD1,
   2190             STATE_QUEUEDCMD2,
   2191             STATE_QUEUEDCMD3,
   2192             STATE_QUEUEDCMD4,
   2193             STATE_CLEANUPANDCOMPLETE
   2194         };
   2195 
   2196         PVTestState iState;
   2197 
   2198         PVPlayerInterface* iPlayer;
   2199         PVPlayerDataSourceURL* iDataSource;
   2200         PVPlayerDataSink* iDataSinkVideo;
   2201         PVMFNodeInterface* iIONodeVideo;
   2202         PvmiMIOControl* iMIOFileOutVideo;
   2203         PVPlayerDataSink* iDataSinkAudio;
   2204         PVMFNodeInterface* iIONodeAudio;
   2205         PvmiMIOControl* iMIOFileOutAudio;
   2206         Oscl_Vector<PVCommandId, OsclMemAllocator> iCmdIds;
   2207         PVCommandId iCurrentCmdId;
   2208 
   2209     private:
   2210         OSCL_wHeapString<OsclMemAllocator> wFileName;
   2211         oscl_wchar output[512];
   2212 };
   2213 
   2214 
   2215 /*!
   2216  *  A test case to test looping feature by calling SetPlaybackRange() when engine automatically pauses due to end time reached
   2217  *  - Data Source: Specified source
   2218  *  - Data Sink(s): Video[FileOutputNode-test_player_looping_[SRCFILENAME]_video.dat]\n
   2219  *                  Audio[FileOutputNode-test_player_looping_[SRCFILENAME]_audio.dat]\n
   2220  *                  Text[FileOutputNode-test_player_looping_[SRCFILENAME]_text.dat]
   2221  *  - Sequence:
   2222  *             -# CreatePlayer()
   2223  *             -# AddDataSource()/Init()/AddDataSink() (video)/AddDataSink() (audio)/AddDataSink() (text)/Prepare()/Start()
   2224  *             -# SetPlaybackRange(blank, end at 10 sec)
   2225  *             -# WAIT 15 sec. for end time reached event
   2226  *             -# SetPlaybackRange(start at 0 sec, end at 10 sec)
   2227  *             -# Resume()
   2228  *             -# WAIT 15 sec. for end time reached event
   2229  *             -# Stop()/RemoveDataSink() (video)/RemoveDataSink() (audio)/RemoveDataSink() (text)/Reset()/RemoveDataSource()
   2230  *             -# DeletePlayer()
   2231  *
   2232  */
   2233 class pvplayer_async_test_looping : public pvplayer_async_test_base
   2234 {
   2235     public:
   2236         pvplayer_async_test_looping(PVPlayerAsyncTestParam aTestParam):
   2237                 pvplayer_async_test_base(aTestParam)
   2238                 , iPlayer(NULL)
   2239                 , iDataSource(NULL)
   2240                 , iDataSinkVideo(NULL)
   2241                 , iIONodeVideo(NULL)
   2242                 , iMIOFileOutVideo(NULL)
   2243                 , iDataSinkAudio(NULL)
   2244                 , iIONodeAudio(NULL)
   2245                 , iMIOFileOutAudio(NULL)
   2246                 , iDataSinkText(NULL)
   2247                 , iIONodeText(NULL)
   2248                 , iMIOFileOutText(NULL)
   2249                 , iCurrentCmdId(0)
   2250         {
   2251             iTestCaseName = _STRLIT_CHAR("Looping");
   2252         }
   2253 
   2254         ~pvplayer_async_test_looping() {}
   2255 
   2256         void StartTest();
   2257         void Run();
   2258 
   2259         void CommandCompleted(const PVCmdResponse& aResponse);
   2260         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2261         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2262 
   2263         enum PVTestState
   2264         {
   2265             STATE_CREATE,
   2266             STATE_STARTPLAYBACK,
   2267             STATE_SETPLAYBACKRANGE1,
   2268             STATE_ENDTIMENOTREACHED1,
   2269             STATE_SETPLAYBACKRANGE2,
   2270             STATE_RESUME,
   2271             STATE_ENDTIMENOTREACHED2,
   2272             STATE_SHUTDOWN,
   2273             STATE_CLEANUPANDCOMPLETE
   2274         };
   2275 
   2276         PVTestState iState;
   2277 
   2278         PVPlayerInterface* iPlayer;
   2279         PVPlayerDataSourceURL* iDataSource;
   2280         PVPlayerDataSink* iDataSinkVideo;
   2281         PVMFNodeInterface* iIONodeVideo;
   2282         PvmiMIOControl* iMIOFileOutVideo;
   2283         PVPlayerDataSink* iDataSinkAudio;
   2284         PVMFNodeInterface* iIONodeAudio;
   2285         PvmiMIOControl* iMIOFileOutAudio;
   2286         PVPlayerDataSink* iDataSinkText;
   2287         PVMFNodeInterface* iIONodeText;
   2288         PvmiMIOControl* iMIOFileOutText;
   2289         Oscl_Vector<PVCommandId, OsclMemAllocator> iCmdIds;
   2290         PVCommandId iCurrentCmdId;
   2291 
   2292     private:
   2293         OSCL_wHeapString<OsclMemAllocator> wFileName;
   2294         oscl_wchar output[512];
   2295 };
   2296 
   2297 
   2298 /*!
   2299  *  A test case to test the normal engine sequence of playing a specified source till end of clip
   2300  *  - Data Source: Passed in parameter
   2301  *  - Data Sink(s): Video[FileOutputNode-test_player_waitforeos_[SRCFILENAME]_video.dat]\n
   2302  *                  Audio[FileOutputNode-test_player_waitforeos_[SRCFILENAME]_audio.dat]\n
   2303  *                  Text[FileOutputNode-test_player_waitforeos_[SRCFILENAME]_text.dat]
   2304  *  - Sequence
   2305  *             -# CreatePlayer()
   2306  *             -# AddDataSource()
   2307  *             -# Init()
   2308  *             -# AddDataSink() (video)
   2309  *             -# AddDataSink() (audio)
   2310  *             -# AddDataSink() (text)
   2311  *             -# Prepare()
   2312  *             -# Start()
   2313  *             -# WAIT FOR EOS OR 180 SEC TIMEOUT
   2314  *             -# Stop()
   2315  *             -# RemoveDataSink() (video)
   2316  *             -# RemoveDataSink() (audio)
   2317  *             -# RemoveDataSink() (text)
   2318  *             -# Reset()
   2319  *             -# RemoveDataSource()
   2320  *             -# DeletePlayer()
   2321  *
   2322  */
   2323 class pvplayer_async_test_waitforeos : public pvplayer_async_test_base
   2324 {
   2325     public:
   2326         pvplayer_async_test_waitforeos(PVPlayerAsyncTestParam aTestParam):
   2327                 pvplayer_async_test_base(aTestParam)
   2328                 , iPlayer(NULL)
   2329                 , iDataSource(NULL)
   2330                 , iDataSinkVideo(NULL)
   2331                 , iIONodeVideo(NULL)
   2332                 , iMIOFileOutVideo(NULL)
   2333                 , iDataSinkAudio(NULL)
   2334                 , iIONodeAudio(NULL)
   2335                 , iMIOFileOutAudio(NULL)
   2336                 , iDataSinkText(NULL)
   2337                 , iIONodeText(NULL)
   2338                 , iMIOFileOutText(NULL)
   2339                 , iCurrentCmdId(0)
   2340         {
   2341             iTestCaseName = _STRLIT_CHAR("Play-Wait For EOS");
   2342         }
   2343 
   2344         ~pvplayer_async_test_waitforeos() {}
   2345 
   2346         void StartTest();
   2347         void Run();
   2348 
   2349         void CommandCompleted(const PVCmdResponse& aResponse);
   2350         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2351         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2352 
   2353         enum PVTestState
   2354         {
   2355             STATE_CREATE,
   2356             STATE_ADDDATASOURCE,
   2357             STATE_INIT,
   2358             STATE_ADDDATASINK_VIDEO,
   2359             STATE_ADDDATASINK_AUDIO,
   2360             STATE_ADDDATASINK_TEXT,
   2361             STATE_PREPARE,
   2362             STATE_START,
   2363             STATE_EOSNOTREACHED,
   2364             STATE_STOP,
   2365             STATE_REMOVEDATASINK_VIDEO,
   2366             STATE_REMOVEDATASINK_AUDIO,
   2367             STATE_REMOVEDATASINK_TEXT,
   2368             STATE_RESET,
   2369             STATE_REMOVEDATASOURCE,
   2370             STATE_CLEANUPANDCOMPLETE
   2371         };
   2372 
   2373         PVTestState iState;
   2374 
   2375         PVPlayerInterface* iPlayer;
   2376         PVPlayerDataSourceURL* iDataSource;
   2377         PVPlayerDataSink* iDataSinkVideo;
   2378         PVMFNodeInterface* iIONodeVideo;
   2379         PvmiMIOControl* iMIOFileOutVideo;
   2380         PVPlayerDataSink* iDataSinkAudio;
   2381         PVMFNodeInterface* iIONodeAudio;
   2382         PvmiMIOControl* iMIOFileOutAudio;
   2383         PVPlayerDataSink* iDataSinkText;
   2384         PVMFNodeInterface* iIONodeText;
   2385         PvmiMIOControl* iMIOFileOutText;
   2386         PVCommandId iCurrentCmdId;
   2387 
   2388     private:
   2389         OSCL_wHeapString<OsclMemAllocator> wFileName;
   2390         oscl_wchar output[512];
   2391 };
   2392 
   2393 
   2394 
   2395 /*!
   2396  *  A test case to test if the player engine can handle multiple pause-resume requests
   2397  *  - Data Source: Specified source
   2398  *  - Data Sink(s): Video[FileOutputNode-test_player_multipauseresume_[SRCFILENAME]_video.dat]\n
   2399  *                  Audio[FileOutputNode-test_player_multipauseresume_[SRCFILENAME]_audio.dat]\n
   2400  *                  Text[FileOutputNode-test_player_multipauseresume_[SRCFILENAME]_text.dat]
   2401  *  - Sequence:
   2402  *             -# CreatePlayer()
   2403  *             -# AddDataSource()/Init()/AddDataSink() (video)/AddDataSink() (audio)/AddDataSink() (text)/Prepare()/Start()
   2404  *             -# WAIT 5 sec.
   2405  *             -# Pause()/Resume() X 5
   2406  *             -# WAIT 2 sec.
   2407  *             -# Pause()
   2408  *             -# WAIT 5 sec.
   2409  *             -# Resume()
   2410  *             -# WAIT 3 sec.
   2411  *             -# Pause()/Resume() X 3
   2412  *             -# Wait 5 sec.
   2413  *             -# Stop()/RemoveDataSink() (video)/RemoveDataSink() (audio)/RemoveDataSink() (text)/Reset()/RemoveDataSource()
   2414  *             -# DeletePlayer()
   2415  *
   2416  */
   2417 class pvplayer_async_test_multipauseresume : public pvplayer_async_test_base
   2418 {
   2419     public:
   2420         pvplayer_async_test_multipauseresume(PVPlayerAsyncTestParam aTestParam):
   2421                 pvplayer_async_test_base(aTestParam)
   2422                 , iPlayer(NULL)
   2423                 , iDataSource(NULL)
   2424                 , iDataSinkVideo(NULL)
   2425                 , iIONodeVideo(NULL)
   2426                 , iMIOFileOutVideo(NULL)
   2427                 , iDataSinkAudio(NULL)
   2428                 , iIONodeAudio(NULL)
   2429                 , iMIOFileOutAudio(NULL)
   2430                 , iDataSinkText(NULL)
   2431                 , iIONodeText(NULL)
   2432                 , iMIOFileOutText(NULL)
   2433                 , iCurrentCmdId(0)
   2434         {
   2435             iTestCaseName = _STRLIT_CHAR("Multiple Pause-Resume");
   2436         }
   2437 
   2438         ~pvplayer_async_test_multipauseresume() {}
   2439 
   2440         void StartTest();
   2441         void Run();
   2442 
   2443         void CommandCompleted(const PVCmdResponse& aResponse);
   2444         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2445         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2446 
   2447         enum PVTestState
   2448         {
   2449             STATE_CREATE,
   2450             STATE_STARTPLAYBACK,
   2451             STATE_PAUSERESUME1,
   2452             STATE_PAUSE,
   2453             STATE_RESUME,
   2454             STATE_PAUSERESUME2,
   2455             STATE_SHUTDOWN,
   2456             STATE_CLEANUPANDCOMPLETE
   2457         };
   2458 
   2459         PVTestState iState;
   2460 
   2461         PVPlayerInterface* iPlayer;
   2462         PVPlayerDataSourceURL* iDataSource;
   2463         PVPlayerDataSink* iDataSinkVideo;
   2464         PVMFNodeInterface* iIONodeVideo;
   2465         PvmiMIOControl* iMIOFileOutVideo;
   2466         PVPlayerDataSink* iDataSinkAudio;
   2467         PVMFNodeInterface* iIONodeAudio;
   2468         PvmiMIOControl* iMIOFileOutAudio;
   2469         PVPlayerDataSink* iDataSinkText;
   2470         PVMFNodeInterface* iIONodeText;
   2471         PvmiMIOControl* iMIOFileOutText;
   2472         Oscl_Vector<PVCommandId, OsclMemAllocator> iCmdIds;
   2473         PVCommandId iCurrentCmdId;
   2474 
   2475     private:
   2476         OSCL_wHeapString<OsclMemAllocator> wFileName;
   2477         oscl_wchar output[512];
   2478 };
   2479 
   2480 
   2481 /*!
   2482  *  A test case to test if the player engine can handle multiple repositioning during playback
   2483  *  - Data Source: Specified source
   2484  *  - Data Sink(s): Video[FileOutputNode-test_player_multireposition_[SRCFILENAME]_video.dat]\n
   2485  *                  Audio[FileOutputNode-test_player_multireposition_[SRCFILENAME]_audio.dat]\n
   2486  *                  Text[FileOutputNode-test_player_multireposition_[SRCFILENAME]_text.dat]
   2487  *  - Sequence:
   2488  *             -# CreatePlayer()
   2489  *             -# AddDataSource()/Init()/AddDataSink() (video)/AddDataSink() (audio)/AddDataSink() (text)/Prepare()/Start()
   2490  *             -# WAIT 5 sec.
   2491  *             -# SetPlaybackRange(20 sec, indeterminate)
   2492  *             -# WAIT 5 sec.
   2493  *             -# SetPlaybackRange(5 sec, indeterminate)
   2494  *             -# WAIT 5 sec.
   2495  *             -# SetPlaybackRange(25 sec, indeterminate)
   2496  *             -# WAIT 5 sec.
   2497  *             -# SetPlaybackRange(10 sec, indeterminate)
   2498  *             -# WAIT 5 sec.
   2499  *             -# SetPlaybackRange(20 sec, indeterminate)
   2500  *             -# SetPlaybackRange(0 sec, indeterminate)
   2501  *             -# WAIT 5 sec.
   2502  *             -# Stop()/RemoveDataSink() (video)/RemoveDataSink() (audio)/RemoveDataSink() (text)/Reset()/RemoveDataSource()
   2503  *             -# DeletePlayer()
   2504  *
   2505  */
   2506 class pvplayer_async_test_multireposition : public pvplayer_async_test_base
   2507 {
   2508     public:
   2509         pvplayer_async_test_multireposition(PVPlayerAsyncTestParam aTestParam):
   2510                 pvplayer_async_test_base(aTestParam)
   2511                 , iPlayer(NULL)
   2512                 , iDataSource(NULL)
   2513                 , iDataSinkVideo(NULL)
   2514                 , iIONodeVideo(NULL)
   2515                 , iMIOFileOutVideo(NULL)
   2516                 , iDataSinkAudio(NULL)
   2517                 , iIONodeAudio(NULL)
   2518                 , iMIOFileOutAudio(NULL)
   2519                 , iDataSinkText(NULL)
   2520                 , iIONodeText(NULL)
   2521                 , iMIOFileOutText(NULL)
   2522                 , iCurrentCmdId(0)
   2523         {
   2524             iTestCaseName = _STRLIT_CHAR("Multiple SetPlaybackRange");
   2525         }
   2526 
   2527         ~pvplayer_async_test_multireposition() {}
   2528 
   2529         void StartTest();
   2530         void Run();
   2531 
   2532         void CommandCompleted(const PVCmdResponse& aResponse);
   2533         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2534         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2535 
   2536         enum PVTestState
   2537         {
   2538             STATE_CREATE,
   2539             STATE_STARTPLAYBACK,
   2540             STATE_SETPLAYBACKRANGE1,
   2541             STATE_SETPLAYBACKRANGE2,
   2542             STATE_SETPLAYBACKRANGE3,
   2543             STATE_SETPLAYBACKRANGE4,
   2544             STATE_SETPLAYBACKRANGE5,
   2545             STATE_SETPLAYBACKRANGE6,
   2546             STATE_SHUTDOWN,
   2547             STATE_CLEANUPANDCOMPLETE
   2548         };
   2549 
   2550         PVTestState iState;
   2551 
   2552         PVPlayerInterface* iPlayer;
   2553         PVPlayerDataSourceURL* iDataSource;
   2554         PVPlayerDataSink* iDataSinkVideo;
   2555         PVMFNodeInterface* iIONodeVideo;
   2556         PvmiMIOControl* iMIOFileOutVideo;
   2557         PVPlayerDataSink* iDataSinkAudio;
   2558         PVMFNodeInterface* iIONodeAudio;
   2559         PvmiMIOControl* iMIOFileOutAudio;
   2560         PVPlayerDataSink* iDataSinkText;
   2561         PVMFNodeInterface* iIONodeText;
   2562         PvmiMIOControl* iMIOFileOutText;
   2563         PVCommandId iCurrentCmdId;
   2564         Oscl_Vector<PVCommandId, OsclMemAllocator> iCmdIds;
   2565 
   2566         Oscl_FileServer iFS;
   2567         Oscl_File iTimeLogFile;
   2568 
   2569     private:
   2570         OSCL_wHeapString<OsclMemAllocator> wFileName;
   2571         oscl_wchar output[512];
   2572 };
   2573 
   2574 
   2575 /*!
   2576  *  A test case to test capability-and-configuration interface of player engine
   2577  *  - Data Source: Passed in parameter
   2578  *  - Data Sink(s): Video[FileOutputNode-test_player_capconfigif_[SRCFILENAME]_video.dat]\n
   2579  *                  Audio[FileOutputNode-test_player_capconfigif_[SRCFILENAME]_audio.dat]
   2580  *  - Sequence:
   2581  *             -# CreatePlayer()
   2582  *             -# QueryInterface() (capability-and-config interface)
   2583  *             -# CALL CAPCONFIG METHODS WHILE IDLE
   2584  *             -# AddDataSource()
   2585  *             -# Init()
   2586  *             -# CALL CAPCONFIG METHODS WHILE INITIALIZED
   2587  *             -# AddDataSink() (video)
   2588  *             -# AddDataSink() (audio)
   2589  *             -# Prepare()
   2590  *             -# Start()
   2591  *             -# CALL CAPCONFIG METHODS WHILE PLAYING
   2592  *             -# Stop()
   2593  *             -# RemoveDataSink() (video)
   2594  *             -# RemoveDataSink() (audio)
   2595  *             -# Reset()
   2596  *             -# RemoveDataSource()
   2597  *             -# DeletePlayer()
   2598  *
   2599  */
   2600 class pvplayer_async_test_capconfigiftest : public pvplayer_async_test_base, public PvmiConfigAndCapabilityCmdObserver
   2601 {
   2602     public:
   2603         pvplayer_async_test_capconfigiftest(PVPlayerAsyncTestParam aTestParam):
   2604                 pvplayer_async_test_base(aTestParam)
   2605                 , iPlayer(NULL)
   2606                 , iPlayerCapConfigIF(NULL)
   2607                 , iDataSource(NULL)
   2608                 , iDataSinkVideo(NULL)
   2609                 , iIONodeVideo(NULL)
   2610                 , iMIOFileOutVideo(NULL)
   2611                 , iDataSinkAudio(NULL)
   2612                 , iIONodeAudio(NULL)
   2613                 , iMIOFileOutAudio(NULL)
   2614                 , iCurrentCmdId(0)
   2615                 , iErrorKVP(NULL)
   2616         {
   2617             iTestCaseName = _STRLIT_CHAR("Capability&Config Interface");
   2618         }
   2619 
   2620         ~pvplayer_async_test_capconfigiftest() {}
   2621 
   2622         void StartTest();
   2623         void Run();
   2624 
   2625         void CommandCompleted(const PVCmdResponse& aResponse);
   2626         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2627         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2628 
   2629         // From PvmiConfigAndCapabilityCmdObserver
   2630         void SignalEvent(int32 req_id);
   2631 
   2632         enum PVTestState
   2633         {
   2634             STATE_CREATE,
   2635             STATE_QUERYINTERFACE,
   2636             STATE_CAPCONFIG1,
   2637             STATE_CAPCONFIG2,
   2638             STATE_ADDDATASOURCE,
   2639             STATE_INIT,
   2640             STATE_CAPCONFIG3,
   2641             STATE_ADDDATASINK_VIDEO,
   2642             STATE_ADDDATASINK_AUDIO,
   2643             STATE_PREPARE,
   2644             STATE_START,
   2645             STATE_CAPCONFIG4,
   2646             STATE_STOP,
   2647             STATE_REMOVEDATASINK_VIDEO,
   2648             STATE_REMOVEDATASINK_AUDIO,
   2649             STATE_RESET,
   2650             STATE_REMOVEDATASOURCE,
   2651             STATE_CLEANUPANDCOMPLETE
   2652         };
   2653 
   2654         PVTestState iState;
   2655 
   2656         PVPlayerInterface* iPlayer;
   2657         PvmiCapabilityAndConfig* iPlayerCapConfigIF;
   2658         PVPlayerDataSourceURL* iDataSource;
   2659         PVPlayerDataSink* iDataSinkVideo;
   2660         PVMFNodeInterface* iIONodeVideo;
   2661         PvmiMIOControl* iMIOFileOutVideo;
   2662         PVPlayerDataSink* iDataSinkAudio;
   2663         PVMFNodeInterface* iIONodeAudio;
   2664         PvmiMIOControl* iMIOFileOutAudio;
   2665         PVCommandId iCurrentCmdId;
   2666 
   2667         PvmiKvp* iErrorKVP;
   2668         PvmiKvp iKVPSetAsync;
   2669         OSCL_StackString<64> iKeyStringSetAsync;
   2670 
   2671     private:
   2672         OSCL_wHeapString<OsclMemAllocator> wFileName;
   2673         oscl_wchar output[512];
   2674 };
   2675 
   2676 
   2677 /*!
   2678  *  A test case to test the working of Start - Stop - Prepare - SetPlaybackRange - Start
   2679  *  - Data Source: Specified source
   2680  *  - Data Sink(s): Video[FileOutputNode-test_player_multireposition_[SRCFILENAME]_video.dat]\n
   2681  *                  Audio[FileOutputNode-test_player_multireposition_[SRCFILENAME]_audio.dat]\n
   2682  *                  Text[FileOutputNode-test_player_multireposition_[SRCFILENAME]_text.dat]
   2683  *  - Sequence:
   2684  *             -# CreatePlayer()
   2685  *             -# AddDataSource()/Init()/AddDataSink() (video)/AddDataSink() (audio)/AddDataSink() (text)
   2686  *             -# Prepare()/ SetPlaybackRange() / Start()
   2687  *             -# Wait for 5secs.
   2688  *             -# Stop()/RemoveDataSink() (video)/RemoveDataSink() (audio)/RemoveDataSink() (text)/Reset()/RemoveDataSource()
   2689  *             -# DeletePlayer()
   2690  *
   2691  */
   2692 class pvplayer_async_test_setplaybackafterprepare : public pvplayer_async_test_base
   2693 {
   2694     public:
   2695         pvplayer_async_test_setplaybackafterprepare(PVPlayerAsyncTestParam aTestParam):
   2696                 pvplayer_async_test_base(aTestParam)
   2697                 , iPlayer(NULL)
   2698                 , iDataSource(NULL)
   2699                 , iDataSinkVideo(NULL)
   2700                 , iIONodeVideo(NULL)
   2701                 , iMIOFileOutVideo(NULL)
   2702                 , iDataSinkAudio(NULL)
   2703                 , iIONodeAudio(NULL)
   2704                 , iMIOFileOutAudio(NULL)
   2705                 , iDataSinkText(NULL)
   2706                 , iIONodeText(NULL)
   2707                 , iMIOFileOutText(NULL)
   2708                 , iCurrentCmdId(0)
   2709                 , iSourceContextData(NULL)
   2710         {
   2711             iTestCaseName = _STRLIT_CHAR("SetPlaybackRange After Prepare");
   2712         }
   2713 
   2714         ~pvplayer_async_test_setplaybackafterprepare() {}
   2715 
   2716         void StartTest();
   2717         void Run();
   2718 
   2719         void CommandCompleted(const PVCmdResponse& aResponse);
   2720         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2721         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2722 
   2723         enum PVTestState
   2724         {
   2725             STATE_CREATE,
   2726             STATE_ADDDATASOURCE,
   2727             STATE_INIT,
   2728             STATE_ADDDATASINK_VIDEO,
   2729             STATE_ADDDATASINK_AUDIO,
   2730             STATE_ADDDATASINK_TEXT,
   2731             STATE_PREPARE,
   2732             STATE_SETPLAYBACKRANGE,
   2733             STATE_START,
   2734             STATE_STOP,
   2735             STATE_REMOVEDATASINK_VIDEO,
   2736             STATE_REMOVEDATASINK_AUDIO,
   2737             STATE_REMOVEDATASINK_TEXT,
   2738             STATE_RESET,
   2739             STATE_REMOVEDATASOURCE,
   2740             STATE_CLEANUPANDCOMPLETE
   2741         };
   2742 
   2743         PVTestState iState;
   2744 
   2745         PVPlayerInterface* iPlayer;
   2746         PVPlayerDataSourceURL* iDataSource;
   2747         PVPlayerDataSink* iDataSinkVideo;
   2748         PVMFNodeInterface* iIONodeVideo;
   2749         PvmiMIOControl* iMIOFileOutVideo;
   2750         PVPlayerDataSink* iDataSinkAudio;
   2751         PVMFNodeInterface* iIONodeAudio;
   2752         PvmiMIOControl* iMIOFileOutAudio;
   2753         PVPlayerDataSink* iDataSinkText;
   2754         PVMFNodeInterface* iIONodeText;
   2755         PvmiMIOControl* iMIOFileOutText;
   2756         PVCommandId iCurrentCmdId;
   2757         Oscl_Vector<PVCommandId, OsclMemAllocator> iCmdIds;
   2758 
   2759         Oscl_FileServer iFS;
   2760         Oscl_File iTimeLogFile;
   2761 
   2762     private:
   2763         OSCL_wHeapString<OsclMemAllocator> wFileName;
   2764         oscl_wchar output[512];
   2765         PVMFSourceContextData* iSourceContextData;
   2766 };
   2767 
   2768 /*!
   2769  *  A test case to test if the player engine can handle multiple pause seek resume during playback
   2770  *  - Data Source: Specified source
   2771  *  - Data Sink(s): Video[FileOutputNode-test_player_multireposition_[SRCFILENAME]_video.dat]\n
   2772  *                  Audio[FileOutputNode-test_player_multireposition_[SRCFILENAME]_audio.dat]\n
   2773  *                  Text[FileOutputNode-test_player_multireposition_[SRCFILENAME]_text.dat]
   2774  *  - Sequence:
   2775  *             -# CreatePlayer()
   2776  *             -# AddDataSource()/Init()/AddDataSink() (video)/AddDataSink() (audio)/AddDataSink() (text)/Prepare()/Start()
   2777  *             -# WAIT Duration/10 sec.
   2778  *             -# Pause()/SetPlaybackRange(Duration/4 sec, indeterminate)/Resume()
   2779  *             -# WAIT Duration/10 sec.
   2780  *             -# Pause()/SetPlaybackRange(Duration/4 sec, indeterminate)/Resume()
   2781  *             -#   :
   2782  *             -# EOS
   2783  *             -# Stop()/RemoveDataSink() (video)/RemoveDataSink() (audio)/RemoveDataSink() (text)/Reset()/RemoveDataSource()
   2784  *             -# DeletePlayer()
   2785  *
   2786  */
   2787 class pvplayer_async_test_multipauseseekresume : public pvplayer_async_test_base
   2788 {
   2789     public:
   2790         pvplayer_async_test_multipauseseekresume(PVPlayerAsyncTestParam aTestParam):
   2791                 pvplayer_async_test_base(aTestParam)
   2792                 , iPlayer(NULL)
   2793                 , iDataSource(NULL)
   2794                 , iDataSinkVideo(NULL)
   2795                 , iIONodeVideo(NULL)
   2796                 , iMIOFileOutVideo(NULL)
   2797                 , iDataSinkAudio(NULL)
   2798                 , iIONodeAudio(NULL)
   2799                 , iMIOFileOutAudio(NULL)
   2800                 , iDataSinkText(NULL)
   2801                 , iIONodeText(NULL)
   2802                 , iMIOFileOutText(NULL)
   2803                 , iCurrentCmdId(0)
   2804                 , iSessionDuration(0)
   2805                 , iSourceContextData(NULL)
   2806         {
   2807             iTestCaseName = _STRLIT_CHAR("Multiple Pause SetPlaybackRange Resume");
   2808             iTargetNumPause = 1;
   2809             iNumPause = 0;
   2810         }
   2811 
   2812         ~pvplayer_async_test_multipauseseekresume() {}
   2813 
   2814         void StartTest();
   2815         void Run();
   2816 
   2817         void CommandCompleted(const PVCmdResponse& aResponse);
   2818         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2819         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2820 
   2821         enum PVTestState
   2822         {
   2823             STATE_CREATE,
   2824             STATE_ADDDATASOURCE,
   2825             STATE_INIT,
   2826             STATE_GETMETADATAKEYLIST,
   2827             STATE_GETMETADATAVALUELIST,
   2828             STATE_ADDDATASINK_VIDEO,
   2829             STATE_ADDDATASINK_AUDIO,
   2830             STATE_ADDDATASINK_TEXT,
   2831             STATE_PREPARE,
   2832             STATE_START,
   2833             STATE_PAUSE,
   2834             STATE_SETPLAYBACKRANGE,
   2835             STATE_RESUME,
   2836             STATE_STOP,
   2837             STATE_REMOVEDATASINK_VIDEO,
   2838             STATE_REMOVEDATASINK_AUDIO,
   2839             STATE_REMOVEDATASINK_TEXT,
   2840             STATE_RESET,
   2841             STATE_REMOVEDATASOURCE,
   2842             STATE_CLEANUPANDCOMPLETE
   2843         };
   2844 
   2845         PVTestState iState;
   2846 
   2847         PVPlayerInterface* iPlayer;
   2848         PVPlayerDataSourceURL* iDataSource;
   2849         PVPlayerDataSink* iDataSinkVideo;
   2850         PVMFNodeInterface* iIONodeVideo;
   2851         PvmiMIOControl* iMIOFileOutVideo;
   2852         PVPlayerDataSink* iDataSinkAudio;
   2853         PVMFNodeInterface* iIONodeAudio;
   2854         PvmiMIOControl* iMIOFileOutAudio;
   2855         PVPlayerDataSink* iDataSinkText;
   2856         PVMFNodeInterface* iIONodeText;
   2857         PvmiMIOControl* iMIOFileOutText;
   2858         PVCommandId iCurrentCmdId;
   2859         Oscl_Vector<PVCommandId, OsclMemAllocator> iCmdIds;
   2860 
   2861         void setMultiplePauseMode(uint32 aNum)
   2862         {
   2863             iTargetNumPause = aNum;
   2864         }
   2865 
   2866     private:
   2867         OSCL_wHeapString<OsclMemAllocator> wFileName;
   2868         oscl_wchar output[512];
   2869 
   2870         PVPMetadataList iMetadataKeyList;
   2871         Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataValueList;
   2872         int32 iNumValues;
   2873 
   2874         uint32 iTargetNumPause;
   2875         uint32 iNumPause;
   2876         uint32 iSessionDuration;
   2877 
   2878         PVMFSourceContextData* iSourceContextData;
   2879 };
   2880 
   2881 /**
   2882 * pvplayer_async_test_multiple_instance is an Open-Play-Stop test case
   2883 * that launches a 2nd engine instance and plays the selected input
   2884 * simultaneously from the two instances.
   2885 */
   2886 class PVMFLocalDataSource;
   2887 class PvOmapVideo;
   2888 class PVRefOmapAudioOutput;
   2889 
   2890 
   2891 class pvplayer_async_test_multiple_instance : public pvplayer_async_test_base
   2892 {
   2893     public:
   2894         pvplayer_async_test_multiple_instance(PVPlayerAsyncTestParam aTestParam):
   2895                 pvplayer_async_test_base(aTestParam)
   2896                 , iPlayer(NULL)
   2897                 , iDataSource(NULL)
   2898                 , iDataSinkVideo(NULL)
   2899                 , iDataSinkAudio(NULL)
   2900                 , iDataSinkText(NULL)
   2901                 , iIONodeVideo(NULL)
   2902                 , iIONodeAudio(NULL)
   2903                 , iIONodeText(NULL)
   2904                 , iMOutVideo(NULL)
   2905                 , iMOutAudio(NULL)
   2906                 , iMOutText(NULL)
   2907                 , iCurrentCmdId(0)
   2908         {
   2909             iSinkName = _STRLIT_WCHAR("pvplayer_async_test_multiple_instance_");
   2910             iTestCaseName = _STRLIT_CHAR("Multiple Instance Open-Play-Stop");
   2911             iLocalDataSource = NULL;
   2912 
   2913             iParentInstance = NULL;
   2914             iChildThreadFailures = 0;
   2915             iChildThreadLeave = 0;
   2916             iChildThreadExit = false;
   2917             //make a persistent copy of the test params.
   2918             iParam = new PVPlayerAsyncTestParam();
   2919             iParam->Copy(aTestParam);
   2920         }
   2921 
   2922         ~pvplayer_async_test_multiple_instance()
   2923         {
   2924             delete iParam;
   2925         }
   2926 
   2927         //To support the 2nd instance of the test case.
   2928         pvplayer_async_test_multiple_instance* iParentInstance;
   2929         int32 iChildThreadFailures;
   2930         int32 iChildThreadLeave;
   2931         bool iChildThreadExit;
   2932         PVPlayerAsyncTestParam* iParam;
   2933         void ChildTestIsTrue(bool);
   2934         static void InThread(pvplayer_async_test_multiple_instance* parent);
   2935         //An observer class for the 2nd instance of the test case.
   2936         class ChildObserver: public pvplayer_async_test_observer
   2937         {
   2938             public:
   2939                 void TestCompleted(test_case &tc);
   2940         };
   2941         //End 2nd instance support.
   2942 
   2943         void StartTest();
   2944         void Run();
   2945 
   2946         void CommandCompleted(const PVCmdResponse& aResponse);
   2947         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   2948         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   2949 
   2950         enum PVTestState
   2951         {
   2952             STATE_CREATE,
   2953             STATE_ADDDATASOURCE,
   2954             STATE_INIT,
   2955             STATE_GETMETADATAKEYLIST,
   2956             STATE_GETMETADATAVALUELIST,
   2957             STATE_ADDDATASINK_VIDEO,
   2958             STATE_ADDDATASINK_AUDIO,
   2959             STATE_ADDDATASINK_TEXT,
   2960             STATE_PREPARE,
   2961             STATE_START,
   2962             STATE_STOP,
   2963             STATE_REMOVEDATASINK_VIDEO,
   2964             STATE_REMOVEDATASINK_AUDIO,
   2965             STATE_REMOVEDATASINK_TEXT,
   2966             STATE_RESET,
   2967             STATE_REMOVEDATASOURCE,
   2968             STATE_CLEANUPANDCOMPLETE
   2969         };
   2970 
   2971         PVTestState iState;
   2972 
   2973         PVPlayerInterface* iPlayer;
   2974         PVPlayerDataSourceURL* iDataSource;
   2975         PVPlayerDataSink* iDataSinkVideo;
   2976         PVPlayerDataSink* iDataSinkAudio;
   2977         PVPlayerDataSink* iDataSinkText;
   2978         PVMFNodeInterface* iIONodeVideo;
   2979         PVMFNodeInterface* iIONodeAudio;
   2980         PVMFNodeInterface* iIONodeText;
   2981         PvmiMIOControl* iMOutVideo;
   2982         PvmiMIOControl* iMOutAudio;
   2983         PvmiMIOControl* iMOutText;
   2984         PVCommandId iCurrentCmdId;
   2985 
   2986         OSCL_wHeapString<OsclMemAllocator> iFileNameWStr;
   2987         oscl_wchar iTmpWCharBuffer[512];
   2988 
   2989         PVMFLocalDataSource* iLocalDataSource;
   2990 
   2991         void PrintMetadata();
   2992         PVPMetadataList iMetadataKeyList;
   2993         Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataValueList;
   2994         int32 iNumValues;
   2995         OSCL_wHeapString<OsclMemAllocator> iSinkName;
   2996 
   2997 };
   2998 
   2999 /**
   3000 * pvplayer_async_test_multiple_thread is an Open-Play-Stop test case
   3001 * that launches engine instance in a second thread and tests controlling
   3002 * engine from an app thread.
   3003 */
   3004 class PVMFLocalDataSource;
   3005 class PvOmapVideo;
   3006 class PVRefOmapAudioOutput;
   3007 class OsclExecScheduler;
   3008 
   3009 #include "threadsafe_queue.h"
   3010 
   3011 class pvplayer_async_test_multiple_thread : public pvplayer_async_test_base
   3012         , public ThreadSafeQueueObserver
   3013 {
   3014     public:
   3015         pvplayer_async_test_multiple_thread(PVPlayerAsyncTestParam aTestParam):
   3016                 pvplayer_async_test_base(aTestParam)
   3017                 , iPlayer(NULL)
   3018                 , iDataSource(NULL)
   3019                 , iDataSinkVideo(NULL)
   3020                 , iDataSinkAudio(NULL)
   3021                 , iDataSinkText(NULL)
   3022                 , iIONodeVideo(NULL)
   3023                 , iIONodeAudio(NULL)
   3024                 , iIONodeText(NULL)
   3025                 , iMOutVideo(NULL)
   3026                 , iMOutAudio(NULL)
   3027                 , iMOutText(NULL)
   3028                 , iCurrentCmdId(0)
   3029         {
   3030             iSinkName = _STRLIT_WCHAR("pvplayer_async_test_multiple_thread_");
   3031             iTestCaseName = _STRLIT_CHAR("Multiple Thread Open-Play-Stop");
   3032             iLocalDataSource = NULL;
   3033         }
   3034 
   3035         ~pvplayer_async_test_multiple_thread()
   3036         {
   3037         }
   3038 
   3039         void StartTest();
   3040         void Run();
   3041 
   3042         void CommandCompleted(const PVCmdResponse& aResponse);
   3043         void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
   3044         void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
   3045 
   3046         enum PVTestState
   3047         {
   3048             STATE_CREATE,
   3049             STATE_ADDDATASOURCE,
   3050             STATE_INIT,
   3051             STATE_GETMETADATAKEYLIST,
   3052             STATE_GETMETADATAVALUELIST,
   3053             STATE_RELEASEMETADATAVALUES,
   3054             STATE_ADDDATASINK_VIDEO,
   3055             STATE_ADDDATASINK_AUDIO,
   3056             STATE_ADDDATASINK_TEXT,
   3057             STATE_PREPARE,
   3058             STATE_START,
   3059             STATE_STOP,
   3060             STATE_REMOVEDATASINK_VIDEO,
   3061             STATE_REMOVEDATASINK_AUDIO,
   3062             STATE_REMOVEDATASINK_TEXT,
   3063             STATE_RESET,
   3064             STATE_REMOVEDATASOURCE,
   3065             STATE_WAIT_FOR_ERROR_HANDLING,
   3066             STATE_CLEANUPANDCOMPLETE
   3067         };
   3068 
   3069         PVTestState iState;
   3070 
   3071         PVPlayerInterface* iPlayer;
   3072         PVPlayerDataSourceURL* iDataSource;
   3073         PVPlayerDataSink* iDataSinkVideo;
   3074         PVPlayerDataSink* iDataSinkAudio;
   3075         PVPlayerDataSink* iDataSinkText;
   3076         PVMFNodeInterface* iIONodeVideo;
   3077         PVMFNodeInterface* iIONodeAudio;
   3078         PVMFNodeInterface* iIONodeText;
   3079         PvmiMIOControl* iMOutVideo;
   3080         PvmiMIOControl* iMOutAudio;
   3081         PvmiMIOControl* iMOutText;
   3082         PVCommandId iCurrentCmdId;
   3083 
   3084         OSCL_wHeapString<OsclMemAllocator> iFileNameWStr;
   3085         oscl_wchar iTmpWCharBuffer[512];
   3086 
   3087         PVMFLocalDataSource* iLocalDataSource;
   3088 
   3089         void PrintMetadata();
   3090         PVPMetadataList iMetadataKeyList;
   3091         Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataValueList;
   3092         int32 iNumValues;
   3093         OSCL_wHeapString<OsclMemAllocator> iSinkName;
   3094 
   3095         ThreadSafeQueue iThreadSafeCommandQueue;
   3096         ThreadSafeQueue iThreadSafeErrorQueue;
   3097         ThreadSafeQueue iThreadSafeInfoQueue;
   3098         void ThreadSafeQueueDataAvailable(ThreadSafeQueue*);
   3099         OsclSemaphore iThreadReadySem;
   3100         OsclSemaphore iThreadExitSem;
   3101         int32 iThreadErrors;
   3102         OsclExecScheduler* iThreadScheduler;
   3103 };
   3104 
   3105 #endif // TEST_PV_PLAYER_ENGINE_TESTSET1_H_INCLUDED
   3106 
   3107