Index: mdfauddevice.h
===================================================================
RCS file: /cvsroot/datatype/mdf/audio/dsp/mdfauddevice.h,v
retrieving revision 1.5
diff -u -w -r1.5 mdfauddevice.h
--- mdfauddevice.h	3 Apr 2006 19:09:18 -0000	1.5
+++ mdfauddevice.h	6 Apr 2006 19:34:25 -0000
@@ -131,7 +131,7 @@
     //
     // CHXMDFAudioDeviceObserver methods
     //
-    virtual void OnDeviceTaken();
+    virtual void OnDeviceError(HX_RESULT hxr);
     
     //
     // Helpers
Index: mdfauddevice.cpp
===================================================================
RCS file: /cvsroot/datatype/mdf/audio/dsp/mdfauddevice.cpp,v
retrieving revision 1.8
diff -u -w -r1.8 mdfauddevice.cpp
--- mdfauddevice.cpp	3 Apr 2006 19:09:18 -0000	1.8
+++ mdfauddevice.cpp	6 Apr 2006 19:34:44 -0000
@@ -50,7 +50,7 @@
 #include "hxassert.h"
 #include "mdfauddevice.h"
 #include "mdfdebug.h"
-#include "hxprefutil.h"  //ReadPrefUINT32
+#include "hxprefutil.h"
 
 
 
@@ -399,9 +399,23 @@
     //retrieve Priority Settings from MMF stored in prefs to use in devSound
     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;
+        }
+        HXLOGL2(HXLOG_MDFA, "mdfdev:open .. OMA DRM v%u from prefs", drmVersion);
+    }
+#endif
+
     //Open and Initialize audio device
     HX_ASSERT(m_pDevSound);
-    hxr = m_pDevSound->Open(m_pAudioFormat, m_pPrioritySettings);
+    hxr = m_pDevSound->Open(m_pAudioFormat, m_pPrioritySettings, bSecureAudio);
 
     //Initialize DevSound
     if (hxr==HXR_OK)
@@ -748,21 +762,21 @@
 }
 
 //
-// CHXMDFDevSoundObserver::OnDevSoundChange
+// CHXMDFDevSoundObserver::OnDeviceError
 //
-void CHXMDFAudioDevice::OnDeviceTaken()
+void CHXMDFAudioDevice::OnDeviceError(HX_RESULT hxr)
 {
-    HXLOGL4(HXLOG_MDFA, "mdfdeV:OnDevTaken <");
+    HXLOGL4(HXLOG_MDFA, "mdfdeV:OnDeviceError <");
 
     HX_ASSERT(m_pErrorMessage != NULL);    
     
     // Report error to Error Messages
     if(m_pErrorMessage)
     {
-        m_pErrorMessage->Report(HXLOG_INFO, HXR_AUDIODEVICETAKEN, 0, NULL, NULL);
+        m_pErrorMessage->Report(HXLOG_INFO, hxr, 0, NULL, NULL);
     }
     
-    HXLOGL4(HXLOG_MDFA, "mdfdeV:OnDevTaken >");
+    HXLOGL4(HXLOG_MDFA, "mdfdeV:OnDeviceError >");
 }
 
 //
Index: mdfdevsound.h
===================================================================
RCS file: /cvsroot/datatype/mdf/audio/dsp/mdfdevsound.h,v
retrieving revision 1.1.2.5
diff -u -w -r1.1.2.5 mdfdevsound.h
--- mdfdevsound.h	7 Mar 2006 17:03:19 -0000	1.1.2.5
+++ mdfdevsound.h	6 Apr 2006 19:35:00 -0000
@@ -110,7 +110,8 @@
         static HXBOOL IsDSPCodecAvailable(const char* fourcc);
 		
 		// for MDF Device
-        HX_RESULT Open(HXMDFAudioFormat* pFormat, TMMFPrioritySettings* pPrioritySettings);
+        HX_RESULT Open(HXMDFAudioFormat* pFormat, TMMFPrioritySettings* pPrioritySettings,
+                       HXBOOL bSecureAudio);
         HX_RESULT Pause(void);
         HX_RESULT Stop(void);
         HX_RESULT Reset(void);
@@ -167,6 +168,7 @@
         UINT16              m_uDevVolumeMin;
         UINT16              m_uDevVolumeMax;
         TMMFPrioritySettings    m_prioritySettings;
+        HXBOOL              m_bSecureAudio;
         
         HXMDFAudioFormat*   m_pAudioFormat;		//***audio format that governs devsound.
         DevSoundMode        m_devMode;          //by frame or by buffer.        
@@ -213,7 +215,7 @@
 class CHXMDFAudioDeviceObserver
 {
     public:
-        virtual void OnDeviceTaken() = 0;
+        virtual void OnDeviceError(HX_RESULT hxr) = 0;
 };
 
 #endif
Index: mdfdevsound.cpp
===================================================================
RCS file: /cvsroot/datatype/mdf/audio/dsp/mdfdevsound.cpp,v
retrieving revision 1.8
diff -u -w -r1.8 mdfdevsound.cpp
--- mdfdevsound.cpp	6 Apr 2006 14:43:38 -0000	1.8
+++ mdfdevsound.cpp	6 Apr 2006 19:35:21 -0000
@@ -58,6 +58,9 @@
 #include <oem\Ra8CustomInterface.h>
 #include <oem\AacDecoderConfig.h>
 #include <oem\AudioPreference.h>
