"Nokia submits this code under the terms of a commercial contribution agreement
with RealNetworks, and I am authorized to contribute this code under said
agreement."
Modified by: [email protected]
Reviewed by:
Date: 08/11/2009
Project: SymbianMmf_wm
ErrorId: N/A
Synopsis: Update 2 for SUB 417-21335 - use CConfigurationComponentsFactory to
create CRestrictedAudioOutput
Overview: The preferred method to create CRestrictedAudioOutput is to via
CConfigurationComponentsFactory interface instead of using NewL() directly.
Solution: Used CConfigurationComponentsFactory to create
CRestrictedAudioOutput; consolidated code that handles CRestrictedAudioOutput
into CHXAudioOutputConfigUtil::ConfigureRestrictedOutput() function;
Also due to missing adaptation on WINSCW emulator,
CHXAudioOutputConfigUtil::ConfigureOutputRestrictions() will now return HXR_OK
for plain media files on WINSCW.
Files Added:
None.
Files Modified:
/audio/device/platform/symbian/common/CHXAudioOutputConfigUtil.cpp
/audio/device/pub/platform/symbian/CHXAudioOutputConfigUtil.h
/client/core/clntcoredll_symbian.pcf
/datatype/mdf/audio/dsp/Umakefil
Image Size and Heap Use impact: minor
Module Release testing (STIF) : MRT subset passed on
helix-client-s60-50-mmf-mdf-dsp.
Test case(s) Added : No.
Memory leak check performed : Yes. No new leaks introduced
Platforms and Profiles Build Verified: helix-client-s60-50-mmf-mdf-dsp,
helix-client-s60-50-mmf-mdf-arm
Platforms and Profiles Functionality verified: armv5, winscw
Branch: 210CayS, HEAD
Index: audio/device/platform/symbian/common/CHXAudioOutputConfigUtil.cpp
===================================================================
RCS file:
/cvsroot/audio/device/platform/symbian/common/CHXAudioOutputConfigUtil.cpp,v
retrieving revision 1.1.2.1
diff -u -w -r1.1.2.1 CHXAudioOutputConfigUtil.cpp
--- audio/device/platform/symbian/common/CHXAudioOutputConfigUtil.cpp 28 Jul
2009 20:58:38 -0000 1.1.2.1
+++ audio/device/platform/symbian/common/CHXAudioOutputConfigUtil.cpp 11 Aug
2009 18:37:32 -0000
@@ -175,14 +175,18 @@
}
-TInt CHXAudioOutputConfigUtil::SetAllowedOutputs(const TUint
aDrmAllowedOutputs, CMMFDevSound& aDevsound)
+TInt CHXAudioOutputConfigUtil::ConfigureRestrictedOutput(const TUint
aDrmAllowedOutputs, CMMFDevSound& aDevsound)
{
TInt hxr = HXR_OK;
- HXLOGL2(HXLOG_ADEV, "CHXAudioOutputConfigUtil::SetAllowedOutputs():
aDrmAllowedOutputs = 0x%08x", aDrmAllowedOutputs);
- // try CRestrictedAudioOutput first
+ HXLOGL2(HXLOG_ADEV,
"CHXAudioOutputConfigUtil::ConfigureRestrictedOutput(): aDrmAllowedOutputs =
0x%08x", aDrmAllowedOutputs);
+ CConfigurationComponentsFactory* pFactory = NULL;
CRestrictedAudioOutput* pRestrictedAudioOutput = NULL;
- TRAPD(Err, pRestrictedAudioOutput = (CRestrictedAudioOutput*)
CRestrictedAudioOutputProxy::NewL(aDevsound));
+
+ TRAPD(Err, CConfigurationComponentsFactory::CreateFactoryL(pFactory));
+ if(Err == KErrNone)
+ {
+ Err = pFactory->CreateRestrictedAudioOutput(aDevsound,
pRestrictedAudioOutput);
if (Err == KErrNone)
{
//map drm enums to valid CRestrictedAudioOutput enums
@@ -196,25 +200,57 @@
{
hxr = KErrNotSupported;
HXLOGL2(HXLOG_ADEV,
- "CHXAudioOutputConfigUtil::SetAllowedOutputs(): can't add
output pref %d",m_AllowedOutputPrefsList[index]);
- HX_DELETE(pRestrictedAudioOutput);
- return hxr; // or should we keep going?
+ "CHXAudioOutputConfigUtil::ConfigureRestrictedOutput:
can't add output pref %d", m_AllowedOutputPrefsList[index]);
+ // bail out of the loop
+ break;
}
HXLOGL2(HXLOG_ADEV,
- "CHXAudioOutputConfigUtil::SetAllowedOutputs(): added
output pref %d",m_AllowedOutputPrefsList[index]);
+ "CHXAudioOutputConfigUtil::ConfigureRestrictedOutput: added
output pref %d", m_AllowedOutputPrefsList[index]);
}
- // commit
+ // commit output prefs...
+ if (hxr == HXR_OK)
+ {
Err = pRestrictedAudioOutput->Commit();
if ( Err != KErrNone)
{
hxr = KErrNotSupported;
- HXLOGL2(HXLOG_ADEV,
"CHXAudioOutputConfigUtil::SetAllowedOutputs(): can't commit output prefs");
+ HXLOGL2(HXLOG_ADEV,
"CHXAudioOutputConfigUtil::ConfigureRestrictedOutput: can't commit output
prefs");
+ }
+ }
+ HX_DELETE(pRestrictedAudioOutput);
+ }
+ else
+ {
+ // we couldn't create CRestrictedAudioOutput
+ hxr = KErrNotSupported;
+ HXLOGL2(HXLOG_ADEV,
"CHXAudioOutputConfigUtil::ConfigureRestrictedOutput(): failed to create
CRestrictedAudioOutput");
}
+ HX_DELETE(pFactory);
}
else
{
- // there was some problem instantiating CRestrictedAudioOutput,
+ // we couldn't create factory
+ hxr = KErrNotSupported;
+ HXLOGL2(HXLOG_ADEV,
"CHXAudioOutputConfigUtil::ConfigureRestrictedOutput(): failed to create
factory");
+ }
+
+ HXLOGL2(HXLOG_ADEV,
"CHXAudioOutputConfigUtil::ConfigureRestrictedOutput(): Ret Err %d hxr %d",
Err, hxr);
+ return hxr;
+}
+
+
+TInt CHXAudioOutputConfigUtil::SetAllowedOutputs(const TUint
aDrmAllowedOutputs, CMMFDevSound& aDevsound)
+{
+ TInt hxr = HXR_OK;
+
+ HXLOGL2(HXLOG_ADEV, "CHXAudioOutputConfigUtil::SetAllowedOutputs():
aDrmAllowedOutputs = 0x%08x", aDrmAllowedOutputs);
+ // try CRestrictedAudioOutput first
+ hxr = ConfigureRestrictedOutput(aDrmAllowedOutputs, aDevsound);
+
+ if(hxr == KErrNotSupported)
+ {
+ // there was some problem with CRestrictedAudioOutput,
// fallback to using CAudioOutput
HXBOOL bSecureAudio = FALSE;
if (aDrmAllowedOutputs == EDrmAllowAll)
@@ -229,8 +265,7 @@
hxr = SetSecureOutput(bSecureAudio,aDevsound);
}
- HX_DELETE(pRestrictedAudioOutput);
- HXLOGL2(HXLOG_ADEV, "CHXAudioOutputConfigUtil::SetAllowedOutputs(): Ret
Err %d hxr %d", Err, hxr);
+ HXLOGL2(HXLOG_ADEV, "CHXAudioOutputConfigUtil::SetAllowedOutputs(): Ret
hxr %d", hxr);
return hxr;
}
@@ -240,18 +275,25 @@
TInt CHXAudioOutputConfigUtil::ConfigureOutputRestrictions(const TUint
allowedOutputsMask, CMMFDevSound& aDevsound)
{
TInt hxr = HXR_OK;
+ HXBOOL bSecureAudio = FALSE;
+
#if defined(HELIX_FEATURE_SYMBIAN_ADVANCED_SECURE_OUTPUT)
hxr = SetAllowedOutputs(allowedOutputsMask, aDevsound);
+ if (allowedOutputsMask != EDrmAllowAll)
+ {
+ bSecureAudio = TRUE;
+ }
#else
// we're in True/False land here...
- HXBOOL bSecureAudio = allowedOutputsMask & 0x1;
-
+ bSecureAudio = allowedOutputsMask & 0x1;
hxr = SetSecureOutput(bSecureAudio, aDevsound);
-
#endif
#if defined(__WINSCW__)
+ if (bSecureAudio == FALSE)
+ {
hxr = HXR_OK;
+ }
#endif
HXLOGL2(HXLOG_ADEV,
"CHXAudioOutputConfigUtil::ConfigureOutputRestrictions(): hxr %d", hxr);
Index: audio/device/pub/platform/symbian/CHXAudioOutputConfigUtil.h
===================================================================
RCS file:
/cvsroot/audio/device/pub/platform/symbian/CHXAudioOutputConfigUtil.h,v
retrieving revision 1.1.2.1
diff -u -w -r1.1.2.1 CHXAudioOutputConfigUtil.h
--- audio/device/pub/platform/symbian/CHXAudioOutputConfigUtil.h 4 Aug
2009 14:28:30 -0000 1.1.2.1
+++ audio/device/pub/platform/symbian/CHXAudioOutputConfigUtil.h 11 Aug
2009 18:37:32 -0000
@@ -67,7 +67,8 @@
#include <e32cmn.h> // RArray
#include <drmagents.h>
using namespace DRM;
-#include <RestrictedAudioOutputProxy.h>
+#include <RestrictedAudioOutput.h>
+#include <ConfigurationComponentsFactory.h>
#endif
@@ -78,16 +79,15 @@
virtual ~CHXAudioOutputConfigUtil();
TInt SetSecureOutput(HXBOOL bSecureAudio, CMMFDevSound& aDevsound);
-#if defined(HELIX_FEATURE_SYMBIAN_ADVANCED_SECURE_OUTPUT)
- TInt SetAllowedOutputs(const TUint allowedOutputsMask, CMMFDevSound&
aDevsound);
- void GetAllowedOutputPrefs(const TUint aDrmAllowedOutputs);
-#endif
TInt ConfigureOutputRestrictions(const TUint allowedOutputsMask,
CMMFDevSound& aDevsound);
protected:
#if defined(HELIX_FEATURE_SYMBIAN_ADVANCED_SECURE_OUTPUT)
+ void GetAllowedOutputPrefs(const TUint aDrmAllowedOutputs);
+ TInt ConfigureRestrictedOutput(const TUint allowedOutputsMask,
CMMFDevSound& aDevsound);
+ TInt SetAllowedOutputs(const TUint allowedOutputsMask, CMMFDevSound&
aDevsound);
+
RArray<CRestrictedAudioOutput::TAllowedOutputPreference>
m_AllowedOutputPrefsList;
#endif
-
};
Index: client/core/clntcoredll_symbian.pcf
===================================================================
RCS file: /cvsroot/client/core/clntcoredll_symbian.pcf,v
retrieving revision 1.11.2.3
diff -u -w -r1.11.2.3 clntcoredll_symbian.pcf
--- client/core/clntcoredll_symbian.pcf 23 Jul 2009 14:55:09 -0000 1.11.2.3
+++ client/core/clntcoredll_symbian.pcf 11 Aug 2009 18:37:37 -0000
@@ -63,8 +63,8 @@
project.AddSystemLibraries("AudioOutputRouting.lib")
if project.IsDefined('HELIX_FEATURE_SYMBIAN_ADVANCED_SECURE_OUTPUT'):
+ project.AddSystemLibraries("ConfigurationComponentsFactory.lib")
project.AddSystemLibraries("RestrictedAudioOutput.lib")
- project.AddSystemLibraries("RestrictedAudioOutputProxy.lib")
if (not project.IsDefined('_SYMBIAN_61_')):
project.AddSystemLibraries('connmon.lib')
Index: datatype/mdf/audio/dsp/Umakefil
===================================================================
RCS file: /cvsroot/datatype/mdf/audio/dsp/Umakefil,v
retrieving revision 1.2.2.13
diff -u -w -r1.2.2.13 Umakefil
--- datatype/mdf/audio/dsp/Umakefil 23 Jul 2009 15:01:50 -0000 1.2.2.13
+++ datatype/mdf/audio/dsp/Umakefil 11 Aug 2009 18:38:12 -0000
@@ -115,8 +115,8 @@
project.AddSystemLibraries("AudioOutputRouting.lib")
if project.IsDefined('HELIX_FEATURE_SYMBIAN_ADVANCED_SECURE_OUTPUT'):
+ project.AddSystemLibraries("ConfigurationComponentsFactory.lib")
project.AddSystemLibraries("RestrictedAudioOutput.lib")
- project.AddSystemLibraries("RestrictedAudioOutputProxy.lib")
project.ExportFunction("RACreateDecoderInstance",
"const CLSID &clsid, IUnknown** ppUnknown")
_______________________________________________
Audio-dev mailing list
[email protected]
http://lists.helixcommunity.org/mailman/listinfo/audio-dev