/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
* Description:
*
*/
#ifndef CGStreamerTestClass_H
#define CGStreamerTestClass_H
// INCLUDES
#include <StifLogger.h>
#include <TestScripterInternal.h>
#include <StifTestModule.h>
#include <e32svr.h>
#include <e32base.h>
#include <e32cons.h>
#include <gst/gst.h>
#include "TimeoutController.h"
#include "gstg711encoderinterface.h"
#include "gstspeechencoderconfig.h"
#include "gsterrorconcealmentinterface.h"
#include "gstg711decoderinterface.h"
#include "gstilbcdecoderinterface.h"
#include "gstilbcencoderinterface.h"
#include "gstg729encoderinterface.h"
#include "gstg729decoderinterface.h"
//global variables
/*static GstElement *iPipeline;
static GMainLoop *iLoop;
static GstElement *iConverter;
static GstElement *iResampler;
static GstElement *iSink;*/
// CONSTANTS
const TInt KErrBadTestParameter= -1000; // Error on configuration file
const TInt KErrEventPending =-2000; // Timeout and not callback
const TInt KErrCallbackErrorCode = -2001; // Callback return error code
const TInt KErrUnexpectedValue =-2002; // Unexpected value at setting
const TInt KErrTimeoutController = -2007; // Unexpected notification
const TInt KShortTimeout = 1000;
const TInt KMediumTimeout = 4000;
const TInt KLongTimeout = 100000;
_LIT( KMsgBadTestParameters, "[Error] No valid test case parameters");
// General
_LIT( KTagLocation, "location");
// Common Properties
_LIT( KTagRateProperty,"rate");
_LIT( KTagChannelsProperty,"channels");
_LIT( KTagLeftBalanceProperty,"leftbalance");
// Sink Properties
_LIT( KTagVolumeProperty,"volume");
_LIT( KTagMaxVolumeProperty,"maxvolume");
_LIT( KTagSamplesPlayedProperty,"samplesplayed");
_LIT( KTagRightBalanceProperty,"rightbalance");
_LIT( KTagVolumeRampProperty,"volumeramp");
_LIT( KTagPriorityProperty,"priority");
_LIT( KTagPereferenceProperty,"preference");
_LIT( KTagFourCCProperty,"fourcc");
_LIT( KTagMimeTypeProperty,"mimetype");
// Source Properties
_LIT( KTagGainProperty,"gain");
_LIT( KTagMaxGainProperty,"maxgain");
_LIT( KTagSamplesRecordedProperty,"samplesrecorded");
// MACROS
//#define ?macro ?macro_def
// Logging path
#ifdef __WINSCW__
_LIT( KGStreamerTestClassLogPath, "\\logs\\testframework\\" );
#else
_LIT( KGStreamerTestClassLogPath, "e:\\testing\\Log\\" );
#endif
// Log file
_LIT( KGStreamerTestClassLogFile, "GStreamerTestClass.txt" );
// FORWARD DECLARATIONS
class CGStreamerTestClass;
//typedef struct _GstObjects GstObjects;
class CGlibEventHandler: public CActive
{
public:
static CGlibEventHandler* NewL();
~CGlibEventHandler();
void RunL();
void DoCancel();
void Start();
void Stop();
private:
CGlibEventHandler();
void ConstructL();
RTimer iTimer;
};
class CGstObjects : public CBase
{
public:
static CGstObjects* NewL(void* aParent);
virtual ~CGstObjects();
private:
void ConstructL();
CGstObjects(void* aParent);
public :
GstElement *iPipeline;
GMainLoop *iLoop;
GstElement *iConverter;
GstElement *iResampler;
GstElement *iSink;
GstElement *iSource;
GstElement *iWavparse;
GstElement *iDecoder;
GstElement *iFakesink;
GstElement *iFilesink;
GstElement *iEncoder;
GstElement *iFilter;
GstElement *iWavenc;
GstBus* iBus;
GstCaps* iCaps;
GstG711EncoderIntfc *iG711EncoderIntfc;
GstG729EncoderIntfc *iG729EncoderIntfc;
GstIlbcEncoderIntfc *iIlbcEncoderIntfc;
GstSpeechEncoderConfigIntfc *iSpeechEncoderIntfc;
GstErrorConcealmentIntfc *iErrconcealmentIntfc;
GstG711DecoderIntfc *iG711DecoderIntfc;
GstG729DecoderIntfc *iG729DecoderIntfc;
GstIlbcDecoderIntfc *iIlbcDecoderIntfc;
FILE* fp;
CGlibEventHandler* iCGlibEventHandler;
void *iParent;
};
// CLASS DECLARATION
/**
* CGStreamerTestClass test class for STIF Test Framework TestScripter.
* ?other_description_lines
*
* @lib ?library
* @since Series60_3_2
*/
NONSHARABLE_CLASS(CGStreamerTestClass) : public CScriptBase,
public MTimeoutObserver
{
public: // Constructors and destructor
/**
* Two-phased constructor.
*/
static CGStreamerTestClass* NewL( CTestModuleIf& aTestModuleIf );
/**
* Destructor.
*/
virtual ~CGStreamerTestClass();
enum TGSTExpectedEvent
{
EEOSReceived
};
enum TGStreamerElements
{
EFILESOURCE = 1,
EFILESINK,
EFAKESOURCE,
EFAKESINK,
EWAVPARSE,
EMP3DECODER,
EWAVEENCODER,
ERESAMPLER,
ECONVERTER,
EDEVSOUNDSRC,
EDEVSOUNDSINK
};
enum TElementCustomInterfaces
{
EG711ENCODER = 1,
EG711DECODER,
EG729ENCODER,
EG729DECODER,
EILBCENCODER,
EILBCDECODER,
ESPEECHENCODER,
EERRORCONCEALMENT
};
enum TG711DecCustomIntfcProp
{
EG711SetDecoderMode = 1,
EG711SetCng,
EG711GetCng,
EG711SetPlc
};
enum TILBCDecCustomIntfcProp
{
EIlbcSetDecoderMode = 1,
EIlbcSetCng,
EIlbcGetCng,
};
enum TG729DecCustomIntfcProp
{
EG729BadLsfNextBuffer = 1
};
enum TG711EncCustomIntfcProp
{
EG711SetEncoderMode = 1,
EG711SetVadMode,
EG711GetVadMode
};
enum TILBCEncCustomIntfcProp
{
EIlbcSetEncoderMode = 1,
EIlbcSetVadMode,
EIlbcGetVadMode
};
enum TG729EncCustomIntfcProp
{
EG729SetVadMode = 1,
EG729GetVadMode
};
enum TSpEncCustomIntfcProp
{
ESPENGetSupportedBitrates = 1,
ESPENSetBitrate,
ESPENGetBitrate,
ESPENSetVadMode,
ESPENGetVadMode
};
enum TErrorConcealCustomIntfcProp
{
EECConcealErrorForNextBuffer = 1,
EECSetFrameMode,
EECFrameModeRqrdForEC
};
public: // New functions
/**
* ?member_description.
* @since ?Series60_version
* @param ?arg1 ?description
* @return ?description
*/
//?type ?member_function( ?type ?arg1 );
public: // Functions from base classes
/**
* From CScriptBase Runs a script line.
* @since ?Series60_version
* @param aItem Script line containing method name and parameters
* @return Symbian OS error code
*/
virtual TInt RunMethodL( CStifItemParser& aItem );
// From MTimeoutObserver
/**
* @since ?Series60_version
* @param none
* Review if all the expected events have ocurred once the time is over
*/
void HandleTimeout(TInt error);
/**
* Verify that the event was expected, removes it from the list
* Signal the TestScripter with the returned error code
* @since ?Series60_version
*/
void ProcessEvent(TGSTExpectedEvent aEvent, TInt aError);
protected: // New functions
/**
* ?member_description.
* @since ?Series60_version
* @param ?arg1 ?description
* @return ?description
*/
//?type ?member_function( ?type ?arg1 );
protected: // Functions from base classes
/**
* From ?base_class ?member_description
*/
//?type ?member_function();
private:
/**
* C++ default constructor.
*/
CGStreamerTestClass( CTestModuleIf& aTestModuleIf );
/**
* By default Symbian 2nd phase constructor is private.
*/
void ConstructL();
// Prohibit copy constructor if not deriving from CBase.
// ?classname( const ?classname& );
// Prohibit assigment operator if not deriving from CBase.
// ?classname& operator=( const ?classname& );
/**
* Frees all resources allocated from test methods.
* @since ?Series60_version
*/
void Delete();
/**
* Test methods are listed below.
*/
/**
* Example test method.
* @since ?Series60_version
* @param aItem Script line containing parameters.
* @return Symbian OS error code.
*/
/**
* Set an event as expected and set default timeout
* @since ?Series60_version
*/
void AddExpectedEvent(TGSTExpectedEvent event, TInt ms);
/**
* Unset an event as expected
* @since ?Series60_version
*/
TBool RemoveExpectedEvent(TGSTExpectedEvent event);
/**
* @since ?Series60_version
* @param none
* Removes all expected events
*/
void RemoveAllExpectedEvents();
/**
* Maps a event with a descriptor with its name
* @since ?Series60_version
*/
TPtrC EventName( TInt aKey );
/*
* Test methods are listed below.
*/
/**
* Sets a timeout different since the default
* @since Series60_3_2
* @param aItem Script line containing parameters.
* @return Symbian OS error code.
*/
TInt SetTimeout( CStifItemParser& aItem );
/**
*
* @since Series60_3_2
* @param aItem Script line containing parameters.
* @return Symbian OS error code.
*/
TInt SetExpectedEvents( CStifItemParser& aItem );
/**
*
* @since Series60_3_2
* @param aItem Script line containing parameters.
* @return Symbian OS error code.
*/
TInt SetAllowedPanic( CStifItemParser& aItem );
/**
* Connect to the default client to the server
* @since ?Series60_version
* @param aItem Script line containing parameters.
* @return Symbian OS error code.
*/
TInt ExampleL( CStifItemParser& aItem );
TInt InitGStreamer( CStifItemParser& aItem );
TInt CreatePipeLine( CStifItemParser& aItem );
TInt CreateElement( CStifItemParser& aItem );
TInt SetElementProperties( CStifItemParser& aItem );
TInt GetElementProperties( CStifItemParser& aItem );
TInt AddElementToPipeline( CStifItemParser& aItem );
TInt SetPipelineState( CStifItemParser& aItem );
TInt InitPipeLine( CStifItemParser& aItem );
TInt LinkElementsInPipeline( CStifItemParser& aItem );
TInt GetElementsCustomIntfc( CStifItemParser& aItem );
TInt CustomIntfcProp( CStifItemParser& aItem );
TInt SetCapsInPipeLine( CStifItemParser& aItem );
TInt SetMainLoopRun( CStifItemParser& aItem );
TInt GetConfigureData();
TInt SetConfigureData();
public: // Data
// ?one_line_short_description_of_data
//?data_declaration;
protected: // Data
// ?one_line_short_description_of_data
//?data_declaration;
private: // Data
// reference to TestModuleIf
CTestModuleIf& iTestModuleIf;
// Active object with a timer to timeout the test case
CSimpleTimeout * iTimeoutController;
// Indicates if the test case use a normal exit reason
TBool iNormalExitReason;
// List of expected events
RArray<TGSTExpectedEvent> iExpectedEvents;
// List of notification event (by the callback)
RArray<TGSTExpectedEvent> iOcurredEvents;
/*GstElement *iSource;
GstElement *iWavparse;
GstElement *iDecoder;
GstElement *iFakesink;
GstElement *iFilesink;
GstElement *iEncoder;
GstElement *iFilter;
GstElement *iWavenc;
GstBus* iBus;
GstCaps* iCaps;
GstG711EncoderIntfc *iG711EncoderIntfc;
GstG729EncoderIntfc *iG729EncoderIntfc;
GstIlbcEncoderIntfc *iIlbcEncoderIntfc;
GstSpeechEncoderConfigIntfc *iSpeechEncoderIntfc;
GstErrorConcealmentIntfc *iErrconcealmentIntfc;
GstG711DecoderIntfc *iG711DecoderIntfc;
GstG729DecoderIntfc *iG729DecoderIntfc;
GstIlbcDecoderIntfc *iIlbcDecoderIntfc;*/
CGstObjects* iObjects;
};
#endif // CGStreamerTestClass_H
// End of File