diff -r 000000000000 -r 79dd3e2336a0 devsound/devsoundrefplugin/tsrc/swcdwrap/TSU_SWCDWRAP_TestDevice/TSU_MMF_SWCDWRAP_TestDevice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/devsound/devsoundrefplugin/tsrc/swcdwrap/TSU_SWCDWRAP_TestDevice/TSU_MMF_SWCDWRAP_TestDevice.cpp Fri Oct 08 19:40:43 2010 +0100 @@ -0,0 +1,157 @@ +// Copyright (c) 2003-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: +// + + +#include "TSU_MMF_SWCDWRAP_TestDevice.h" + +void Panic() + { + _LIT(KMMF_SWCDWRAP_UnitTestPanic, "TSU_MMF_SWCDWRAP"); + User::Panic(KMMF_SWCDWRAP_UnitTestPanic, 0); + } + +/** + * + * test null hw device + * @return "CMMFTestNullDevice" + * + */ +CMMFTestNullDevice* CMMFTestNullDevice::NewL() + { + CMMFTestNullDevice* self = new (ELeave) CMMFTestNullDevice(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +/** + * + * Second phase constructor. + * + */ +void CMMFTestNullDevice::ConstructL() + { + // Create device codec + iCodec = new (ELeave) CMMFTestNullCodec(); + } + + +CMMFTestNullDevice::~CMMFTestNullDevice() + { + } + + +CMMFSwCodec& CMMFTestNullDevice::Codec() + { + __ASSERT_ALWAYS(iCodec, Panic()); + return *iCodec; + } + + +CMMFSwCodec::TCodecProcessResult CMMFTestNullCodec::ProcessL(const CMMFBuffer& /*aSource*/, CMMFBuffer& /*aDest*/) + {//no processing required for null codec + User::Leave(KErrNotSupported); + //to keep compiler happy + TCodecProcessResult result; + result.iCodecProcessStatus = TCodecProcessResult::EEndOfData; + result.iSrcBytesProcessed = 0; + result.iDstBytesAdded = 0; + return result; + }; + + + +/** + * + * test null hw device + * @return "CMMFTestNullDevice" + * + */ +CMMFTest2To1Device* CMMFTest2To1Device::NewL() + { + CMMFTest2To1Device* self = new (ELeave) CMMFTest2To1Device(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +/** + * + * Second phase constructor. + * + */ +void CMMFTest2To1Device::ConstructL() + { + // Create device codec + iCodec = new (ELeave) CMMFTest2To1Codec(); + } + + +CMMFTest2To1Device::~CMMFTest2To1Device() + { + } + + +CMMFSwCodec& CMMFTest2To1Device::Codec() + { + __ASSERT_ALWAYS(iCodec, Panic()); + return *iCodec; + } + + +CMMFSwCodec::TCodecProcessResult CMMFTest2To1Codec::ProcessL(const CMMFBuffer& aSource, CMMFBuffer& aDest) + {//no processing required for null codec + + //convert from generic CMMFBuffer to CMMFDataBuffer + const CMMFDataBuffer* src = static_cast(&aSource); + CMMFDataBuffer* dst = static_cast(&aDest); + + const TUint dstMaxLen = dst->Data().MaxLength(); + + if (!dstMaxLen) + { + User::Leave(KErrArgument); + } + + const TUint srcLen = src->Data().Length(); + + //we need to cast away CONST even on the source, as the TClass needs a TUint8* + const TUint8* pSrc = src->Data().Ptr(); + TUint8* pDst = const_cast(dst->Data().Ptr()); + + TUint numberOfSamplesToGenerate = srcLen/4; // /2 to convert from bytes to samples and /2 as we only take every other + + ASSERT(numberOfSamplesToGenerate*2 <= dstMaxLen); // should be true for test + + TInt numberOfSamples = numberOfSamplesToGenerate; + + while (numberOfSamples--) + { + *pDst++ = *pSrc++; + *pDst++ = *pSrc++; + pSrc += 2; //only send every other sample to destination + } + + TCodecProcessResult result; + result.iCodecProcessStatus = TCodecProcessResult::EProcessComplete; + result.iSrcBytesProcessed = numberOfSamplesToGenerate*4; + result.iDstBytesAdded = numberOfSamplesToGenerate*2; + + dst->Data().SetLength(result.iDstBytesAdded); + + return result; + };