+#if defined(HELIX_FEATURE_DRM_SECURE_OUTPUT)
+  #include <oem\AudioOutput.h>
+#endif
 #include "HwDeviceImplementationUIDs.hrh"
 
 #include "mdfdevsound.h"
@@ -127,6 +130,7 @@
             m_ulFramesPlayedLastRound(0),
             m_uDevVolumeMin(0),
             m_prioritySettings(),
+            m_bSecureAudio(FALSE),
             m_ulTotalPCMBytesPlayed(0),
             m_ulSamplesPlayedOffset(0),
             m_ulLastValidSamplesPlayed(0),
@@ -414,7 +418,7 @@
 //
 // Open  - call InitializeL() here.
 //
-HX_RESULT CMDFDevSound::Open(HXMDFAudioFormat *pFormat, TMMFPrioritySettings *pPrioritySettings)
+HX_RESULT CMDFDevSound::Open(HXMDFAudioFormat *pFormat, TMMFPrioritySettings *pPrioritySettings, HXBOOL bSecureAudio)
 {
     HXLOGL4(HXLOG_MDFA, "---devsnd:Open < %s\n", pFormat->m_fourCC);
     
@@ -426,6 +430,7 @@
         m_prioritySettings.iPriority = pPrioritySettings->iPriority;
         m_prioritySettings.iPref = pPrioritySettings->iPref;
     }
+    m_bSecureAudio = bSecureAudio;
     
     // --- InitializeL ---
 #if defined(__WINS__)
@@ -493,7 +498,7 @@
 
     hxr = m_pHWConfigurator->SetHwDevCIs();    
     
-    PRINTCURRENTSTATE("---devsnd:LoadCI >");
+    HXLOGL4(HXLOG_MDFA, "---devsnd:LoadCI > %d \n", hxr);
     return hxr;
 }
 
@@ -524,7 +529,7 @@
     }
     //m_prioritySettings.iState    = EMMFStatePlaying;
     m_pDevSound->SetPrioritySettings(m_prioritySettings);
-    HXLOGL2(HXLOG_MDFA, "---devsnd:ConfigDev .. setpriority (%u,%u)\n",
+    HXLOGL2(HXLOG_MDFA, "---devsnd:ConfigDev .. setpriority (%u,%u)",
             m_prioritySettings.iPriority, m_prioritySettings.iPref);
     
     // --- SetConfigL ---
@@ -538,6 +543,25 @@
     }
     HXLOGL4(HXLOG_MDFA, "---devsnd:ConfigDev .. setconfigl\n");
     
+#if defined(HELIX_FEATURE_DRM_SECURE_OUTPUT)
+    // --- SetSecureOutputL ---
+    if ((hxr == HXR_OK) && (m_bSecureAudio))
+    {
+        CAudioOutput* pAudioOutput = NULL;
+        TRAP(err, pAudioOutput = CAudioOutput::NewL(*m_pDevSound));
+        if (err == KErrNone)
+        {
+            TRAP(err, pAudioOutput->SetSecureOutputL(ETrue));
+            HXLOGL4(HXLOG_MDFA, "---devsnd:ConfigDev .. SetSecureOutputL err=%d", err);
+        }
+        if (err != KErrNone)
+        {
+            hxr = HXR_SET_SECURE_OUT_FAIL;
+        }
+        HX_DELETE(pAudioOutput);
+    }
+#endif
+
     HXLOGL4(HXLOG_MDFA, "---devsnd:ConfigDev >\n");
     return hxr;
 }
@@ -689,6 +713,10 @@
     if (aError!=KErrNone) 
     {
         m_devStatus = DevIdle;
+        if (m_pDevObserver)
+        {
+            m_pDevObserver->OnDeviceError(HXR_FAIL);
+        }
         return;
     }
 
@@ -697,8 +725,11 @@
     m_devStatus = DevInitialized;
 
     // -- Configure devsound --
-    ConfigDevSound();
-    
+    HX_RESULT hxr = ConfigDevSound();
+    if ((hxr != HXR_OK) && (m_pDevObserver))
+    {
+        m_pDevObserver->OnDeviceError(hxr);
+    }
 
     // -- Start playback loop --
     StartPlayback();
@@ -840,7 +871,7 @@
         
             if (m_pDevObserver) 
             {
-                m_pDevObserver->OnDeviceTaken();
+                m_pDevObserver->OnDeviceError(HXR_AUDIODEVICETAKEN);
             }
             m_devStatus = DevTaken;
         }
Index: Umakefil
===================================================================
RCS file: /cvsroot/datatype/mdf/audio/dsp/Umakefil,v
retrieving revision 1.2.2.5
diff -u -w -r1.2.2.5 Umakefil
--- Umakefil	7 Mar 2006 17:03:52 -0000	1.2.2.5
+++ Umakefil	6 Apr 2006 19:35:37 -0000
@@ -102,6 +102,9 @@
                             
 project.AddSystemLibraries("mmfdevsound.lib", "ecom.lib", "ErrorConcealmentIntfc.lib","AacDecoderConfig.lib")                           
 
+if project.IsDefined('HELIX_FEATURE_DRM_SECURE_OUTPUT'):
+    project.AddSystemLibraries("AudioOutputRouting.lib")
+
 project.ExportFunction("RACreateDecoderInstance",
                        "const CLSID &clsid, IUnknown** ppUnknown")
 
