--- /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