diff -r 000000000000 -r 79dd3e2336a0 mmdevicefw/mdfunittest/codecapi/omxvorbis/src/tsu_mdf_omxvorbiscodecs_pu.cpp --- /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 +#include +#include +#include "PU/decoder/vorbisdecoderprocessingunit.h" +#include "PU/vorbisprocessingunituids.hrh" +// for the bitrate custom interface +#include + +#include + +// +// 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 ipa; + RPointerArray 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 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