--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmplugins/lib3gpunittest/inc/tsu_3gplibrary_composer_api.h Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,515 @@
+// Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+#ifndef TSU_3GPLIBRARY_COMPOSER_API_H
+#define TSU_3GPLIBRARY_COMPOSER_API_H
+
+#include <test/testexecutestepbase.h>
+#include <c3gplibrary.h>
+
+class CActiveScheduler;
+
+//
+// Base class for testing composer. Provides a framework for:
+//
+// 1. Setup
+// 2. Add video/audio data
+// 3. Add user data
+//
+class C3GPLibComposeBase : public CTestStep
+ {
+ public:
+ C3GPLibComposeBase();
+
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+ TVerdict doTestStepL();
+
+ protected:
+ virtual C3GPCompose* doTestStepCreateComposerL();
+
+ virtual void doTestStepComposeOpenL(C3GPCompose& aComposer) = 0;
+
+ // default to do nothing & return the current test result
+ virtual void doTestStepComposeWriteVideoAudioL(C3GPCompose& aComposer);
+ virtual void doTestStepComposeSetUserDataL(C3GPCompose& aComposer);
+
+ private:
+ CActiveScheduler* iScheduler;
+ };
+
+//
+// Setup a composer via filepath supplied by the configuration file
+//
+_LIT(K3GPComposeFilename, "3GPComposeFilename");
+class C3GPLibComposeFilename : public C3GPLibComposeBase
+ {
+ public:
+ C3GPLibComposeFilename();
+
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+
+ protected:
+ virtual void doTestStepComposeOpenL(C3GPCompose& aComposer);
+
+ protected:
+ RBuf iFilename;
+ };
+
+//
+// Class to test execution of composer APIs without any setup.
+//
+_LIT(K3GPComposeWithoutOpen, "3GPComposeWithoutOpen");
+class C3GPLibComposeWithoutOpen : public C3GPLibComposeBase
+ {
+ public:
+ C3GPLibComposeWithoutOpen();
+
+ private:
+ // virtual functions overriding base class implementations
+ void doTestStepComposeOpenL(C3GPCompose& aComposer);
+ void doTestStepComposeWriteVideoAudioL(C3GPCompose& aComposer);
+ void doTestStepComposeSetUserDataL(C3GPCompose& aComposer);
+ };
+
+//
+// Class to test composer with video/audio properties supplied by
+// the configuration file.
+//
+_LIT(K3GPComposeFile, "3GPComposeFile");
+class C3GPLibComposeFile : public C3GPLibComposeBase
+ {
+ public:
+ C3GPLibComposeFile();
+
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+
+ protected:
+ virtual void doTestStepComposeOpenL(C3GPCompose& aComposer);
+ virtual void doTestStepComposeWriteVideoAudioL(C3GPCompose& aComposer);
+
+ T3GPVideoPropertiesBase* SetupVideoPropertiesL();
+ virtual T3GPVideoPropertiesBase* SetupAvcVideoL();
+ virtual T3GPVideoPropertiesBase* SetupH263VideoL();
+ virtual T3GPVideoPropertiesBase* SetupMpeg4VideoL();
+
+ T3GPAudioPropertiesBase* SetupAudioPropertiesL();
+ virtual T3GPAudioPropertiesBase* SetupQcelpAudioL();
+ virtual T3GPAudioPropertiesBase* SetupAmrAudioL();
+ virtual T3GPAudioPropertiesBase* SetupMpeg4AudioL();
+
+ protected:
+ T3GPFileFormatType iInputFileFormat; // requested file format
+ T3GPVideoType iVideoType;
+ T3GPAudioType iAudioType;
+ RFs iFs;
+ RFile iFile;
+ RBuf iFileName;
+ RFile64 iFile64;
+ };
+
+//
+// Class to compose file conforms to the expected file format as supplied by
+// the test configuration.
+//
+_LIT(K3GPComposeFileWithFileFormatCheck, "3GPComposeFileWithFileFormatCheck");
+class C3GPLibComposeFileWithFileFormatCheck : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeFileWithFileFormatCheck();
+
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepL();
+
+ private:
+ TVerdict VerifyFileFormatL(const RFile& aFile);
+
+ private:
+ T3GPFileFormatType iOutputFileFormat; // expected file format
+ };
+
+//
+// Class to compose file with video frames of all possible combinations of different
+// dependencies
+//
+_LIT(K3GPComposeFrameDependency, "3GPComposeFrameDependency");
+class C3GPLibComposeFrameDependency : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeFrameDependency();
+
+ private:
+ void doTestStepComposeWriteVideoAudioL(C3GPCompose& aComposer);
+ };
+
+//
+// Class to compose file with video properties as specified in the test
+// configuration
+//
+_LIT(K3GPComposeVideoProperties, "3GPComposeVideoProperties");
+class C3GPLibComposeVideoProperties : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeVideoProperties();
+
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+
+ private:
+ virtual T3GPVideoPropertiesBase* SetupAvcVideoL();
+ virtual T3GPVideoPropertiesBase* SetupH263VideoL();
+ virtual T3GPVideoPropertiesBase* SetupMpeg4VideoL();
+
+ private:
+ TSize iSize;
+ TUint iMaxBitRate;
+ TUint iAvgBitRate;
+ RBuf8 iDecoderSpecInfo;
+ TUint iTimescale;
+ TInt iVideoLevel;
+ };
+
+//
+// Class to compose file with audio properties as specified in the test
+// configuration
+//
+_LIT(K3GPComposeAudioProperties, "3GPComposeAudioProperties");
+class C3GPLibComposeAudioProperties : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeAudioProperties();
+
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+
+ private:
+ T3GPAudioPropertiesBase* SetupQcelpAudioL();
+ T3GPAudioPropertiesBase* SetupAmrAudioL();
+ T3GPAudioPropertiesBase* SetupMpeg4AudioL();
+
+ private:
+ TInt iFps;
+ RBuf8 iDecoderSpecInfo;
+ TInt iTimescale;
+ T3GPQcelpStorageMode iQCelpMode;
+ TInt iModeSet;
+ };
+
+//
+// Class to create composer using buffer sizes and counts specified by test
+// configuration
+//
+_LIT(K3GPComposeWithSpecificBufferSize, "3GPComposeWithSpecificBufferSize");
+class C3GPLibComposeWithSpecificBufferSize : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeWithSpecificBufferSize();
+
+ TVerdict doTestStepPreambleL();
+
+ private:
+ C3GPCompose* doTestStepCreateComposerL();
+
+ private:
+ TInt iBufferSize;
+ TInt iBufferMaxCount;
+ };
+
+//
+// Class to compose file with user data as specified by the test
+// configuration
+//
+_LIT(K3GPComposeUserData, "3GPComposeUserData");
+class C3GPLibComposeUserData : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeUserData();
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+
+ private:
+ void doTestStepComposeSetUserDataL(C3GPCompose& aComposer);
+
+ private:
+ RBuf8 iUserData;
+ TBool iUdtaMoov;
+ TBool iUdtaVideo;
+ TBool iUdtaAudio;
+ TInt iUdtaLocation;
+ };
+
+//
+// Class to compose file using different composer flags as specified in the test
+// configuration
+//
+_LIT(K3GPComposeWithFlag, "3GPComposeWithFlag");
+class C3GPLibComposeWithFlag : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeWithFlag();
+ TVerdict doTestStepPreambleL();
+
+ protected:
+ virtual void doTestStepComposeOpenL(C3GPCompose& aComposer);
+
+ protected:
+ TInt iComposeFlag;
+ };
+
+//
+// Class to compose file specifying no video nor audio.
+//
+_LIT(K3GPComposeWithNoAudioVideo, "3GPComposeWithNoAudioVideo");
+class C3GPLibComposeWithNoAudioVideo : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeWithNoAudioVideo();
+ TVerdict doTestStepPreambleL();
+ };
+
+//
+// Class to compose file with audio frames of properties specified by test
+// configuration
+//
+_LIT(K3GPComposeAudioFrames, "3GPComposeAudioFrames");
+class C3GPLibComposeAudioFrames : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeAudioFrames();
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+
+ private:
+ void doTestStepComposeWriteVideoAudioL(C3GPCompose& aComposer);
+
+ private:
+ TInt iDuration;
+ RBuf8 iAudioFrames;
+ };
+
+//
+// Class to compose file with video frames of properties specified by test
+// configuration
+//
+_LIT(K3GPComposeVideoFrame, "3GPComposeVideoFrame");
+class C3GPLibComposeVideoFrame : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeVideoFrame();
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+
+ private:
+ void doTestStepComposeWriteVideoAudioL(C3GPCompose& aComposer);
+
+ private:
+ TBool iKeyFrame;
+ TInt iDuration;
+ RBuf8 iVideoFrame;
+ T3GPFrameDependencies* iDependencies;
+ };
+
+
+//
+// Class to open the composer again before closing it
+//
+_LIT(K3GPComposeOpenAgain, "3GPComposeOpenAgain");
+class C3GPLibComposeOpenAgain: public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeOpenAgain();
+
+ private:
+ void doTestStepComposeOpenL(C3GPCompose& aComposer);
+ };
+
+//
+// Class to setup composer with a Read-Only file via file handle
+//
+_LIT(K3GPComposeOpenReadOnlyFile, "3GPComposeOpenReadOnlyFile");
+class C3GPLibComposeOpenReadOnlyFile: public C3GPLibComposeWithFlag
+ {
+ public:
+ C3GPLibComposeOpenReadOnlyFile();
+ TVerdict doTestStepL();
+
+ private:
+ void doTestStepComposeOpenL(C3GPCompose& aComposer);
+ };
+
+//
+// Class to setup composer using file path of an opened file using
+// ShareAny and then ShareReadersOrWriters mode.
+//
+_LIT(K3GPComposeOpenedFile, "3GPComposeOpenedFile");
+class C3GPLibComposeOpenedFile: public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeOpenedFile();
+
+ private:
+ void doTestStepComposeOpenL(C3GPCompose& aComposer);
+ };
+
+//
+// Class to use 2 composer opening the same file
+//
+_LIT(K3GPComposeMultiComposeOnSameFile, "3GPComposeMultiComposeOnSameFile");
+class C3GPLibComposeMultiComposeOnSameFile : public C3GPLibComposeFilename
+ {
+ public:
+ C3GPLibComposeMultiComposeOnSameFile();
+
+ private:
+ void doTestStepComposeOpenL(C3GPCompose& aComposer);
+ };
+
+//
+// Class to have multiple composers / parser working at the same time
+//
+_LIT(K3GPComposeMultiComposers, "3GPComposeMultiComposers");
+class C3GPLibComposeMultiComposers : public C3GPLibComposeFilename
+ {
+ public:
+ C3GPLibComposeMultiComposers();
+
+ private:
+ void doTestStepComposeOpenL(C3GPCompose& aComposer);
+ };
+
+//
+// Class to compose file without calling complete first
+//
+_LIT(K3GPComposeCloseComposerWithoutComplete, "3GPComposeCloseComposerWithoutComplete");
+class C3GPLibComposeCloseComposerWithoutComplete : public C3GPLibComposeFilename
+ {
+ public:
+ C3GPLibComposeCloseComposerWithoutComplete();
+
+ private:
+ void doTestStepComposeOpenL(C3GPCompose& aComposer);
+ };
+
+//
+// Class to test cleanup of temporary files when composer panics
+//
+_LIT(K3GPComposePanic, "3GPComposePanic");
+class C3GPLibComposePanic : public C3GPLibComposeFilename
+ {
+ public:
+ C3GPLibComposePanic();
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+
+ private:
+ void doTestStepComposeOpenL(C3GPCompose& aComposer);
+
+ private:
+ TBool iPanic;
+ RBuf iDir;
+ };
+
+//
+// Class to compose a large file >2GB
+//
+_LIT(K3GPComposeLargeFile, "3GPComposeLargeFile");
+class C3GPLibComposeLargeFile : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeLargeFile();
+
+ TVerdict doTestStepPreambleL();
+ TVerdict doTestStepPostambleL();
+
+ private:
+ C3GPCompose* doTestStepCreateComposerL();
+
+ void doTestStepComposeOpenL(C3GPCompose& aComposer);
+ void doTestStepComposeWriteVideoAudioL(C3GPCompose& aComposer);
+
+ private:
+ TInt iComposeFlag;
+ };
+
+//
+// Class to compose a large file >2GB with user data
+//
+_LIT(K3GPComposeLargeFileUserData, "3GPComposeLargeFileUserData");
+class C3GPLibComposeLargeFileUserData : public C3GPLibComposeLargeFile
+ {
+ public:
+ C3GPLibComposeLargeFileUserData();
+
+ private:
+ void doTestStepComposeSetUserDataL(C3GPCompose& aComposer);
+ void WriteInt32(TUint8* aPtr, TInt32 aData);
+
+ private:
+ };
+
+//
+// Class to compose a large file >2GB using 32bit APIs
+//
+_LIT(K3GPComposeLargeFile32bitAPI, "3GPComposeLargeFile32bitAPI");
+class C3GPLibComposeLargeFile32bitAPI : public C3GPLibComposeWithFlag
+ {
+ public:
+ C3GPLibComposeLargeFile32bitAPI();
+
+ private:
+ C3GPCompose* doTestStepCreateComposerL();
+ void doTestStepComposeWriteVideoAudioL(C3GPCompose& aComposer);
+
+ private:
+ };
+
+//
+// Class to compose a large file on an mmc card until the disk is full
+//
+_LIT(K3GPComposeLargeFileDiskFull, "3GPComposeLargeFileDiskFull");
+class C3GPLibComposeLargeFileDiskFull : public C3GPLibComposeLargeFile
+ {
+ public:
+ C3GPLibComposeLargeFileDiskFull();
+
+ private:
+ void doTestStepComposeWriteVideoAudioL(C3GPCompose& aComposer);
+
+ private:
+ };
+
+//
+// Class to compose file with AVC video that conforms to the expected AVC profile.
+//
+_LIT(K3GPComposeFileWithAvcProfileCheck, "3GPComposeFileWithAvcProfileCheck");
+class C3GPLibComposeFileWithAvcProfileCheck : public C3GPLibComposeFile
+ {
+ public:
+ C3GPLibComposeFileWithAvcProfileCheck();
+ virtual T3GPVideoPropertiesBase* SetupAvcVideoL();
+ TVerdict doTestStepL();
+
+ private:
+ TVerdict VerifyAvcProfileL(const RFile& aFile);
+
+ private:
+ TBuf8<7> iAvcDecoderConfigRecord;
+ };
+
+
+#endif // TSU_3GPLIBRARY_COMPOSER_API_H
+