mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/src/engine/openmaxalaudioencodercapabiltiesitftests.cpp
changeset 55 e267340986c9
parent 14 80975da52420
--- a/mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/src/engine/openmaxalaudioencodercapabiltiesitftests.cpp	Fri Sep 17 08:33:15 2010 +0300
+++ b/mmmw_plat/openmax_al_api/tsrc/openmaxaltestmodule/src/engine/openmaxalaudioencodercapabiltiesitftests.cpp	Mon Oct 04 00:51:56 2010 +0300
@@ -18,6 +18,7 @@
 // [INCLUDE FILES] - do not remove
 #include <e32svr.h>
 #include <StifParser.h>
+#include <strings.h>
 #include <StifTestInterface.h>
 #include "openmaxaltestmodule.h"
 
@@ -31,7 +32,14 @@
 //const ?type ?constant_var = ?constant;
 
 // MACROS
-//#define ?macro ?macro_def
+#define RETURN_ERR_IF_NOT_EQUAL(item, valFromItem, value) \
+    status = item.GetNextInt(valFromItem); \
+    if (status || (valFromItem != value)) \
+        { \
+        iLog->Log(_L("Value[%d] is not equal to [%d]"), valFromItem, value); \
+        return KErrCompletion; \
+        } \
+    
 
 // LOCAL CONSTANTS AND MACROS
 //const ?type ?constant_var = ?constant;
@@ -113,6 +121,7 @@
     {
     TInt status(KErrNone);
     TInt encId(0);
+    TInt idx(0);
     XAuint32 encoderid(0);
     XAuint32 index(0);
     XAAudioCodecDescriptor desc;
@@ -121,17 +130,81 @@
     status = aItem.GetNextInt(encId);
     if(!status)
         {
-        encoderid = encId;
-        if(m_AEncCapItf)
+        status = aItem.GetNextInt(idx);
+        if(!status)
             {
-            res = (*m_AEncCapItf)->GetAudioEncoderCapabilities(
-                    m_AEncCapItf, encoderid, &index, &desc);
-            status = res;
+            index = idx;
+            encoderid = encId;
+            if(m_AEncCapItf)
+                {
+                res = (*m_AEncCapItf)->GetAudioEncoderCapabilities(
+                        m_AEncCapItf, encoderid, &index, &desc);
+                status = res;
+                if (res == XA_RESULT_SUCCESS)
+                    {
+                    status = validateAudioCodecDescriptorAtIndex(encoderid, desc, aItem);
+                    }
+                }
+            else
+                {
+                status = KErrNotFound;
+                }                
             }
-        else
-            {
-            status = KErrNotFound;
-            }                
+        }
+    return status;
+}
+
+TInt COpenMAXALTestModule::validateAudioCodecDescriptorAtIndex(
+        XAuint32 aAudioCodecId,
+        XAAudioCodecDescriptor& aDesc,
+        CStifItemParser& aItem )
+    {
+    TInt status(KErrNone);
+    TInt intVal(0);
+    TInt loopIndex(0);
+    
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.maxChannels);
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.minBitsPerSample);
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.maxBitsPerSample);
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.minSampleRate);
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.maxSampleRate);
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.isFreqRangeContinuous);
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.numSampleRatesSupported);
+    for(loopIndex = 0; loopIndex < aDesc.numSampleRatesSupported; loopIndex++)
+        {
+        RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.pSampleRatesSupported[loopIndex]);
+        }
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.minBitRate);
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.maxBitRate);
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.isBitrateRangeContinuous);
+    RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.numBitratesSupported);
+    for(loopIndex = 0; loopIndex < aDesc.numBitratesSupported; loopIndex++)
+        {
+        RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.pBitratesSupported[loopIndex]);
+        }
+    switch (aAudioCodecId)
+        {
+        case XA_AUDIOCODEC_PCM:
+            RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.profileSetting);
+            if (!status)
+                {
+                RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.modeSetting);
+                }
+            break;
+        case XA_AUDIOCODEC_AMR:
+            RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.profileSetting);
+            if (!status)
+                {
+                RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.modeSetting);
+                }
+            break;
+        case XA_AUDIOCODEC_AAC:
+            RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.profileSetting);
+            if (!status)
+                {
+                RETURN_ERR_IF_NOT_EQUAL(aItem, intVal, aDesc.modeSetting);
+                }
+            break;
         }
     return status;
     }