⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smbmusicapsingleplayerrsccontroller.cpp

📁 symbian代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*----------------------------------------------------------------------------*/
// Copyright (c) 2007 Sony Ericsson Mobile Communications Japan, Inc.
// All rights reserved.
/*----------------------------------------------------------------------------*/
// FileName:
//  SmbMusicAPSinglePlayerRscController.cpp
//
// Description:
//	堦嬋嵞惗僾儗僀儎儕僜乕僗嫞崌僐儞僩儘乕儖僋儔僗
//	
// Modify:
//	2006-07-11	儕僜乕僗奐曻帪偵丄庢摼嵪儕僜乕僗偐傜奐曻儕僜乕僗傪.
//				嶍彍偟偰偄側偐偭偨偺傪廋惓	K3Hirono
//
//	2007-02-01	PTX824Start
//	2007-07-24	D_82400007238	儊僀儞僾儗僀儎乕偱嵞惗拞偵GP寈崘僟僀傾儘僌偑弌偨応崌偺嫞崌摦嶌偵娭偡傞廋惓
//	2007-09-13	D_82400014940
// --[PTX825]---+---------------+---------------------------------------------
// 2007/06/15   |SDNA抮怟       |PTX825丂梫審懳墳
// 2007/09/04   |SDNA抮怟       | CQ-TRK D_82400013806懳墳
/*------------------------------------------------------------------------*/
// $NoKeywords: $

#ifndef SMBMUSICAPSINGLEPLAYERRSCCONTROLLER_H_
#include "SmbMusicAPSinglePlayerRscController.h"	//堦嬋嵞惗僾儗僀儎乕儕僜乕僗嫞崌僐儞僩儘乕儖僋儔僗
#endif	//	SMBMUSICAPSINGLEPLAYERRSCCONTROLLER_H_

#ifndef __SMBMUSICAPSINGLEPLAYEREXTERNALINTERFACE_H__	//	傾僾儕働乕僔儑儞UID
#include "SmbMusicAPSinglePlayerExternalInterface.h"
#endif	//__SMBMUSICAPSINGLEPLAYEREXTERNALINTERFACE_H__

#ifndef SMBMUSICAPSINGLEPLAYERLOG_H_
#include "SmbMusicAPSinglePlayerLog.h"	//	儘僌
#endif	//SMBMUSICAPSINGLEPLAYERLOG_H_

#ifndef __DTV_OFF__		// DELETE Start PTX825 CQ-TRK D_82400013806
#include <TSmbDTVPlayer.h>
#endif					// DELETE End PTX825 CQ-TRK D_82400013806

SEMCJ_NAMESPACE_BEGIN

#ifdef _DEBUG
_LIT(KPanicCategory, "CSmbMusicAPSinglePlayerRscController");
#endif	// #ifdef _DEBUG endif

_LIT(KRscControl, "CSmbMusicAPSinglePlayerRscControl");


/**
 *	儕僜乕僗奐曻梫媮
 *
 *	@param	CArrayFixFlat<TSmbRscMgrRsc>* aList	奐曻梫媮偺棃偰偄傞儕僜乕僗偺ID
 *	@return void
 *	@memo	僐乕儖僶僢僋娭悢丅奐曻梫媮偑棃偨傜丄偳偺儕僜乕僗偵懳偟偰棃偨傕偺偱傕慡奐曻
 */
