Index: audsymbian.cpp
===================================================================
RCS file: /cvsroot/audio/device/platform/symbian/audsymbian.cpp,v
retrieving revision 1.35.2.2
diff -u -w -r1.35.2.2 audsymbian.cpp
--- audsymbian.cpp	7 Mar 2006 20:21:03 -0000	1.35.2.2
+++ audsymbian.cpp	6 Apr 2006 19:38:40 -0000
@@ -456,10 +456,26 @@
     // retrieve MMF Priority Settings stored in prefs to init device
     GetPrioritySettings();
 
+    // get DRM version from prefs for devsound to set secure output
+    HXBOOL bSecureAudio(FALSE);
+#if defined(HELIX_FEATURE_DRM_SECURE_OUTPUT)
+    UINT8 drmVersion(0);
+    if (SUCCEEDED(ReadPrefUINT8(m_pContext, "OmaDrmVersion", drmVersion)))
+    {
+        if (drmVersion == 2)
+        {
+            bSecureAudio = TRUE;
+        }
+        HXLOGL4(HXLOG_ADEV, "CHXAudioDevice::InitDevice() OMA DRM v%u", drmVersion);
+    }
+#endif
+
     // attempt to init device with given audio format
     if (m_pAudioStream &&  
         (KErrNone == m_pAudioStream->Init(pFormat->ulSamplesPerSec,
-                                          pFormat->uChannels, m_pPrioritySettings)))
+                                          pFormat->uChannels,
+                                          m_pPrioritySettings,
+                                          bSecureAudio)))
     {
         // grab device volume info (first opportunity)
         m_uMinDevVolume = m_pAudioStream->GetMinVolume();
Index: audiosvr/audio_svr.h
===================================================================
RCS file: /cvsroot/audio/device/platform/symbian/audiosvr/audio_svr.h,v
retrieving revision 1.4.2.1
diff -u -w -r1.4.2.1 audio_svr.h
--- audiosvr/audio_svr.h	7 Mar 2006 17:01:21 -0000	1.4.2.1
+++ audiosvr/audio_svr.h	6 Apr 2006 19:40:20 -0000
@@ -66,6 +66,15 @@
 #include "hxcom.h"
 #include "hxausvc.h"
 
+// struct for arguments to init audio device
+typedef struct _AudioDeviceInitArgs
+{
+    UINT32                 ulSampleRate;
+    UINT16                 uChannels;
+    TMMFPrioritySettings*  pPrioritySettings;
+    HXBOOL                 bSecureAudio;
+} AudioDeviceInitArgs;
+
 /*
  * class HXSymbianAudioServer
  *
@@ -125,7 +134,8 @@
 public:
     HXSymbianAudioClient();
 				// initialize audio device
-    TInt Init(int channels, int sampleRate, TMMFPrioritySettings* pPrioritySettings);
+    TInt Init(int sampleRate, int channels,
+              TMMFPrioritySettings* pPrioritySettings, HXBOOL bSecureAudio);
 
     TInt Write(const IHXBuffer* pAudioBuf);
 
Index: audiosvr/audio_svr.cpp
===================================================================
RCS file: /cvsroot/audio/device/platform/symbian/audiosvr/audio_svr.cpp,v
retrieving revision 1.5.2.1
diff -u -w -r1.5.2.1 audio_svr.cpp
--- audiosvr/audio_svr.cpp	7 Mar 2006 17:01:35 -0000	1.5.2.1
+++ audiosvr/audio_svr.cpp	6 Apr 2006 19:40:44 -0000
@@ -214,10 +214,18 @@
 : m_stopped(true)
 {}
 
-TInt HXSymbianAudioClient::Init(int sampleRate, int channels, TMMFPrioritySettings* pPrioritySettings)
+TInt HXSymbianAudioClient::Init(int sampleRate, int channels,
+               TMMFPrioritySettings* pPrioritySettings, HXBOOL bSecureAudio)
 {
     TInt iRetval = KErrNone;
-    SENDRECEIVE_3_ARG(HXSymbianAudioServer::EAS_Init, sampleRate, channels, pPrioritySettings, iRetval);
+    AudioDeviceInitArgs stInitArgs;
+    
+    stInitArgs.ulSampleRate      = sampleRate;
+    stInitArgs.uChannels         = channels;
+    stInitArgs.pPrioritySettings = pPrioritySettings;
+    stInitArgs.bSecureAudio      = bSecureAudio;
+    
+    SENDRECEIVE_1_ARG(HXSymbianAudioServer::EAS_Init, &stInitArgs, iRetval);
     return iRetval;
 }
 
Index: audiosvr/mmf/audio_session-mmf.h
===================================================================
RCS file: /cvsroot/audio/device/platform/symbian/audiosvr/mmf/audio_session-mmf.h,v
retrieving revision 1.9.2.2
diff -u -w -r1.9.2.2 audio_session-mmf.h
--- audiosvr/mmf/audio_session-mmf.h	7 Mar 2006 17:01:56 -0000	1.9.2.2
+++ audiosvr/mmf/audio_session-mmf.h	6 Apr 2006 19:41:06 -0000
@@ -171,6 +171,7 @@
     State                   m_state;
     HXBOOL                  m_deviceResetsOnPause;
     TMMFPrioritySettings    m_prioritySettings;
+    HXBOOL                  m_bSecureAudio;
 
     // write related
     CHXSimpleList      m_bufferList;
Index: audiosvr/mmf/audio_session-mmf.cpp
===================================================================
RCS file: /cvsroot/audio/device/platform/symbian/audiosvr/mmf/audio_session-mmf.cpp,v
retrieving revision 1.14.2.2
diff -u -w -r1.14.2.2 audio_session-mmf.cpp
--- audiosvr/mmf/audio_session-mmf.cpp	7 Mar 2006 17:02:09 -0000	1.14.2.2
+++ audiosvr/mmf/audio_session-mmf.cpp	6 Apr 2006 19:41:26 -0000
@@ -61,6 +61,9 @@
 #include "debug.h"
 #include "hxtlogutil.h"
 #include <e32std.h>
+#if defined(HELIX_FEATURE_DRM_SECURE_OUTPUT)
+  #include <oem\AudioOutput.h>
+#endif
 
 
 inline
@@ -214,6 +217,7 @@
     m_state(CLOSED),
     m_deviceResetsOnPause(FALSE),
     m_prioritySettings(),
+    m_bSecureAudio(FALSE),
     m_pPendingFillBuffer(NULL),
     m_cbFrontBufferWritten(0),
     m_samplesWritten(0),
@@ -366,13 +370,22 @@
 
     // we always do 16 bit samples
     const TUint bitsPerSample   = 16;
-    m_sampleRate                = Message().Int0();
-    TUint channelCount          = Message().Int1();
-    if (Message().Ptr2() != NULL)
+    TUint channelCount          = 1;
+    AudioDeviceInitArgs *pInitArgs = NULL;
+    
+    if (Message().Ptr0() != NULL)
     {
-        m_prioritySettings.iPriority = ((TMMFPrioritySettings*) Message().Ptr2())->iPriority;
-        m_prioritySettings.iPref     = ((TMMFPrioritySettings*) Message().Ptr2())->iPref;
+        pInitArgs      = (AudioDeviceInitArgs*) Message().Ptr0();
+        m_sampleRate   = pInitArgs->ulSampleRate;
+        channelCount   = pInitArgs->uChannels;
+        if (pInitArgs->pPrioritySettings != NULL)
+        {
+            m_prioritySettings.iPriority = pInitArgs->pPrioritySettings->iPriority;
+            m_prioritySettings.iPref     = pInitArgs->pPrioritySettings->iPref;
+        }
+        m_bSecureAudio = pInitArgs->bSecureAudio;
     }
+
     m_cbSample                  = channelCount * (bitsPerSample / 8);
 
     // translate the audio props to flags needed by interface
@@ -890,10 +903,29 @@
 void HXSymbianAudioSession::InitializeComplete(TInt aError)
 {
     HXLOGL3(HXLOG_ADEV, "HXSymbianAudioSession::InitializeComplete(): err = %s", StringifyKErr(aError));
-    TRAPD(err, (m_pStream->CMMFDevSound::SetConfigL(m_Settings)));
-    Trans((KErrNone == err) ? STOPPED : CLOSED);
-    HXLOGL3(HXLOG_ADEV, "HXSymbianAudioSession::InitializeComplete() SetConfgL(): err = %s", StringifyKErr(err));
-    m_InitMessage.Complete(err);
+    if(aError == KErrNone)
+    {
+        TRAP(aError, (m_pStream->CMMFDevSound::SetConfigL(m_Settings)));
+        Trans((KErrNone == aError) ? STOPPED : CLOSED);
+        HXLOGL3(HXLOG_ADEV, "HXSymbianAudioSession::InitializeComplete() SetConfgL(): err = %s", StringifyKErr(aError));
+
+#if defined(HELIX_FEATURE_DRM_SECURE_OUTPUT)
+        // Checking if audio output needs to be secured
+        if ((aError == KErrNone) && (m_bSecureAudio))
+        {
+            CAudioOutput* pAudioOutput = NULL;
+            TRAP(aError, pAudioOutput = CAudioOutput::NewL(*m_pStream));
+            if(aError == KErrNone)
+            {
+                TRAP(aError , pAudioOutput->SetSecureOutputL(ETrue));
+                HXLOGL3(HXLOG_ADEV, "HXSymbianAudioSession::InitializeComplete() SetSecureOutputL: err = %s", StringifyKErr(aError));
+            }
+            HX_DELETE(pAudioOutput);
+        }
+#endif
+
+    } // End of if(aError == KErrNone)
+    m_InitMessage.Complete(aError);
 }
 
 // MDevSoundObserver  
