sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: sl@0: sl@0: #include "logicalaudiogaincontrol.h" sl@0: #include "logicalaudiocodec.h" sl@0: #include "logicalbuffersource.h" sl@0: #include "logicalbuffersink.h" sl@0: #include "logicalaudiodevicesink.h" sl@0: #include "logicalaudiodevicesource.h" sl@0: #include "logicalaudiostream.h" sl@0: sl@0: #include sl@0: #include sl@0: #include sl@0: #include sl@0: #include "audiocontext.h" sl@0: sl@0: // TODO: Remove when the MMRC Extension mechanism is ready sl@0: #include "mstreampositioncontrol.h" sl@0: #include "mstreampositioncontrol.h" sl@0: #include "audioprocessingunit.h" sl@0: sl@0: #include // For making it ECom plugin sl@0: sl@0: sl@0: // Exported proxy for instantiation method resolution sl@0: // Define the interface UIDs sl@0: const TImplementationProxy ImplementationTable[] = sl@0: { sl@0: IMPLEMENTATION_PROXY_ENTRY(KAudioStreamUid, CLogicalAudioStream::NewL) sl@0: }; sl@0: sl@0: EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) sl@0: { sl@0: aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); sl@0: return ImplementationTable; sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // Constructor sl@0: // --------------------------------------------------------------------------- sl@0: // sl@0: CLogicalAudioStream::CLogicalAudioStream() sl@0: : CAudioStreamManager(), sl@0: iCurrentState(EUninitialized), sl@0: iMessageType(ERegisterStreamObserver) sl@0: { sl@0: TRACE_CREATE(); sl@0: DP_CONTEXT(CLogicalAudioStream::CLogicalAudioStream *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::NewL sl@0: // --------------------------------------------------------------------------- sl@0: CLogicalAudioStream* CLogicalAudioStream::NewL(TUid /*aTypeId*/) sl@0: { sl@0: DP_STATIC_CONTEXT(CLogicalAudioStream::NewL *CD0*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioStream* self = new(ELeave)CLogicalAudioStream(); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: DP0_RET(self, "0x%x"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // Second phase constructor sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::ConstructL() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::ConstructL *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // Destructor sl@0: // --------------------------------------------------------------------------- sl@0: // sl@0: CLogicalAudioStream::~CLogicalAudioStream() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::~CLogicalAudioStream *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iAudioProcessingUnits.Close(); sl@0: iCISupportObservers.Close(); sl@0: DP_OUT(); sl@0: } sl@0: sl@0: sl@0: // From MAudioStream sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::Uninitialize sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::Uninitialize() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Uninitialize *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: if (iCurrentState != EInitialized) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: sl@0: iCurrentState = EUninitialized; sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::Initialize sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::Initialize() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Initialize *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: if (iCurrentState != EUninitialized) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: sl@0: //calling commit?? sl@0: iCurrentState = EInitialized; sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::Load sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::Load() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Load *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: if (iCurrentState != EInitialized) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: sl@0: iCurrentState = EIdle; sl@0: ResetStreamTime(); sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::Stop sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::Stop() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Stop *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: if (iCurrentState != EActive && iCurrentState != EPrimed) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: iCurrentState = EIdle; sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::Unload sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::Unload() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Unload *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: if (iCurrentState != EIdle) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: sl@0: iCurrentState = EInitialized; sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::Prime sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::Prime() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Prime *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: if (iCurrentState != EActive && iCurrentState != EIdle) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: sl@0: iCurrentState = EPrimed; sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::Flush sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::Flush() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Flush *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: if (iCurrentState != EIdle && iCurrentState != EPrimed) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: sl@0: if(!iStreamBufferControl) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: //Empty any buffers that have been filled sl@0: iStreamBufferControl->FlushBuffers(); sl@0: sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::Activate sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::Activate() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Activate *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: if (iCurrentState != EIdle && iCurrentState != EPrimed) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: sl@0: //The start-up procedures include requesting permission for audio processing sl@0: //from audio policy. If permission to start is denied by audio policy, a state sl@0: //change callback to the current state will occur. sl@0: iCurrentState = EActive; sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::AddSource sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::AddSource(MAudioProcessingUnit* aSource) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::AddSource *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err; sl@0: if (aSource->IsTypeOf(KUidMmfBufferSource) || aSource->IsTypeOf(KUidAudioDeviceSource)) sl@0: { sl@0: if (iCurrentState == EUninitialized) sl@0: { sl@0: err = DoAddProcessingUnit(aSource); sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotReady; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotSupported; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::AddSink sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::AddSink(MAudioProcessingUnit* aSink) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::AddSink *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err; sl@0: if (aSink->IsTypeOf(KUidMmfBufferSink) || aSink->IsTypeOf(KUidAudioDeviceSink) ) sl@0: { sl@0: if (iCurrentState == EUninitialized) sl@0: { sl@0: err = DoAddProcessingUnit(aSink); sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotReady; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotSupported; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::AddCodec sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::AddAudioCodec(MAudioProcessingUnit* aCodec) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::AddAudioCodec *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err; sl@0: if (iCodec != NULL) sl@0: { sl@0: DP0_RET(KErrInUse, "%d"); sl@0: } sl@0: sl@0: if (aCodec->IsTypeOf(KUidAudioCodec)) sl@0: { sl@0: if (iCurrentState == EUninitialized) sl@0: { sl@0: err = DoAddProcessingUnit(aCodec); sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotReady; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotSupported; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::AddGainControl sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::AddGainControl(MAudioProcessingUnit* aGainControl) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::AddGainControl *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err(KErrNone); sl@0: sl@0: if (iGain != NULL) sl@0: { sl@0: DP0_RET(KErrInUse, "%d"); sl@0: } sl@0: sl@0: if (aGainControl->IsTypeOf(KUidAudioGainControl)) sl@0: { sl@0: if (iCurrentState == EUninitialized) sl@0: { sl@0: err = DoAddProcessingUnit(aGainControl); sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotReady; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotSupported; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::RemoveProcessigUnit sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::RemoveProcessingUnit(MAudioProcessingUnit* aProcessingUnit) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::RemoveProcessingUnit *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: sl@0: if(iCurrentState != EUninitialized) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: sl@0: TInt err(KErrNotFound); sl@0: if (aProcessingUnit != NULL) sl@0: { sl@0: TAudioComponentId param = aProcessingUnit->InstanceId(); sl@0: TUint count= iAudioProcessingUnits.Count(); sl@0: sl@0: if (aProcessingUnit->IsTypeOf(KUidAudioCodec)) sl@0: { sl@0: iCodec = NULL; sl@0: } sl@0: else if (aProcessingUnit->IsTypeOf(KUidAudioGainControl)) sl@0: { sl@0: iGain = NULL; sl@0: } sl@0: sl@0: for ( TUint i(0); i < count; i++ ) sl@0: { sl@0: // find and remove component sl@0: if( iAudioProcessingUnits[i]->InstanceId() == param) sl@0: { sl@0: iAudioProcessingUnits.Remove(i); sl@0: break; sl@0: } sl@0: } sl@0: SetMessageType(EComponentDestruction); sl@0: err = KErrNone; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::ResetStreamTime sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::ResetStreamTime() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::ResetStreamTime *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err(KErrNone); sl@0: if (iCurrentState != EIdle) sl@0: { sl@0: DP0_RET(KErrNotReady, "%d"); sl@0: } sl@0: if(iPositionControl) sl@0: { sl@0: iPositionControl->ResetControlPosition(); sl@0: } sl@0: iTimeProcessed = 0; sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::GetStreamTime sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::GetStreamTime(TTimeIntervalMicroSeconds& aStreamTime) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::GetStreamTime *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err(KErrNone); sl@0: sl@0: if(iPositionControl) sl@0: { sl@0: err = iPositionControl->GetControlPosition(aStreamTime); sl@0: if(err == KErrNone) sl@0: { sl@0: iTimeProcessed = aStreamTime; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: aStreamTime = iTimeProcessed; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::Interface sl@0: // --------------------------------------------------------------------------- sl@0: TAny* CLogicalAudioStream::Interface(TUid aType) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Interface *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TAny* interface(NULL); sl@0: if( aType == KUidAudioStream) sl@0: { sl@0: interface = static_cast(this); sl@0: } sl@0: else if( aType == KUidExtensionInferface) sl@0: { sl@0: interface = static_cast(this); sl@0: } sl@0: else if (aType == KUidAudioStreamAdaptationObserver) sl@0: { sl@0: interface = static_cast(this); sl@0: DP0_RET(interface, "0x%x"); sl@0: } sl@0: else if (aType == KUidAudioCodecObserver) sl@0: { sl@0: interface = static_cast(this); sl@0: DP0_RET(interface, "0x%x"); sl@0: } sl@0: sl@0: DP_OUT(); sl@0: return interface; sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MCustomInterfaceSupport sl@0: // CAudioStream::RequestCustomInterface sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::RequestCustomInterface(TUid aUid, TAny*& aPtr) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::RequestCustomInterface *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err = KErrNone; sl@0: if (aUid == KA3FBackdoorAccessIfUid) sl@0: { sl@0: MA3FBackdoorAccessIf* self = this; sl@0: aPtr = self; sl@0: } sl@0: else if(iInterfaceProvider) sl@0: { sl@0: err = iInterfaceProvider->RequestCustomInterface(aUid, aPtr); sl@0: if (err != KErrNone) sl@0: { sl@0: aPtr = NULL; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotReady; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MCustomInterfaceSupport sl@0: // CAudioStream::RegisterObserver sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::RegisterObserver(MCustomInterfaceSupportObserver& aObserver) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::RegisterObserver *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err = KErrNone; sl@0: err = iCISupportObservers.Find(&aObserver); sl@0: if( err != KErrNotFound ) sl@0: { sl@0: err = KErrAlreadyExists; sl@0: } sl@0: else sl@0: { sl@0: err = iCISupportObservers.Append(&aObserver); sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MCustomInterfaceSupport sl@0: // CAudioStream::UnRegisterObserver sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::UnRegisterObserver(MCustomInterfaceSupportObserver& aObserver) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::UnRegisterObserver *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt idxOrErr = iCISupportObservers.Find(&aObserver); sl@0: if( idxOrErr != KErrNotFound ) sl@0: { sl@0: iCISupportObservers.Remove(idxOrErr); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MCustomInterfaceSupport sl@0: // CAudioStream::CustomInterfaceRemoval sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::CustomInterfaceRemoval(TUid aInterfaceUid, TAny* aPtr) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::CustomInterfaceRemoval *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TUint count = iCISupportObservers.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: iCISupportObservers[idx]->CustomInterfaceRemoval(aInterfaceUid, aPtr); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MAudioStreamAdaptationObserver sl@0: // CAudioStream::PhysicalAdaptationEvent sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::PhysicalAdaptationEvent(TPhysicalEvent /*aEvent*/, TInt /*aError*/) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::PhysicalAdaptationEvent *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CAudioStream::StateEvent sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::StateEvent(TInt aReason, TAudioState aNewState) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::StateEvent *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: #ifdef _DEBUG sl@0: RDebug::Print(_L("CLogicalAudioStream::StateEvent Error %d Stay %d"), aReason, aNewState); sl@0: #endif sl@0: TUint count = iAudioStreamObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: iAudioStreamObserver[idx]->StateEvent(*this, aReason, aNewState); sl@0: } sl@0: iCurrentState = aNewState; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::AddProcessingUnitComplete sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::AddProcessingUnitComplete(TUid aType, TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::AddProcessingUnitComplete *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: MAudioProcessingUnit* instance = NULL; sl@0: MapUidToProcessingUnit(aType, instance); sl@0: TUint count = iAudioStreamObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: iAudioStreamObserver[idx]->AddProcessingUnitComplete(*this, instance, aError); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::RemoveProcessingUnitComplete sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::RemoveProcessingUnitComplete(TUid aType, TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::RemoveProcessingUnitComplete *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: MAudioProcessingUnit* instance = NULL; sl@0: MapUidToProcessingUnit(aType, instance); sl@0: TUint count = iAudioStreamObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: iAudioStreamObserver[idx]->RemoveProcessingUnitComplete(*this, instance, aError); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MAudioStreamAdaptationObserver sl@0: // CLogicalAudioStream::ProcessingFinished sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::ProcessingFinished() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::ProcessingFinished *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TUint count = iAudioStreamObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: iAudioStreamObserver[idx]->ProcessingFinished(*this); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::FlushComplete sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::FlushComplete(TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::FlushComplete *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TUint count = iAudioStreamObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: iAudioStreamObserver[idx]->FlushComplete(*this, aError); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // Internal sl@0: // CLogicalAudioStream::DoAddProcessingUnit sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::DoAddProcessingUnit(MAudioProcessingUnit* aProcessingUnit) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::DoAddProcessingUnit *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err(KErrNone); sl@0: sl@0: if (aProcessingUnit->IsTypeOf(KUidAudioCodec) ) sl@0: { sl@0: // Need for tone handling error sl@0: CAudioProcessingUnit* pUnit = static_cast(aProcessingUnit); sl@0: iCodec = static_cast(pUnit); sl@0: } sl@0: else if (aProcessingUnit->IsTypeOf(KUidAudioGainControl) ) sl@0: { sl@0: CAudioProcessingUnit* pUnit = static_cast(aProcessingUnit); sl@0: iGain = static_cast(pUnit); sl@0: } sl@0: sl@0: err = iAudioProcessingUnits.Append(aProcessingUnit); sl@0: SetMessageType(EComponentCreation); sl@0: sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // Internal sl@0: // CLogicalAudioStream::MapUidToProcessingUnit sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::MapUidToProcessingUnit(TUid aType, MAudioProcessingUnit*& aInstance) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::MapUidToProcessingUnit *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TUint count = iAudioProcessingUnits.Count(); sl@0: for(TUint i=0; i(iAudioProcessingUnits[i]); sl@0: if ( aInstance->IsTypeOf(aType) ) sl@0: { sl@0: break; sl@0: } sl@0: aInstance = NULL; sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // From MLogicalChain sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::SetMessageType sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetMessageType(TMMRCMessageType aMessageType) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SetMessageType *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iMessageType |= aMessageType; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::ResetMessage sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::ResetMessage() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SetMessageType *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iMessageType = ENoMessage; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::MessageType sl@0: // --------------------------------------------------------------------------- sl@0: TUint CLogicalAudioStream::MessageType() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::MessageType *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: DP0_RET(iMessageType, "Message type %d"); sl@0: } sl@0: sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::AudioProcessingUnitUid sl@0: // --------------------------------------------------------------------------- sl@0: TUid CLogicalAudioStream::AudioProcessingUnitUid(TInt aIndex) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::AudioProcessingUnitUid *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TUid uid = {0}; sl@0: MAudioProcessingUnit* pUnit(NULL); sl@0: if (aIndex >= 0) sl@0: { sl@0: pUnit = static_cast(iAudioProcessingUnits[aIndex]); sl@0: } sl@0: sl@0: if (pUnit != NULL) sl@0: { sl@0: if (pUnit->IsTypeOf(KUidAudioDecoder)) sl@0: { sl@0: uid = KUidAudioDecoder; sl@0: } sl@0: else if (pUnit->IsTypeOf(KUidAudioEncoder)) sl@0: { sl@0: uid = KUidAudioEncoder; sl@0: } sl@0: else if (pUnit->IsTypeOf(KUidMmfBufferSource)) sl@0: { sl@0: uid = KUidMmfBufferSource; sl@0: } sl@0: else if (pUnit->IsTypeOf(KUidAudioGainControl)) sl@0: { sl@0: uid = KUidAudioGainControl; sl@0: } sl@0: else if (pUnit->IsTypeOf(KUidAudioDeviceSink)) sl@0: { sl@0: uid = KUidAudioDeviceSink; sl@0: } sl@0: else if (pUnit->IsTypeOf(KUidMmfBufferSink)) sl@0: { sl@0: uid = KUidMmfBufferSink; sl@0: } sl@0: else if (pUnit->IsTypeOf(KUidAudioDeviceSource)) sl@0: { sl@0: uid = KUidAudioDeviceSource; sl@0: } sl@0: else if (pUnit->IsTypeOf(KUidAudioCodec)) sl@0: { sl@0: uid = KUidAudioCodec; sl@0: } sl@0: } sl@0: DP_OUT(); sl@0: return uid; sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::AudioProcessingUnitsCount sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::AudioProcessingUnitsCount() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::AudioProcessingUnitsCount *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: DP0_RET(iAudioProcessingUnits.Count(), "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::StreamState sl@0: // --------------------------------------------------------------------------- sl@0: TAudioState CLogicalAudioStream::StreamState() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::StreamState *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: DP0_RET(iCurrentState, "Stream state %d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::SetStreamState sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetStreamState(TAudioState aAudioState) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::StreamState *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iCurrentState = aAudioState; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::CodecFormat sl@0: // --------------------------------------------------------------------------- sl@0: TUid CLogicalAudioStream::CodecFormat() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::CodecFormat *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioCodec* codec = static_cast(iCodec); sl@0: DP_OUT(); sl@0: TUid tuidnull = {0}; sl@0: if(codec) sl@0: { sl@0: return codec->iFormat; sl@0: } sl@0: else sl@0: { sl@0: return tuidnull; sl@0: } sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::GetSampleRate sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::GetSampleRate() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::GetSampleRate *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: const TUint KDefaultSampleRate = 8000; // Default sample rate sl@0: CLogicalAudioCodec* codec = static_cast(iCodec); sl@0: DP_OUT(); sl@0: TInt sampleRateValue = KDefaultSampleRate; sl@0: if(codec) sl@0: { sl@0: sampleRateValue = codec->iSampleRateConfig; sl@0: } sl@0: return sampleRateValue; sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::GetMode sl@0: // --------------------------------------------------------------------------- sl@0: TUid CLogicalAudioStream::GetMode() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::GetMode *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioCodec* codec = static_cast(iCodec); sl@0: TUid tuidnull = {0}; sl@0: DP_OUT(); sl@0: if(codec) sl@0: { sl@0: return codec->iModeConfig; sl@0: } sl@0: else sl@0: { sl@0: return tuidnull; sl@0: } sl@0: } sl@0: sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::Priority sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioStream::Priority() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Priority*CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: DP0_RET(iAudioTypeSettings.iPriority, "Priority %d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::GetVolumeRampParameters sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::GetVolumeRampParameters(TUid& aRampOperation, TTimeIntervalMicroSeconds& aRampDuration) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::GetVolumeRampParameters*CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioGainControl* gain = static_cast(iGain); sl@0: if(gain) sl@0: { sl@0: aRampOperation = gain->iDesiredRampOperation; sl@0: aRampDuration = gain->iDesiredRampTime; sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::CopySettings sl@0: // @param the logical chain from where the parameter will be copied sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::CopySettings(const MLogicalChain& aChain) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::CopySettings *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CopyStreamSettings(aChain); sl@0: CopyCodecSettings(aChain); sl@0: CopyGainSettings(aChain); sl@0: DP_OUT(); sl@0: } sl@0: sl@0: void CLogicalAudioStream::CopyStreamSettings(const MLogicalChain& aChain) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::CopyStreamSettings *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: // LogicalAudioStream settings sl@0: CLogicalAudioStream& srcChain = static_cast(const_cast(aChain)); sl@0: sl@0: iAudioTypeSettings = srcChain.iAudioTypeSettings; sl@0: iCurrentState = srcChain.iCurrentState; sl@0: iRequestState = srcChain.iRequestState; sl@0: iMessageType = srcChain.iMessageType; sl@0: iTimeProcessed = srcChain.iTimeProcessed; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: void CLogicalAudioStream::CopyCodecSettings(const MLogicalChain& aChain) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::CopyCodecSettings *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: sl@0: CLogicalAudioStream& srcChain = static_cast(const_cast(aChain)); sl@0: // Copy codec settings sl@0: CLogicalAudioCodec* srcCodec = static_cast(srcChain.iCodec); sl@0: if(iCodec && srcCodec) sl@0: { sl@0: CLogicalAudioCodec* logicalCodec = static_cast(iCodec); sl@0: logicalCodec->iFormat = srcCodec->iFormat; sl@0: logicalCodec->iSampleRateConfig = srcCodec->iSampleRateConfig; sl@0: logicalCodec->iModeConfig = srcCodec->iModeConfig; sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: sl@0: void CLogicalAudioStream::CopyGainSettings(const MLogicalChain& aChain) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::CopyGainSettings *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: sl@0: CLogicalAudioStream& srcChain = static_cast(const_cast(aChain)); sl@0: // Copy gain settings sl@0: CLogicalAudioGainControl* srcGain = static_cast(srcChain.iGain); sl@0: if (iGain && srcGain ) sl@0: { sl@0: if(srcGain->iDesiredChannels.Count() > 0) sl@0: { sl@0: CLogicalAudioGainControl* logicalGain = static_cast(iGain); sl@0: TUint count = srcGain->iDesiredChannels.Count(); sl@0: for (TUint i(0); i < count; i++) sl@0: { sl@0: logicalGain->iDesiredChannels[i] = srcGain->iDesiredChannels[i]; sl@0: } sl@0: logicalGain->iDesiredRampOperation = srcGain->iDesiredRampOperation; sl@0: logicalGain->iDesiredRampTime = srcGain->iDesiredRampTime; sl@0: } sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::CloneL sl@0: // --------------------------------------------------------------------------- sl@0: MLogicalChain* CLogicalAudioStream::CloneL() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::CloneL *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err = KErrNone; sl@0: MLogicalChain* newLogicalChain = NULL; sl@0: sl@0: // Create another audiostream sl@0: CAudioStreamManager *manager = NULL; sl@0: manager = CAudioStreamManager::NewL(KUidAudioStream); sl@0: // Copy stream settings sl@0: CLogicalAudioStream* logicalAudioStream = static_cast(manager); sl@0: sl@0: MAudioProcessingUnit* pUnit=NULL; sl@0: TInt count = iAudioProcessingUnits.Count(); sl@0: for(TInt i = 0; i < count ; i++) sl@0: { sl@0: // Create processing unit sl@0: TUid type = AudioProcessingUnitUid(i); sl@0: TComponentParameters cParameters; sl@0: cParameters.iTypeUid = type; sl@0: cParameters.iInstanceId = 0; sl@0: cParameters.iContextId = 0; sl@0: cParameters.iSettingsObserver = NULL; sl@0: pUnit = CAudioProcessingUnit::NewL(cParameters); sl@0: sl@0: // If no error then add to the stream sl@0: if ( (type == KUidAudioDecoder) || (type == KUidAudioEncoder) ) sl@0: { sl@0: err = logicalAudioStream->AddAudioCodec(pUnit); sl@0: } sl@0: else if (type == KUidMmfBufferSource || (type == KUidAudioDeviceSource) ) sl@0: { sl@0: err = logicalAudioStream->AddSource(pUnit); sl@0: } sl@0: else if (type == KUidAudioGainControl) sl@0: { sl@0: err = logicalAudioStream->AddGainControl(pUnit); sl@0: } sl@0: else if (type == KUidAudioDeviceSink || ( type == KUidMmfBufferSink) ) sl@0: { sl@0: err = logicalAudioStream->AddSink(pUnit); sl@0: } sl@0: // TODO: sl@0: // Check this couldn't be added sl@0: if(err != KErrNone) sl@0: { sl@0: logicalAudioStream->iAudioProcessingUnits.Remove(iAudioProcessingUnits.Count()-1); sl@0: delete pUnit; sl@0: } sl@0: } sl@0: // Cast to MLogicalChain sl@0: newLogicalChain = static_cast(logicalAudioStream); sl@0: newLogicalChain->CopySettings(*this); sl@0: sl@0: DP0_RET(newLogicalChain, "0x%x"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::Release sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::Release() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::Release *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: // ResetAndDestroy sl@0: TInt count = iAudioProcessingUnits.Count(); sl@0: TInt i; sl@0: for (i=0; i(iAudioProcessingUnits[i]); sl@0: delete pUnit; sl@0: } sl@0: iAudioProcessingUnits.Reset(); sl@0: DP_OUT(); sl@0: delete this; sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::GetComponent sl@0: // --------------------------------------------------------------------------- sl@0: TAny* CLogicalAudioStream::GetComponent(TUid aType) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::GetComponent *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TAny* interface = NULL; sl@0: sl@0: // go through this or our subcomponents to see if somebody knows about the interface sl@0: interface = Interface(aType); sl@0: if (interface==NULL) sl@0: { sl@0: TUint count = iAudioProcessingUnits.Count(); sl@0: // go through components looking for valid interface sl@0: for ( TInt i=0; i < count; i++ ) sl@0: { sl@0: interface = iAudioProcessingUnits[i]->Interface(aType); sl@0: if (interface!=NULL) sl@0: { sl@0: break; sl@0: }; sl@0: } sl@0: }; sl@0: sl@0: sl@0: DP0_RET(interface, "0x%x"); sl@0: } sl@0: sl@0: sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::SetAdaptationSource sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetAdaptationSource(MMMFBufferSource& aSource) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SetAdaptationSource *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: MapUidToProcessingUnit(KUidMmfBufferSource, iAudioProcessingUnit); sl@0: ASSERT(iAudioProcessingUnit); sl@0: sl@0: CAudioProcessingUnit* cUnit = static_cast(iAudioProcessingUnit); sl@0: CLogicalBufferSource* bufferSource = (static_cast(cUnit)); sl@0: sl@0: bufferSource->iAdaptationBufferSource = &aSource; sl@0: aSource.SetDataSupplier(*bufferSource); sl@0: sl@0: iAudioProcessingUnit = NULL; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::SetAdaptationSink sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetAdaptationSink(MMMFBufferSink& aSink) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SetAdaptationSink *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: MapUidToProcessingUnit(KUidMmfBufferSink, iAudioProcessingUnit); sl@0: ASSERT(iAudioProcessingUnit); sl@0: sl@0: CAudioProcessingUnit* cUnit = static_cast(iAudioProcessingUnit); sl@0: CLogicalBufferSink* bufferSink = (static_cast(cUnit)); sl@0: sl@0: bufferSink->iAdaptationBufferSink = &aSink; sl@0: aSink.SetDataConsumer(*bufferSink); sl@0: sl@0: iAudioProcessingUnit = NULL; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::SetAdaptationGainControl sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetAdaptationGainControl(MAudioGainControl& aGain) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SetAdaptationGainControl *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: ASSERT(iGain); sl@0: CLogicalAudioGainControl* gain = static_cast(iGain); sl@0: gain->iAdaptationGain = &aGain; sl@0: aGain.RegisterAudioGainControlObserver(*gain); sl@0: DP_OUT(); sl@0: } sl@0: sl@0: sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // From MLogicalChain sl@0: // CLogicalAudioStream::SetPositionControl sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetStreamPositionControl(MStreamPositionControl& aPositionControl) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SetStreamPositionControl *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iPositionControl = &aPositionControl; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::SetAdaptationStream sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetAdaptationStream(MConfigurationHelper& aStream) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SetAdaptationStream *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioCodec* codec = static_cast(iCodec); sl@0: if (codec != NULL) sl@0: { sl@0: if (codec->iAdaptationStream == NULL) sl@0: { sl@0: codec->iAdaptationStream = &aStream; sl@0: } sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::SetStreamBufferControl sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetStreamBufferControl(MStreamBufferControl& aStreamBufferControl) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SetAdaptationStream *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iStreamBufferControl = &aStreamBufferControl; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::SetCustomInterfaceProvider sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetCustomInterfaceProvider(MCustomInterfaceSupport& aInterfaceProvider) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SetCustomInterfaceProvider *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iInterfaceProvider = &aInterfaceProvider; sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::SampleRateSet sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SampleRateSet(TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SampleRateSet *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioCodec* codec = static_cast(iCodec); sl@0: if(codec) sl@0: { sl@0: TUint count = codec->iAudioCodecObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: codec->iAudioCodecObserver[idx]->SampleRateSet(aError); sl@0: } sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::ModeSet sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::ModeSet(TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SampleRateSet *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioCodec* codec = static_cast(iCodec); sl@0: if(codec) sl@0: { sl@0: TUint count = codec->iAudioCodecObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: codec->iAudioCodecObserver[idx]->ModeSet(aError); sl@0: } sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::GetSupportedSampleRatesComplete sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::GetSupportedSampleRatesComplete (TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SampleRateSet *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioCodec* codec = static_cast(iCodec); sl@0: if(codec) sl@0: { sl@0: TUint count = codec->iAudioCodecObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: codec->iAudioCodecObserver[idx]->GetSupportedSampleRatesComplete(aError); sl@0: } sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::GetSupportedModesComplete sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::GetSupportedModesComplete (TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioStream::SampleRateSet *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioCodec* codec = static_cast(iCodec); sl@0: if(codec) sl@0: { sl@0: TUint count = codec->iAudioCodecObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: codec->iAudioCodecObserver[idx]->GetSupportedModesComplete(aError); sl@0: } sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioStream::SetParentContext sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioStream::SetParentContext(const CAudioContext& aContext) sl@0: { sl@0: iParentContext = const_cast(&aContext); sl@0: } sl@0: sl@0: sl@0: // from MA3FBackdoorAccessIf sl@0: sl@0: MAudioContext* CLogicalAudioStream::AudioContext() sl@0: { sl@0: return iParentContext; sl@0: } sl@0: sl@0: MAudioStream* CLogicalAudioStream::AudioStream() sl@0: { sl@0: return this; sl@0: } sl@0: sl@0: MAudioProcessingUnit* CLogicalAudioStream::ProcessingUnit(TUid aType) sl@0: { sl@0: // look through our processing units for something of the correct type sl@0: TInt numProcessingUnits = iAudioProcessingUnits.Count(); sl@0: for (TInt index=0; index < numProcessingUnits; index++) sl@0: { sl@0: MAudioProcessingUnit* ptr = iAudioProcessingUnits[index]; sl@0: if (ptr->IsTypeOf(aType)) sl@0: { sl@0: return ptr; sl@0: } sl@0: } sl@0: return NULL; sl@0: }