void CSmbMusicAPSinglePlayerRscController::ReleaseResourceReqL(CArrayFixFlat<TSmbRscMgrRsc>* /* aList */)
	{
	
//	<堎忢宯>	
	//	奐曻拞偼堄幆偟側偄
	//	棟桼:
	//	壗偐奐曻梫媮偑棃偨仺慡儕僜乕僗奐曻
	//	壒惡傪帺庡揑偵奐曻拞丒壒惡偲BG傪帺庡揑偵奐曻拞仺AudioRouting傪巭傔偰奐曻偡傞張棟偼摨婜丅奐曻拞忬懺偼側偄
	//	MW偺傒傪奐曻拞(慡奐曻偑婛偵憱偭偰偄傞偺偱柍帇偟偰偄偄)
	
	//	壒惡偺傒丄傕偟偔偼壒惡丒BG偺傒傪帩偭偰偄傞(MW傪帩偭偰偄側偄)
	//	堦偮偱傕妉摼偱偒側偐偭偨側傜丄慡偰NG側偺偱丄妉摼墳摎偱婛偵Leave偟偰偄傞
	//	帺庡揑偵MW傪曻偡偙偲偼側偔丄MW偺傒梫媮偝傟偰傕慡奐曻偡傞偺偱丄偙偺忬懺偼側偄
//	<\堎忢宯>

	//	壒惡丒BG丒MW傪帩偭偰偄傞(梫媮拞偵偼側傜側偄(偙傟埲忋梫媮偡傞傕偺偼側偄偐傜))
	//		傛偭偰丄Cancel偼峫偊傞昁梫側偟丅捠忢偺慡奐曻張棟偺傒(梫媮拞側傜丄忬懺偑偍偐偟偄偺偱忈奞偱偡)

	//	BG丒MW傪帩偭偰偄傞仼HandleResourceEvent傪屇傫偩愭偱丄儕僜乕僗梫媮拞偐偳偆偐偑傢偐傞
	//		壒惡梫媮拞:梫媮傪僉儍儞僙儖仺僉儍儞僙儖偱偒側偐偭偨傜奐曻(梫媮拞側傜摉慠妶惈壔張棟偼偟偰偄側偄偺偱偦偺応偱奐曻捠抦傪偁偘偰偄偄)
	//		偦偺屻丄梫媮拞偱偼側偔側傞偺偱丄MW偺傒帩偭偰偄偰梫媮拞偱偼側偄偵慗堏丅捠忢張棟丅
	//		梫媮拞偱側偄:晛捠偵奐曻張棟傪偡傟偽偄偄(奐曻張棟偵擖偭偨傜丄梫媮拞偵偼慗堏偟側偄)
	//
	//	MW傪帩偭偰偄傞仼HandleResourceEvent傪屇傫偩愭偱丄儕僜乕僗梫媮拞偐偳偆偐偑傢偐傞
	//		壒惡傕偟偔偼丄壒惡丒BG梫媮拞:梫媮傪僉儍儞僙儖仺僉儍儞僙儖偱偒側偐偭偨傜奐曻(梫媮拞側傜摉慠妶惈壔張棟偼偟偰偄側偄偺偱偦偺応偱奐曻捠抦傪偁偘偰偄偄)
	//		偦偺屻丄梫媮拞偱偼側偔側傞偺偱丄MW偺傒帩偭偰偄偰梫媮拞偱偼側偄偵慗堏丅捠忢張棟丅
	//		梫媮拞偱側偄:晛捠偵奐曻張棟
	
	iObserver->HandleResourceEventL(ERscForAllExit);
	}

/**
 *	儕僜乕僗棙梡尃妉摼墳摎
 *
 *	@param	TSmbRscMgrRscResult aResult	妉摼寢壥
 *	@return void
 *	@memo	僐乕儖僶僢僋娭悢
 */
