sl@0: /* sl@0: * Copyright (c) 2006 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: Message handler for eAAC+ decoder configuration interface. sl@0: * sl@0: */ sl@0: sl@0: sl@0: sl@0: // INCLUDE FILES sl@0: #include "EAacPlusDecoderIntfcMsgs.h" sl@0: #include "EAacPlusDecoderIntfcMsgHdlr.h" sl@0: sl@0: // EXTERNAL DATA STRUCTURES sl@0: sl@0: // EXTERNAL FUNCTION PROTOTYPES sl@0: sl@0: // CONSTANTS sl@0: sl@0: // MACROS sl@0: sl@0: // LOCAL CONSTANTS AND MACROS sl@0: sl@0: // MODULE DATA STRUCTURES sl@0: sl@0: // LOCAL FUNCTION PROTOTYPES sl@0: sl@0: // FORWARD DECLARATIONS sl@0: sl@0: // ============================= LOCAL FUNCTIONS =============================== sl@0: sl@0: // ============================ MEMBER FUNCTIONS =============================== sl@0: sl@0: /** sl@0: * CEAacPlusDecoderIntfcMsgHdlr::CEAacPlusDecoderIntfcMsgHdlr sl@0: * C++ default constructor can NOT contain any code, that might leave. sl@0: */ sl@0: CEAacPlusDecoderIntfcMsgHdlr::CEAacPlusDecoderIntfcMsgHdlr( sl@0: CEAacPlusDecoderIntfc* aAacDecoderConfigCI) : sl@0: CMMFObject(KUidEAacPlusDecoderIntfc) sl@0: { sl@0: iAacDecoderConfigCI = aAacDecoderConfigCI; sl@0: } sl@0: sl@0: /** sl@0: * CEAacPlusDecoderIntfcMsgHdlr::ConstructL sl@0: * Symbian 2nd phase constructor can leave. sl@0: */ sl@0: void CEAacPlusDecoderIntfcMsgHdlr::ConstructL() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * CEAacPlusDecoderIntfcMsgHdlr::NewL sl@0: * Two-phased constructor. sl@0: */ sl@0: EXPORT_C CEAacPlusDecoderIntfcMsgHdlr* CEAacPlusDecoderIntfcMsgHdlr::NewL( sl@0: TAny* aAacDecoderConfigCI) sl@0: { sl@0: CEAacPlusDecoderIntfc* aacDecoderConfigCI = sl@0: (CEAacPlusDecoderIntfc*)aAacDecoderConfigCI; sl@0: CEAacPlusDecoderIntfcMsgHdlr* self = sl@0: new (ELeave) CEAacPlusDecoderIntfcMsgHdlr(aacDecoderConfigCI); sl@0: CleanupStack::PushL( self ); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop( self ); sl@0: sl@0: return self; sl@0: } sl@0: sl@0: /** sl@0: * Destructor sl@0: */ sl@0: EXPORT_C CEAacPlusDecoderIntfcMsgHdlr::~CEAacPlusDecoderIntfcMsgHdlr() sl@0: { sl@0: delete iAacDecoderConfigCI; sl@0: } sl@0: sl@0: /** sl@0: * CEAacPlusDecoderIntfcMsgHdlr::HandleRequest sl@0: * Handles the messages from the proxy. sl@0: * Calls a subfunction which determines what custom interface to call. sl@0: * A subfunction is used to contain multiple leaving functions for a single sl@0: * trap. sl@0: * (other items were commented in a header). sl@0: */ sl@0: EXPORT_C void CEAacPlusDecoderIntfcMsgHdlr::HandleRequest( sl@0: TMMFMessage& aMessage) sl@0: { sl@0: ASSERT(aMessage.Destination().InterfaceId() == KUidEAacPlusDecoderIntfc); sl@0: sl@0: TRAPD(error, DoHandleRequestL(aMessage)); sl@0: if(error) sl@0: { sl@0: aMessage.Complete(error); sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * CEAacPlusDecoderIntfcMsgHdlr::DoHandleRequestL sl@0: * Determines which custom interface to call. sl@0: * (other items were commented in a header). sl@0: */ sl@0: void CEAacPlusDecoderIntfcMsgHdlr::DoHandleRequestL(TMMFMessage& aMessage) sl@0: { sl@0: switch(aMessage.Function()) sl@0: { sl@0: case EEaacpdimApplyConfig: sl@0: { sl@0: DoApplyConfigL(aMessage); sl@0: break; sl@0: } sl@0: default: sl@0: { sl@0: aMessage.Complete(KErrNotSupported); sl@0: } sl@0: } sl@0: } sl@0: sl@0: /** sl@0: * CEAacPlusDecoderIntfcMsgHdlr::DoApplyConfigL sl@0: * Handles the message from the proxy and calls the custom interface method sl@0: * to commit configuration settings to the decoder. sl@0: * (other items were commented in a header). sl@0: */ sl@0: void CEAacPlusDecoderIntfcMsgHdlr::DoApplyConfigL(TMMFMessage& aMessage) sl@0: { sl@0: TPckgBuf pckgBuf; sl@0: aMessage.ReadData1FromClientL(pckgBuf); sl@0: sl@0: iAacDecoderConfigCI->SetAudioObjectType(pckgBuf().iAudioObjectType); sl@0: iAacDecoderConfigCI->SetInputSamplingFrequency( sl@0: pckgBuf().iInputSamplingFrequency); sl@0: iAacDecoderConfigCI->SetNumOfChannels(pckgBuf().iNumOfChannels); sl@0: iAacDecoderConfigCI->SetSbr(pckgBuf().iSbrEnabled); sl@0: iAacDecoderConfigCI->SetDownSampledMode(pckgBuf().iDsmEnabled); sl@0: sl@0: TInt status = iAacDecoderConfigCI->ApplyConfig(); sl@0: aMessage.Complete(status); sl@0: } sl@0: sl@0: // End of File