blob: a05bd9d2905b398afcf4c0bae8dd9b4af4b17466 [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_TESTSET8_H_INCLUDED
#include "test_pv_player_engine_testset8.h"
#endif
#ifndef OSCL_ERROR_CODES_H_INCLUDED
#include "oscl_error_codes.h"
#endif
#ifndef OSCL_TICKCOUNT_H_INCLUDED
#include "oscl_tickcount.h"
#endif
#ifndef PV_PLAYER_DATASINKFILENAME_H_INCLUDED
#include "pv_player_datasinkfilename.h"
#endif
#ifndef PV_PLAYER_DATASINKPVMFNODE_H_INCLUDED
#include "pv_player_datasinkpvmfnode.h"
#endif
#ifndef PVMI_MEDIA_IO_FILEOUTPUT_H_INCLUDED
#include "pvmi_media_io_fileoutput.h"
#endif
#ifndef PV_MEDIA_OUTPUT_NODE_FACTORY_H_INCLUDED
#include "pv_media_output_node_factory.h"
#endif
#ifndef PVMF_ERRORINFOMESSAGE_EXTENSION_H_INCLUDED
#include "pvmf_errorinfomessage_extension.h"
#endif
#ifndef OSCL_UTF8CONV_H
#include "oscl_utf8conv.h"
#endif
#ifndef PVMI_KVP_H_INCLUDED
#include "pvmi_kvp.h"
#endif
#ifndef PVMI_KVP_UTIL_H_INCLUDED
#include "pvmi_kvp_util.h"
#endif
#ifndef OSCL_MEM_H_INCLUDED
#include "oscl_mem.h"
#endif
#ifndef OSCL_MEM_AUDIT_H_INCLUDED
#include "oscl_mem_audit.h"
#endif
//
// pvplayer_async_test_printmetadata section
//
void pvplayer_async_test_printmetadata::StartTest()
{
AddToScheduler();
iState = STATE_CREATE;
RunIfNotReady();
}
void pvplayer_async_test_printmetadata::Run()
{
int error = 0;
switch (iState)
{
case STATE_CREATE:
{
iPlayer = NULL;
OSCL_TRY(error, iPlayer = PVPlayerFactory::CreatePlayer(this, this, this));
if (error)
{
PVPATB_TEST_IS_TRUE(false);
iObserver->TestCompleted(*iTestCase);
}
else
{
iState = STATE_ADDDATASOURCE;
RunIfNotReady();
}
}
break;
case STATE_ADDDATASOURCE:
{
iDataSource = new PVPlayerDataSourceURL;
oscl_UTF8ToUnicode(iFileName, oscl_strlen(iFileName), iTmpWCharBuffer, 512);
iTmpWCharBuffer[511] = '\0';
iFileNameWStr = SOURCENAME_PREPEND_WSTRING;
iFileNameWStr += iTmpWCharBuffer;
iDataSource->SetDataSourceURL(iFileNameWStr);
iDataSource->SetDataSourceFormatType(iFileType);
/*
* In case of HTTP URLs always attempt rollover,
* since we donot know if it is a download or a streaming url
*/
if (iFileType == PVMF_MIME_DATA_SOURCE_HTTP_URL)
{
iDataSource->SetAlternateSourceFormatType(PVMF_MIME_DATA_SOURCE_MS_HTTP_STREAMING_URL);
}
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSource(*iDataSource, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_INIT:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Init((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_GETMETADATAKEYLIST1:
{
iMetadataKeyList.clear();
OSCL_TRY(error, iCurrentCmdId = iPlayer->GetMetadataKeys(iMetadataKeyList, 0, -1, NULL, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_GETMETADATAVALUELIST1:
{
iMetadataValueList.clear();
iNumValues = 0;
OSCL_TRY(error, iCurrentCmdId = iPlayer->GetMetadataValues(iMetadataKeyList, 0, -1, iNumValues, iMetadataValueList, (OsclAny*) & iContextObject, !iReleaseMetadataByApp));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_RELEASEMETADATAVALUES1:
{
PrintMetadataInfo();
OSCL_TRY(error, iCurrentCmdId = iPlayer->ReleaseMetadataValues(iMetadataValueList, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_ADDDATASINK_VIDEO:
{
OSCL_wHeapString<OsclMemAllocator> videosinkfilename = OUTPUTNAME_PREPEND_WSTRING;
videosinkfilename += _STRLIT_WCHAR("test_player_printmetadata_video.dat");
iMIOFileOutVideo = iMioFactory->CreateVideoOutput((OsclAny*) & videosinkfilename, MEDIATYPE_VIDEO, iCompressedVideo);
iIONodeVideo = PVMediaOutputNodeFactory::CreateMediaOutputNode(iMIOFileOutVideo);
iDataSinkVideo = new PVPlayerDataSinkPVMFNode;
((PVPlayerDataSinkPVMFNode*)iDataSinkVideo)->SetDataSinkNode(iIONodeVideo);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSink(*iDataSinkVideo, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_ADDDATASINK_AUDIO:
{
OSCL_wHeapString<OsclMemAllocator> audiosinkfilename = OUTPUTNAME_PREPEND_WSTRING;
audiosinkfilename += _STRLIT_WCHAR("test_player_printmetadata_audio.dat");
iMIOFileOutAudio = iMioFactory->CreateAudioOutput((OsclAny*) & audiosinkfilename, MEDIATYPE_AUDIO, iCompressedAudio);
iIONodeAudio = PVMediaOutputNodeFactory::CreateMediaOutputNode(iMIOFileOutAudio);
iDataSinkAudio = new PVPlayerDataSinkPVMFNode;
((PVPlayerDataSinkPVMFNode*)iDataSinkAudio)->SetDataSinkNode(iIONodeAudio);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSink(*iDataSinkAudio, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_ADDDATASINK_TEXT:
{
OSCL_wHeapString<OsclMemAllocator> textsinkfilename = OUTPUTNAME_PREPEND_WSTRING;
textsinkfilename += _STRLIT_WCHAR("test_player_printmetadata_text.dat");
iMIOFileOutText = iMioFactory->CreateTextOutput((OsclAny*) & textsinkfilename, MEDIATYPE_TEXT);
iIONodeText = PVMediaOutputNodeFactory::CreateMediaOutputNode(iMIOFileOutText);
iDataSinkText = new PVPlayerDataSinkPVMFNode;
((PVPlayerDataSinkPVMFNode*)iDataSinkText)->SetDataSinkNode(iIONodeText);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSink(*iDataSinkText, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_PREPARE:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Prepare((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_START:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Start((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_GETMETADATAKEYLIST2:
{
iMetadataKeyList.clear();
OSCL_TRY(error, iCurrentCmdId = iPlayer->GetMetadataKeys(iMetadataKeyList, 0, 50, NULL, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_GETMETADATAVALUELIST2:
{
iMetadataValueList.clear();
iNumValues = 0;
OSCL_TRY(error, iCurrentCmdId = iPlayer->GetMetadataValues(iMetadataKeyList, 0, 50, iNumValues, iMetadataValueList, (OsclAny*) & iContextObject, !iReleaseMetadataByApp));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_RELEASEMETADATAVALUES2:
{
PrintMetadataInfo();
OSCL_TRY(error, iCurrentCmdId = iPlayer->ReleaseMetadataValues(iMetadataValueList, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_STOP:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Stop((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_GETMETADATAKEYLIST3:
{
iMetadataKeyList.clear();
OSCL_TRY(error, iCurrentCmdId = iPlayer->GetMetadataKeys(iMetadataKeyList, 0, 50, NULL, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_GETMETADATAVALUELIST3:
{
iMetadataValueList.clear();
iNumValues = 0;
OSCL_TRY(error, iCurrentCmdId = iPlayer->GetMetadataValues(iMetadataKeyList, 0, 50, iNumValues, iMetadataValueList, (OsclAny*) & iContextObject, !iReleaseMetadataByApp));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_RELEASEMETADATAVALUES3:
{
PrintMetadataInfo();
OSCL_TRY(error, iCurrentCmdId = iPlayer->ReleaseMetadataValues(iMetadataValueList, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASINK_VIDEO:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSink(*iDataSinkVideo, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASINK_AUDIO:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSink(*iDataSinkAudio, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASINK_TEXT:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSink(*iDataSinkText, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_RESET:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Reset((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASOURCE:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSource(*iDataSource, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_CLEANUPANDCOMPLETE:
{
PVPATB_TEST_IS_TRUE(PVPlayerFactory::DeletePlayer(iPlayer));
iPlayer = NULL;
delete iDataSource;
iDataSource = NULL;
delete iDataSinkVideo;
iDataSinkVideo = NULL;
delete iDataSinkAudio;
iDataSinkAudio = NULL;
delete iDataSinkText;
iDataSinkText = NULL;
PVMediaOutputNodeFactory::DeleteMediaOutputNode(iIONodeVideo);
iIONodeVideo = NULL;
PVMediaOutputNodeFactory::DeleteMediaOutputNode(iIONodeAudio);
iIONodeAudio = NULL;
PVMediaOutputNodeFactory::DeleteMediaOutputNode(iIONodeText);
iIONodeText = NULL;
iMioFactory->DestroyVideoOutput(iMIOFileOutVideo);
iMIOFileOutVideo = NULL;
iMioFactory->DestroyAudioOutput(iMIOFileOutAudio);
iMIOFileOutAudio = NULL;
iMioFactory->DestroyTextOutput(iMIOFileOutText);
iMIOFileOutText = NULL;
iObserver->TestCompleted(*iTestCase);
}
break;
default:
break;
}
}
void pvplayer_async_test_printmetadata::CommandCompleted(const PVCmdResponse& aResponse)
{
if (aResponse.GetCmdId() != iCurrentCmdId)
{
// Wrong command ID.
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
if (aResponse.GetContext() != NULL)
{
if (aResponse.GetContext() == (OsclAny*)&iContextObject)
{
if (iContextObject != iContextObjectRefValue)
{
// Context data value was corrupted
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
}
else
{
// Context data pointer was corrupted
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
}
switch (iState)
{
case STATE_ADDDATASOURCE:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_INIT;
RunIfNotReady();
}
else
{
// AddDataSource failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_INIT:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_GETMETADATAKEYLIST1;
// Uncomment following to skip the first metadata retrieval
//iState=STATE_ADDDATASINK_VIDEO;
RunIfNotReady();
}
else
{
// Init failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_GETMETADATAKEYLIST1:
if (aResponse.GetCmdStatus() == PVMFSuccess || aResponse.GetCmdStatus() == PVMFErrArgument)
{
iState = STATE_GETMETADATAVALUELIST1;
RunIfNotReady();
}
else
{
// GetMetadataKeys failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_GETMETADATAVALUELIST1:
if (aResponse.GetCmdStatus() == PVMFSuccess || aResponse.GetCmdStatus() == PVMFErrArgument)
{
fprintf(iTestMsgOutputFile, "After Init()\n");
if (iReleaseMetadataByApp)
{
iState = STATE_RELEASEMETADATAVALUES1;
}
else
{
PrintMetadataInfo();
iState = STATE_ADDDATASINK_VIDEO;
}
RunIfNotReady();
}
else
{
// GetMetadataValue failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_RELEASEMETADATAVALUES1:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_ADDDATASINK_VIDEO;
RunIfNotReady();
}
else
{
// ReleaseMetadataValues failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_ADDDATASINK_VIDEO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_ADDDATASINK_AUDIO;
RunIfNotReady();
}
else
{
// AddDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_ADDDATASINK_AUDIO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_ADDDATASINK_TEXT;
RunIfNotReady();
}
else
{
// AddDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_ADDDATASINK_TEXT:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_PREPARE;
RunIfNotReady();
}
else
{
// AddDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_PREPARE:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_START;
RunIfNotReady();
}
else
{
// Prepare failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_START:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_GETMETADATAKEYLIST2;
// Uncomment following to skip the second metadata retrieval
//iState=STATE_STOP;
RunIfNotReady();
}
else
{
// Start failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_GETMETADATAKEYLIST2:
if (aResponse.GetCmdStatus() == PVMFSuccess || aResponse.GetCmdStatus() == PVMFErrArgument)
{
iState = STATE_GETMETADATAVALUELIST2;
RunIfNotReady();
}
else
{
// GetMetadataKeys failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_GETMETADATAVALUELIST2:
if (aResponse.GetCmdStatus() == PVMFSuccess || aResponse.GetCmdStatus() == PVMFErrArgument)
{
fprintf(iTestMsgOutputFile, "After Start()\n");
if (iReleaseMetadataByApp)
{
iState = STATE_RELEASEMETADATAVALUES2;
}
else
{
PrintMetadataInfo();
iState = STATE_STOP;
}
RunIfNotReady();
}
else
{
// GetMetadataValue failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_RELEASEMETADATAVALUES2:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_STOP;
RunIfNotReady();
}
else
{
// ReleaseMetadataValues failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_STOP:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_GETMETADATAKEYLIST3;
// Uncomment following to skip the third metadata retrieval
//iState=STATE_REMOVEDATASINK_VIDEO;
RunIfNotReady();
}
else
{
// Stop failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_GETMETADATAKEYLIST3:
if (aResponse.GetCmdStatus() == PVMFSuccess || aResponse.GetCmdStatus() == PVMFErrArgument)
{
iState = STATE_GETMETADATAVALUELIST3;
RunIfNotReady();
}
else
{
// GetMetadataKeys failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_GETMETADATAVALUELIST3:
if (aResponse.GetCmdStatus() == PVMFSuccess || aResponse.GetCmdStatus() == PVMFErrArgument)
{
fprintf(iTestMsgOutputFile, "After Stop()\n");
if (iReleaseMetadataByApp)
{
iState = STATE_RELEASEMETADATAVALUES3;
}
else
{
PrintMetadataInfo();
iState = STATE_REMOVEDATASINK_VIDEO;
}
RunIfNotReady();
}
else
{
// GetMetadataValue failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_RELEASEMETADATAVALUES3:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_REMOVEDATASINK_VIDEO;
RunIfNotReady();
}
else
{
// ReleaseMetadataValues failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASINK_VIDEO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_REMOVEDATASINK_AUDIO;
RunIfNotReady();
}
else
{
// RemoveDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASINK_AUDIO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_REMOVEDATASINK_TEXT;
RunIfNotReady();
}
else
{
// RemoveDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASINK_TEXT:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_RESET;
RunIfNotReady();
}
else
{
// RemoveDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_RESET:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_REMOVEDATASOURCE;
RunIfNotReady();
}
else
{
// Reset failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASOURCE:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
PVPATB_TEST_IS_TRUE(true);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
else
{
// RemoveDataSource failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
default:
{
// Testing error if this is reached
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
}
}
void pvplayer_async_test_printmetadata::HandleErrorEvent(const PVAsyncErrorEvent& aEvent)
{
switch (aEvent.GetEventType())
{
case PVMFErrResourceConfiguration:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
case PVMFErrResource:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
case PVMFErrCorrupt:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
case PVMFErrProcessing:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
default:
// Unknown error and just log the error
PVPATB_TEST_IS_TRUE(false);
break;
}
// Wait for engine to handle the error
Cancel();
}
void pvplayer_async_test_printmetadata::HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent)
{
if (aEvent.GetEventType() == PVMFInfoErrorHandlingStart)
{
fprintf(iTestMsgOutputFile, "PVMFInfoErrorHandlingStart...\n");
}
if (aEvent.GetEventType() == PVMFInfoErrorHandlingComplete)
{
fprintf(iTestMsgOutputFile, "PVMFInfoErrorHandlingComplete...\n");
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
}
/* PrintCodecSpecificInfo() prints the codec specific information for
the respective AUDIO TYPE stream and VIDEO TYPE stream.
Please note that the usage of numerical constants for transversing
the bytes should not be treated as hard coded values usage, because
the starting offset of each filed in codec specific info is fixed and
these locations are not tunable. That is why these constants are not
defined under #define.
*/
void pvplayer_async_test_printmetadata::PrintCodecSpecificInfo(char* aData, uint32 aIndex)
{
if (INDEX_CODEC_SPECIFIC_INFO_AUDIO == aIndex)
{
uint16 CodecId = ((*(aData + 0)) & 0x000000FF)
+ (((*(aData + 1)) << 8) & 0x0000FF00);
fprintf(iTestMsgOutputFile, " CodecId:%d \n", CodecId);
uint16 NumChannels = ((*(aData + 2)) & 0x000000FF)
+ (((*(aData + 3)) << 8) & 0x0000FF00);
fprintf(iTestMsgOutputFile, " NumChannels:%d \n", NumChannels);
uint32 SamplesPerSecond = ((*(aData + 4)) & 0x000000FF)
+ (((*(aData + 5)) << 8) & 0x0000FF00)
+ (((*(aData + 6)) << 16) & 0x00FF0000)
+ (((*(aData + 7)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " SamplesPerSecond:%d \n", SamplesPerSecond);
uint32 AvgNumBytesPerSecond = ((*(aData + 8)) & 0x000000FF)
+ (((*(aData + 9)) << 8) & 0x0000FF00)
+ (((*(aData + 10)) << 16) & 0x00FF0000)
+ (((*(aData + 11)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " AvgNumBytesPerSecond:%d \n", AvgNumBytesPerSecond);
uint16 BlockAlignment = ((*(aData + 12)) & 0x000000FF)
+ (((*(aData + 13)) << 8) & 0x0000FF00);
fprintf(iTestMsgOutputFile, " BlockAlignment:%d \n", BlockAlignment);
uint16 BitsPerSample = ((*(aData + 14)) & 0x000000FF)
+ (((*(aData + 15)) << 8) & 0x0000FF00);
fprintf(iTestMsgOutputFile, " BitsPerSample:%d \n", BitsPerSample);
uint16 CodecSpecificDataSize = ((*(aData + 16)) & 0x000000FF)
+ (((*(aData + 17)) << 8) & 0x0000FF00);
fprintf(iTestMsgOutputFile, " CodecSpecificDataSize:%d \n", CodecSpecificDataSize);
fprintf(iTestMsgOutputFile, " CodecSpecifcData: \n");
fprintf(iTestMsgOutputFile, "\t");
for (uint16 ii = 0; ii < CodecSpecificDataSize; ii++)
{
fprintf(iTestMsgOutputFile, "0x%02x ", (*(aData + 18 + ii) & 0xff));
}
fprintf(iTestMsgOutputFile, "\n");
}
else if (INDEX_CODEC_SPECIFIC_INFO_VIDEO == aIndex)
{
uint32 ImageWidth = ((*(aData + 0)) & 0x000000FF)
+ (((*(aData + 1)) << 8) & 0x0000FF00)
+ (((*(aData + 2)) << 16) & 0x00FF0000)
+ (((*(aData + 3)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " ImageWidth:%d \n", ImageWidth);
uint32 Imageheight = ((*(aData + 4)) & 0x000000FF)
+ (((*(aData + 5)) << 8) & 0x0000FF00)
+ (((*(aData + 6)) << 16) & 0x00FF0000)
+ (((*(aData + 7)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " Imageheight:%d \n", Imageheight);
uint8 ReservedFlags = ((*(aData + 8)) & 0x000000FF);
fprintf(iTestMsgOutputFile, " ReservedFlags:%d \n", ReservedFlags);
uint16 FormatDataSize = ((*(aData + 9)) & 0x000000FF)
+ (((*(aData + 10)) << 8) & 0x0000FF00);
fprintf(iTestMsgOutputFile, " FormatDataSize:%d \n", FormatDataSize);
uint32 FormatDataFormatDataSize = ((*(aData + 11)) & 0x000000FF)
+ (((*(aData + 12)) << 8) & 0x0000FF00)
+ (((*(aData + 13)) << 16) & 0x00FF0000)
+ (((*(aData + 14)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " FormatDataFormatDataSize:%d \n", FormatDataFormatDataSize);
uint32 FormatDataImageWidth = ((*(aData + 15)) & 0x000000FF)
+ (((*(aData + 16)) << 8) & 0x0000FF00)
+ (((*(aData + 17)) << 16) & 0x00FF0000)
+ (((*(aData + 18)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " FormatDataImageWidth:%d \n", FormatDataImageWidth);
uint32 FormatDataImageHeight = ((*(aData + 19)) & 0x000000FF)
+ (((*(aData + 20)) << 8) & 0x0000FF00)
+ (((*(aData + 21)) << 16) & 0x00FF0000)
+ (((*(aData + 22)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " FormatDataImageHeight:%d \n", FormatDataImageHeight);
uint16 FormatDataReserved = ((*(aData + 23)) & 0x000000FF)
+ (((*(aData + 24)) << 8) & 0x0000FF00);
fprintf(iTestMsgOutputFile, " FormatDataReserved:%d \n", FormatDataReserved);
uint16 FormatDataBitsPerPixelCount = ((*(aData + 25)) & 0x000000FF)
+ (((*(aData + 26)) << 8) & 0x0000FF00);
fprintf(iTestMsgOutputFile, " FormatDataBitsPerPixelCount:%d \n", FormatDataBitsPerPixelCount);
uint32 FormatDataCompressionId = ((*(aData + 27)) & 0x000000FF)
+ (((*(aData + 28)) << 8) & 0x0000FF00)
+ (((*(aData + 29)) << 16) & 0x00FF0000)
+ (((*(aData + 30)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " FormatDataCompressionId:%d \n", FormatDataCompressionId);
uint32 FormatDataImageSize = ((*(aData + 31)) & 0x000000FF)
+ (((*(aData + 32)) << 8) & 0x0000FF00)
+ (((*(aData + 33)) << 16) & 0x00FF0000)
+ (((*(aData + 34)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " FormatDataImageSize:%d \n", FormatDataImageSize);
uint32 FormatDataHorizontalPixelsPerMeter = ((*(aData + 35)) & 0x000000FF)
+ (((*(aData + 36)) << 8) & 0x0000FF00)
+ (((*(aData + 37)) << 16) & 0x00FF0000)
+ (((*(aData + 38)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " FormatDataHorizontalPixelsPerMeter:%d \n", FormatDataHorizontalPixelsPerMeter);
uint32 FormatDataVerticalPixelsPerMeter = ((*(aData + 39)) & 0x000000FF)
+ (((*(aData + 40)) << 8) & 0x0000FF00)
+ (((*(aData + 41)) << 16) & 0x00FF0000)
+ (((*(aData + 42)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " FormatDataVerticalPixelsPerMeter:%d \n", FormatDataVerticalPixelsPerMeter);
uint32 FormatDataColorsUsedCount = ((*(aData + 43)) & 0x000000FF)
+ (((*(aData + 44)) << 8) & 0x0000FF00)
+ (((*(aData + 45)) << 16) & 0x00FF0000)
+ (((*(aData + 46)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " FormatDataColorsUsedCount:%d \n", FormatDataColorsUsedCount);
uint32 FormatDataImportantColorsCount = ((*(aData + 47)) & 0x000000FF)
+ (((*(aData + 48)) << 8) & 0x0000FF00)
+ (((*(aData + 49)) << 16) & 0x00FF0000)
+ (((*(aData + 50)) << 24) & 0xFF000000);
fprintf(iTestMsgOutputFile, " FormatDataImportantColorsCount:%d \n", FormatDataImportantColorsCount);
fprintf(iTestMsgOutputFile, " CodecSpecifcData: \n");
fprintf(iTestMsgOutputFile, "\t");
for (uint16 ii = 0; ii < (FormatDataSize - SIZE_FORMATDATA_VIDEO); ii++)
{
fprintf(iTestMsgOutputFile, "0x%02x ", (*(aData + 51 + ii) & 0xff));
}
fprintf(iTestMsgOutputFile, "\n");
}
else
{
fprintf(iTestMsgOutputFile, "Codec Specific Info with index %d not supported\n", aIndex);
}
}
PVMFStatus pvplayer_async_test_printmetadata::GetIndexParamValues(const char* aString,
uint32& aStartIndex,
uint32& aEndIndex)
{
/*
* This parses a string of the form "index=N1...N2" and extracts the integers N1 and N2.
* If string is of the format "index=N1" then N2=N1
*/
if (NULL == aString)
{
return PVMFErrArgument;
}
/* Go to end of "index=" */
char* pN1string = (char*)aString + 6;
const char ch = 'd';
PV_atoi(pN1string, ch, (int32)oscl_strlen(pN1string), (uint32&)aStartIndex);
const char* pN2string = oscl_strstr(aString, _STRLIT_CHAR("..."));
if (NULL == pN2string)
{
aEndIndex = aStartIndex;
}
else
{
/* Go to end of "index=N1..." */
pN2string += 3;
PV_atoi(pN2string, ch, (int32)oscl_strlen(pN2string), (uint32&)aEndIndex);
}
return PVMFSuccess;
}
void pvplayer_async_test_printmetadata::PrintMetadataInfo()
{
uint32 i = 0, StartIndex = 0, EndIndex = 0, nCnt = 0, jj = 0;
iCodecSpecificInfoAudioIndex = INDEX_CODEC_SPECIFIC_INFO_UNDEFINED;
iCodecSpecificInfoVideoIndex = INDEX_CODEC_SPECIFIC_INFO_UNDEFINED;
CodecSpecificInfo sCSI[MAX_CODEC_SPECIFIC_INFO_SUPPORTED];
for (jj = 0; jj < MAX_CODEC_SPECIFIC_INFO_SUPPORTED; jj++)
{
sCSI[jj].CodecSpecificInfoIndex = -1;
sCSI[jj].MetadataKeyIndex = -1;
sCSI[jj].ValueIndex = -1;
}
fprintf(iTestMsgOutputFile, "Metadata key list (count=%d):\n", iMetadataKeyList.size());
for (i = 0; i < iMetadataKeyList.size(); ++i)
{
fprintf(iTestMsgOutputFile, "Key %d: %s\n", (i + 1), iMetadataKeyList[i].get_cstr());
}
fprintf(iTestMsgOutputFile, "\nMetadata value list (count=%d):\n", iMetadataValueList.size());
for (i = 0; i < iMetadataValueList.size(); ++i)
{
// Skip the logging of metadata if it is track-info/codec-specific-info, it will require track-info to be extracted first
// And as the track-info matches, the startindex is extracted and compared to
// iCodecSpecificInfoAudioIndex/ iCodecSpecificInfoVideoIndex to print the respective codec-specific-info.
if ((oscl_strncmp(iMetadataValueList[i].key, PVMF_ASF_PARSER_NODE_TRACKINFO_CODEC_DATA_KEY, oscl_strlen(PVMF_ASF_PARSER_NODE_TRACKINFO_CODEC_DATA_KEY)) == 0))
{
char *pIndexPtr = (char*)oscl_strstr(iMetadataValueList[i].key, "track-info/codec-specific-info;valtype=uint8*;");
if (NULL != pIndexPtr)
{
pIndexPtr = (char *)oscl_strstr(pIndexPtr, "index=");
GetIndexParamValues(pIndexPtr, StartIndex, EndIndex);
sCSI[nCnt].CodecSpecificInfoIndex = StartIndex;
sCSI[nCnt].MetadataKeyIndex = i;
sCSI[nCnt].ValueIndex = (i + 1);
nCnt++;
if ((int32)StartIndex == iCodecSpecificInfoAudioIndex)
{
fprintf(iTestMsgOutputFile, "Value %d:\n", (i + 1));
fprintf(iTestMsgOutputFile, " Key string: %s\n", iMetadataValueList[sCSI[jj].MetadataKeyIndex].key);
PrintCodecSpecificInfo(iMetadataValueList[i].value.pChar_value, INDEX_CODEC_SPECIFIC_INFO_AUDIO);
}
else if ((int32)StartIndex == iCodecSpecificInfoVideoIndex)
{
fprintf(iTestMsgOutputFile, "Value %d:\n", (i + 1));
fprintf(iTestMsgOutputFile, " Key string: %s\n", iMetadataValueList[sCSI[jj].MetadataKeyIndex].key);
PrintCodecSpecificInfo(iMetadataValueList[i].value.pChar_value, INDEX_CODEC_SPECIFIC_INFO_VIDEO);
}
}
continue;
}
fprintf(iTestMsgOutputFile, "Value %d:\n", (i + 1));
fprintf(iTestMsgOutputFile, " Key string: %s\n", iMetadataValueList[i].key);
switch (GetValTypeFromKeyString(iMetadataValueList[i].key))
{
case PVMI_KVPVALTYPE_CHARPTR:
{
fprintf(iTestMsgOutputFile, " Value:%s\n", iMetadataValueList[i].value.pChar_value);
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[i].length, iMetadataValueList[i].capacity);
// Checks whether the iMetadataValueList[i].key matches the track-info/type.
// If matches, then it checks for the index value, extracts the index and stores it in startindex.
// Then it verifies for WMA/WMV and accordingly prints the codec-specific-info.
// And if it does not match then it continues till it matches.
char *pIndexPtr = (char *)oscl_strstr(iMetadataValueList[i].key, "track-info/type;valtype=char*;");
if (NULL != pIndexPtr)
{
pIndexPtr = (char *)oscl_strstr(iMetadataValueList[i].key, "index=");
GetIndexParamValues(pIndexPtr, StartIndex, EndIndex);
if ((oscl_strncmp(iMetadataValueList[i].value.pChar_value, "audio/x-ms-wma", oscl_strlen("audio/x-ms-wma")) == 0))
{
iCodecSpecificInfoAudioIndex = (int32)StartIndex;
for (uint32 jj = 0; jj <= nCnt; jj++)
{
if ((uint32)sCSI[jj].CodecSpecificInfoIndex == StartIndex)
{
fprintf(iTestMsgOutputFile, "Value %d:\n", sCSI[jj].ValueIndex);
fprintf(iTestMsgOutputFile, " Key string: %s\n", iMetadataValueList[sCSI[jj].MetadataKeyIndex].key);
fprintf(iTestMsgOutputFile, " Value: UNKNOWN VALUE TYPE\n");
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[sCSI[jj].MetadataKeyIndex].length, iMetadataValueList[sCSI[jj].MetadataKeyIndex].capacity);
PrintCodecSpecificInfo(iMetadataValueList[sCSI[jj].MetadataKeyIndex].value.pChar_value, INDEX_CODEC_SPECIFIC_INFO_AUDIO);
break;
}
}
}
else if ((oscl_strncmp(iMetadataValueList[i].value.pChar_value, "video/x-ms-wmv", oscl_strlen("video/x-ms-wmv")) == 0))
{
iCodecSpecificInfoVideoIndex = StartIndex;
for (uint jj = 0; jj <= nCnt; jj++)
{
if ((uint32)sCSI[jj].CodecSpecificInfoIndex == StartIndex)
{
fprintf(iTestMsgOutputFile, "Value %d:\n", sCSI[jj].ValueIndex);
fprintf(iTestMsgOutputFile, " Key string: %s\n", iMetadataValueList[sCSI[jj].MetadataKeyIndex].key);
fprintf(iTestMsgOutputFile, " Value: UNKNOWN VALUE TYPE\n");
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[sCSI[jj].MetadataKeyIndex].length, iMetadataValueList[sCSI[jj].MetadataKeyIndex].capacity);
PrintCodecSpecificInfo(iMetadataValueList[sCSI[jj].MetadataKeyIndex].value.pChar_value, INDEX_CODEC_SPECIFIC_INFO_VIDEO);
break;
}
}
}
}
}
break;
case PVMI_KVPVALTYPE_WCHARPTR:
{
// Assume string is in UCS-2 encoding so convert to UTF-8
char tmpstr[65];
oscl_UnicodeToUTF8(iMetadataValueList[i].value.pWChar_value,
oscl_strlen(iMetadataValueList[i].value.pWChar_value), tmpstr, 65);
tmpstr[64] = '\0';
fprintf(iTestMsgOutputFile, " Value(in UTF-8, first 64 chars):%s\n", tmpstr);
}
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[i].length, iMetadataValueList[i].capacity);
break;
case PVMI_KVPVALTYPE_UINT32:
fprintf(iTestMsgOutputFile, " Value:%d\n", iMetadataValueList[i].value.uint32_value);
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[i].length, iMetadataValueList[i].capacity);
break;
case PVMI_KVPVALTYPE_INT32:
fprintf(iTestMsgOutputFile, " Value:%d\n", iMetadataValueList[i].value.int32_value);
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[i].length, iMetadataValueList[i].capacity);
break;
case PVMI_KVPVALTYPE_UINT8:
fprintf(iTestMsgOutputFile, " Value:%d\n", iMetadataValueList[i].value.uint8_value);
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[i].length, iMetadataValueList[i].capacity);
break;
case PVMI_KVPVALTYPE_FLOAT:
fprintf(iTestMsgOutputFile, " Value:%f\n", iMetadataValueList[i].value.float_value);
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[i].length, iMetadataValueList[i].capacity);
break;
case PVMI_KVPVALTYPE_DOUBLE:
fprintf(iTestMsgOutputFile, " Value:%f\n", iMetadataValueList[i].value.double_value);
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[i].length, iMetadataValueList[i].capacity);
break;
case PVMI_KVPVALTYPE_BOOL:
if (iMetadataValueList[i].value.bool_value)
{
fprintf(iTestMsgOutputFile, " Value:true(1)\n");
}
else
{
fprintf(iTestMsgOutputFile, " Value:false(0)\n");
}
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[i].length, iMetadataValueList[i].capacity);
break;
default:
fprintf(iTestMsgOutputFile, " Value: UNKNOWN VALUE TYPE\n");
fprintf(iTestMsgOutputFile, " Length:%d Capacity:%d\n", iMetadataValueList[i].length, iMetadataValueList[i].capacity);
break;
}
}
fprintf(iTestMsgOutputFile, "\n\n");
}
//
// pvplayer_async_test_printmemstats section
//
void pvplayer_async_test_printmemstats::StartTest()
{
AddToScheduler();
iState = STATE_CREATE;
RunIfNotReady();
}
void pvplayer_async_test_printmemstats::Run()
{
int error = 0;
switch (iState)
{
case STATE_CREATE:
{
#if !(OSCL_BYPASS_MEMMGT)
// Obtain the current mem stats
OsclAuditCB auditCB;
OsclMemInit(auditCB);
if (auditCB.pAudit)
{
MM_Stats_t* stats = auditCB.pAudit->MM_GetStats("");
if (stats)
{
iInitialNumBytes = stats->numBytes;
iInitialNumAllocs = stats->numAllocs;
fprintf(iTestMsgOutputFile, "Initial memstats: %d allocs, %d bytes\n", iInitialNumAllocs, iInitialNumBytes);
}
else
{
fprintf(iTestMsgOutputFile, "Retrieving initial memory statistics failed! Memory statistics result would be invalid.\n");
}
}
else
{
fprintf(iTestMsgOutputFile, "Memory audit not available! Memory statistics result would be invalid.\n");
}
#else
fprintf(iTestMsgOutputFile, "MEMORY AUDIT DISABLED\n");
#endif
iPlayer = NULL;
OSCL_TRY(error, iPlayer = PVPlayerFactory::CreatePlayer(this, this, this));
if (error)
{
PVPATB_TEST_IS_TRUE(false);
iObserver->TestCompleted(*iTestCase);
}
else
{
fprintf(iTestMsgOutputFile, "After player instantiation: ");
PrintMemStats();
iState = STATE_ADDDATASOURCE;
RunIfNotReady();
}
}
break;
case STATE_ADDDATASOURCE:
{
iDataSource = new PVPlayerDataSourceURL;
oscl_UTF8ToUnicode(iFileName, oscl_strlen(iFileName), iTmpWCharBuffer, 512);
iTmpWCharBuffer[511] = '\0';
iFileNameWStr = SOURCENAME_PREPEND_WSTRING;
iFileNameWStr += iTmpWCharBuffer;
iDataSource->SetDataSourceURL(iFileNameWStr);
iDataSource->SetDataSourceFormatType(iFileType);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSource(*iDataSource, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_INIT:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Init((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_GETMETADATAKEYLIST:
{
iMetadataKeyList.clear();
OSCL_TRY(error, iCurrentCmdId = iPlayer->GetMetadataKeys(iMetadataKeyList, 0, -1, NULL, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_GETMETADATAVALUELIST:
{
iMetadataValueList.clear();
iNumValues = 0;
OSCL_TRY(error, iCurrentCmdId = iPlayer->GetMetadataValues(iMetadataKeyList, 0, -1, iNumValues, iMetadataValueList, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_ADDDATASINK_VIDEO:
{
OSCL_wHeapString<OsclMemAllocator> videosinkfilename = OUTPUTNAME_PREPEND_WSTRING;
videosinkfilename += _STRLIT_WCHAR("test_player_printmemstats_video.dat");
iMIOFileOutVideo = iMioFactory->CreateVideoOutput((OsclAny*) & videosinkfilename, MEDIATYPE_VIDEO, iCompressedVideo);
iIONodeVideo = PVMediaOutputNodeFactory::CreateMediaOutputNode(iMIOFileOutVideo);
iDataSinkVideo = new PVPlayerDataSinkPVMFNode;
((PVPlayerDataSinkPVMFNode*)iDataSinkVideo)->SetDataSinkNode(iIONodeVideo);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSink(*iDataSinkVideo, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_ADDDATASINK_AUDIO:
{
OSCL_wHeapString<OsclMemAllocator> audiosinkfilename = OUTPUTNAME_PREPEND_WSTRING;
audiosinkfilename += _STRLIT_WCHAR("test_player_printmemstats_audio.dat");
iMIOFileOutAudio = iMioFactory->CreateAudioOutput((OsclAny*) & audiosinkfilename, MEDIATYPE_AUDIO, iCompressedAudio);
iIONodeAudio = PVMediaOutputNodeFactory::CreateMediaOutputNode(iMIOFileOutAudio);
iDataSinkAudio = new PVPlayerDataSinkPVMFNode;
((PVPlayerDataSinkPVMFNode*)iDataSinkAudio)->SetDataSinkNode(iIONodeAudio);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSink(*iDataSinkAudio, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_PREPARE:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Prepare((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_START:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Start((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_PRINTMEMSTATS:
{
PVPPlaybackPosition curpos;
curpos.iPosValue.millisec_value = 0;
curpos.iPosUnit = PVPPBPOSUNIT_MILLISEC;
iPlayer->GetCurrentPositionSync(curpos);
fprintf(iTestMsgOutputFile, "After playing %d ms: ", curpos.iPosValue.millisec_value);
PrintMemStats();
++iPlayTimeCtr;
if (iPlayTimeCtr < 20)
{
iState = STATE_PRINTMEMSTATS;
RunIfNotReady(1000000);
}
else
{
iState = STATE_STOP;
RunIfNotReady();
}
}
break;
case STATE_STOP:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Stop((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASINK_VIDEO:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSink(*iDataSinkVideo, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASINK_AUDIO:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSink(*iDataSinkAudio, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_RESET:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Reset((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASOURCE:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSource(*iDataSource, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_CLEANUPANDCOMPLETE:
{
PVPATB_TEST_IS_TRUE(PVPlayerFactory::DeletePlayer(iPlayer));
iPlayer = NULL;
fprintf(iTestMsgOutputFile, "After player destruction: ");
PrintMemStats();
delete iDataSource;
iDataSource = NULL;
delete iDataSinkVideo;
iDataSinkVideo = NULL;
delete iDataSinkAudio;
iDataSinkAudio = NULL;
PVMediaOutputNodeFactory::DeleteMediaOutputNode(iIONodeVideo);
iIONodeVideo = NULL;
PVMediaOutputNodeFactory::DeleteMediaOutputNode(iIONodeAudio);
iIONodeAudio = NULL;
iMioFactory->DestroyVideoOutput(iMIOFileOutVideo);
iMIOFileOutVideo = NULL;
iMioFactory->DestroyAudioOutput(iMIOFileOutAudio);
iMIOFileOutAudio = NULL;
fprintf(iTestMsgOutputFile, "After cleanup: ");
PrintMemStats();
iObserver->TestCompleted(*iTestCase);
}
break;
default:
break;
}
}
void pvplayer_async_test_printmemstats::CommandCompleted(const PVCmdResponse& aResponse)
{
if (aResponse.GetCmdId() != iCurrentCmdId)
{
// Wrong command ID.
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
if (aResponse.GetContext() != NULL)
{
if (aResponse.GetContext() == (OsclAny*)&iContextObject)
{
if (iContextObject != iContextObjectRefValue)
{
// Context data value was corrupted
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
}
else
{
// Context data pointer was corrupted
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
}
switch (iState)
{
case STATE_ADDDATASOURCE:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After AddDataSource(): ");
PrintMemStats();
iState = STATE_INIT;
RunIfNotReady();
}
else
{
// AddDataSource failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_INIT:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After Init(): ");
PrintMemStats();
iState = STATE_GETMETADATAKEYLIST;
RunIfNotReady();
}
else
{
// Init failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_GETMETADATAKEYLIST:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After GetMetadataKeys(): ");
PrintMemStats();
iState = STATE_GETMETADATAVALUELIST;
RunIfNotReady();
}
else
{
// GetMetadataKeys failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_GETMETADATAVALUELIST:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After GetMetadataValue(): ");
PrintMemStats();
iState = STATE_ADDDATASINK_VIDEO;
RunIfNotReady();
}
else
{
// GetMetadataValue failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_ADDDATASINK_VIDEO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After AddDataSink() video: ");
PrintMemStats();
iState = STATE_ADDDATASINK_AUDIO;
RunIfNotReady();
}
else
{
// AddDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_ADDDATASINK_AUDIO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After AddDataSink() audio: ");
PrintMemStats();
iState = STATE_PREPARE;
RunIfNotReady();
}
else
{
// AddDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_PREPARE:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After Prepare(): ");
PrintMemStats();
iState = STATE_START;
RunIfNotReady();
}
else
{
// Prepare failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_START:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After Start(): ");
PrintMemStats();
iState = STATE_PRINTMEMSTATS;
RunIfNotReady(1000000);
}
else
{
// Start failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_STOP:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After Stop(): ");
PrintMemStats();
iState = STATE_REMOVEDATASINK_VIDEO;
RunIfNotReady();
}
else
{
// Stop failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASINK_VIDEO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After RemoveDataSink() video: ");
PrintMemStats();
iState = STATE_REMOVEDATASINK_AUDIO;
RunIfNotReady();
}
else
{
// RemoveDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASINK_AUDIO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After RemoveDataSink() audio: ");
PrintMemStats();
iState = STATE_RESET;
RunIfNotReady();
}
else
{
// RemoveDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_RESET:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After Reset(): ");
PrintMemStats();
iState = STATE_REMOVEDATASOURCE;
RunIfNotReady();
}
else
{
// Reset failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASOURCE:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "After RemoveDataSource(): ");
PrintMemStats();
PVPATB_TEST_IS_TRUE(true);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
else
{
// RemoveDataSource failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
default:
{
// Testing error if this is reached
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
}
}
void pvplayer_async_test_printmemstats::HandleErrorEvent(const PVAsyncErrorEvent& aEvent)
{
switch (aEvent.GetEventType())
{
case PVMFErrResourceConfiguration:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
case PVMFErrResource:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
case PVMFErrCorrupt:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
case PVMFErrProcessing:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
default:
// Unknown error and just log the error
PVPATB_TEST_IS_TRUE(false);
break;
}
// Wait for engine to handle the error
Cancel();
}
void pvplayer_async_test_printmemstats::HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent)
{
if (aEvent.GetEventType() == PVMFInfoErrorHandlingStart)
{
fprintf(iTestMsgOutputFile, "PVMFInfoErrorHandlingStart...\n");
}
if (aEvent.GetEventType() == PVMFInfoErrorHandlingComplete)
{
fprintf(iTestMsgOutputFile, "PVMFInfoErrorHandlingComplete...\n");
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
}
void pvplayer_async_test_printmemstats::PrintMemStats()
{
#if !(OSCL_BYPASS_MEMMGT)
// Obtain the current mem stats
OsclAuditCB auditCB;
OsclMemInit(auditCB);
if (auditCB.pAudit)
{
MM_Stats_t* stats = auditCB.pAudit->MM_GetStats("");
if (stats)
{
fprintf(iTestMsgOutputFile, "In use %d allocs, %d bytes.\n", stats->numAllocs - iInitialNumAllocs, stats->numBytes - iInitialNumBytes);
}
else
{
fprintf(iTestMsgOutputFile, "Retrieving memory statistics failed! Memory statistics result would be invalid.\n");
}
}
else
{
fprintf(iTestMsgOutputFile, "Memory audit not available! Memory statistics result would be invalid.\n");
}
#else
fprintf(iTestMsgOutputFile, "MEMORY AUDIT DISABLED\n");
#endif
}
//
// pvplayer_async_test_playuntileos section
//
void pvplayer_async_test_playuntileos::StartTest()
{
AddToScheduler();
iState = STATE_CREATE;
RunIfNotReady();
}
void pvplayer_async_test_playuntileos::Run()
{
int error = 0;
switch (iState)
{
case STATE_CREATE:
{
iPlayer = NULL;
OSCL_TRY(error, iPlayer = PVPlayerFactory::CreatePlayer(this, this, this));
if (error)
{
PVPATB_TEST_IS_TRUE(false);
iObserver->TestCompleted(*iTestCase);
}
else
{
iState = STATE_ADDDATASOURCE;
RunIfNotReady();
}
}
break;
case STATE_ADDDATASOURCE:
{
iDataSource = new PVPlayerDataSourceURL;
oscl_UTF8ToUnicode(iFileName, oscl_strlen(iFileName), iTmpWCharBuffer, 512);
iFileNameWStr.set(iTmpWCharBuffer, oscl_strlen(iTmpWCharBuffer));
iDataSource->SetDataSourceURL(iFileNameWStr);
iDataSource->SetDataSourceFormatType(iFileType);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSource(*iDataSource, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_INIT:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Init((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_ADDDATASINK_VIDEO:
{
OSCL_wHeapString<OsclMemAllocator> sinkfilename;
sinkfilename = OUTPUTNAME_PREPEND_WSTRING;
sinkfilename += _STRLIT_WCHAR("test_player_playuntileos_");
if (iCompressedVideo)
{
sinkfilename += _STRLIT_WCHAR("compressed_");
}
OSCL_wHeapString<OsclMemAllocator> inputfilename;
RetrieveFilename(iFileNameWStr.get_str(), inputfilename);
sinkfilename += inputfilename;
sinkfilename += _STRLIT_WCHAR("_video.dat");
iMIOFileOutVideo = iMioFactory->CreateVideoOutput((OsclAny*) & sinkfilename, MEDIATYPE_VIDEO, iCompressedVideo);
iIONodeVideo = PVMediaOutputNodeFactory::CreateMediaOutputNode(iMIOFileOutVideo);
iDataSinkVideo = new PVPlayerDataSinkPVMFNode;
((PVPlayerDataSinkPVMFNode*)iDataSinkVideo)->SetDataSinkNode(iIONodeVideo);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSink(*iDataSinkVideo, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_ADDDATASINK_AUDIO:
{
OSCL_wHeapString<OsclMemAllocator> sinkfilename;
sinkfilename = OUTPUTNAME_PREPEND_WSTRING;
sinkfilename += _STRLIT_WCHAR("test_player_playuntileos_");
if (iCompressedAudio)
{
sinkfilename += _STRLIT_WCHAR("compressed_");
}
OSCL_wHeapString<OsclMemAllocator> inputfilename;
RetrieveFilename(iFileNameWStr.get_str(), inputfilename);
sinkfilename += inputfilename;
sinkfilename += _STRLIT_WCHAR("_audio.dat");
iMIOFileOutAudio = iMioFactory->CreateAudioOutput((OsclAny*) & sinkfilename, MEDIATYPE_AUDIO, iCompressedAudio);
iIONodeAudio = PVMediaOutputNodeFactory::CreateMediaOutputNode(iMIOFileOutAudio);
iDataSinkAudio = new PVPlayerDataSinkPVMFNode;
((PVPlayerDataSinkPVMFNode*)iDataSinkAudio)->SetDataSinkNode(iIONodeAudio);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSink(*iDataSinkAudio, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_ADDDATASINK_TEXT:
{
OSCL_wHeapString<OsclMemAllocator> sinkfilename;
sinkfilename = OUTPUTNAME_PREPEND_WSTRING;
sinkfilename += _STRLIT_WCHAR("test_player_playuntileos_");
OSCL_wHeapString<OsclMemAllocator> inputfilename;
RetrieveFilename(iFileNameWStr.get_str(), inputfilename);
sinkfilename += inputfilename;
sinkfilename += _STRLIT_WCHAR("_text.dat");
iMIOFileOutText = iMioFactory->CreateTextOutput((OsclAny*) & sinkfilename, MEDIATYPE_TEXT);
iIONodeText = PVMediaOutputNodeFactory::CreateMediaOutputNode(iMIOFileOutText);
iDataSinkText = new PVPlayerDataSinkPVMFNode;
((PVPlayerDataSinkPVMFNode*)iDataSinkText)->SetDataSinkNode(iIONodeText);
OSCL_TRY(error, iCurrentCmdId = iPlayer->AddDataSink(*iDataSinkText, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_PREPARE:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Prepare((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_START:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Start((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_STOP:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Stop((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASINK_VIDEO:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSink(*iDataSinkVideo, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASINK_AUDIO:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSink(*iDataSinkAudio, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASINK_TEXT:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSink(*iDataSinkText, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_RESET:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->Reset((OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_REMOVEDATASOURCE:
{
OSCL_TRY(error, iCurrentCmdId = iPlayer->RemoveDataSource(*iDataSource, (OsclAny*) & iContextObject));
OSCL_FIRST_CATCH_ANY(error, PVPATB_TEST_IS_TRUE(false); iState = STATE_CLEANUPANDCOMPLETE; RunIfNotReady());
}
break;
case STATE_CLEANUPANDCOMPLETE:
{
PVPATB_TEST_IS_TRUE(PVPlayerFactory::DeletePlayer(iPlayer));
iPlayer = NULL;
delete iDataSource;
iDataSource = NULL;
delete iDataSinkVideo;
iDataSinkVideo = NULL;
delete iDataSinkAudio;
iDataSinkAudio = NULL;
delete iDataSinkText;
iDataSinkText = NULL;
PVMediaOutputNodeFactory::DeleteMediaOutputNode(iIONodeVideo);
iIONodeVideo = NULL;
PVMediaOutputNodeFactory::DeleteMediaOutputNode(iIONodeAudio);
iIONodeAudio = NULL;
PVMediaOutputNodeFactory::DeleteMediaOutputNode(iIONodeText);
iIONodeText = NULL;
iMioFactory->DestroyVideoOutput(iMIOFileOutVideo);
iMIOFileOutVideo = NULL;
iMioFactory->DestroyAudioOutput(iMIOFileOutAudio);
iMIOFileOutAudio = NULL;
iMioFactory->DestroyTextOutput(iMIOFileOutText);
iMIOFileOutText = NULL;
iObserver->TestCompleted(*iTestCase);
}
break;
default:
break;
}
}
void pvplayer_async_test_playuntileos::CommandCompleted(const PVCmdResponse& aResponse)
{
if (aResponse.GetCmdId() != iCurrentCmdId)
{
// Wrong command ID.
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
if (aResponse.GetContext() != NULL)
{
if (aResponse.GetContext() == (OsclAny*)&iContextObject)
{
if (iContextObject != iContextObjectRefValue)
{
// Context data value was corrupted
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
}
else
{
// Context data pointer was corrupted
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
}
switch (iState)
{
case STATE_ADDDATASOURCE:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_INIT;
RunIfNotReady();
}
else
{
// AddDataSource failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_INIT:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_ADDDATASINK_VIDEO;
RunIfNotReady();
}
else
{
// Init failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_ADDDATASINK_VIDEO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_ADDDATASINK_AUDIO;
RunIfNotReady();
}
else
{
// AddDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_ADDDATASINK_AUDIO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_ADDDATASINK_TEXT;
RunIfNotReady();
}
else
{
// AddDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_ADDDATASINK_TEXT:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_PREPARE;
RunIfNotReady();
}
else
{
// AddDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_PREPARE:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_START;
// The delay is added between Prepare and Start to test that player
// does not start the clock and send playstatus events prior to start.
RunIfNotReady(PVPLAYER_ASYNC_TEST_PLAYUNTILEOS_DELAY_AFTER_PREPARE);
}
else
{
// Prepare failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_START:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
// Do nothing and wait for EOS event
fprintf(iTestMsgOutputFile, "Playback started.\n");
}
else
{
// Start failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_STOP:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_REMOVEDATASINK_VIDEO;
RunIfNotReady();
}
else
{
// Stop failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASINK_VIDEO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_REMOVEDATASINK_AUDIO;
RunIfNotReady();
}
else
{
// RemoveDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASINK_AUDIO:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_REMOVEDATASINK_TEXT;
RunIfNotReady();
}
else
{
// RemoveDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASINK_TEXT:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_RESET;
RunIfNotReady();
}
else
{
// RemoveDataSink failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_RESET:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
iState = STATE_REMOVEDATASOURCE;
RunIfNotReady();
}
else
{
// Reset failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
case STATE_REMOVEDATASOURCE:
if (aResponse.GetCmdStatus() == PVMFSuccess)
{
PVPATB_TEST_IS_TRUE(true);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
else
{
// RemoveDataSource failed
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
default:
{
// Testing error if this is reached
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
break;
}
}
void pvplayer_async_test_playuntileos::HandleErrorEvent(const PVAsyncErrorEvent& aEvent)
{
switch (aEvent.GetEventType())
{
case PVMFErrResourceConfiguration:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
case PVMFErrResource:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
case PVMFErrCorrupt:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
case PVMFErrProcessing:
// Just log the error
PVPATB_TEST_IS_TRUE(false);
break;
default:
// Unknown error and just log the error
PVPATB_TEST_IS_TRUE(false);
break;
}
// Wait for engine to handle the error
Cancel();
}
void pvplayer_async_test_playuntileos::HandleInformationalEvent(const PVAsyncInformationalEvent& aEvent)
{
if (aEvent.GetEventType() == PVMFInfoErrorHandlingStart)
{
fprintf(iTestMsgOutputFile, "PVMFInfoErrorHandlingStart...\n");
}
if (aEvent.GetEventType() == PVMFInfoErrorHandlingComplete)
{
fprintf(iTestMsgOutputFile, "PVMFInfoErrorHandlingComplete...\n");
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
}
// Check for stop time reached event
if (aEvent.GetEventType() == PVMFInfoEndOfData)
{
PVInterface* iface = (PVInterface*)(aEvent.GetEventExtensionInterface());
if (iface == NULL)
{
return;
}
PVUuid infomsguuid = PVMFErrorInfoMessageInterfaceUUID;
PVMFErrorInfoMessageInterface* infomsgiface = NULL;
if (iface->queryInterface(infomsguuid, (PVInterface*&)infomsgiface) == true)
{
int32 infocode;
PVUuid infouuid;
infomsgiface->GetCodeUUID(infocode, infouuid);
if ((infouuid == PVPlayerErrorInfoEventTypesUUID) && (infocode == PVPlayerInfoEndOfClipReached))
{
fprintf(iTestMsgOutputFile, "EOS received. Stopping playback.\n");
iState = STATE_STOP;
Cancel();
RunIfNotReady();
}
}
}
// Check and print out playback position status
else if (aEvent.GetEventType() == PVMFInfoPositionStatus)
{
PVPlayerState pstate;
iPlayer->GetPVPlayerStateSync(pstate);
if (pstate != PVP_STATE_STARTED)
{
fprintf(iTestMsgOutputFile, "Playback status recived in Wrong Engine State\n");
PVPATB_TEST_IS_TRUE(false);
iState = STATE_CLEANUPANDCOMPLETE;
RunIfNotReady();
return;
}
PVInterface* iface = (PVInterface*)(aEvent.GetEventExtensionInterface());
if (iface == NULL)
{
return;
}
PVUuid infomsguuid = PVMFErrorInfoMessageInterfaceUUID;
PVMFErrorInfoMessageInterface* infomsgiface = NULL;
if (iface->queryInterface(infomsguuid, (PVInterface*&)infomsgiface) == true)
{
int32 infocode;
PVUuid infouuid;
infomsgiface->GetCodeUUID(infocode, infouuid);
if ((infouuid == PVPlayerErrorInfoEventTypesUUID) && (infocode == PVPlayerInfoPlaybackPositionStatus))
{
uint8* localbuf = aEvent.GetLocalBuffer();
uint32 pbpos = 0;
oscl_memcpy(&pbpos, &(localbuf[4]), 4);
fprintf(iTestMsgOutputFile, "Playback status(time) %d ms\n", pbpos);
}
}
PVPPlaybackPosition curpos;
curpos.iPosValue.percent_value = 0;
curpos.iPosUnit = PVPPBPOSUNIT_PERCENT;
if (iPlayer->GetCurrentPositionSync(curpos) == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "Playback status(percentage) %d%%\n", curpos.iPosValue.percent_value);
}
curpos.iPosValue.samplenum_value = 0;
curpos.iPosUnit = PVPPBPOSUNIT_SAMPLENUMBER;
if (iPlayer->GetCurrentPositionSync(curpos) == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "Playback status(sample number) %d\n", curpos.iPosValue.samplenum_value);
}
curpos.iPosValue.datapos_value = 0;
curpos.iPosUnit = PVPPBPOSUNIT_DATAPOSITION;
if (iPlayer->GetCurrentPositionSync(curpos) == PVMFSuccess)
{
fprintf(iTestMsgOutputFile, "Playback status(data position) %d bytes\n", curpos.iPosValue.datapos_value);
}
fprintf(iTestMsgOutputFile, "------------------------------\n");
}
}