void CSmbMusicAPSinglePlayerRscController::AllocationResourceResL(TSmbRscMgrRscResult aResult)
	{
	TSmbMusicAPSinglePlayerAppRscEvent event;

	if(ESmbRscMgrRscResultOK == aResult)
		{
		for (TInt i = 0; i < iAllocatedResultRscList->Count(); i++)
			{
			TInt index(FindByExternalId(iAllocatedResultRscList->At(i).iRscId));
			SetAllocatedResourceState(index);
			}
		iAllocatedResultRscList->Reset();
		iPriorityList->Reset();

		//	偙偪傜偐傜庢摼梫媮傪弌偡応崌
		//	丒壒惡僷僗
		//	丒壒惡僷僗丒BGRsc
		//	丒壒惡僷僗丒BGRsc丒MW僾儗僀儎乕惂屼
		//	偺丄3僷僞乕儞偑偁傞丅偩偑偟偐偟丄壒惡僷僗偺傒庢摼偟偰偄傞忬懺偲偄偆偺偼懚嵼偟側偄
		//	MW僾儗僀儎乕惂屼偺傒偲偄偆偺偼丄椉曽庢摼仺壒惡奐曻偱懚嵼
		//	庢摼偵峴偭偨偺偼壒惡僷僗偩偗偲偄偆偙偲偑偁傞偑丄偡偱偵MW僾儗僀儎乕惂屼偑庢傟偰偄傞帪偵偟偐儐乕僗働乕僗偑側偄
		//	傛偭偰丄妉摼墳摎偑曉偭偰偔傞帪偲偄偆偺偼丄椉曽AND偱庢摼乽嵪乿偱側偄偲偄偗側偄
		if(EFalse != IsAllocatedAudioPath() && EFalse != IsAllocatedMWPlayerControl() && EFalse != IsAllocatedMusicBG())	//MOD For D_82400007238(BG儕僜乕僗庢摼忬嫷傪捛壛)
			{
			event = ERscForPlayOK;	
			}
		else
			{
			//	堎忢
			//	庢摼OK側偺偵丄庢摼偟偨RSC偑側偄
			//	庢摼OK側偺偵丄曅曽偟偐偲傟偰偄側偄
			SmbMusicAPSinglePlayerLog::OutputLog(KRscControl, ERscControl, ELogLevelNormal,_L("CannotGetRsc"));	
			event = ERscNG;
			}		
		}
	else
		{
		iPriorityList->Reset();	//	妉摼偱偒側偐偭偨丅師夞傑偨妉摼偡傞偲偒偵愝掕丅
		event = ERscNG;		
		}
	iObserver->HandleResourceEventL(event);
	}

/**
 *	儕僜乕僗棙梡尃忳搉墳摎
 *	
 *	@param TSmbRscMgrRscResult aResult
 *	@return void
 *	@memo	僐乕儖僶僢僋娭悢(nop)
 */
	void CSmbMusicAPSinglePlayerRscController::ReallocationResourceResL(TSmbRscMgrRscResult /* aResult */) 
	{
		//nop
	}

/**
 *	儕僜乕僗嫞崌妋擣墳摎
 *
 *	@param	TSmbRscMgrRscResult aResult
 *	@return	void
 *	@memo	僐乕儖僶僢僋娭悢(nop)
 */
void CSmbMusicAPSinglePlayerRscController::CheckResourceCompetitionResL(TSmbRscMgrRscResult /* aResult */)
	{
		//nop
	}

/**
 *	儕僜乕僗偵懳偡傞僉儍儞僙儖
 *
 *	@param	側偟
 *	@return void
 */
void CSmbMusicAPSinglePlayerRscController::Cancel()
	{
//DEL-S D_82400014940
//	iRscClient->Cancel();
//DEL-E D_82400014940
//ADD-S D_82400014940
	TSmbRscMgrRscResult ret = iRscClient->Cancel();
	
	//	旕摨婜梫媮傪僉儍儞僙儖偱偒偨丒旕摨婜梫媮傪偦傕偦傕峴偭偰偄側偄応崌偼側偵傕偟側偄
	//	儕僜乕僗傪妉摼偟偰偟傑偭偨応崌偺張棟傪捛壛偡傞
	if(ESmbRscMgrRscResultOK == ret)
		{
		//	僉儍儞僙儖偱偒側偐偭偨梫媮偵懳偟偰奐曻捠抦傪偁偘傞
		//	妉摼寢壥儕僜乕僗儕僗僩傪偦偺傑傑傢偨偡
		//	儕僜乕僗偺庢摼忬懺偼丄壗傕偟側偔偰椙偄(妉摼墳摎偑偒偰偄側偄偺偱)
		TInt count = iAllocatedResultRscList->Count();
		CArrayFixFlat<TSmbRscMgrRsc>*	releaseList = new(ELeave)CArrayFixFlat<TSmbRscMgrRsc>(count); 
		CleanupStack::PushL(releaseList);
	
		for(TInt i = 0; i < count; i++)
			{
			TSmbRscMgrRsc id = iAllocatedResultRscList->At(i).iRscId;
			releaseList->AppendL(id);
			SmbMusicAPSinglePlayerLog::OutputLog(KRscControl, ERscControl, ELogLevelLowest,_L("CannotCancel And ReleaseRes:%d(%d)"),id, IsAllocatedResource(id));
			}
	
		//	奐曻捠抦
		iRscClient->ReleaseResourceNotifyL(releaseList);
		CleanupStack::PopAndDestroy(releaseList);
	
		//	妉摼寢壥儕僜乕僗儕僗僩丒僾儔僀僆儕僥傿儕僗僩傪弶婜壔
		iAllocatedResultRscList->Reset();
		iPriorityList->Reset();				
		}
//ADD-E D_82400014940
	}
		
