mmdevicefw/mdfunittest/codecapi/omxvorbis/src/tsu_mdf_omxvorbiscodecs_pu.cpp
changeset 0 79dd3e2336a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmdevicefw/mdfunittest/codecapi/omxvorbis/src/tsu_mdf_omxvorbiscodecs_pu.cpp	Fri Oct 08 19:40:43 2010 +0100
@@ -0,0 +1,331 @@
+// Copyright (c) 2006-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:
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include "tsu_mdf_omxvorbiscodecs_pu.h"
+#include <openmax/il/khronos/v1_x/OMX_Core.h>
+#include <mmf/server/mmfhwdevicesetup.h>
+#include <mdf/mdfpuconfig.h>
+#include "PU/decoder/vorbisdecoderprocessingunit.h"
+#include "PU/vorbisprocessingunituids.hrh"
+// for the bitrate custom interface
+#include <mmf/server/devsoundstandardcustominterfaces.h>
+
+#include <e32debug.h>
+
+//
+// RTestStepOmxVorbisCodecPu
+// general tests relating to Processing Unit
+
+/**
+ * Constructor
+ */
+RTestStepOmxVorbisCodecPu::RTestStepOmxVorbisCodecPu()
+ 	{
+ 	iTestStepName = _L("MM-MDF-OMXVORBISCODECS-U-0010-HP");
+	iHeapSize = KTestHeapSize;
+ 	}
+
+/**
+ * Do the test step
+ */
+TVerdict RTestStepOmxVorbisCodecPu::DoTestStepL()
+	{
+	iVerdict = EPass;
+
+	// try and create PUs with invalid observers. it should succeed.
+	
+	_LIT8(KTestGarbage, "I am Garbage");
+	const TDesC8& testGarbageDes = KTestGarbage;
+	const MMdfProcessingUnitObserver* garbageObs = NULL;
+	
+	// NB: we *deliberately* use an unsafe cast
+	garbageObs = (const MMdfProcessingUnitObserver*)&testGarbageDes;
+	  
+	CMdfProcessingUnit* theDecPu = NULL;
+	CMdfProcessingUnit* theEncPu = NULL;
+	
+	TInt err = OMX_Init();
+	if(err != KErrNone) 
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialise OpenMax"));
+		return EFail;	
+		}
+
+	TRAPD(err1, theDecPu = CMdfProcessingUnit::NewL(TUid::Uid(KUidVorbisDecoderPU) ));
+	if(err1 == KErrNone) 
+		{
+		err1 = theDecPu->Create(*garbageObs);
+		}
+		
+	TRAPD(err2, theEncPu = CMdfProcessingUnit::NewL(TUid::Uid(KUidVorbisEncoderPU) ));
+	if(err2 == KErrNone) 
+		{
+		err2 = theEncPu->Create(*garbageObs);
+		}
+		
+	if(err1 || err2)
+		{
+		ERR_PRINTF1(_L("Error - couldn't initialise PUs"));
+		delete theDecPu;
+		delete theEncPu;
+		OMX_Deinit();
+		REComSession::FinalClose();
+		return EFail;	
+		}
+		
+	// --- test : configure the ports with different params
+
+	RPointerArray<MMdfInputPort> ipa;
+	RPointerArray<MMdfOutputPort> opa;
+	TTaskConfig config;
+
+	// decoder tests
+	if(theDecPu)
+		{
+		MMdfInputPort* inputPort = NULL;
+		MMdfOutputPort* outputPort = NULL;
+
+		err1 = theDecPu->GetInputPorts(ipa);
+		if(err1 == KErrNone && ipa.Count()) 
+			{
+			inputPort = ipa[0];
+			}
+		err2 = theDecPu->GetOutputPorts(opa);
+		if(err2 == KErrNone && opa.Count()) 
+			{
+			outputPort = opa[0];
+			}
+
+		if(!inputPort || !outputPort) 
+			{
+			ERR_PRINTF1(_L("Error - couldn't get input/output ports"));
+			}
+		else 
+			{
+			config.iRate = 0;
+			config.iStereoMode = 0;
+	
+			TPuTaskConfig puConfig(config);
+			err = inputPort->MipConfigure(puConfig);
+			if(err != KErrNone)
+				{
+				ERR_PRINTF1(_L("Error - couldn't configure input port (1)"));
+				iVerdict = EFail;
+				}
+			err = outputPort->MopConfigure(puConfig);
+			if(err != KErrNone)
+				{
+				ERR_PRINTF1(_L("Error - couldn't configure output port (1)"));
+				iVerdict = EFail;
+				}
+		
+			config.iStereoMode |= ETaskMono;
+			config.iStereoMode |= ETaskInterleaved;
+	
+			TPuTaskConfig puConfig2(config);
+			err = inputPort->MipConfigure(puConfig2);
+			if(err != KErrNone)
+				{
+				ERR_PRINTF1(_L("Error - couldn't configure input port (2)"));
+				iVerdict = EFail;
+				}
+			err = outputPort->MopConfigure(puConfig2);
+			if(err != KErrNone)
+				{
+				ERR_PRINTF1(_L("Error - couldn't configure output port (2)"));
+				iVerdict = EFail;
+				}
+		
+			// now cast a different type so that it's not recognised	
+			TPuConfig* puConfig3 = (TPuConfig*)&testGarbageDes;
+			err = inputPort->MipConfigure(*puConfig3);
+			if(err != KErrNotSupported)
+				{
+				ERR_PRINTF2(_L("Error - configure input port (3) returned %d"), err);
+				iVerdict = EFail;
+				}
+			err = outputPort->MopConfigure(*puConfig3);
+			if(err != KErrNotSupported)
+				{
+				ERR_PRINTF2(_L("Error - configure output port (3) returned %d"), err);
+				iVerdict = EFail;
+				}
+		
+			opa.Close();
+			ipa.Close();
+			}	
+		}
+		
+	// encoder tests
+	if(theEncPu)
+		{
+		MMdfInputPort* inputPort = NULL;
+		MMdfOutputPort* outputPort = NULL;
+
+		err1 = theEncPu->GetInputPorts(ipa);
+		if(err1 == KErrNone && ipa.Count()) 
+			{
+			inputPort = ipa[0];
+			}
+		err2 = theEncPu->GetOutputPorts(opa);
+		if(err2 == KErrNone && opa.Count()) 
+			{
+			outputPort = opa[0];
+			}
+
+		if(!inputPort || !outputPort) 
+			{
+			ERR_PRINTF1(_L("Error - couldn't get input/output ports"));
+			}
+		else 
+			{
+			config.iRate = 0;
+			config.iStereoMode = 0;
+	
+			TPuTaskConfig puConfig(config);
+			err = inputPort->MipConfigure(puConfig);
+			if(err != KErrNone)
+				{
+				ERR_PRINTF1(_L("Error - couldn't configure input port (1)"));
+				iVerdict = EFail;
+				}
+			err = outputPort->MopConfigure(puConfig);
+			if(err != KErrNone)
+				{
+				ERR_PRINTF1(_L("Error - couldn't configure output port (1)"));
+				iVerdict = EFail;
+				}
+		
+			config.iStereoMode |= ETaskMono;
+			config.iStereoMode |= ETaskInterleaved;
+	
+			TPuTaskConfig puConfig2(config);
+			err = inputPort->MipConfigure(puConfig2);
+			if(err != KErrNone)
+				{
+				ERR_PRINTF1(_L("Error - couldn't configure input port (2)"));
+				iVerdict = EFail;
+				}
+			err = outputPort->MopConfigure(puConfig2);
+			if(err != KErrNone)
+				{
+				ERR_PRINTF1(_L("Error - couldn't configure output port (2)"));
+				iVerdict = EFail;
+				}
+		
+			// now cast a different type so that it's not recognised	
+			TPuConfig* puConfig3 = (TPuConfig*)&testGarbageDes;
+			err = inputPort->MipConfigure(*puConfig3);
+			if(err != KErrNotSupported)
+				{
+				ERR_PRINTF2(_L("Error - configure input port (3) returned %d"), err);
+				iVerdict = EFail;
+				}
+			err = outputPort->MopConfigure(*puConfig3);
+			if(err != KErrNotSupported)
+				{
+				ERR_PRINTF2(_L("Error - configure output port (3) returned %d"), err);
+				iVerdict = EFail;
+				}
+		
+			opa.Close();
+			ipa.Close();
+			}	
+		}
+
+	// --- test : custom interface on encoder
+	
+	// invalid uid
+	TUid garbageUid = {0x12345678};
+	MMMFDevSoundCustomInterfaceBitRate* bitrateCI = (MMMFDevSoundCustomInterfaceBitRate*)theEncPu->CustomInterface(garbageUid);
+	if (bitrateCI != NULL)
+		{
+		ERR_PRINTF2(_L("Error - CustomInterface returned 0x%08x"), bitrateCI);
+		iVerdict = EFail;
+		}
+	
+	err = theEncPu->CreateCustomInterface(garbageUid);
+	if (err == KErrNone)
+		{
+		ERR_PRINTF2(_L("Error - CreateCustomInterface returned %d"), err);
+		iVerdict = EFail;
+		}
+
+	// create
+	err = theEncPu->CreateCustomInterface(KUidCustomInterfaceDevSoundBitRate);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF1(_L("Error - couldn't create custom interface"));
+		iVerdict = EFail;
+		}
+	
+	// fetch & use
+	bitrateCI = (MMMFDevSoundCustomInterfaceBitRate*)theEncPu->CustomInterface(KUidCustomInterfaceDevSoundBitRate);
+	if (bitrateCI == NULL)
+		{
+		ERR_PRINTF1(_L("Error - couldn't get custom interface"));
+		iVerdict = EFail;
+		}
+	else 
+		{
+		TRAP(err, bitrateCI->SetBitRateL(KTestBitRate));			
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't set bitrate"));
+			iVerdict = EFail;
+			}
+			
+		TInt thisBitRate = 0;	
+		TRAP(err, thisBitRate = bitrateCI->BitRateL());			
+		if (err != KErrNone || thisBitRate > KTestBitRate)
+			{
+			ERR_PRINTF1(_L("Error - couldn't get bitrate, or bitrate incorrect"));
+			iVerdict = EFail;
+			}
+			
+		RArray<TInt> bitRates;
+		TRAP(err, bitrateCI->GetSupportedBitRatesL(bitRates));			
+		if (err != KErrNone)
+			{
+			ERR_PRINTF1(_L("Error - couldn't get supported bitrates"));
+			iVerdict = EFail;
+			}
+		TInt count = bitRates.Count();	
+		if(count <= 0) 
+			{
+			ERR_PRINTF1(_L("Error - zero supported bitrates"));
+			iVerdict = EFail;
+			}
+		bitRates.Close();	
+		
+		}
+					
+	
+	// ---
+		
+	delete theDecPu;
+	delete theEncPu;
+	OMX_Deinit();
+	
+	REComSession::FinalClose();
+	return iVerdict;
+	}	
+
+// end