sl@0: // Copyright (c) 2007-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 "logicalaudiocodec.h" sl@0: #include sl@0: sl@0: #include // For making it ECom plugin sl@0: // Map the interface implementation UIDs to implementation factory functions sl@0: const TImplementationProxy ImplementationTable[] = sl@0: { sl@0: IMPLEMENTATION_PROXY_ENTRY(KAudioDecoderUid, CLogicalAudioCodec::NewL), sl@0: IMPLEMENTATION_PROXY_ENTRY(KAudioEncoderUid, CLogicalAudioCodec::NewL), sl@0: }; sl@0: sl@0: // Exported proxy for instantiation method resolution. 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: CLogicalAudioCodec* CLogicalAudioCodec::NewL(TAny* aParam) sl@0: { sl@0: DP_STATIC_CONTEXT(CLogicalAudioCodec::NewL *CD0*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: CLogicalAudioCodec* self = new(ELeave)CLogicalAudioCodec(aParam); 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: // Constructor sl@0: // --------------------------------------------------------------------------- sl@0: sl@0: CLogicalAudioCodec::CLogicalAudioCodec(TAny* aParam) : CAudioProcessingUnit(aParam) sl@0: { sl@0: TRACE_CREATE(); sl@0: DP_CONTEXT(CLogicalAudioCodec::CLogicalAudioCodec *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: if(iSettingsObserver) sl@0: { sl@0: iSettingsObserver->ReceiveComponentSettingsChange(iType, ERegisterCodecObserver); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // Second phase constructor sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioCodec::ConstructL() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::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: CLogicalAudioCodec::~CLogicalAudioCodec() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::~CLogicalAudioCodec *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iAudioCodecObserver.Close(); sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioCodec sl@0: // CLogicalAudioCodec::SetFormat sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioCodec::SetFormat(TUid aFormat) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::SetFormat *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iFormat = aFormat; sl@0: if(iSettingsObserver) sl@0: { sl@0: iSettingsObserver->ReceiveComponentSettingsChange(iType, EComponentAlterationCodec); sl@0: } sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioCodec sl@0: // CLogicalAudioCodec::SetSampleRate sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioCodec::SetSampleRate(TInt aSampleRate) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::SetSampleRate *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iSampleRateConfig = aSampleRate; sl@0: if(iSettingsObserver) sl@0: { sl@0: iSettingsObserver->ReceiveComponentSettingsChange(iType, EComponentAlterationCodec); sl@0: } sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioCodec sl@0: // CLogicalAudioCodec::SetMode sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioCodec::SetMode(TUid aMode) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::SetMode *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: iModeConfig = aMode; sl@0: if(iSettingsObserver) sl@0: { sl@0: iSettingsObserver->ReceiveComponentSettingsChange(iType, EComponentAlterationCodec); sl@0: } sl@0: DP0_RET(KErrNone, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioCodec sl@0: // CLogicalAudioCodec::GetSupportedSamplesRates sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioCodec::GetSupportedSamplesRates(RArray& aSupportedRates) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::GetSupportedSamplesRates *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err(KErrNone); sl@0: if(iAdaptationStream) sl@0: { sl@0: err = iAdaptationStream->GetSupportedSampleRates(aSupportedRates); sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotFound; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioCodec sl@0: // CLogicalAudioCodec::GetSupportedMode sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioCodec::GetSupportedModes(RArray& aSupportedModes) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::GetSupportedModes *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err(KErrNone); sl@0: if(iAdaptationStream) sl@0: { sl@0: err = iAdaptationStream->GetSupportedModes(aSupportedModes); sl@0: } sl@0: else sl@0: { sl@0: err = KErrNotFound; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioProcessingUnit sl@0: // CLogicalAudioCodec::IsTypeOf sl@0: // --------------------------------------------------------------------------- sl@0: TBool CLogicalAudioCodec::IsTypeOf(TUid aTypeId) const sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::IsTypeOf *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TBool result = EFalse; sl@0: if ( iType == aTypeId || aTypeId == KUidAudioCodec) sl@0: { sl@0: result = ETrue; sl@0: } sl@0: DP0_RET(result, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioProcessingUnit sl@0: // CLogicalAudioCodec::Interface sl@0: // --------------------------------------------------------------------------- sl@0: // sl@0: TAny* CLogicalAudioCodec::Interface(TUid aType) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::Interface *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: sl@0: TAny* interface = NULL; sl@0: if (aType == KUidAudioCodec) sl@0: { sl@0: interface = static_cast(this); sl@0: } sl@0: else if (aType == KUidAudioCodecAdaptationObserver) sl@0: { sl@0: interface = static_cast(this); sl@0: } sl@0: DP0_RET(interface, "0x%08x"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioCodecAdaptationObserver sl@0: // CLogicalAudioCodec::AllBuffersProcessed sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioCodec::AllBuffersProcessed() sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::AllBuffersProcessed *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioCodecAdaptationObserver sl@0: // CLogicalAudioCodec::GetSupportedConfigurationComplete sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioCodec::GetSupportedAModesComplete(TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::GetSupportedModesComplete *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TUint count = iAudioCodecObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: iAudioCodecObserver[idx]->GetSupportedModesComplete(aError); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioCodecAdaptationObserver sl@0: // CLogicalAudioCodec::GetSupportedConfigurationComplete sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioCodec::GetSupportedARatesComplete(TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::GetSupportedRatesComplete *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TUint count = iAudioCodecObserver.Count(); sl@0: for ( TUint idx(0); idx < count; idx++ ) sl@0: { sl@0: iAudioCodecObserver[idx]->GetSupportedSampleRatesComplete(aError); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // from class MAudioCodecAdaptationObserver sl@0: // CLogicalAudioCodec::ProcessingUnitError sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioCodec::ProcessingUnitError(TInt aError) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::ProcessingUnitError *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: sl@0: TUint count = iAudioProcessingUnitObservers.Count(); sl@0: MAudioProcessingUnit* pUnit = static_cast(this); sl@0: for(TUint index=0; index < count; index++) sl@0: { sl@0: iAudioProcessingUnitObservers[index]->ProcessingUnitError(pUnit, aError); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioCodec::RegisterAudioCodecObserver sl@0: // --------------------------------------------------------------------------- sl@0: TInt CLogicalAudioCodec::RegisterAudioCodecObserver(MAudioCodecObserver& aObserver) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::RegisterAudioCodecObserver *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt err = iAudioCodecObserver.Find(&aObserver); sl@0: if(err == KErrNotFound) sl@0: { sl@0: err = iAudioCodecObserver.Append(&aObserver); sl@0: } sl@0: else sl@0: { sl@0: err = KErrAlreadyExists; sl@0: } sl@0: DP0_RET(err, "%d"); sl@0: } sl@0: sl@0: // --------------------------------------------------------------------------- sl@0: // CLogicalAudioCodec::UnregisterAudioCodecObserver sl@0: // --------------------------------------------------------------------------- sl@0: void CLogicalAudioCodec::UnregisterAudioCodecObserver(MAudioCodecObserver& aObserver) sl@0: { sl@0: DP_CONTEXT(CLogicalAudioCodec::UnregisterAudioCodecObserver *CD1*, CtxDevSound, DPLOCAL); sl@0: DP_IN(); sl@0: TInt idxOrErr = iAudioCodecObserver.Find(&aObserver); sl@0: if( idxOrErr != KErrNotFound ) sl@0: { sl@0: iAudioCodecObserver.Remove(idxOrErr); sl@0: } sl@0: DP_OUT(); sl@0: } sl@0: sl@0: // End of file