/**
 *	儕僜乕僗奐曻捠抦
 *	
 *	@param	側偟
 *	@return void
 *	@memo	儊儞僶偺抣傪巊偭偰巜掕偡傞偺偱丄堷悢偼側偟
 */
void CSmbMusicAPSinglePlayerRscController::ReleaseResourceNotifyL()
	{
	TInt count = iPrepareReleaseRsc.Count();
	if(0 == count)
		{
//DEL-S D_82400014940
//		iRscClient->Cancel();
//DEL-E D_82400014940
//ADD-S D_82400014940
		Cancel();	//	僉儍儞僙儖張棟傪抲偒姺偊
//ADD-E D_82400014940
		SmbMusicAPSinglePlayerLog::OutputLog(KRscControl, ERscControl, ELogLevelLow,_L("NeedlessReleaseRsc"));	
		// 奐曻弨旛拞偵丄嫞崌FW偐傜儕僜乕僗奐曻梫媮偱奐曻偟偰偄傞壜擻惈偑偁傞
		return;	//	奐曻偟偨傝僜乕僗偑側偄
		}
	
	CArrayFixFlat<TSmbRscMgrRsc>*	releaseList = new(ELeave)CArrayFixFlat<TSmbRscMgrRsc>(count); 
	CleanupStack::PushL(releaseList);

	for (TInt i = 0; i < iPrepareReleaseRsc.Count(); i++)
		{
		releaseList->AppendL(iPrepareReleaseRsc[i]);
		//儕僜乕僗僗僥乕僩娗棟偵奐曻愝掕
		TInt index(FindByExternalId(iPrepareReleaseRsc[i]));
		SetFreeResourceState(index);
		}
	iRscClient->ReleaseResourceNotifyL(releaseList);

	iPrepareReleaseRsc.Reset();	//	奐曻廔傢傝
	CleanupStack::PopAndDestroy(releaseList);
	}

/**
 *	僆僽僓乕僶傪愝掕偡傞
 *
 *	@param	MSmbMusicAPSinglePlayerObserver*	堦嬋嵞惗僾儗僀儎乕僆僽僓乕僶僋儔僗億僀儞僞
 *	@return void
 */
void CSmbMusicAPSinglePlayerRscController::SetObserver(MSmbMusicAPSinglePlayerObserver* aObserver)
	{
	__ASSERT_DEBUG(NULL != aObserver, User::Panic(KPanicCategory, EInvalidArgument));
	iObserver = aObserver;
	}

/**
 *	僼傽僋僩儕娭悢
 *
 *	@param	側偟
 *	@return CSmbMusicAPSinglePlayerRscController*	堦嬋嵞惗僾儗僀儎乕儕僜乕僗嫞崌僐儞僩儘乕儖僋儔僗僀儞僗僞儞僗
 */
CSmbMusicAPSinglePlayerRscController* CSmbMusicAPSinglePlayerRscController::NewL()
	{
	CSmbMusicAPSinglePlayerRscController* self =  new(ELeave) CSmbMusicAPSinglePlayerRscController();	
	CleanupStack::PushL(self);
	self->ConstructL();
	CleanupStack::Pop(self);

	return self;
	}

