blob: 16ebde52e9eb70aa8872100cd5a4d8aeb34efec1 [file] [log] [blame]
/* ------------------------------------------------------------------
* Copyright (C) 1998-2009 PacketVideo
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the License for the specific language governing permissions
* and limitations under the License.
* -------------------------------------------------------------------
*/
#ifndef TEST_PV_PLAYER_ENGINE_TESTSET6_H_INCLUDED
#define TEST_PV_PLAYER_ENGINE_TESTSET6_H_INCLUDED
/**
* @file test_pv_player_engine_testset6.h
* @brief This file contains the class definitions for the sixth set of
* test cases for PVPlayerEngine - Streaming tests
*
*/
#ifndef TEST_PV_PLAYER_ENGINE_H_INCLUDED
#include "test_pv_player_engine.h"
#endif
#ifndef TEST_PV_PLAYER_ENGINE_CONFIG_H_INCLUDED
#include "test_pv_player_engine_config.h"
#endif
#ifndef PVMF_STREAMING_DATA_SOURCE_H_INCLUDED
#include "pvmf_streaming_data_source.h"
#endif
#ifndef PVMF_SOURCE_CONTEXT_DATA_H_INCLUDED
#include "pvmf_source_context_data.h"
#endif
#if PVR_SUPPORT
#ifndef PVMF_PVR_CONTROL_INTERFACE_H_INCLUDED
#include "pvmf_pvr_control_interface.h"
#endif
#ifndef PVPVRFFPARSER_H_INCLUDED
#include "pvpvrffparser.h"
#endif
#endif
#define AMR_MPEG4_RTSP_URL "rtsp://pvserveroha.pv.com/public/Interop/3GPP/pv2/pv-amr-475_mpeg4-20.3gp"
#define AMR_MPEG4_RTSP_URL_2 "rtsp://pvserveroha.pv.com/public/metadata/pvmetadata.mp4"
#define H263_AMR_RTSP_URL "rtsp://pvserveroha.pv.com/public/Interop/3GPP/pv2/pv-amr-122_h263-64.3gp"
#define MPEG4_RTSP_URL "rtsp://pvserveroha.pv.com/public/Interop/3GPP/pv2/pv-mpeg4rdatapartr64.3gp"
#define MPEG4_SHRT_HDR_RTSP_URL "rtsp://pvserveroha.pv.com/public/Interop/3GPP/pv2/pv-mpeg4shorthdrr64.3gp"
#define AAC_RTSP_URL "rtsp://pvserveroha.pv.com/public/Interop/3GPP/pv2/pv-aac64_novisual.3gp"
#define MPEG4_AAC_RTSP_URL "rtsp://pvserveroha.pv.com/public/Interop/3GPP/pv2/pv2-aac64_mpeg4-rvlcs-64.3gp"
#define AMR_MPEG4_SDP_FILE "pv_amr_mpeg4.sdp"
#define WM_BSS_URL "http://pvwmsoha.pv.com:8020/WMContent/MBR/mbr_8tracks.wmv"
#if PVR_SUPPORT
#define DEFAULT_PV_PLAYLIST_URL "rtsp://pvserver6.pv.com:554/public/playlist/va_playlists/ply_av_01_mp4_aac.ply"
#endif
class PVPlayerDataSourceURL;
class PVPlayerDataSink;
class PVPlayerDataSink;
class PVPlayerDataSinkFilename;
class PvmfFileOutputNodeConfigInterface;
class PvmiCapabilityAndConfig;
#define DEFAULT_LIVE_BUFFER_DURATION 20
/*!
* A test case to test the normal engine sequence of playing an rtsp url
* - Data Source: RTSP URL
* - Data Sink(s): Video[FileOutputNode-test_player_rtspurl_video.dat]\n
* Audio[FileOutputNode-test_player_rtspurl_audio.dat]
* - Sequence:
* -# CreatePlayer()
* -# AddDataSource()
* -# Init()
* -# AddDataSink() (video)
* -# AddDataSink() (audio)
* -# Prepare()
* -# Start()
* -# WAIT 20 sec.
* -# Stop()
* -# RemoveDataSink() (video)
* -# RemoveDataSink() (audio)
* -# Reset()
* -# RemoveDataSource()
* -# DeletePlayer()
*
*/
class pvplayer_async_test_streamingopenplaystop : public pvplayer_async_test_base
{
public:
pvplayer_async_test_streamingopenplaystop(PVPlayerAsyncTestParam aTestParam,
PVMFFormatType aVideoSinkFormat,
PVMFFormatType aAudioSinkFormat,
uint32 aTestID,
bool aPauseResumeEnable,
bool aSeekEnable,
bool aWaitForEOS,
bool aCloaking,
bool aCancelDuringPrepare,
bool aForwardEnable,
bool aUseFileHandle = false,
bool aMultipleSeekToEndOfClipEnable = false)
: pvplayer_async_test_base(aTestParam)
, iPlayer(NULL)
, iDataSource(NULL)
, iDataSinkVideo(NULL)
, iDataSinkAudio(NULL)
, iIONodeVideo(NULL)
, iIONodeAudio(NULL)
, iMIOFileOutVideo(NULL)
, iMIOFileOutAudio(NULL)
, iCurrentCmdId(0)
, iCancelAllCmdId(0)
, iSeekAfterEOSEnable(false)
, iSessionDuration(0)
, bcloaking(aCloaking)
, oLiveSession(false)
, iProtocolRollOver(false)
, iProtocolRollOverWithUnknownURLType(false)
, iPlayListURL(false)
, iStreamDataSource(NULL)
, iSourceContextData(NULL)
, iPlayListSwitchMode(0)
, iErrorCodeTest(false)
, iErrorCode(0)
, iUseFileHandle(false)
, iPauseDenied(false)
, iTotalValuesRetrieved(0)
, iStartingIndex(0)
, iBlockSize(5)
#if PVR_SUPPORT
, m_PVRControl(NULL)
, iLiveBufferDurationInSec(DEFAULT_LIVE_BUFFER_DURATION)
, iLiveBufferStorage(PVRConfig::EMemory)
#endif
{
iSeekAfterPause = false;
iVideoSinkFormatType = aVideoSinkFormat;
iAudioSinkFormatType = aAudioSinkFormat;
oPauseResumeEnable = aPauseResumeEnable;
oSeekEnable = aSeekEnable;
oWaitForEOS = aWaitForEOS;
iUseFileHandle = aUseFileHandle;
ifilehandle = NULL;
oCancelDuringPrepare = aCancelDuringPrepare;
oForwardEnable = aForwardEnable;
oMultipleSeekToEndOfClipEnable = aMultipleSeekToEndOfClipEnable;
iTestID = aTestID;
iNumPlay = 0;
iTargetNumPlay = 1;
iNumPause = 0;
iTargetNumPause = 1;
iPauseDurationInMS = 10000; //10 seconds by default
}
~pvplayer_async_test_streamingopenplaystop() {}
void StartTest();
void Run();
void CommandCompleted(const PVCmdResponse& aResponse);
void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
enum PVTestState
{
STATE_CREATE,
STATE_QUERYINTERFACE,
STATE_ADDDATASOURCE,
STATE_CONFIGPARAMS,
STATE_INIT,
STATE_GETMETADATAKEYLIST,
STATE_GETMETADATAVALUELIST,
STATE_ADDDATASINK_VIDEO,
STATE_ADDDATASINK_AUDIO,
STATE_PREPARE,
STATE_CANCELALL,
STATE_WAIT_FOR_CANCELALL,
STATE_START,
STATE_SETPLAYBACKRANGE,
STATE_PAUSE,
STATE_RESUME,
STATE_EOSNOTREACHED,
STATE_STOP,
STATE_REMOVEDATASINK_VIDEO,
STATE_REMOVEDATASINK_AUDIO,
STATE_RESET,
STATE_REMOVEDATASOURCE,
STATE_CLEANUPANDCOMPLETE,
STATE_SETFORWARD,
STATE_SETPLAYBACKRANGE_2
};
PVTestState iState;
PVPlayerInterface* iPlayer;
PVPlayerDataSourceURL* iDataSource;
PVPlayerDataSink* iDataSinkVideo;
PVPlayerDataSink* iDataSinkAudio;
PVMFNodeInterface* iIONodeVideo;
PVMFNodeInterface* iIONodeAudio;
PvmiMIOControl* iMIOFileOutVideo;
PvmiMIOControl* iMIOFileOutAudio;
PVCommandId iCurrentCmdId;
PVCommandId iCancelAllCmdId;
void setMultiplePlayMode(uint32 aNum)
{
iMultiplePlay = true;
iTargetNumPlay = aNum;
}
void setMultiplePauseMode(uint32 aNum)
{
iMultiplePause = true;
iTargetNumPause = aNum;
}
void setProtocolRollOverMode()
{
iProtocolRollOver = true;
}
void setProtocolRollOverModeWithUnknownURL()
{
iProtocolRollOverWithUnknownURLType = true;
}
void setPlayListMode()
{
iPlayListURL = true;
}
void setSeekAfterEOSMode()
{
iSeekAfterEOSEnable = true;
}
void setPauseDurationInMS(uint32 aDuration)
{
iPauseDurationInMS = aDuration;
}
void setPauseSetPlayBackRangeResumeSequence()
{
iSeekAfterPause = true;
}
void setErrorCodeTest()
{
iErrorCodeTest = true;
iErrorCode = 404;
}
private:
void HandleSocketNodeErrors(int32 aErr);
void HandleRTSPNodeErrors(int32 aErr);
void HandleStreamingManagerNodeErrors(int32 aErr);
void HandleJitterBufferNodeErrors(int32 aErr);
void HandleMediaLayerNodeErrors(int32 aErr);
void HandleProtocolEngineNodeErrors(int32 aErr, OsclAny* aEventData);
void PrintMetadataInfo();
PVMFFormatType iVideoSinkFormatType;
PVMFFormatType iAudioSinkFormatType;
OSCL_wHeapString<OsclMemAllocator> wFileName;
oscl_wchar output[512];
bool oPauseResumeEnable;
bool oSeekEnable;
bool oCancelDuringPrepare;
bool oWaitForEOS;
uint32 iTestID;
bool iSeekAfterEOSEnable;
bool oForwardEnable;
bool oMultipleSeekToEndOfClipEnable;
PVPMetadataList iMetadataKeyList;
Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataValueList;
int32 iNumValues;
uint32 iSessionDuration;
bool bcloaking;
bool oLiveSession;
bool iMultiplePause;
int32 iNumPause;
int32 iTargetNumPause;
uint32 iPauseDurationInMS;
bool iMultiplePlay;
uint32 iNumPlay;
uint32 iTargetNumPlay;
bool iProtocolRollOver;
bool iProtocolRollOverWithUnknownURLType;
bool iPlayListURL;
PVMFStreamingDataSource* iStreamDataSource;
PVMFSourceContextData* iSourceContextData;
int32 iPlayListSwitchMode;
bool iErrorCodeTest;
uint32 iErrorCode;
bool iUseFileHandle;
PvmiCapabilityAndConfig* iPlayerCapConfigIF;
PvmiKvp* iErrorKVP;
PvmiKvp iKVPSetAsync;
OSCL_StackString<128> iKeyStringSetAsync;
OSCL_StackString<128> iURLToTest404;
OSCL_StackString<128> iURLToTest415;
bool iPauseDenied; //governed by the pause-denied metadata
uint32 iTotalValuesRetrieved;
uint32 iStartingIndex;
const uint32 iBlockSize;
bool iSeekAfterPause;
#if PVR_SUPPORT
PVMFPVRControl* m_PVRControl;
uint32 iLiveBufferDurationInSec;
PVRConfig::TLiveBufferStorage iLiveBufferStorage;
#endif
OsclFileHandle* ifilehandle;
};
/*!
* A test case to test the normal engine sequence of playing an rtsp url
* - Data Source: RTSP URL
* - Data Sink(s): Video[FileOutputNode-test_player_rtspurl_video.dat]\n
* Audio[FileOutputNode-test_player_rtspurl_audio.dat]
* - Sequence:
* -# CreatePlayer()
* -# AddDataSource()
* -# Init()
* -# AddDataSink() (video)
* -# AddDataSink() (audio)
* -# Prepare()
* -# Start()
* -# WAIT 20 sec.
* -# Stop()
* -# RemoveDataSink() (video)
* -# RemoveDataSink() (audio)
* -# Reset()
* -# RemoveDataSource()
* -# DeletePlayer()
*
*/
class pvplayer_async_test_streamingJBadjust: public pvplayer_async_test_base
{
public:
pvplayer_async_test_streamingJBadjust(PVPlayerAsyncTestParam aTestParam,
PVMFFormatType aVideoSinkFormat,
PVMFFormatType aAudioSinkFormat,
uint32 aTestID,
bool aPauseResumeEnable,
bool aSeekEnable,
bool aWaitForEOS)
: pvplayer_async_test_base(aTestParam)
, iPlayer(NULL)
, iDataSource(NULL)
, iDataSinkVideo(NULL)
, iDataSinkAudio(NULL)
, iIONodeVideo(NULL)
, iIONodeAudio(NULL)
, iMIOFileOutVideo(NULL)
, iMIOFileOutAudio(NULL)
, iCurrentCmdId(0)
, iStreamDataSource(NULL)
{
iVideoSinkFormatType = aVideoSinkFormat;
iAudioSinkFormatType = aAudioSinkFormat;
oPauseResumeEnable = aPauseResumeEnable;
oSeekEnable = aSeekEnable;
oWaitForEOS = aWaitForEOS;
iTestID = aTestID;
}
~pvplayer_async_test_streamingJBadjust() {}
void StartTest();
void Run();
void CommandCompleted(const PVCmdResponse& aResponse);
void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
enum PVTestState
{
STATE_CREATE,
STATE_QUERYINTERFACE,
STATE_ADDDATASOURCE,
STATE_CONFIGPARAMS,
STATE_INIT,
STATE_GETMETADATAKEYLIST,
STATE_GETMETADATAVALUELIST,
STATE_ADDDATASINK_VIDEO,
STATE_ADDDATASINK_AUDIO,
STATE_PREPARE,
STATE_RECONFIGJITTERBUFFER,
STATE_PREPARING,
STATE_START,
STATE_SETPLAYBACKRANGE,
STATE_PAUSE,
STATE_RESUME,
STATE_EOSNOTREACHED,
STATE_STOP,
STATE_REMOVEDATASINK_VIDEO,
STATE_REMOVEDATASINK_AUDIO,
STATE_RESET,
STATE_REMOVEDATASOURCE,
STATE_CLEANUPANDCOMPLETE
};
PVTestState iState;
PVPlayerInterface* iPlayer;
PVPlayerDataSourceURL* iDataSource;
PVPlayerDataSink* iDataSinkVideo;
PVPlayerDataSink* iDataSinkAudio;
PVMFNodeInterface* iIONodeVideo;
PVMFNodeInterface* iIONodeAudio;
PvmiMIOControl* iMIOFileOutVideo;
PvmiMIOControl* iMIOFileOutAudio;
PVCommandId iCurrentCmdId;
private:
void HandleSocketNodeErrors(int32 aErr);
void HandleRTSPNodeErrors(int32 aErr);
void HandleStreamingManagerNodeErrors(int32 aErr);
void HandleJitterBufferNodeErrors(int32 aErr);
void HandleMediaLayerNodeErrors(int32 aErr);
PVMFFormatType iVideoSinkFormatType;
PVMFFormatType iAudioSinkFormatType;
OSCL_wHeapString<OsclMemAllocator> wFileName;
oscl_wchar output[512];
bool oPauseResumeEnable;
bool oSeekEnable;
bool oWaitForEOS;
uint32 iTestID;
PvmiCapabilityAndConfig* iPlayerCapConfigIF;
PVPMetadataList iMetadataKeyList;
Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataValueList;
int32 iNumValues;
PvmiKvp* iErrorKVP;
PvmiKvp iKVPSetAsync;
OSCL_StackString<64> iKeyStringSetAsync;
PVMFStreamingDataSource* iStreamDataSource;
};
/*!
* A test case to test bitstream switching
* - Data Source: RTSP URL, SDP File, MS HTTP URL
* - Data Sink(s): Video[FileOutputNode-test_player_rtspurl_video.dat]\n
* Audio[FileOutputNode-test_player_rtspurl_audio.dat]
* - Sequence:
* -# CreatePlayer()
* -# AddDataSource()
* -# Init()
* -# AddDataSink() (video)
* -# AddDataSink() (audio)
* -# Prepare()
* -# Start()
* -# WAIT 20 sec.
* -# Stop()
* -# RemoveDataSink() (video)
* -# RemoveDataSink() (audio)
* -# Reset()
* -# RemoveDataSource()
* -# DeletePlayer()
*
*/
class pvplayer_async_test_streaming_bitstream_switch: public pvplayer_async_test_base
{
public:
pvplayer_async_test_streaming_bitstream_switch(PVPlayerAsyncTestParam aTestParam,
PVMFFormatType aVideoSinkFormat,
PVMFFormatType aAudioSinkFormat,
uint32 aTestID,
bool aWaitForEOS)
: pvplayer_async_test_base(aTestParam)
, iPlayer(NULL)
, iDataSource(NULL)
, iDataSinkVideo(NULL)
, iDataSinkAudio(NULL)
, iIONodeVideo(NULL)
, iIONodeAudio(NULL)
, iMIOFileOutVideo(NULL)
, iMIOFileOutAudio(NULL)
, iCurrentCmdId(0)
, iStreamDataSource(NULL)
{
iVideoSinkFormatType = aVideoSinkFormat;
iAudioSinkFormatType = aAudioSinkFormat;
oPauseResumeEnable = false;
oSeekEnable = false;
oWaitForEOS = aWaitForEOS;
iTestID = aTestID;
}
~pvplayer_async_test_streaming_bitstream_switch() {}
void StartTest();
void Run();
void CommandCompleted(const PVCmdResponse& aResponse);
void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
enum PVTestState
{
STATE_CREATE,
STATE_QUERYINTERFACE,
STATE_ADDDATASOURCE,
STATE_INIT,
STATE_SET_STREAM_SPEED,
STATE_GETMETADATAKEYLIST,
STATE_GETMETADATAVALUELIST,
STATE_ADDDATASINK_VIDEO,
STATE_ADDDATASINK_AUDIO,
STATE_PREPARE,
STATE_START,
STATE_SWITCH_STREAMS,
STATE_SWITCH_STREAMS_DONE,
STATE_SETPLAYBACKRANGE,
STATE_PAUSE,
STATE_RESUME,
STATE_EOSNOTREACHED,
STATE_STOP,
STATE_REMOVEDATASINK_VIDEO,
STATE_REMOVEDATASINK_AUDIO,
STATE_RESET,
STATE_REMOVEDATASOURCE,
STATE_CLEANUPANDCOMPLETE
};
PVTestState iState;
PVPlayerInterface* iPlayer;
PVPlayerDataSourceURL* iDataSource;
PVPlayerDataSink* iDataSinkVideo;
PVPlayerDataSink* iDataSinkAudio;
PVMFNodeInterface* iIONodeVideo;
PVMFNodeInterface* iIONodeAudio;
PvmiMIOControl* iMIOFileOutVideo;
PvmiMIOControl* iMIOFileOutAudio;
PVCommandId iCurrentCmdId;
private:
void HandleSocketNodeErrors(int32 aErr);
void HandleRTSPNodeErrors(int32 aErr);
void HandleStreamingManagerNodeErrors(int32 aErr);
void HandleJitterBufferNodeErrors(int32 aErr);
void HandleMediaLayerNodeErrors(int32 aErr);
void HandleProtocolEngineNodeErrors(int32 aErr);
PVMFFormatType iVideoSinkFormatType;
PVMFFormatType iAudioSinkFormatType;
OSCL_wHeapString<OsclMemAllocator> wFileName;
oscl_wchar output[512];
bool oPauseResumeEnable;
bool oSeekEnable;
bool oWaitForEOS;
uint32 iTestID;
PvmiCapabilityAndConfig* iPlayerCapConfigIF;
void PrintMetadataInfo();
PVPMetadataList iMetadataKeyList;
Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataValueList;
int32 iNumValues;
PvmiKvp* iErrorKVP;
PvmiKvp iKVPSetAsync;
OSCL_StackString<64> iKeyStringSetAsync;
bool oLiveSession;
uint32 iSessionDuration;
PVMFStreamingDataSource* iStreamDataSource;
};
/*!
* A test case to test stop->prepare behavior when playing an rtsp url
* - Data Source: RTSP URL
* - Data Sink(s): Video[FileOutputNode-test_player_rtspurl_video.dat]\n
* Audio[FileOutputNode-test_player_rtspurl_audio.dat]
* - Sequence:
* -# CreatePlayer()
* -# AddDataSource()
* -# Init()
* -# AddDataSink() (video)
* -# AddDataSink() (audio)
* -# Prepare()
* -# Start()
* -# WAIT 20 sec.
* -# Stop()
* -# Prepare()
* -# Start()
* -# WAIT 20 sec.
* -# Stop()
* -# RemoveDataSink() (video)
* -# RemoveDataSink() (audio)
* -# Reset()
* -# RemoveDataSource()
* -# DeletePlayer()
*
*/
class pvplayer_async_test_streamingopenplaystoppreparelaystop : public pvplayer_async_test_base
{
public:
pvplayer_async_test_streamingopenplaystoppreparelaystop(PVPlayerAsyncTestParam aTestParam,
PVMFFormatType aVideoSinkFormat,
PVMFFormatType aAudioSinkFormat,
uint32 aTestID,
bool aPauseResumeEnable,
bool aSeekEnable,
bool aWaitForEOS,
bool aCloaking,
bool aCancelDuringPrepare,
bool aForwardEnable)
: pvplayer_async_test_base(aTestParam)
, iPlayer(NULL)
, iDataSource(NULL)
, iDataSinkVideo(NULL)
, iDataSinkAudio(NULL)
, iIONodeVideo(NULL)
, iIONodeAudio(NULL)
, iMIOFileOutVideo(NULL)
, iMIOFileOutAudio(NULL)
, iCurrentCmdId(0)
, iCancelAllCmdId(0)
, iSeekAfterEOSEnable(false)
, iSessionDuration(0)
, bcloaking(aCloaking)
, oLiveSession(false)
, iProtocolRollOver(false)
, iProtocolRollOverWithUnknownURLType(false)
, iPlayListURL(false)
, iStreamDataSource(NULL)
, iSourceContextData(NULL)
{
iVideoSinkFormatType = aVideoSinkFormat;
iAudioSinkFormatType = aAudioSinkFormat;
oPauseResumeEnable = aPauseResumeEnable;
oSeekEnable = aSeekEnable;
oWaitForEOS = aWaitForEOS;
oCancelDuringPrepare = aCancelDuringPrepare;
oForwardEnable = aForwardEnable;
iTestID = aTestID;
iNumPlay = 0;
iTargetNumPlay = 1;
iNumPause = 0;
iTargetNumPause = 1;
}
~pvplayer_async_test_streamingopenplaystoppreparelaystop() {}
void StartTest();
void Run();
void CommandCompleted(const PVCmdResponse& aResponse);
void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
enum PVTestState
{
STATE_CREATE,
STATE_QUERYINTERFACE,
STATE_ADDDATASOURCE,
STATE_CONFIGPARAMS,
STATE_INIT,
STATE_GETMETADATAKEYLIST,
STATE_GETMETADATAVALUELIST,
STATE_ADDDATASINK_VIDEO,
STATE_ADDDATASINK_AUDIO,
STATE_PREPARE,
STATE_CANCELALL,
STATE_WAIT_FOR_CANCELALL,
STATE_START,
STATE_SETPLAYBACKRANGE,
STATE_PAUSE,
STATE_RESUME,
STATE_EOSNOTREACHED,
STATE_STOP,
STATE_REMOVEDATASINK_VIDEO,
STATE_REMOVEDATASINK_AUDIO,
STATE_RESET,
STATE_REMOVEDATASOURCE,
STATE_CLEANUPANDCOMPLETE,
STATE_SETFORWARD,
STATE_PREPARE1,
STATE_START1,
STATE_STOP1
};
PVTestState iState;
PVPlayerInterface* iPlayer;
PVPlayerDataSourceURL* iDataSource;
PVPlayerDataSink* iDataSinkVideo;
PVPlayerDataSink* iDataSinkAudio;
PVMFNodeInterface* iIONodeVideo;
PVMFNodeInterface* iIONodeAudio;
PvmiMIOControl* iMIOFileOutVideo;
PvmiMIOControl* iMIOFileOutAudio;
PVCommandId iCurrentCmdId;
PVCommandId iCancelAllCmdId;
void setMultiplePlayMode(uint32 aNum)
{
iMultiplePlay = true;
iTargetNumPlay = aNum;
}
void setMultiplePauseMode(uint32 aNum)
{
iMultiplePause = true;
iTargetNumPause = aNum;
}
void setProtocolRollOverMode()
{
iProtocolRollOver = true;
}
void setProtocolRollOverModeWithUnknownURL()
{
iProtocolRollOverWithUnknownURLType = true;
}
void setPlayListMode()
{
iPlayListURL = true;
}
void setSeekAfterEOSMode()
{
iSeekAfterEOSEnable = true;
}
private:
void HandleSocketNodeErrors(int32 aErr);
void HandleRTSPNodeErrors(int32 aErr);
void HandleStreamingManagerNodeErrors(int32 aErr);
void HandleJitterBufferNodeErrors(int32 aErr);
void HandleMediaLayerNodeErrors(int32 aErr);
void HandleProtocolEngineNodeErrors(int32 aErr);
void PrintMetadataInfo();
PVMFFormatType iVideoSinkFormatType;
PVMFFormatType iAudioSinkFormatType;
OSCL_wHeapString<OsclMemAllocator> wFileName;
oscl_wchar output[512];
bool oPauseResumeEnable;
bool oSeekEnable;
bool oCancelDuringPrepare;
bool oWaitForEOS;
uint32 iTestID;
bool iSeekAfterEOSEnable;
bool oForwardEnable;
PVPMetadataList iMetadataKeyList;
Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataValueList;
int32 iNumValues;
uint32 iSessionDuration;
bool bcloaking;
bool oLiveSession;
bool iMultiplePause;
int32 iNumPause;
uint32 iTargetNumPause;
bool iMultiplePlay;
uint32 iNumPlay;
uint32 iTargetNumPlay;
bool iProtocolRollOver;
bool iProtocolRollOverWithUnknownURLType;
bool iPlayListURL;
PvmiCapabilityAndConfig* iPlayerCapConfigIF;
PvmiKvp* iErrorKVP;
PvmiKvp iKVPSetAsync;
OSCL_StackString<128> iKeyStringSetAsync;
PVMFStreamingDataSource* iStreamDataSource;
PVMFSourceContextData* iSourceContextData;
};
/*!
* A test case to test the normal engine sequence of playing an sdp file
* that uses the RTP packet source node as a data source
* TO DO - UPDATE DESCRIPTION TO MATCH DVB TEST BEHAVIOR
* - Data Source: sdp file
* - Data Sink(s): Video[FileOutputNode-test_player_rtspurl_video.dat]\n
* Audio[FileOutputNode-test_player_rtspurl_audio.dat]
* - Sequence:
* -# CreatePlayer()
* -# AddDataSource()
* -# Init()
* -# AddDataSink() (video)
* -# AddDataSink() (audio)
* -# Prepare()
* -# Start()
* -# WAIT 20 sec.
* -# Stop()
* -# RemoveDataSink() (video)
* -# RemoveDataSink() (audio)
* -# Reset()
* -# RemoveDataSource()
* -# DeletePlayer()
*
*/
class pvplayer_async_test_dvbh_streamingopenplaystop : public pvplayer_async_test_base// , pvplayer_async_test_streamingopenplaystop
{
public:
pvplayer_async_test_dvbh_streamingopenplaystop(PVPlayerAsyncTestParam aTestParam,
PVMFFormatType aVideoSinkFormat,
PVMFFormatType aAudioSinkFormat,
uint32 aTestID,
bool aPauseResumeEnable,
bool aSeekEnable,
bool aWaitForEOS,
bool aCloaking,
bool aCancelDuringPrepare)
: pvplayer_async_test_base(aTestParam)
, iPlayer(NULL)
, iDataSource(NULL)
, iDataSinkVideo(NULL)
, iDataSinkAudio(NULL)
, iIONodeVideo(NULL)
, iIONodeAudio(NULL)
, iMIOFileOutVideo(NULL)
, iMIOFileOutAudio(NULL)
, iCurrentCmdId(0)
, iCancelAllCmdId(0)
, iSessionDuration(0)
, bcloaking(aCloaking)
, oLiveSession(false)
, iProtocolRollOver(false)
, iProtocolRollOverWithUnknownURLType(false)
, iPlayListURL(false)
, iStreamDataSource(NULL)
, iSourceContextData(NULL)
, m_PVRControl(NULL)
, ps(NULL)
{
iVideoSinkFormatType = aVideoSinkFormat;
iAudioSinkFormatType = aAudioSinkFormat;
oPauseResumeEnable = aPauseResumeEnable;
oSeekEnable = aSeekEnable;
oWaitForEOS = aWaitForEOS;
oCancelDuringPrepare = aCancelDuringPrepare;
iTestID = aTestID;
iNumPlay = 0;
iTargetNumPlay = 1;
}
~pvplayer_async_test_dvbh_streamingopenplaystop() {}
void StartTest();
void Run();
void CommandCompleted(const PVCmdResponse& aResponse);
void HandleErrorEvent(const PVAsyncErrorEvent& aEvent);
void HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent);
enum PVTestState
{
STATE_CREATE,
STATE_QUERYINTERFACE,
STATE_ADDDATASOURCE,
STATE_CONFIGPARAMS,
STATE_INIT,
STATE_GETMETADATAKEYLIST,
STATE_GETMETADATAVALUELIST,
STATE_ADDDATASINK_VIDEO,
STATE_ADDDATASINK_AUDIO,
STATE_PREPARE,
STATE_CANCELALL,
STATE_WAIT_FOR_CANCELALL,
STATE_START,
STATE_SETPLAYBACKRANGE,
STATE_PAUSE,
STATE_RESUME,
STATE_EOSNOTREACHED,
STATE_STOP,
STATE_REMOVEDATASINK_VIDEO,
STATE_REMOVEDATASINK_AUDIO,
STATE_RESET,
STATE_REMOVEDATASOURCE,
STATE_CLEANUPANDCOMPLETE
};
PVTestState iState;
PVPlayerInterface* iPlayer;
PVPlayerDataSourceURL* iDataSource;
PVPlayerDataSink* iDataSinkVideo;
PVPlayerDataSink* iDataSinkAudio;
PVMFNodeInterface* iIONodeVideo;
PVMFNodeInterface* iIONodeAudio;
PvmiMIOControl* iMIOFileOutVideo;
PvmiMIOControl* iMIOFileOutAudio;
PVCommandId iCurrentCmdId;
PVCommandId iCancelAllCmdId;
void setMultiplePlayMode(uint32 aNum)
{
iMultiplePlay = true;
iTargetNumPlay = aNum;
}
void setProtocolRollOverMode()
{
iProtocolRollOver = true;
}
void setProtocolRollOverModeWithUnknownURL()
{
iProtocolRollOverWithUnknownURLType = true;
}
void setPlayListMode()
{
iPlayListURL = true;
}
private:
void HandleSocketNodeErrors(int32 aErr);
void HandleRTSPNodeErrors(int32 aErr);
void HandleStreamingManagerNodeErrors(int32 aErr);
void HandleJitterBufferNodeErrors(int32 aErr);
void HandleMediaLayerNodeErrors(int32 aErr);
void HandleProtocolEngineNodeErrors(int32 aErr);
void PrintMetadataInfo();
PVMFFormatType iVideoSinkFormatType;
PVMFFormatType iAudioSinkFormatType;
OSCL_wHeapString<OsclMemAllocator> wFileName;
oscl_wchar output[512];
bool oPauseResumeEnable;
bool oSeekEnable;
bool oCancelDuringPrepare;
bool oWaitForEOS;
uint32 iTestID;
PVPMetadataList iMetadataKeyList;
Oscl_Vector<PvmiKvp, OsclMemAllocator> iMetadataValueList;
int32 iNumValues;
uint32 iSessionDuration;
bool bcloaking;
bool oLiveSession;
bool iMultiplePlay;
uint32 iNumPlay;
uint32 iTargetNumPlay;
bool iProtocolRollOver;
bool iProtocolRollOverWithUnknownURLType;
bool iPlayListURL;
int32 iPriority;
PvmiCapabilityAndConfig* iPlayerCapConfigIF;
PvmiKvp* iErrorKVP;
PvmiKvp iKVPSetAsync;
OSCL_StackString<128> iKeyStringSetAsync;
PVMFStreamingDataSource* iStreamDataSource;
PVMFSourceContextData* iSourceContextData;
PVMFSourceContextData m_sourceContext;
PVMFPVRControl* m_PVRControl;
PVMFPacketSource* ps;
};
#endif // TEST_PV_PLAYER_ENGINE_TESTSET6_H_INCLUDED