/**
 *	僨僗僩儔僋僞
 *
 *	@pram 側偟
 */
CSmbMusicAPSinglePlayerRscController::~CSmbMusicAPSinglePlayerRscController()
	{
	if(NULL != iRscClient)
		{
		iRscClient->CancelAndReleaseAllResources();
		}
	delete iRscClient;
	delete iAllocatedResultRscList;
	delete iPriorityList;

	iPrepareReleaseRsc.Close();
	iResourceStates.Close();
	}

//////////////////////////////////////////////////
//	偙偪傜偺僋儔僗偼乽奐曻乿乽庢摼拞乿偺傒娭抦偟丄乽奐曻嶌嬈拞乿偼偟傜側偄
//	(堦嬋嵞惗懁偱)奐曻偟偨偄仺愝掕仺嶌嬈仺捠抦偲偄偆嶌嬈偐傜丄慜敿傪嶍彍
//	帺暘懁偱奐曻偟偨偄偲偒偼丄偡傋偰廔傢偭偰偐傜偙偪傜偵捠抦偡傞
//	嶌嬈拞偼忬懺娗棟僋儔僗偵愝掕
//	媡偵僼儗乕儉儚乕僋偐傜偺奐曻梫媮偼丄嶌嬈傪偟傠偲AppUi偵揱偊偨傜朰傟傞
//	廔傢偭偨傜丄帺暘偐傜奐曻偟偨偄応崌偲摨條偵捠抦傪屇傫偱廔傢傝
/**
 *	嵞惗偵昁梫側儕僜乕僗傪庢摼偡傞
 *
 *	@param 側偟
 *	@return TBool	EFalse:壒惡/MW僾儗僀儎乕惂屼傪憃曽庢摼嵪/ETrue:庢摼梫媮傪峴偭偨
 */
//	Play偵昁梫側儕僜乕僗丒MW僾儗僀儎乕惂屼/壒惡僷僗
TBool CSmbMusicAPSinglePlayerRscController::RequestRscForPlayL()
	{
	if(EFalse != IsAllocatedAudioPath() && EFalse != IsAllocatedMWPlayerControl() && EFalse != IsAllocatedMusicBG())	//MOD For D_82400007238(BG儕僜乕僗偺忦審敾掕傪捛壛)
		{
		return EFalse;
		}
	
	if(EFalse == IsAllocatedAudioPath())	//壒惡僷僗庢摼妋擣.
		{
		AddAllocateResourceL(ESmbRscMgrRscAudioPathCtrl);
//DEL-S D_82400007238
//		AddAllocateResourceL(ESmbRscMgrRscMusicBG);	//MWtoBG傪摨僞僀儈儞僌.
//DEL-E D_82400007238
		}
		
//ADD-S D_82400007238
	if(EFalse == IsAllocatedMusicBG())	//BG儕僜乕僗.
		{
		AddAllocateResourceL(ESmbRscMgrRscMusicBG);
#ifdef __SMBMUSICAP_DESABLE_SUPERDUKE__
		AddAllocateResourceL(ESmbRscMgrRscRtMultimedia);//MusicBG偲摨僞僀儈儞僌偱庢摼
#endif
		}
//ADD-E D_82400007238

	if(EFalse == IsAllocatedMWPlayerControl())	//MW僾儗僀儎乕惂屼.
		{
		AddAllocateResourceL(ESmbRscMgrRscMusicMW);
		}

	iRscClient->AllocationResourceReqL(iPriorityList, iAllocatedResultRscList);
	return ETrue;
	}


//	MW僾儗僀儎乕惂屼偩偗丒壒惡僷僗偩偗庢摼偡傞偙偲傕壜擻偩偑丄API傪採嫙偟側偄


/**
 *	庢摼偡傞儕僜乕僗傪捛壛
 *
 *	@param TSmbRscMgrRsc aRsc 捛壛偡傞儕僜乕僗
 *	@return void
 */
void CSmbMusicAPSinglePlayerRscController::AddAllocateResourceL(TSmbRscMgrRsc aRsc)
	{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -