diff --git a/dl/dl.gyp b/dl/dl.gyp
index d43f546..a4644f1 100644
--- a/dl/dl.gyp
+++ b/dl/dl.gyp
@@ -11,13 +11,42 @@
     # Override this value to build with small float FFT tables
     'big_float_fft%' : 1,
   },
+  'target_defaults': {
+    'include_dirs': [
+      '../',
+    ],
+    'conditions' : [
+      ['target_arch=="arm"', {
+        'conditions' : [
+          ['arm_neon==1', {
+            # Enable build-time NEON selection.
+            'defines': ['DL_ARM_NEON',],
+            'direct_dependent_settings': {
+              'defines': ['DL_ARM_NEON',],
+            },
+          }],
+          ['arm_neon==0 and OS=="android"', {
+            # Enable run-time NEON selection.
+            'defines': ['DL_ARM_NEON_OPTIONAL',],
+            'direct_dependent_settings': {
+              'defines': ['DL_ARM_NEON_OPTIONAL',],
+            },
+          }],
+        ],
+      }],
+      ['target_arch=="arm64"', {
+        # Enable build-time NEON selection.
+        'defines': ['DL_ARM_NEON',],
+        'direct_dependent_settings': {
+          'defines': ['DL_ARM_NEON',],
+        },
+      }],
+    ],
+  },
   'targets': [
     {
       'target_name': 'openmax_dl',
       'type': 'static_library',
-      'include_dirs': [
-        '../',
-      ],
       'direct_dependent_settings': {
         'include_dirs': [
           '../',
@@ -29,7 +58,7 @@
         'sp/src/armSP_FFT_F32TwiddleTable.c',
       ],
       'conditions' : [
-        ['big_float_fft == 1', {
+        ['big_float_fft==1', {
           'defines': [
             'BIG_FFT_TABLE',
           ],
@@ -50,76 +79,80 @@
           ],
         }],
         ['target_arch=="arm"', {
-          'cflags!': [
-            '-mfpu=vfpv3-d16',
-          ],
-          'cflags': [
-            # We enable Neon instructions even with arm_neon==0, to support
-            # runtime detection.
-            '-mfpu=neon',
-          ],
-          'dependencies': [
-            'openmax_dl_armv7',
-          ],
-          'sources': [
-            # Common files that are used by both the NEON and non-NEON code.
-            'api/armCOMM_s.h',
-            'sp/src/arm/omxSP_FFTGetBufSize_C_SC16.c',
-            'sp/src/arm/omxSP_FFTGetBufSize_R_S16.c',
-            'sp/src/arm/omxSP_FFTGetBufSize_R_S16S32.c',
-            'sp/src/arm/omxSP_FFTInit_C_SC16.c',
-            'sp/src/arm/omxSP_FFTInit_C_SC32.c',
-            'sp/src/arm/omxSP_FFTInit_R_S16.c',
-            'sp/src/arm/omxSP_FFTInit_R_S16S32.c',
-            'sp/src/arm/omxSP_FFTInit_R_S32.c',
+          'conditions': [
+            ['arm_neon==0 or OS=="android"', {
+              'dependencies': [
+                'openmax_dl_armv7',
+              ],
+            }],
+            ['arm_neon==1 or OS=="android"', {
+              'cflags!': [
+                '-mfpu=vfpv3-d16',
+              ],
+              'cflags': [
+                '-mfpu=neon',
+              ],
+              'sources': [
+                # Common files that are used by both the NEON and non-NEON code.
+                'api/armCOMM_s.h',
+                'sp/src/arm/omxSP_FFTGetBufSize_C_SC16.c',
+                'sp/src/arm/omxSP_FFTGetBufSize_R_S16.c',
+                'sp/src/arm/omxSP_FFTGetBufSize_R_S16S32.c',
+                'sp/src/arm/omxSP_FFTInit_C_SC16.c',
+                'sp/src/arm/omxSP_FFTInit_C_SC32.c',
+                'sp/src/arm/omxSP_FFTInit_R_S16.c',
+                'sp/src/arm/omxSP_FFTInit_R_S16S32.c',
+                'sp/src/arm/omxSP_FFTInit_R_S32.c',
 
-            # Complex 32-bit fixed-point FFT.
-            'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_fs_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_ls_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_fs_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix4_fs_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix4_ls_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix4_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix8_fs_unsafe_s.S',
-            'sp/src/arm/neon/omxSP_FFTInv_CToC_SC32_Sfs_s.S',
-            'sp/src/arm/neon/omxSP_FFTFwd_CToC_SC32_Sfs_s.S',
-            # Real 32-bit fixed-point FFT
-            'sp/src/arm/neon/armSP_FFTInv_CCSToR_S32_preTwiddleRadix2_unsafe_s.S',
-            'sp/src/arm/neon/omxSP_FFTFwd_RToCCS_S32_Sfs_s.S',
-            'sp/src/arm/neon/omxSP_FFTInv_CCSToR_S32_Sfs_s.S',
-            # Complex 16-bit fixed-point FFT
-            'sp/src/arm/neon/armSP_FFTInv_CCSToR_S16_preTwiddleRadix2_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_fs_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_ls_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_ps_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix4_fs_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix4_ls_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix4_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix8_fs_unsafe_s.S',
-            'sp/src/arm/neon/omxSP_FFTFwd_CToC_SC16_Sfs_s.S',
-            'sp/src/arm/neon/omxSP_FFTInv_CToC_SC16_Sfs_s.S',
-            # Real 16-bit fixed-point FFT
-            'sp/src/arm/neon/omxSP_FFTFwd_RToCCS_S16_Sfs_s.S',
-            'sp/src/arm/neon/omxSP_FFTInv_CCSToR_S16_Sfs_s.S',
-            'sp/src/arm/neon/omxSP_FFTFwd_RToCCS_S16S32_Sfs_s.S',
-            'sp/src/arm/neon/omxSP_FFTInv_CCSToR_S32S16_Sfs_s.S',
-            # Complex floating-point FFT
-            'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_fs_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_ls_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_fs_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix4_fs_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix4_ls_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix4_unsafe_s.S',
-            'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix8_fs_unsafe_s.S',
-            'sp/src/arm/neon/omxSP_FFTInv_CToC_FC32_Sfs_s.S',
-            'sp/src/arm/neon/omxSP_FFTFwd_CToC_FC32_Sfs_s.S',
-            # Real floating-point FFT
-            'sp/src/arm/neon/armSP_FFTInv_CCSToR_F32_preTwiddleRadix2_unsafe_s.S',
-            'sp/src/arm/neon/omxSP_FFTFwd_RToCCS_F32_Sfs_s.S',
-            'sp/src/arm/neon/omxSP_FFTInv_CCSToR_F32_Sfs_s.S',
+                # Complex 32-bit fixed-point FFT.
+                'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_fs_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_ls_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_fs_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix4_fs_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix4_ls_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix2_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix4_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC32_Radix8_fs_unsafe_s.S',
+                'sp/src/arm/neon/omxSP_FFTInv_CToC_SC32_Sfs_s.S',
+                'sp/src/arm/neon/omxSP_FFTFwd_CToC_SC32_Sfs_s.S',
+                # Real 32-bit fixed-point FFT
+                'sp/src/arm/neon/armSP_FFTInv_CCSToR_S32_preTwiddleRadix2_unsafe_s.S',
+                'sp/src/arm/neon/omxSP_FFTFwd_RToCCS_S32_Sfs_s.S',
+                'sp/src/arm/neon/omxSP_FFTInv_CCSToR_S32_Sfs_s.S',
+                # Complex 16-bit fixed-point FFT
+                'sp/src/arm/neon/armSP_FFTInv_CCSToR_S16_preTwiddleRadix2_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_fs_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_ls_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_ps_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix2_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix4_fs_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix4_ls_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix4_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_SC16_Radix8_fs_unsafe_s.S',
+                'sp/src/arm/neon/omxSP_FFTFwd_CToC_SC16_Sfs_s.S',
+                'sp/src/arm/neon/omxSP_FFTInv_CToC_SC16_Sfs_s.S',
+                # Real 16-bit fixed-point FFT
+                'sp/src/arm/neon/omxSP_FFTFwd_RToCCS_S16_Sfs_s.S',
+                'sp/src/arm/neon/omxSP_FFTInv_CCSToR_S16_Sfs_s.S',
+                'sp/src/arm/neon/omxSP_FFTFwd_RToCCS_S16S32_Sfs_s.S',
+                'sp/src/arm/neon/omxSP_FFTInv_CCSToR_S32S16_Sfs_s.S',
+                # Complex floating-point FFT
+                'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_fs_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_ls_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_fs_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix4_fs_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix4_ls_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix2_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix4_unsafe_s.S',
+                'sp/src/arm/neon/armSP_FFT_CToC_FC32_Radix8_fs_unsafe_s.S',
+                'sp/src/arm/neon/omxSP_FFTInv_CToC_FC32_Sfs_s.S',
+                'sp/src/arm/neon/omxSP_FFTFwd_CToC_FC32_Sfs_s.S',
+                # Real floating-point FFT
+                'sp/src/arm/neon/armSP_FFTInv_CCSToR_F32_preTwiddleRadix2_unsafe_s.S',
+                'sp/src/arm/neon/omxSP_FFTFwd_RToCCS_F32_Sfs_s.S',
+                'sp/src/arm/neon/omxSP_FFTInv_CCSToR_F32_Sfs_s.S',
+              ],
+            }],
           ],
         }],
         ['target_arch=="ia32" or target_arch=="x64"', {
@@ -210,24 +243,10 @@
           # standalone. Applications must link with openmax_dl.
           'target_name': 'openmax_dl_armv7',
           'type': 'static_library',
-          'includes': [
-            '../../../build/android/cpufeatures.gypi',
-          ],
-          'include_dirs': [
-            '../',
-          ],
           'cflags!': [
             '-mfpu=neon',
           ],
-          'link_settings' : {
-            'libraries': [
-              # To get the __android_log_print routine
-              '-llog',
-            ],
-          },
           'sources': [
-            # Detection routine
-            'sp/src/arm/detect.c',
             # Complex floating-point FFT
             'sp/src/arm/armv7/armSP_FFT_CToC_FC32_Radix2_fs_unsafe_s.S',
             'sp/src/arm/armv7/armSP_FFT_CToC_FC32_Radix2_fs_unsafe_s.S',
@@ -241,6 +260,24 @@
             'sp/src/arm/armv7/omxSP_FFTFwd_RToCCS_F32_Sfs_s.S',
             'sp/src/arm/armv7/omxSP_FFTInv_CCSToR_F32_Sfs_s.S',
           ],
+          'conditions': [
+            ['OS=="android"', {
+              # We only do run-time NEON detection on Android.
+              'includes': [
+                '../../../build/android/cpufeatures.gypi',
+              ],
+              'link_settings' : {
+                'libraries': [
+                  # To get the __android_log_print routine
+                  '-llog',
+                ],
+              },
+              'sources': [
+                # Detection routine
+                'sp/src/arm/detect.c',
+              ],
+            }],
+          ],
         },
       ],
     }],
diff --git a/dl/sp/api/armSP.h b/dl/sp/api/armSP.h
index cf17ec5..2592679 100644
--- a/dl/sp/api/armSP.h
+++ b/dl/sp/api/armSP.h
@@ -12,16 +12,16 @@
  */
 
 /**
- * 
+ *
  * File Name:  armSP.h
  * OpenMAX DL: v1.0.2
  * Last Modified Revision:   7014
  * Last Modified Date:       Wed, 01 Aug 2007
- * 
+ *
  * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
- * 
- * 
- *   
+ *
+ *
+ *
  * File: armSP.h
  * Brief: Declares API's/Basic Data types used across the OpenMAX Signal Processing domain
  *
@@ -41,35 +41,35 @@
 extern  OMX_S32 armSP_FFT_S32TwiddleTable[1026];
 extern OMX_F32 armSP_FFT_F32TwiddleTable[];
 
-typedef struct  ARMsFFTSpec_SC32_Tag 
+typedef struct  ARMsFFTSpec_SC32_Tag
 {
     OMX_U32     N;
-    OMX_U16     *pBitRev;    
+    OMX_U16     *pBitRev;
     OMX_SC32    *pTwiddle;
     OMX_SC32    *pBuf;
 }ARMsFFTSpec_SC32;
 
 
-typedef struct  ARMsFFTSpec_SC16_Tag 
+typedef struct  ARMsFFTSpec_SC16_Tag
 {
     OMX_U32     N;
-    OMX_U16     *pBitRev;    
+    OMX_U16     *pBitRev;
     OMX_SC16    *pTwiddle;
     OMX_SC16    *pBuf;
 }ARMsFFTSpec_SC16;
 
-typedef struct  ARMsFFTSpec_R_SC32_Tag 
+typedef struct  ARMsFFTSpec_R_SC32_Tag
 {
     OMX_U32     N;
-    OMX_U16     *pBitRev;    
+    OMX_U16     *pBitRev;
     OMX_SC32    *pTwiddle;
     OMX_S32     *pBuf;
 }ARMsFFTSpec_R_SC32;
 
-typedef struct  ARMsFFTSpec_R_SC16_Tag 
+typedef struct  ARMsFFTSpec_R_SC16_Tag
 {
     OMX_U32     N;
-    OMX_U16     *pBitRev;    
+    OMX_U16     *pBitRev;
     OMX_SC16    *pTwiddle;
     OMX_S16     *pBuf;
 } ARMsFFTSpec_R_SC16;
diff --git a/dl/sp/api/omxSP.h b/dl/sp/api/omxSP.h
index d056fb9..2827379 100644
--- a/dl/sp/api/omxSP.h
+++ b/dl/sp/api/omxSP.h
@@ -4,27 +4,27 @@
  *
  * Copyright 2005-2008 The Khronos Group Inc. All Rights Reserved.
  *
- * These materials are protected by copyright laws and contain material 
- * proprietary to the Khronos Group, Inc.  You may use these materials 
- * for implementing Khronos specifications, without altering or removing 
+ * These materials are protected by copyright laws and contain material
+ * proprietary to the Khronos Group, Inc.  You may use these materials
+ * for implementing Khronos specifications, without altering or removing
  * any trademark, copyright or other notice from the specification.
- * 
- * Khronos Group makes no, and expressly disclaims any, representations 
- * or warranties, express or implied, regarding these materials, including, 
- * without limitation, any implied warranties of merchantability or fitness 
- * for a particular purpose or non-infringement of any intellectual property. 
- * Khronos Group makes no, and expressly disclaims any, warranties, express 
- * or implied, regarding the correctness, accuracy, completeness, timeliness, 
- * and reliability of these materials. 
  *
- * Under no circumstances will the Khronos Group, or any of its Promoters, 
- * Contributors or Members or their respective partners, officers, directors, 
- * employees, agents or representatives be liable for any damages, whether 
- * direct, indirect, special or consequential damages for lost revenues, 
- * lost profits, or otherwise, arising from or in connection with these 
+ * Khronos Group makes no, and expressly disclaims any, representations
+ * or warranties, express or implied, regarding these materials, including,
+ * without limitation, any implied warranties of merchantability or fitness
+ * for a particular purpose or non-infringement of any intellectual property.
+ * Khronos Group makes no, and expressly disclaims any, warranties, express
+ * or implied, regarding the correctness, accuracy, completeness, timeliness,
+ * and reliability of these materials.
+ *
+ * Under no circumstances will the Khronos Group, or any of its Promoters,
+ * Contributors or Members or their respective partners, officers, directors,
+ * employees, agents or representatives be liable for any damages, whether
+ * direct, indirect, special or consequential damages for lost revenues,
+ * lost profits, or otherwise, arising from or in connection with these
  * materials.
- * 
- * Khronos and OpenMAX are trademarks of the Khronos Group Inc. 
+ *
+ * Khronos and OpenMAX are trademarks of the Khronos Group Inc.
  *
  */
 
@@ -53,26 +53,26 @@
  * Function:  omxSP_Copy_S16   (2.2.1.1.1)
  *
  * Description:
- * Copies the len elements of the vector pointed to by pSrcinto the len 
- * elements of the vector pointed to by pDst. That is: 
+ * Copies the len elements of the vector pointed to by pSrcinto the len
+ * elements of the vector pointed to by pDst. That is:
  *     pDst[i] = pSrc[i], for (i=0, 1, ..., len-1)
  *
  * Input Arguments:
- *   
- *   pSrc - pointer to the source vector 
- *   len - number of elements contained in the source and destination vectors 
+ *
+ *   pSrc - pointer to the source vector
+ *   len - number of elements contained in the source and destination vectors
  *
  * Output Arguments:
- *   
- *   pDst - pointer to the destination vector 
+ *
+ *   pDst - pointer to the destination vector
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments detected; returned if one or more of 
- *              the following is true: 
- *    -   pSrc or pDst is NULL 
- *    -   len < 0 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments detected; returned if one or more of
+ *              the following is true:
+ *    -   pSrc or pDst is NULL
+ *    -   len < 0
  *
  */
 OMXResult omxSP_Copy_S16 (
@@ -87,25 +87,25 @@
  * Function:  omxSP_DotProd_S16   (2.2.2.1.1)
  *
  * Description:
- * Calculates the dot product of the two input vectors.  This function does 
- * not perform scaling. The internal accumulator width must be at least 32 
- * bits.  If any of the partially accumulated values exceeds the range of a 
- * signed 32-bit integer then the result is undefined. 
+ * Calculates the dot product of the two input vectors.  This function does
+ * not perform scaling. The internal accumulator width must be at least 32
+ * bits.  If any of the partially accumulated values exceeds the range of a
+ * signed 32-bit integer then the result is undefined.
  *
  * Input Arguments:
- *   
- *   pSrc1 - pointer to the first input vector; must be aligned on an 8-byte 
- *            boundary. 
- *   pSrc2 - pointer to the second input vector; must be aligned on an 8-byte 
- *            boundary. 
- *   len - length of the vectors in pSrc1 and pSrc2 
+ *
+ *   pSrc1 - pointer to the first input vector; must be aligned on an 8-byte
+ *            boundary.
+ *   pSrc2 - pointer to the second input vector; must be aligned on an 8-byte
+ *            boundary.
+ *   len - length of the vectors in pSrc1 and pSrc2
  *
  * Output Arguments:
  *
  * Return Value:
- *    
- *    The dot product result  Note: this function returns the actual result 
- *              rather than the standard OMXError. 
+ *
+ *    The dot product result  Note: this function returns the actual result
+ *              rather than the standard OMXError.
  *
  */
 OMX_S32 omxSP_DotProd_S16 (
@@ -120,30 +120,30 @@
  * Function:  omxSP_DotProd_S16_Sfs   (2.2.2.1.2)
  *
  * Description:
- * Calculates the dot product of the two input signals with output scaling 
- * and saturation, i.e., the result is multiplied by two to the power of the 
- * negative (-)scalefactor (scaled) prior to return.  The result is saturated 
- * with rounding if the scaling operation produces a value outside the range 
- * of a signed 32-bit integer. Rounding behavior is defined in section 1.6.7 
- * Integer Scaling and Rounding Conventions. The internal accumulator width 
- * must be at least 32 bits. The result is undefined if any of the partially 
- * accumulated values exceeds the range of a signed 32-bit integer. 
+ * Calculates the dot product of the two input signals with output scaling
+ * and saturation, i.e., the result is multiplied by two to the power of the
+ * negative (-)scalefactor (scaled) prior to return.  The result is saturated
+ * with rounding if the scaling operation produces a value outside the range
+ * of a signed 32-bit integer. Rounding behavior is defined in section 1.6.7
+ * Integer Scaling and Rounding Conventions. The internal accumulator width
+ * must be at least 32 bits. The result is undefined if any of the partially
+ * accumulated values exceeds the range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pSrc1 - pointer to the first input vector; must be aligned on an 8-byte 
- *            boundary. 
- *   pSrc2 - pointer to the second input vector; must be aligned on an 8-byte 
- *            boundary. 
- *   len - length of the vectors in pSrc1 and pSrc2 
- *   scaleFactor - integer scalefactor 
+ *
+ *   pSrc1 - pointer to the first input vector; must be aligned on an 8-byte
+ *            boundary.
+ *   pSrc2 - pointer to the second input vector; must be aligned on an 8-byte
+ *            boundary.
+ *   len - length of the vectors in pSrc1 and pSrc2
+ *   scaleFactor - integer scalefactor
  *
  * Output Arguments:
  *
  * Return Value:
- *    
- *    The dot product result  Note: This function returns the actual result 
- *              rather than the standard OMXError. 
+ *
+ *    The dot product result  Note: This function returns the actual result
+ *              rather than the standard OMXError.
  *
  */
 OMX_S32 omxSP_DotProd_S16_Sfs (
@@ -159,30 +159,30 @@
  * Function:  omxSP_BlockExp_S16   (2.2.2.2.2)
  *
  * Description:
- * Block exponent calculation for 16-bit and 32-bit signals (count leading 
- * sign bits). These functions compute the number of extra sign bits of all 
- * values in the 16-bit and 32-bit input vector pSrc and return the minimum 
- * sign bit count. This is also the maximum shift value that could be used in 
- * scaling the block of data.  The functions BlockExp_S16 and 
- * BlockExp_S32 return the values 15 and 31, respectively, for input vectors in 
- * which all entries are equal to zero.  
+ * Block exponent calculation for 16-bit and 32-bit signals (count leading
+ * sign bits). These functions compute the number of extra sign bits of all
+ * values in the 16-bit and 32-bit input vector pSrc and return the minimum
+ * sign bit count. This is also the maximum shift value that could be used in
+ * scaling the block of data.  The functions BlockExp_S16 and
+ * BlockExp_S32 return the values 15 and 31, respectively, for input vectors in
+ * which all entries are equal to zero.
  *
- * Note: These functions differ from other DL functions by not returning the 
- *       standard OMXError but the actual result. 
+ * Note: These functions differ from other DL functions by not returning the
+ *       standard OMXError but the actual result.
  *
  * Input Arguments:
- *   
- *   pSrc - pointer to the input vector 
- *   len - number of elements contained in the input and output 
- *         vectors (0 < len < 65536) 
+ *
+ *   pSrc - pointer to the input vector
+ *   len - number of elements contained in the input and output
+ *         vectors (0 < len < 65536)
  *
  * Output Arguments:
- *   
- *   none 
+ *
+ *   none
  *
  * Return Value:
- *    
- *    Maximum exponent that may be used in scaling 
+ *
+ *    Maximum exponent that may be used in scaling
  *
  */
 OMX_INT omxSP_BlockExp_S16 (
@@ -196,30 +196,30 @@
  * Function:  omxSP_BlockExp_S32   (2.2.2.2.2)
  *
  * Description:
- * Block exponent calculation for 16-bit and 32-bit signals (count leading 
- * sign bits). These functions compute the number of extra sign bits of all 
- * values in the 16-bit and 32-bit input vector pSrc and return the minimum 
- * sign bit count. This is also the maximum shift value that could be used in 
- * scaling the block of data.  The functions BlockExp_S16 and 
- * BlockExp_S32 return the values 15 and 31, respectively, for input vectors in 
- * which all entries are equal to zero.  
- * 
- * Note: These functions differ from other DL functions by not returning the 
- *       standard OMXError but the actual result. 
+ * Block exponent calculation for 16-bit and 32-bit signals (count leading
+ * sign bits). These functions compute the number of extra sign bits of all
+ * values in the 16-bit and 32-bit input vector pSrc and return the minimum
+ * sign bit count. This is also the maximum shift value that could be used in
+ * scaling the block of data.  The functions BlockExp_S16 and
+ * BlockExp_S32 return the values 15 and 31, respectively, for input vectors in
+ * which all entries are equal to zero.
+ *
+ * Note: These functions differ from other DL functions by not returning the
+ *       standard OMXError but the actual result.
  *
  * Input Arguments:
- *   
- *   pSrc - pointer to the input vector 
- *   len - number of elements contained in the input and output 
- *         vectors (0 < len < 65536) 
+ *
+ *   pSrc - pointer to the input vector
+ *   len - number of elements contained in the input and output
+ *         vectors (0 < len < 65536)
  *
  * Output Arguments:
- *   
- *   none 
+ *
+ *   none
  *
  * Return Value:
- *    
- *    Maximum exponent that may be used in scaling 
+ *
+ *    Maximum exponent that may be used in scaling
  *
  */
 OMX_INT omxSP_BlockExp_S32 (
@@ -233,59 +233,59 @@
  * Function:  omxSP_FIR_Direct_S16   (2.2.3.1.1)
  *
  * Description:
- * Block FIR filtering for 16-bit data type.  This function applies the 
- * FIR filter defined by the coefficient vector pTapsQ15 to a vector of 
- * input data.  The result is saturated with rounding if the operation 
- * produces a value outside the range of a signed 16-bit integer.  
+ * Block FIR filtering for 16-bit data type.  This function applies the
+ * FIR filter defined by the coefficient vector pTapsQ15 to a vector of
+ * input data.  The result is saturated with rounding if the operation
+ * produces a value outside the range of a signed 16-bit integer.
  * Rounding behavior is defined in:
- *     section 1.6.7 "Integer Scaling and Rounding Conventions".  
- * The internal accumulator width must be at least 32 bits.  The result 
- * is undefined if any of the partially accumulated values exceeds the 
- * range of a signed 32-bit integer. 
+ *     section 1.6.7 "Integer Scaling and Rounding Conventions".
+ * The internal accumulator width must be at least 32 bits.  The result
+ * is undefined if any of the partially accumulated values exceeds the
+ * range of a signed 32-bit integer.
  *
  *
  * Input Arguments:
- *   
- *   pSrc   - pointer to the vector of input samples to which the 
- *            filter is applied 
- *   sampLen - the number of samples contained in the input and output 
- *            vectors 
- *   pTapsQ15 - pointer to the vector that contains the filter coefficients, 
- *            represented in Q0.15 format (defined in section 1.6.5). Given 
+ *
+ *   pSrc   - pointer to the vector of input samples to which the
+ *            filter is applied
+ *   sampLen - the number of samples contained in the input and output
+ *            vectors
+ *   pTapsQ15 - pointer to the vector that contains the filter coefficients,
+ *            represented in Q0.15 format (defined in section 1.6.5). Given
  *            that:
- *                    -32768 = pTapsQ15(k) < 32768, 
- *                     0 = k <tapsLen, 
- *            the range on the actual filter coefficients is -1 = bK <1, and 
- *            therefore coefficient normalization may be required during the 
- *            filter design process. 
- *   tapsLen - the number of taps, or, equivalently, the filter order + 1 
- *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 
- *            (state). The user is responsible for allocation, initialization, 
- *            and de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
- *   pDelayLineIndex - pointer to the filter memory index that is maintained 
- *            internally by the function. The user should initialize the value 
- *            of this index to zero. 
+ *                    -32768 = pTapsQ15(k) < 32768,
+ *                     0 = k <tapsLen,
+ *            the range on the actual filter coefficients is -1 = bK <1, and
+ *            therefore coefficient normalization may be required during the
+ *            filter design process.
+ *   tapsLen - the number of taps, or, equivalently, the filter order + 1
+ *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
+ *            (state). The user is responsible for allocation, initialization,
+ *            and de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
+ *   pDelayLineIndex - pointer to the filter memory index that is maintained
+ *            internally by the function. The user should initialize the value
+ *            of this index to zero.
  *
  * Output Arguments:
- *   
- *   pDst   - pointer to the vector of filtered output samples 
+ *
+ *   pDst   - pointer to the vector of filtered output samples
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   One or more of the following pointers is NULL: 
- *          -  pSrc, 
- *          -  pDst, 
- *          -  pSrcDst, 
- *          -  pTapsQ15, 
- *          -  pDelayLine, or 
- *          -  pDelayLineIndex 
- *    -   samplen < 0 
- *    -   tapslen < 1 
- *    -   *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen). 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   One or more of the following pointers is NULL:
+ *          -  pSrc,
+ *          -  pDst,
+ *          -  pSrcDst,
+ *          -  pTapsQ15,
+ *          -  pDelayLine, or
+ *          -  pDelayLineIndex
+ *    -   samplen < 0
+ *    -   tapslen < 1
+ *    -   *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen).
  *
  */
 OMXResult omxSP_FIR_Direct_S16 (
@@ -304,58 +304,58 @@
  * Function:  omxSP_FIR_Direct_S16_I   (2.2.3.1.1)
  *
  * Description:
- * Block FIR filtering for 16-bit data type.  This function applies the 
- * FIR filter defined by the coefficient vector pTapsQ15 to a vector of 
- * input data.  The result is saturated with rounding if the operation 
- * produces a value outside the range of a signed 16-bit integer.  
+ * Block FIR filtering for 16-bit data type.  This function applies the
+ * FIR filter defined by the coefficient vector pTapsQ15 to a vector of
+ * input data.  The result is saturated with rounding if the operation
+ * produces a value outside the range of a signed 16-bit integer.
  * Rounding behavior is defined in:
- *     section 1.6.7 "Integer Scaling and Rounding Conventions".  
- * The internal accumulator width must be at least 32 bits.  The result 
- * is undefined if any of the partially accumulated values exceeds the 
- * range of a signed 32-bit integer. 
+ *     section 1.6.7 "Integer Scaling and Rounding Conventions".
+ * The internal accumulator width must be at least 32 bits.  The result
+ * is undefined if any of the partially accumulated values exceeds the
+ * range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pSrcDst - pointer to the vector of input samples to which the 
- *            filter is applied 
- *   sampLen - the number of samples contained in the input and output 
- *            vectors 
- *   pTapsQ15 - pointer to the vector that contains the filter coefficients, 
- *            represented in Q0.15 format (defined in section 1.6.5). Given 
+ *
+ *   pSrcDst - pointer to the vector of input samples to which the
+ *            filter is applied
+ *   sampLen - the number of samples contained in the input and output
+ *            vectors
+ *   pTapsQ15 - pointer to the vector that contains the filter coefficients,
+ *            represented in Q0.15 format (defined in section 1.6.5). Given
  *            that:
- *                    -32768 = pTapsQ15(k) < 32768, 
- *                     0 = k <tapsLen, 
- *            the range on the actual filter coefficients is -1 = bK <1, and 
- *            therefore coefficient normalization may be required during the 
- *            filter design process. 
- *   tapsLen - the number of taps, or, equivalently, the filter order + 1 
- *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 
- *            (state). The user is responsible for allocation, initialization, 
- *            and de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
- *   pDelayLineIndex - pointer to the filter memory index that is maintained 
- *            internally by the function. The user should initialize the value 
- *            of this index to zero. 
+ *                    -32768 = pTapsQ15(k) < 32768,
+ *                     0 = k <tapsLen,
+ *            the range on the actual filter coefficients is -1 = bK <1, and
+ *            therefore coefficient normalization may be required during the
+ *            filter design process.
+ *   tapsLen - the number of taps, or, equivalently, the filter order + 1
+ *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
+ *            (state). The user is responsible for allocation, initialization,
+ *            and de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
+ *   pDelayLineIndex - pointer to the filter memory index that is maintained
+ *            internally by the function. The user should initialize the value
+ *            of this index to zero.
  *
  * Output Arguments:
- *   
- *   pSrcDst - pointer to the vector of filtered output samples 
+ *
+ *   pSrcDst - pointer to the vector of filtered output samples
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   One or more of the following pointers is NULL: 
- *          -  pSrc, 
- *          -  pDst, 
- *          -  pSrcDst, 
- *          -  pTapsQ15, 
- *          -  pDelayLine, or 
- *          -  pDelayLineIndex 
- *    -   samplen < 0 
- *    -   tapslen < 1 
- *    -   *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen). 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   One or more of the following pointers is NULL:
+ *          -  pSrc,
+ *          -  pDst,
+ *          -  pSrcDst,
+ *          -  pTapsQ15,
+ *          -  pDelayLine, or
+ *          -  pDelayLineIndex
+ *    -   samplen < 0
+ *    -   tapslen < 1
+ *    -   *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen).
  *
  */
 OMXResult omxSP_FIR_Direct_S16_I (
@@ -373,59 +373,59 @@
  * Function:  omxSP_FIR_Direct_S16_Sfs   (2.2.3.1.1)
  *
  * Description:
- * Block FIR filtering for 16-bit data type. This function applies 
- * the FIR filter defined by the coefficient vector pTapsQ15 to a 
- * vector of input data.  The output is multiplied by 2 to the negative 
+ * Block FIR filtering for 16-bit data type. This function applies
+ * the FIR filter defined by the coefficient vector pTapsQ15 to a
+ * vector of input data.  The output is multiplied by 2 to the negative
  * power of scalefactor (i.e., 2^-scalefactor) before returning to the caller.
- * Scaling and rounding conventions are defined in section 1.6.7.  
- * The internal accumulator width must be at least 32 bits.  
- * The result is undefined if any of the partially accumulated 
- * values exceeds the range of a signed 32-bit integer. 
+ * Scaling and rounding conventions are defined in section 1.6.7.
+ * The internal accumulator width must be at least 32 bits.
+ * The result is undefined if any of the partially accumulated
+ * values exceeds the range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pSrc    - pointer to the vector of input samples to which the 
- *            filter is applied 
- *   sampLen - the number of samples contained in the input and output 
- *            vectors 
- *   pTapsQ15 - pointer to the vector that contains the filter coefficients, 
- *            represented in Q0.15 format (defined in section 1.6.5). Given 
+ *
+ *   pSrc    - pointer to the vector of input samples to which the
+ *            filter is applied
+ *   sampLen - the number of samples contained in the input and output
+ *            vectors
+ *   pTapsQ15 - pointer to the vector that contains the filter coefficients,
+ *            represented in Q0.15 format (defined in section 1.6.5). Given
  *            that:
- *                    -32768 = pTapsQ15(k) < 32768, 
- *                     0 = k <tapsLen, 
- *            the range on the actual filter coefficients is -1 = bK <1, and 
- *            therefore coefficient normalization may be required during the 
- *            filter design process. 
- *   tapsLen - the number of taps, or, equivalently, the filter order + 1 
- *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 
- *            (state). The user is responsible for allocation, initialization, 
- *            and de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
- *   pDelayLineIndex - pointer to the filter memory index that is maintained 
- *            internally by the function. The user should initialize the value 
- *            of this index to zero. 
+ *                    -32768 = pTapsQ15(k) < 32768,
+ *                     0 = k <tapsLen,
+ *            the range on the actual filter coefficients is -1 = bK <1, and
+ *            therefore coefficient normalization may be required during the
+ *            filter design process.
+ *   tapsLen - the number of taps, or, equivalently, the filter order + 1
+ *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
+ *            (state). The user is responsible for allocation, initialization,
+ *            and de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
+ *   pDelayLineIndex - pointer to the filter memory index that is maintained
+ *            internally by the function. The user should initialize the value
+ *            of this index to zero.
  *   scaleFactor - saturation fixed scalefactor
  *
  * Output Arguments:
- *   
- *   pDst  - pointer to the vector of filtered output samples 
+ *
+ *   pDst  - pointer to the vector of filtered output samples
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   One or more of the following pointers is NULL: 
- *          -  pSrc, 
- *          -  pDst, 
- *          -  pSrcDst, 
- *          -  pTapsQ15, 
- *          -  pDelayLine, or 
- *          -  pDelayLineIndex 
- *    -   samplen < 0 
- *    -   tapslen < 1 
- *    -   scaleFactor < 0 
- *    -   *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen). 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   One or more of the following pointers is NULL:
+ *          -  pSrc,
+ *          -  pDst,
+ *          -  pSrcDst,
+ *          -  pTapsQ15,
+ *          -  pDelayLine, or
+ *          -  pDelayLineIndex
+ *    -   samplen < 0
+ *    -   tapslen < 1
+ *    -   scaleFactor < 0
+ *    -   *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen).
  *
  */
 OMXResult omxSP_FIR_Direct_S16_Sfs (
@@ -445,59 +445,59 @@
  * Function:  omxSP_FIR_Direct_S16_ISfs   (2.2.3.1.1)
  *
  * Description:
- * Block FIR filtering for 16-bit data type. This function applies 
- * the FIR filter defined by the coefficient vector pTapsQ15 to a 
- * vector of input data.  The output is multiplied by 2 to the negative 
+ * Block FIR filtering for 16-bit data type. This function applies
+ * the FIR filter defined by the coefficient vector pTapsQ15 to a
+ * vector of input data.  The output is multiplied by 2 to the negative
  * power of scalefactor (i.e., 2^-scalefactor) before returning to the caller.
- * Scaling and rounding conventions are defined in section 1.6.7.  
- * The internal accumulator width must be at least 32 bits.  
- * The result is undefined if any of the partially accumulated 
- * values exceeds the range of a signed 32-bit integer. 
+ * Scaling and rounding conventions are defined in section 1.6.7.
+ * The internal accumulator width must be at least 32 bits.
+ * The result is undefined if any of the partially accumulated
+ * values exceeds the range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pSrcDst - pointer to the vector of input samples to which the 
- *            filter is applied 
- *   sampLen - the number of samples contained in the input and output 
- *            vectors 
- *   pTapsQ15 - pointer to the vector that contains the filter coefficients, 
- *            represented in Q0.15 format (defined in section 1.6.5). Given 
+ *
+ *   pSrcDst - pointer to the vector of input samples to which the
+ *            filter is applied
+ *   sampLen - the number of samples contained in the input and output
+ *            vectors
+ *   pTapsQ15 - pointer to the vector that contains the filter coefficients,
+ *            represented in Q0.15 format (defined in section 1.6.5). Given
  *            that:
- *                    -32768 = pTapsQ15(k) < 32768, 
- *                     0 = k <tapsLen, 
- *            the range on the actual filter coefficients is -1 = bK <1, and 
- *            therefore coefficient normalization may be required during the 
- *            filter design process. 
- *   tapsLen - the number of taps, or, equivalently, the filter order + 1 
- *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 
- *            (state). The user is responsible for allocation, initialization, 
- *            and de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
- *   pDelayLineIndex - pointer to the filter memory index that is maintained 
- *            internally by the function. The user should initialize the value 
- *            of this index to zero. 
+ *                    -32768 = pTapsQ15(k) < 32768,
+ *                     0 = k <tapsLen,
+ *            the range on the actual filter coefficients is -1 = bK <1, and
+ *            therefore coefficient normalization may be required during the
+ *            filter design process.
+ *   tapsLen - the number of taps, or, equivalently, the filter order + 1
+ *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
+ *            (state). The user is responsible for allocation, initialization,
+ *            and de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
+ *   pDelayLineIndex - pointer to the filter memory index that is maintained
+ *            internally by the function. The user should initialize the value
+ *            of this index to zero.
  *   scaleFactor - saturation fixed scalefactor
  *
  * Output Arguments:
- *   
- *   pSrcDst - pointer to the vector of filtered output samples 
+ *
+ *   pSrcDst - pointer to the vector of filtered output samples
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   One or more of the following pointers is NULL: 
- *          -  pSrc, 
- *          -  pDst, 
- *          -  pSrcDst, 
- *          -  pTapsQ15, 
- *          -  pDelayLine, or 
- *          -  pDelayLineIndex 
- *    -   samplen < 0 
- *    -   tapslen < 1 
- *    -   scaleFactor < 0 
- *    -   *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen). 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   One or more of the following pointers is NULL:
+ *          -  pSrc,
+ *          -  pDst,
+ *          -  pSrcDst,
+ *          -  pTapsQ15,
+ *          -  pDelayLine, or
+ *          -  pDelayLineIndex
+ *    -   samplen < 0
+ *    -   tapslen < 1
+ *    -   scaleFactor < 0
+ *    -   *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen).
  *
  */
 OMXResult omxSP_FIR_Direct_S16_ISfs (
@@ -516,53 +516,53 @@
  * Function:  omxSP_FIROne_Direct_S16   (2.2.3.1.2)
  *
  * Description:
- * Single-sample FIR filtering for 16-bit data type. These functions apply 
- * the FIR filter defined by the coefficient vector pTapsQ15 to a single 
- * sample of input data. The result is saturated with rounding if the 
- * operation produces a value outside the range of a signed 16-bit integer.  
+ * Single-sample FIR filtering for 16-bit data type. These functions apply
+ * the FIR filter defined by the coefficient vector pTapsQ15 to a single
+ * sample of input data. The result is saturated with rounding if the
+ * operation produces a value outside the range of a signed 16-bit integer.
  * Rounding behavior is defined in:
- *       section 1.6.7 "Integer Scaling and Rounding Conventions".  
- * The internal accumulator width must be at least 32 bits.  The result is 
- * undefined if any of the partially accumulated values exceeds the range of a 
+ *       section 1.6.7 "Integer Scaling and Rounding Conventions".
+ * The internal accumulator width must be at least 32 bits.  The result is
+ * undefined if any of the partially accumulated values exceeds the range of a
  * signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   val      - the single input sample to which the filter is 
+ *
+ *   val      - the single input sample to which the filter is
  *            applied.
- *   pTapsQ15 - pointer to the vector that contains the filter coefficients, 
- *            represented in Q0.15 format (as defined in section 1.6.5). Given 
+ *   pTapsQ15 - pointer to the vector that contains the filter coefficients,
+ *            represented in Q0.15 format (as defined in section 1.6.5). Given
  *            that:
- *                    -32768 = pTapsQ15(k) < 32768, 
- *                         0 = k < tapsLen, 
- *            the range on the actual filter coefficients is -1 = bK <1, and 
- *            therefore coefficient normalization may be required during the 
- *            filter design process. 
- *   tapsLen - the number of taps, or, equivalently, the filter order + 1 
- *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 
- *            (state). The user is responsible for allocation, initialization, 
- *            and de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
- *   pDelayLineIndex - pointer to the filter memory index that is maintained 
- *            internally by the function. The user should initialize the value 
- *            of this index to zero. 
+ *                    -32768 = pTapsQ15(k) < 32768,
+ *                         0 = k < tapsLen,
+ *            the range on the actual filter coefficients is -1 = bK <1, and
+ *            therefore coefficient normalization may be required during the
+ *            filter design process.
+ *   tapsLen - the number of taps, or, equivalently, the filter order + 1
+ *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
+ *            (state). The user is responsible for allocation, initialization,
+ *            and de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
+ *   pDelayLineIndex - pointer to the filter memory index that is maintained
+ *            internally by the function. The user should initialize the value
+ *            of this index to zero.
  *
  * Output Arguments:
- *   
- *   pResult - pointer to the filtered output sample 
+ *
+ *   pResult - pointer to the filtered output sample
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    One or more of the following pointers is NULL: 
- *            -  pResult, 
- *            -  pTapsQ15, 
- *            -  pDelayLine, or 
- *            -  pDelayLineIndex 
- *    -    tapslen < 1 
- *    -    *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen) 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    One or more of the following pointers is NULL:
+ *            -  pResult,
+ *            -  pTapsQ15,
+ *            -  pDelayLine, or
+ *            -  pDelayLineIndex
+ *    -    tapslen < 1
+ *    -    *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen)
  *
  */
 OMXResult omxSP_FIROne_Direct_S16 (
@@ -580,53 +580,53 @@
  * Function:  omxSP_FIROne_Direct_S16_I   (2.2.3.1.2)
  *
  * Description:
- * Single-sample FIR filtering for 16-bit data type. These functions apply 
- * the FIR filter defined by the coefficient vector pTapsQ15 to a single 
- * sample of input data. The result is saturated with rounding if the 
- * operation produces a value outside the range of a signed 16-bit integer.  
+ * Single-sample FIR filtering for 16-bit data type. These functions apply
+ * the FIR filter defined by the coefficient vector pTapsQ15 to a single
+ * sample of input data. The result is saturated with rounding if the
+ * operation produces a value outside the range of a signed 16-bit integer.
  * Rounding behavior is defined in:
- *       section 1.6.7 "Integer Scaling and Rounding Conventions".  
- * The internal accumulator width must be at least 32 bits.  The result is 
- * undefined if any of the partially accumulated values exceeds the range of a 
+ *       section 1.6.7 "Integer Scaling and Rounding Conventions".
+ * The internal accumulator width must be at least 32 bits.  The result is
+ * undefined if any of the partially accumulated values exceeds the range of a
  * signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pValResult - pointer to the single input sample to which the filter is 
- *            applied. 
- *   pTapsQ15 - pointer to the vector that contains the filter coefficients, 
- *            represented in Q0.15 format (as defined in section 1.6.5). Given 
+ *
+ *   pValResult - pointer to the single input sample to which the filter is
+ *            applied.
+ *   pTapsQ15 - pointer to the vector that contains the filter coefficients,
+ *            represented in Q0.15 format (as defined in section 1.6.5). Given
  *            that:
- *                    -32768 = pTapsQ15(k) < 32768, 
- *                         0 = k < tapsLen, 
- *            the range on the actual filter coefficients is -1 = bK <1, and 
- *            therefore coefficient normalization may be required during the 
- *            filter design process. 
- *   tapsLen - the number of taps, or, equivalently, the filter order + 1 
- *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 
- *            (state). The user is responsible for allocation, initialization, 
- *            and de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
- *   pDelayLineIndex - pointer to the filter memory index that is maintained 
- *            internally by the function. The user should initialize the value 
- *            of this index to zero. 
+ *                    -32768 = pTapsQ15(k) < 32768,
+ *                         0 = k < tapsLen,
+ *            the range on the actual filter coefficients is -1 = bK <1, and
+ *            therefore coefficient normalization may be required during the
+ *            filter design process.
+ *   tapsLen - the number of taps, or, equivalently, the filter order + 1
+ *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
+ *            (state). The user is responsible for allocation, initialization,
+ *            and de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
+ *   pDelayLineIndex - pointer to the filter memory index that is maintained
+ *            internally by the function. The user should initialize the value
+ *            of this index to zero.
  *
  * Output Arguments:
- *   
- *   pValResult - pointer to the filtered output sample 
+ *
+ *   pValResult - pointer to the filtered output sample
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    One or more of the following pointers is NULL: 
- *            -  pValResult, 
- *            -  pTapsQ15, 
- *            -  pDelayLine, or 
- *            -  pDelayLineIndex 
- *    -    tapslen < 1 
- *    -    *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen) 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    One or more of the following pointers is NULL:
+ *            -  pValResult,
+ *            -  pTapsQ15,
+ *            -  pDelayLine, or
+ *            -  pDelayLineIndex
+ *    -    tapslen < 1
+ *    -    *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen)
  *
  */
 OMXResult omxSP_FIROne_Direct_S16_I (
@@ -643,54 +643,54 @@
  * Function:  omxSP_FIROne_Direct_S16_Sfs   (2.2.3.1.2)
  *
  * Description:
- * Single-sample FIR filtering for 16-bit data type. These functions apply 
- * the FIR filter defined by the coefficient vector pTapsQ15 to a single 
- * sample of input data. The output is multiplied by 2 to the negative power 
- * of scalefactor (i.e., 2^-scalefactor) before returning to the user.  
- * Scaling and rounding conventions are defined in section 1.6.7.  
- * The internal accumulator width must be at least 32 bits.  
- * The result is undefined if any of the partially accumulated values exceeds 
- * the range of a signed 32-bit integer. 
+ * Single-sample FIR filtering for 16-bit data type. These functions apply
+ * the FIR filter defined by the coefficient vector pTapsQ15 to a single
+ * sample of input data. The output is multiplied by 2 to the negative power
+ * of scalefactor (i.e., 2^-scalefactor) before returning to the user.
+ * Scaling and rounding conventions are defined in section 1.6.7.
+ * The internal accumulator width must be at least 32 bits.
+ * The result is undefined if any of the partially accumulated values exceeds
+ * the range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   val      - the single input sample to which the filter is 
- *            applied.  
- *   pTapsQ15 - pointer to the vector that contains the filter coefficients, 
- *            represented in Q0.15 format (as defined in section 1.6.5). Given 
+ *
+ *   val      - the single input sample to which the filter is
+ *            applied.
+ *   pTapsQ15 - pointer to the vector that contains the filter coefficients,
+ *            represented in Q0.15 format (as defined in section 1.6.5). Given
  *            that:
- *                    -32768 = pTapsQ15(k) < 32768, 
- *                         0 = k < tapsLen, 
- *            the range on the actual filter coefficients is -1 = bK <1, and 
- *            therefore coefficient normalization may be required during the 
- *            filter design process. 
- *   tapsLen - the number of taps, or, equivalently, the filter order + 1 
- *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 
- *            (state). The user is responsible for allocation, initialization, 
- *            and de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
- *   pDelayLineIndex - pointer to the filter memory index that is maintained 
- *            internally by the function. The user should initialize the value 
- *            of this index to zero. 
- *   scaleFactor - saturation fixed scaleFactor 
+ *                    -32768 = pTapsQ15(k) < 32768,
+ *                         0 = k < tapsLen,
+ *            the range on the actual filter coefficients is -1 = bK <1, and
+ *            therefore coefficient normalization may be required during the
+ *            filter design process.
+ *   tapsLen - the number of taps, or, equivalently, the filter order + 1
+ *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
+ *            (state). The user is responsible for allocation, initialization,
+ *            and de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
+ *   pDelayLineIndex - pointer to the filter memory index that is maintained
+ *            internally by the function. The user should initialize the value
+ *            of this index to zero.
+ *   scaleFactor - saturation fixed scaleFactor
  *
  * Output Arguments:
- *   
- *   pResult - pointer to the filtered output sample 
+ *
+ *   pResult - pointer to the filtered output sample
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    One or more of the following pointers is NULL: 
- *            -  pResult, 
- *            -  pTapsQ15, 
- *            -  pDelayLine, or 
- *            -  pDelayLineIndex 
- *    -    tapslen < 1 
- *    -    scaleFactor < 0 
- *    -    *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen) 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    One or more of the following pointers is NULL:
+ *            -  pResult,
+ *            -  pTapsQ15,
+ *            -  pDelayLine, or
+ *            -  pDelayLineIndex
+ *    -    tapslen < 1
+ *    -    scaleFactor < 0
+ *    -    *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen)
  *
  */
 OMXResult omxSP_FIROne_Direct_S16_Sfs (
@@ -709,54 +709,54 @@
  * Function:  omxSP_FIROne_Direct_S16_ISfs   (2.2.3.1.2)
  *
  * Description:
- * Single-sample FIR filtering for 16-bit data type. These functions apply 
- * the FIR filter defined by the coefficient vector pTapsQ15 to a single 
- * sample of input data. The output is multiplied by 2 to the negative power 
- * of scalefactor (i.e., 2^-scalefactor) before returning to the user.  
- * Scaling and rounding conventions are defined in section 1.6.7.  
- * The internal accumulator width must be at least 32 bits.  
- * The result is undefined if any of the partially accumulated values exceeds 
- * the range of a signed 32-bit integer. 
+ * Single-sample FIR filtering for 16-bit data type. These functions apply
+ * the FIR filter defined by the coefficient vector pTapsQ15 to a single
+ * sample of input data. The output is multiplied by 2 to the negative power
+ * of scalefactor (i.e., 2^-scalefactor) before returning to the user.
+ * Scaling and rounding conventions are defined in section 1.6.7.
+ * The internal accumulator width must be at least 32 bits.
+ * The result is undefined if any of the partially accumulated values exceeds
+ * the range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pValResult - the pointer to a single input sample to which the filter is 
- *            applied. 
- *   pTapsQ15 - pointer to the vector that contains the filter coefficients, 
- *            represented in Q0.15 format (as defined in section 1.6.5). Given 
+ *
+ *   pValResult - the pointer to a single input sample to which the filter is
+ *            applied.
+ *   pTapsQ15 - pointer to the vector that contains the filter coefficients,
+ *            represented in Q0.15 format (as defined in section 1.6.5). Given
  *            that:
- *                    -32768 = pTapsQ15(k) < 32768, 
- *                         0 = k < tapsLen, 
- *            the range on the actual filter coefficients is -1 = bK <1, and 
- *            therefore coefficient normalization may be required during the 
- *            filter design process. 
- *   tapsLen - the number of taps, or, equivalently, the filter order + 1 
- *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer 
- *            (state). The user is responsible for allocation, initialization, 
- *            and de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
- *   pDelayLineIndex - pointer to the filter memory index that is maintained 
- *            internally by the function. The user should initialize the value 
- *            of this index to zero. 
- *   scaleFactor - saturation fixed scaleFactor 
+ *                    -32768 = pTapsQ15(k) < 32768,
+ *                         0 = k < tapsLen,
+ *            the range on the actual filter coefficients is -1 = bK <1, and
+ *            therefore coefficient normalization may be required during the
+ *            filter design process.
+ *   tapsLen - the number of taps, or, equivalently, the filter order + 1
+ *   pDelayLine - pointer to the 2.tapsLen -element filter memory buffer
+ *            (state). The user is responsible for allocation, initialization,
+ *            and de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
+ *   pDelayLineIndex - pointer to the filter memory index that is maintained
+ *            internally by the function. The user should initialize the value
+ *            of this index to zero.
+ *   scaleFactor - saturation fixed scaleFactor
  *
  * Output Arguments:
- *   
- *   pValResult - pointer to the filtered output sample 
+ *
+ *   pValResult - pointer to the filtered output sample
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    One or more of the following pointers is NULL: 
- *            -  pValResult, 
- *            -  pTapsQ15, 
- *            -  pDelayLine, or 
- *            -  pDelayLineIndex 
- *    -    tapslen < 1 
- *    -    scaleFactor < 0 
- *    -    *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen) 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    One or more of the following pointers is NULL:
+ *            -  pValResult,
+ *            -  pTapsQ15,
+ *            -  pDelayLine, or
+ *            -  pDelayLineIndex
+ *    -    tapslen < 1
+ *    -    scaleFactor < 0
+ *    -    *pDelayLineIndex < 0 or *pDelayLineIndex >= (2 * tapslen)
  *
  */
 OMXResult omxSP_FIROne_Direct_S16_ISfs (
@@ -774,54 +774,54 @@
  * Function:  omxSP_IIR_Direct_S16   (2.2.3.2.1)
  *
  * Description:
- * Block IIR filtering for 16-bit data. This function applies the direct form 
- * II IIR filter defined by the coefficient vector pTaps to a vector of input 
- * data.  The internal accumulator width must be at least 32 bits, and the 
- * result is saturated if the operation produces a value outside the range of 
- * a signed 16-bit integer, i.e., the output will saturate to 0x8000 (-32768) 
- * for a negative overflow or 0x7fff (32767) for a positive overflow.  The 
- * result is undefined if any of the partially accumulated values exceeds the 
- * range of a signed 32-bit integer. 
+ * Block IIR filtering for 16-bit data. This function applies the direct form
+ * II IIR filter defined by the coefficient vector pTaps to a vector of input
+ * data.  The internal accumulator width must be at least 32 bits, and the
+ * result is saturated if the operation produces a value outside the range of
+ * a signed 16-bit integer, i.e., the output will saturate to 0x8000 (-32768)
+ * for a negative overflow or 0x7fff (32767) for a positive overflow.  The
+ * result is undefined if any of the partially accumulated values exceeds the
+ * range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pSrc  - pointer to the vector of input samples to which the 
- *            filter is applied 
- *   len - the number of samples contained in both the input and output 
- *            vectors 
- *   pTaps - pointer to the 2L+2-element vector that contains the combined 
- *            numerator and denominator filter coefficients from the system 
- *            transfer function, H(z). Coefficient scaling and coefficient 
- *            vector organization should follow the conventions described 
- *            above. The value of the coefficient scaleFactor exponent must be 
- *            non-negative (sf=0). 
- *   order - the maximum of the degrees of the numerator and denominator 
- *            coefficient polynomials from the system transfer function, H(z). 
- *            In the notation of section 2.2.3.2, the parameter 
- *            order=max(K,M)=L gives the maximum delay, in samples, used to 
- *            compute each output sample. 
- *   pDelayLine - pointer to the L-element filter memory buffer (state). The 
- *            user is responsible for allocation, initialization, and 
- *            deallocation. The filter memory elements are initialized to zero 
- *            in most applications. 
+ *
+ *   pSrc  - pointer to the vector of input samples to which the
+ *            filter is applied
+ *   len - the number of samples contained in both the input and output
+ *            vectors
+ *   pTaps - pointer to the 2L+2-element vector that contains the combined
+ *            numerator and denominator filter coefficients from the system
+ *            transfer function, H(z). Coefficient scaling and coefficient
+ *            vector organization should follow the conventions described
+ *            above. The value of the coefficient scaleFactor exponent must be
+ *            non-negative (sf=0).
+ *   order - the maximum of the degrees of the numerator and denominator
+ *            coefficient polynomials from the system transfer function, H(z).
+ *            In the notation of section 2.2.3.2, the parameter
+ *            order=max(K,M)=L gives the maximum delay, in samples, used to
+ *            compute each output sample.
+ *   pDelayLine - pointer to the L-element filter memory buffer (state). The
+ *            user is responsible for allocation, initialization, and
+ *            deallocation. The filter memory elements are initialized to zero
+ *            in most applications.
  *
  * Output Arguments:
- *   
- *   pDst - pointer to the vector of filtered output samples 
+ *
+ *   pDst - pointer to the vector of filtered output samples
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    one or more of the following pointers is NULL: 
- *             -  pSrc, 
- *             -  pDst, 
- *             -  pTaps, or 
- *             -  pDelayLine. 
- *    -    len < 0 
- *    -    pTaps[order+1] < 0 (negative scaling) 
- *    -    order < 1 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    one or more of the following pointers is NULL:
+ *             -  pSrc,
+ *             -  pDst,
+ *             -  pTaps, or
+ *             -  pDelayLine.
+ *    -    len < 0
+ *    -    pTaps[order+1] < 0 (negative scaling)
+ *    -    order < 1
  *
  */
 OMXResult omxSP_IIR_Direct_S16 (
@@ -839,53 +839,53 @@
  * Function:  omxSP_IIR_Direct_S16_I   (2.2.3.2.1)
  *
  * Description:
- * Block IIR filtering for 16-bit data. This function applies the direct form 
- * II IIR filter defined by the coefficient vector pTaps to a vector of input 
- * data.  The internal accumulator width must be at least 32 bits, and the 
- * result is saturated if the operation produces a value outside the range of 
- * a signed 16-bit integer, i.e., the output will saturate to 0x8000 (-32768) 
- * for a negative overflow or 0x7fff (32767) for a positive overflow.  The 
- * result is undefined if any of the partially accumulated values exceeds the 
- * range of a signed 32-bit integer. 
+ * Block IIR filtering for 16-bit data. This function applies the direct form
+ * II IIR filter defined by the coefficient vector pTaps to a vector of input
+ * data.  The internal accumulator width must be at least 32 bits, and the
+ * result is saturated if the operation produces a value outside the range of
+ * a signed 16-bit integer, i.e., the output will saturate to 0x8000 (-32768)
+ * for a negative overflow or 0x7fff (32767) for a positive overflow.  The
+ * result is undefined if any of the partially accumulated values exceeds the
+ * range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pSrcDst - pointer to the vector of input samples to which the 
- *            filter is applied 
- *   len - the number of samples contained in both the input and output 
- *            vectors 
- *   pTaps - pointer to the 2L+2-element vector that contains the combined 
- *            numerator and denominator filter coefficients from the system 
- *            transfer function, H(z). Coefficient scaling and coefficient 
- *            vector organization should follow the conventions described 
- *            above. The value of the coefficient scaleFactor exponent must be 
- *            non-negative (sf>=0). 
- *   order - the maximum of the degrees of the numerator and denominator 
- *            coefficient polynomials from the system transfer function, H(z). 
- *            In the notation of section 2.2.3.2, the parameter 
- *            order=max(K,M)=L gives the maximum delay, in samples, used to 
- *            compute each output sample. 
- *   pDelayLine - pointer to the L-element filter memory buffer (state). The 
- *            user is responsible for allocation, initialization, and 
- *            deallocation. The filter memory elements are initialized to zero 
- *            in most applications. 
+ *
+ *   pSrcDst - pointer to the vector of input samples to which the
+ *            filter is applied
+ *   len - the number of samples contained in both the input and output
+ *            vectors
+ *   pTaps - pointer to the 2L+2-element vector that contains the combined
+ *            numerator and denominator filter coefficients from the system
+ *            transfer function, H(z). Coefficient scaling and coefficient
+ *            vector organization should follow the conventions described
+ *            above. The value of the coefficient scaleFactor exponent must be
+ *            non-negative (sf>=0).
+ *   order - the maximum of the degrees of the numerator and denominator
+ *            coefficient polynomials from the system transfer function, H(z).
+ *            In the notation of section 2.2.3.2, the parameter
+ *            order=max(K,M)=L gives the maximum delay, in samples, used to
+ *            compute each output sample.
+ *   pDelayLine - pointer to the L-element filter memory buffer (state). The
+ *            user is responsible for allocation, initialization, and
+ *            deallocation. The filter memory elements are initialized to zero
+ *            in most applications.
  *
  * Output Arguments:
- *   
- *   pSrcDst - pointer to the vector of filtered output samples 
+ *
+ *   pSrcDst - pointer to the vector of filtered output samples
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    one or more of the following pointers is NULL: 
- *             -  pSrcDst, 
- *             -  pTaps, or 
- *             -  pDelayLine. 
- *    -    len < 0 
- *    -    pTaps[order+1] < 0 (negative scaling) 
- *    -    order < 1 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    one or more of the following pointers is NULL:
+ *             -  pSrcDst,
+ *             -  pTaps, or
+ *             -  pDelayLine.
+ *    -    len < 0
+ *    -    pTaps[order+1] < 0 (negative scaling)
+ *    -    order < 1
  *
  */
 OMXResult omxSP_IIR_Direct_S16_I (
@@ -902,48 +902,48 @@
  * Function:  omxSP_IIROne_Direct_S16   (2.2.3.2.2)
  *
  * Description:
- * Single sample IIR filtering for 16-bit data.  This function applies the 
- * direct form II IIR filter defined by the coefficient vector pTaps to a 
- * single sample of input data. The internal accumulator width must be at 
- * least 32 bits, and the result is saturated if the operation produces a 
- * value outside the range of a signed 16-bit integer, i.e., the output will 
- * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a 
- * positive overflow.  The result is undefined if any of the partially 
- * accumulated values exceeds the range of a signed 32-bit integer. 
+ * Single sample IIR filtering for 16-bit data.  This function applies the
+ * direct form II IIR filter defined by the coefficient vector pTaps to a
+ * single sample of input data. The internal accumulator width must be at
+ * least 32 bits, and the result is saturated if the operation produces a
+ * value outside the range of a signed 16-bit integer, i.e., the output will
+ * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a
+ * positive overflow.  The result is undefined if any of the partially
+ * accumulated values exceeds the range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   val - the single input sample to which the filter is 
- *            applied.  
- *   pTaps - pointer to the 2L+2 -element vector that contains the combined 
- *            numerator and denominator filter coefficients from the system 
- *            transfer function, H(z). Coefficient scaling and coefficient 
- *            vector organization should follow the conventions described 
- *            above. The value of the coefficient scaleFactor exponent must be 
- *            non-negative (sf>=0). 
- *   order - the maximum of the degrees of the numerator and denominator 
- *            coefficient polynomials from the system transfer function, H(z). 
- *            In the notation of section 2.2.3.2, the parameter 
- *            order=max(K,M)=L gives the maximum delay, in samples, used to 
- *            compute each output sample. 
- *   pDelayLine - pointer to the L-element filter memory buffer (state). The 
- *            user is responsible for allocation, initialization, and 
- *            deallocation. The filter memory elements are initialized to zero 
- *            in most applications. 
+ *
+ *   val - the single input sample to which the filter is
+ *            applied.
+ *   pTaps - pointer to the 2L+2 -element vector that contains the combined
+ *            numerator and denominator filter coefficients from the system
+ *            transfer function, H(z). Coefficient scaling and coefficient
+ *            vector organization should follow the conventions described
+ *            above. The value of the coefficient scaleFactor exponent must be
+ *            non-negative (sf>=0).
+ *   order - the maximum of the degrees of the numerator and denominator
+ *            coefficient polynomials from the system transfer function, H(z).
+ *            In the notation of section 2.2.3.2, the parameter
+ *            order=max(K,M)=L gives the maximum delay, in samples, used to
+ *            compute each output sample.
+ *   pDelayLine - pointer to the L-element filter memory buffer (state). The
+ *            user is responsible for allocation, initialization, and
+ *            deallocation. The filter memory elements are initialized to zero
+ *            in most applications.
  *
  * Output Arguments:
- *   
- *   pResult - pointer to the filtered output sample 
+ *
+ *   pResult - pointer to the filtered output sample
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    one or more of the following pointers is NULL: pResult, 
- *              pTaps, or pDelayLine. 
- *    -    order < 1 
- *    -    pTaps[order+1] < 0 (negative scaling) 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    one or more of the following pointers is NULL: pResult,
+ *              pTaps, or pDelayLine.
+ *    -    order < 1
+ *    -    pTaps[order+1] < 0 (negative scaling)
  *
  */
 OMXResult omxSP_IIROne_Direct_S16 (
@@ -960,48 +960,48 @@
  * Function:  omxSP_IIROne_Direct_S16_I   (2.2.3.2.2)
  *
  * Description:
- * Single sample IIR filtering for 16-bit data.  This function applies the 
- * direct form II IIR filter defined by the coefficient vector pTaps to a 
- * single sample of input data. The internal accumulator width must be at 
- * least 32 bits, and the result is saturated if the operation produces a 
- * value outside the range of a signed 16-bit integer, i.e., the output will 
- * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a 
- * positive overflow.  The result is undefined if any of the partially 
- * accumulated values exceeds the range of a signed 32-bit integer. 
+ * Single sample IIR filtering for 16-bit data.  This function applies the
+ * direct form II IIR filter defined by the coefficient vector pTaps to a
+ * single sample of input data. The internal accumulator width must be at
+ * least 32 bits, and the result is saturated if the operation produces a
+ * value outside the range of a signed 16-bit integer, i.e., the output will
+ * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a
+ * positive overflow.  The result is undefined if any of the partially
+ * accumulated values exceeds the range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pValResult - pointer to the single input sample to which the filter is 
+ *
+ *   pValResult - pointer to the single input sample to which the filter is
  *            applied.
- *   pTaps - pointer to the 2L+2 -element vector that contains the combined 
- *            numerator and denominator filter coefficients from the system 
- *            transfer function, H(z). Coefficient scaling and coefficient 
- *            vector organization should follow the conventions described 
- *            above. The value of the coefficient scaleFactor exponent must be 
- *            non-negative (sf>=0). 
- *   order - the maximum of the degrees of the numerator and denominator 
- *            coefficient polynomials from the system transfer function, H(z). 
- *            In the notation of section 2.2.3.2, the parameter 
- *            order=max(K,M)=L gives the maximum delay, in samples, used to 
- *            compute each output sample. 
- *   pDelayLine - pointer to the L-element filter memory buffer (state). The 
- *            user is responsible for allocation, initialization, and 
- *            deallocation. The filter memory elements are initialized to zero 
- *            in most applications. 
+ *   pTaps - pointer to the 2L+2 -element vector that contains the combined
+ *            numerator and denominator filter coefficients from the system
+ *            transfer function, H(z). Coefficient scaling and coefficient
+ *            vector organization should follow the conventions described
+ *            above. The value of the coefficient scaleFactor exponent must be
+ *            non-negative (sf>=0).
+ *   order - the maximum of the degrees of the numerator and denominator
+ *            coefficient polynomials from the system transfer function, H(z).
+ *            In the notation of section 2.2.3.2, the parameter
+ *            order=max(K,M)=L gives the maximum delay, in samples, used to
+ *            compute each output sample.
+ *   pDelayLine - pointer to the L-element filter memory buffer (state). The
+ *            user is responsible for allocation, initialization, and
+ *            deallocation. The filter memory elements are initialized to zero
+ *            in most applications.
  *
  * Output Arguments:
- *   
- *   pValResult - pointer to the filtered output sample 
+ *
+ *   pValResult - pointer to the filtered output sample
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    one or more of the following pointers is NULL:  
- *              pValResult, pTaps, or pDelayLine. 
- *    -    order < 1 
- *    -    pTaps[order+1] < 0 (negative scaling) 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    one or more of the following pointers is NULL:
+ *              pValResult, pTaps, or pDelayLine.
+ *    -    order < 1
+ *    -    pTaps[order+1] < 0 (negative scaling)
  *
  */
 OMXResult omxSP_IIROne_Direct_S16_I (
@@ -1017,47 +1017,47 @@
  * Function:  omxSP_IIR_BiQuadDirect_S16   (2.2.3.3.1)
  *
  * Description:
- * Block biquad IIR filtering for 16-bit data type. This function applies the 
- * direct form II biquad IIR cascade defined by the coefficient vector pTaps 
- * to a vector of input data.  The internal accumulator width must be at least 
- * 32 bits, and the result is saturated if the operation produces a value 
- * outside the range of a signed 16-bit integer, i.e., the output will 
- * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a 
- * positive overflow.  The result is undefined if any of the partially 
- * accumulated values exceeds the range of a signed 32-bit integer. 
+ * Block biquad IIR filtering for 16-bit data type. This function applies the
+ * direct form II biquad IIR cascade defined by the coefficient vector pTaps
+ * to a vector of input data.  The internal accumulator width must be at least
+ * 32 bits, and the result is saturated if the operation produces a value
+ * outside the range of a signed 16-bit integer, i.e., the output will
+ * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a
+ * positive overflow.  The result is undefined if any of the partially
+ * accumulated values exceeds the range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pSrc - pointer to the vector of input samples to which the 
- *            filter is applied 
- *   len - the number of samples contained in both the input and output 
- *            vectors 
- *   pTaps - pointer to the 6P -element vector that contains the combined 
- *            numerator and denominator filter coefficients from the biquad 
- *            cascade. Coefficient scaling and coefficient vector organization 
- *            should follow the conventions described above. The value of the 
- *            coefficient scaleFactor exponent must be non-negative. (sfp>=0). 
- *   numBiquad - the number of biquads contained in the IIR filter cascade: 
- *            (P) 
- *   pDelayLine - pointer to the 2P -element filter memory buffer (state). 
- *            The user is responsible for allocation, initialization, and 
- *            de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
+ *
+ *   pSrc - pointer to the vector of input samples to which the
+ *            filter is applied
+ *   len - the number of samples contained in both the input and output
+ *            vectors
+ *   pTaps - pointer to the 6P -element vector that contains the combined
+ *            numerator and denominator filter coefficients from the biquad
+ *            cascade. Coefficient scaling and coefficient vector organization
+ *            should follow the conventions described above. The value of the
+ *            coefficient scaleFactor exponent must be non-negative. (sfp>=0).
+ *   numBiquad - the number of biquads contained in the IIR filter cascade:
+ *            (P)
+ *   pDelayLine - pointer to the 2P -element filter memory buffer (state).
+ *            The user is responsible for allocation, initialization, and
+ *            de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
  *
  * Output Arguments:
- *   
- *   pDst - pointer to the vector of filtered output samples 
+ *
+ *   pDst - pointer to the vector of filtered output samples
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    one or more of the following pointers is NULL: pSrc, pDst, 
- *              pTaps, or pDelayLine. 
- *    -    len < 0 
- *    -    numBiquad < 1 
- *    -    pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling) 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    one or more of the following pointers is NULL: pSrc, pDst,
+ *              pTaps, or pDelayLine.
+ *    -    len < 0
+ *    -    numBiquad < 1
+ *    -    pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling)
  *
  */
 OMXResult omxSP_IIR_BiQuadDirect_S16 (
@@ -1075,47 +1075,47 @@
  * Function:  omxSP_IIR_BiQuadDirect_S16_I   (2.2.3.3.1)
  *
  * Description:
- * Block biquad IIR filtering for 16-bit data type. This function applies the 
- * direct form II biquad IIR cascade defined by the coefficient vector pTaps 
- * to a vector of input data.  The internal accumulator width must be at least 
- * 32 bits, and the result is saturated if the operation produces a value 
- * outside the range of a signed 16-bit integer, i.e., the output will 
- * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a 
- * positive overflow.  The result is undefined if any of the partially 
- * accumulated values exceeds the range of a signed 32-bit integer. 
+ * Block biquad IIR filtering for 16-bit data type. This function applies the
+ * direct form II biquad IIR cascade defined by the coefficient vector pTaps
+ * to a vector of input data.  The internal accumulator width must be at least
+ * 32 bits, and the result is saturated if the operation produces a value
+ * outside the range of a signed 16-bit integer, i.e., the output will
+ * saturate to 0x8000 (-32768) for a negative overflow or 0x7fff (32767) for a
+ * positive overflow.  The result is undefined if any of the partially
+ * accumulated values exceeds the range of a signed 32-bit integer.
  *
  * Input Arguments:
- *   
- *   pSrcDst - pointer to the vector of input samples to which the 
- *            filter is applied 
- *   len - the number of samples contained in both the input and output 
- *            vectors 
- *   pTaps - pointer to the 6P -element vector that contains the combined 
- *            numerator and denominator filter coefficients from the biquad 
- *            cascade. Coefficient scaling and coefficient vector organization 
- *            should follow the conventions described above. The value of the 
- *            coefficient scaleFactor exponent must be non-negative. (sfp>=0). 
- *   numBiquad - the number of biquads contained in the IIR filter cascade: 
- *            (P) 
- *   pDelayLine - pointer to the 2P -element filter memory buffer (state). 
- *            The user is responsible for allocation, initialization, and 
- *            de-allocation. The filter memory elements are initialized to 
- *            zero in most applications. 
+ *
+ *   pSrcDst - pointer to the vector of input samples to which the
+ *            filter is applied
+ *   len - the number of samples contained in both the input and output
+ *            vectors
+ *   pTaps - pointer to the 6P -element vector that contains the combined
+ *            numerator and denominator filter coefficients from the biquad
+ *            cascade. Coefficient scaling and coefficient vector organization
+ *            should follow the conventions described above. The value of the
+ *            coefficient scaleFactor exponent must be non-negative. (sfp>=0).
+ *   numBiquad - the number of biquads contained in the IIR filter cascade:
+ *            (P)
+ *   pDelayLine - pointer to the 2P -element filter memory buffer (state).
+ *            The user is responsible for allocation, initialization, and
+ *            de-allocation. The filter memory elements are initialized to
+ *            zero in most applications.
  *
  * Output Arguments:
- *   
- *   pSrcDst - pointer to the vector of filtered output samples 
+ *
+ *   pSrcDst - pointer to the vector of filtered output samples
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    one or more of the following pointers is NULL: 
- *              pSrcDst, pTaps, or pDelayLine. 
- *    -    len < 0 
- *    -    numBiquad < 1 
- *    -    pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling) 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    one or more of the following pointers is NULL:
+ *              pSrcDst, pTaps, or pDelayLine.
+ *    -    len < 0
+ *    -    numBiquad < 1
+ *    -    pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling)
  *
  */
 OMXResult omxSP_IIR_BiQuadDirect_S16_I (
@@ -1132,45 +1132,45 @@
  * Function:  omxSP_IIROne_BiQuadDirect_S16   (2.2.3.3.2)
  *
  * Description:
- * Single-sample biquad IIR filtering for 16-bit data type. This function 
- * applies the direct form II biquad IIR cascade defined by the coefficient 
- * vector pTaps to a single sample of input data.  The internal accumulator 
- * width must be at least 32 bits, and the result is saturated if the 
- * operation produces a value outside the range of a signed 16-bit integer, 
- * i.e., the output will saturate to 0x8000 (-32768) for a negative overflow 
- * or 0x7fff (32767) for a positive overflow.  The result is undefined if any 
- * of the partially accumulated values exceeds the range of a signed 32-bit 
- * integer. 
+ * Single-sample biquad IIR filtering for 16-bit data type. This function
+ * applies the direct form II biquad IIR cascade defined by the coefficient
+ * vector pTaps to a single sample of input data.  The internal accumulator
+ * width must be at least 32 bits, and the result is saturated if the
+ * operation produces a value outside the range of a signed 16-bit integer,
+ * i.e., the output will saturate to 0x8000 (-32768) for a negative overflow
+ * or 0x7fff (32767) for a positive overflow.  The result is undefined if any
+ * of the partially accumulated values exceeds the range of a signed 32-bit
+ * integer.
  *
  * Input Arguments:
- *   
- *   val   - the single input sample to which the filter is 
- *            applied. 
- *   pTaps - pointer to the 6P-element vector that contains the combined 
- *            numerator and denominator filter coefficients from the biquad 
- *            cascade. Coefficient scaling and coefficient vector organization 
- *            should follow the conventions described above. The value of the 
- *            coefficient scalefactor exponent must be non-negative: (sfp>=0). 
- *   numBiquad - the number of biquads contained in the IIR filter cascade: 
- *            (P) 
- *   pDelayLine - pointer to the 2p-element filter memory buffer (state). The 
- *            user is responsible for allocation, initialization, and 
- *            deallocation. The filter memory elements are initialized to zero 
- *            in most applications. 
+ *
+ *   val   - the single input sample to which the filter is
+ *            applied.
+ *   pTaps - pointer to the 6P-element vector that contains the combined
+ *            numerator and denominator filter coefficients from the biquad
+ *            cascade. Coefficient scaling and coefficient vector organization
+ *            should follow the conventions described above. The value of the
+ *            coefficient scalefactor exponent must be non-negative: (sfp>=0).
+ *   numBiquad - the number of biquads contained in the IIR filter cascade:
+ *            (P)
+ *   pDelayLine - pointer to the 2p-element filter memory buffer (state). The
+ *            user is responsible for allocation, initialization, and
+ *            deallocation. The filter memory elements are initialized to zero
+ *            in most applications.
  *
  * Output Arguments:
- *   
- *   pResult - pointer to the filtered output sample 
+ *
+ *   pResult - pointer to the filtered output sample
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    one or more of the following pointers is NULL: pResult, 
- *              pValResult, pTaps, or pDelayLine. 
- *    -    numBiquad < 1 
- *    -    pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling) 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    one or more of the following pointers is NULL: pResult,
+ *              pValResult, pTaps, or pDelayLine.
+ *    -    numBiquad < 1
+ *    -    pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling)
  *
  */
 OMXResult omxSP_IIROne_BiQuadDirect_S16 (
@@ -1187,45 +1187,45 @@
  * Function:  omxSP_IIROne_BiQuadDirect_S16_I   (2.2.3.3.2)
  *
  * Description:
- * Single-sample biquad IIR filtering for 16-bit data type. This function 
- * applies the direct form II biquad IIR cascade defined by the coefficient 
- * vector pTaps to a single sample of input data.  The internal accumulator 
- * width must be at least 32 bits, and the result is saturated if the 
- * operation produces a value outside the range of a signed 16-bit integer, 
- * i.e., the output will saturate to 0x8000 (-32768) for a negative overflow 
- * or 0x7fff (32767) for a positive overflow.  The result is undefined if any 
- * of the partially accumulated values exceeds the range of a signed 32-bit 
- * integer. 
+ * Single-sample biquad IIR filtering for 16-bit data type. This function
+ * applies the direct form II biquad IIR cascade defined by the coefficient
+ * vector pTaps to a single sample of input data.  The internal accumulator
+ * width must be at least 32 bits, and the result is saturated if the
+ * operation produces a value outside the range of a signed 16-bit integer,
+ * i.e., the output will saturate to 0x8000 (-32768) for a negative overflow
+ * or 0x7fff (32767) for a positive overflow.  The result is undefined if any
+ * of the partially accumulated values exceeds the range of a signed 32-bit
+ * integer.
  *
  * Input Arguments:
- *   
- *   pValResult - pointer to the single input sample to which the filter is 
- *            applied. 
- *   pTaps - pointer to the 6P-element vector that contains the combined 
- *            numerator and denominator filter coefficients from the biquad 
- *            cascade. Coefficient scaling and coefficient vector organization 
- *            should follow the conventions described above. The value of the 
- *            coefficient scalefactor exponent must be non-negative: (sfp>=0). 
- *   numBiquad - the number of biquads contained in the IIR filter cascade: 
- *            (P) 
- *   pDelayLine - pointer to the 2p-element filter memory buffer (state). The 
- *            user is responsible for allocation, initialization, and 
- *            deallocation. The filter memory elements are initialized to zero 
- *            in most applications. 
+ *
+ *   pValResult - pointer to the single input sample to which the filter is
+ *            applied.
+ *   pTaps - pointer to the 6P-element vector that contains the combined
+ *            numerator and denominator filter coefficients from the biquad
+ *            cascade. Coefficient scaling and coefficient vector organization
+ *            should follow the conventions described above. The value of the
+ *            coefficient scalefactor exponent must be non-negative: (sfp>=0).
+ *   numBiquad - the number of biquads contained in the IIR filter cascade:
+ *            (P)
+ *   pDelayLine - pointer to the 2p-element filter memory buffer (state). The
+ *            user is responsible for allocation, initialization, and
+ *            deallocation. The filter memory elements are initialized to zero
+ *            in most applications.
  *
  * Output Arguments:
- *   
- *   pValResult - pointer to the filtered output sample 
+ *
+ *   pValResult - pointer to the filtered output sample
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
  *    -    one or more of the following pointers is NULL:
- *              pValResult, pTaps, or pDelayLine. 
- *    -    numBiquad < 1 
- *    -    pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling) 
+ *              pValResult, pTaps, or pDelayLine.
+ *    -    numBiquad < 1
+ *    -    pTaps[3+n*6] < 0, for 0 <= n < numBiquad (negative scaling)
  *
  */
 OMXResult omxSP_IIROne_BiQuadDirect_S16_I (
@@ -1241,33 +1241,33 @@
  * Function:  omxSP_FilterMedian_S32   (2.2.3.4.1)
  *
  * Description:
- * This function computes the median over the region specified by the median 
- * mask for the every element of the input array. The median outputs are 
- * stored in the corresponding elements of the output vector. 
+ * This function computes the median over the region specified by the median
+ * mask for the every element of the input array. The median outputs are
+ * stored in the corresponding elements of the output vector.
  *
  * Input Arguments:
- *   
- *   pSrc - pointer to the input vector 
- *   len - number of elements contained in the input and output vectors (0 < 
- *            len < 65536) 
- *   maskSize - median mask size; if an even value is specified, the function 
- *            subtracts 1 and uses the odd value of the filter mask for median 
- *            filtering (0 < maskSize < 256) 
+ *
+ *   pSrc - pointer to the input vector
+ *   len - number of elements contained in the input and output vectors (0 <
+ *            len < 65536)
+ *   maskSize - median mask size; if an even value is specified, the function
+ *            subtracts 1 and uses the odd value of the filter mask for median
+ *            filtering (0 < maskSize < 256)
  *
  * Output Arguments:
- *   
- *   pDst - pointer to the median-filtered output vector 
+ *
+ *   pDst - pointer to the median-filtered output vector
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   one or more of the following pointers is NULL: pSrc, pDst. 
- *    -    len < 0 
- *    -    maskSize < 1 or maskSize> 255 
- *    OMX_StsSP_EvenMedianMaskSizeErr - even mask size replaced by odd mask 
- *              size 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   one or more of the following pointers is NULL: pSrc, pDst.
+ *    -    len < 0
+ *    -    maskSize < 1 or maskSize> 255
+ *    OMX_StsSP_EvenMedianMaskSizeErr - even mask size replaced by odd mask
+ *              size
  *
  */
 OMXResult omxSP_FilterMedian_S32 (
@@ -1283,33 +1283,33 @@
  * Function:  omxSP_FilterMedian_S32_I   (2.2.3.4.1)
  *
  * Description:
- * This function computes the median over the region specified by the median 
- * mask for the every element of the input array. The median outputs are 
- * stored in the corresponding elements of the output vector. 
+ * This function computes the median over the region specified by the median
+ * mask for the every element of the input array. The median outputs are
+ * stored in the corresponding elements of the output vector.
  *
  * Input Arguments:
- *   
- *   pSrcDst - pointer to the input vector 
- *   len - number of elements contained in the input and output vectors (0 < 
- *            len < 65536) 
- *   maskSize - median mask size; if an even value is specified, the function 
- *            subtracts 1 and uses the odd value of the filter mask for median 
- *            filtering (0 < maskSize < 256) 
+ *
+ *   pSrcDst - pointer to the input vector
+ *   len - number of elements contained in the input and output vectors (0 <
+ *            len < 65536)
+ *   maskSize - median mask size; if an even value is specified, the function
+ *            subtracts 1 and uses the odd value of the filter mask for median
+ *            filtering (0 < maskSize < 256)
  *
  * Output Arguments:
- *   
- *   pSrcDst - pointer to the median-filtered output vector 
+ *
+ *   pSrcDst - pointer to the median-filtered output vector
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    pSrcDst is NULL. 
- *    -    len < 0 
- *    -    maskSize < 1 or maskSize> 255 
- *    OMX_StsSP_EvenMedianMaskSizeErr - even mask size replaced by odd mask 
- *              size 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    pSrcDst is NULL.
+ *    -    len < 0
+ *    -    maskSize < 1 or maskSize> 255
+ *    OMX_StsSP_EvenMedianMaskSizeErr - even mask size replaced by odd mask
+ *              size
  *
  */
 OMXResult omxSP_FilterMedian_S32_I (
@@ -1324,36 +1324,36 @@
  * Function:  omxSP_FFTInit_C_SC16   (2.2.4.1.2)
  *
  * Description:
- * These functions initialize the specification structures required for the 
- * complex FFT and IFFT functions. Desired block length is specified as an 
- * input. The function <FFTInit_C_SC16> is used to initialize the 
- * specification structures for functions <FFTFwd_CToC_SC16_Sfs> and 
+ * These functions initialize the specification structures required for the
+ * complex FFT and IFFT functions. Desired block length is specified as an
+ * input. The function <FFTInit_C_SC16> is used to initialize the
+ * specification structures for functions <FFTFwd_CToC_SC16_Sfs> and
  * <FFTInv_CToC_SC16_Sfs>.
  *
- * Memory for the specification structure *pFFTSpec 
- * must be allocated prior to calling these functions and should be 4-byte 
- * aligned for omxSP_FFTInit_C_SC16. 
+ * Memory for the specification structure *pFFTSpec
+ * must be allocated prior to calling these functions and should be 4-byte
+ * aligned for omxSP_FFTInit_C_SC16.
  *
- * The space required for *pFFTSpec, in bytes, can be 
- * determined using <FFTGetBufSize_C_SC16>. 
+ * The space required for *pFFTSpec, in bytes, can be
+ * determined using <FFTGetBufSize_C_SC16>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; 
- *           valid in the range [0,12] 
+ *
+ *   order - base-2 logarithm of the desired block length;
+ *           valid in the range [0,12]
  *
  * Output Arguments:
- *   
- *   pFFTSpec - pointer to initialized specification structure 
+ *
+ *   pFFTSpec - pointer to initialized specification structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr -no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   pFFTSpec is either NULL or violates the 4-byte alignment 
- *              restrictions 
- *    -   order < 0 or order > 12 
+ *
+ *    OMX_Sts_NoErr -no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   pFFTSpec is either NULL or violates the 4-byte alignment
+ *              restrictions
+ *    -   order < 0 or order > 12
  *
  */
 OMXResult omxSP_FFTInit_C_SC16 (
@@ -1367,36 +1367,36 @@
  * Function:  omxSP_FFTInit_C_SC32   (2.2.4.1.2)
  *
  * Description:
- * These functions initialize the specification structures required for the 
- * complex FFT and IFFT functions. Desired block length is specified as an 
- * input. The function <FFTInit_C_SC32> is used to initialize 
- * the specification structures for the functions <FFTFwd_CToC_SC32_Sfs> and 
+ * These functions initialize the specification structures required for the
+ * complex FFT and IFFT functions. Desired block length is specified as an
+ * input. The function <FFTInit_C_SC32> is used to initialize
+ * the specification structures for the functions <FFTFwd_CToC_SC32_Sfs> and
  * <FFTInv_CToC_SC32_Sfs>.
  *
- * Memory for the specification structure *pFFTSpec must be allocated prior 
- * to calling these functions and should be 8-byte aligned for 
- * omxSP_FFTInit_C_SC32. 
+ * Memory for the specification structure *pFFTSpec must be allocated prior
+ * to calling these functions and should be 8-byte aligned for
+ * omxSP_FFTInit_C_SC32.
  *
- * The space required for *pFFTSpec, in bytes, can be 
- * determined using <FFTGetBufSize_C_SC32>. 
+ * The space required for *pFFTSpec, in bytes, can be
+ * determined using <FFTGetBufSize_C_SC32>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; valid in the range 
- *            [0,12] 
+ *
+ *   order - base-2 logarithm of the desired block length; valid in the range
+ *            [0,12]
  *
  * Output Arguments:
- *   
- *   pFFTSpec - pointer to initialized specification structure 
+ *
+ *   pFFTSpec - pointer to initialized specification structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr -no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   pFFTSpec is either NULL or violates the 8-byte alignment 
- *              restrictions 
- *    -   order < 0 or order > 12 
+ *
+ *    OMX_Sts_NoErr -no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   pFFTSpec is either NULL or violates the 8-byte alignment
+ *              restrictions
+ *    -   order < 0 or order > 12
  *
  */
 OMXResult omxSP_FFTInit_C_SC32 (
@@ -1408,35 +1408,35 @@
  * Function:  omxSP_FFTInit_C_FC32   (2.2.4.1.2)
  *
  * Description:
- * These functions initialize the specification structures required for the 
- * complex FFT and IFFT functions. Desired block length is specified as an 
- * input. The function <FFTInit_C_FC32> is used to initialize 
- * the specification structures for the functions <FFTFwd_CToC_FC32_Sfs> and 
+ * These functions initialize the specification structures required for the
+ * complex FFT and IFFT functions. Desired block length is specified as an
+ * input. The function <FFTInit_C_FC32> is used to initialize
+ * the specification structures for the functions <FFTFwd_CToC_FC32_Sfs> and
  * <FFTInv_CToC_FC32_Sfs>.
  *
- * Memory for the specification structure *pFFTSpec must be allocated prior 
- * to calling these functions and should be 8-byte aligned for 
- * omxSP_FFTInit_C_FC32. 
+ * Memory for the specification structure *pFFTSpec must be allocated prior
+ * to calling these functions and should be 8-byte aligned for
+ * omxSP_FFTInit_C_FC32.
  *
- * The space required for *pFFTSpec, in bytes, can be 
- * determined using <FFTGetBufSize_C_FC32>. 
+ * The space required for *pFFTSpec, in bytes, can be
+ * determined using <FFTGetBufSize_C_FC32>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; valid in the range 
- *            [1,15] 
+ *
+ *   order - base-2 logarithm of the desired block length; valid in the range
+ *            [1,15]
  *
  * Output Arguments:
- *   
- *   pFFTSpec - pointer to initialized specification structure 
+ *
+ *   pFFTSpec - pointer to initialized specification structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr -no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   pFFTSpec is either NULL or violates the 8-byte alignment 
- *              restrictions 
+ *
+ *    OMX_Sts_NoErr -no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   pFFTSpec is either NULL or violates the 8-byte alignment
+ *              restrictions
  *    -   order < 1 or order > 15
  *
  */
@@ -1451,33 +1451,33 @@
  * Function:  omxSP_FFTInit_R_S16S32   (2.2.4.1.4)
  *
  * Description:
- * These functions initialize specification structures required for the real 
- * FFT and IFFT functions. The function <FFTInit_R_S16S32> is used to 
- * initialize the specification structures for functions 
+ * These functions initialize specification structures required for the real
+ * FFT and IFFT functions. The function <FFTInit_R_S16S32> is used to
+ * initialize the specification structures for functions
  * <FFTFwd_RToCCS_S16S32_Sfs> and <FFTInv_CCSToR_S32S16_Sfs>.
- * 
- * Memory for 
- * *pFFTFwdSpec must be allocated before calling these functions and should be 
- * 8-byte aligned. The number of bytes required for *pFFTFwdSpec can be 
- * determined using <FFTGetBufSize_R_S16S32>. 
+ *
+ * Memory for
+ * *pFFTFwdSpec must be allocated before calling these functions and should be
+ * 8-byte aligned. The number of bytes required for *pFFTFwdSpec can be
+ * determined using <FFTGetBufSize_R_S16S32>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; valid in the range 
- *            [0,12] 
+ *
+ *   order - base-2 logarithm of the desired block length; valid in the range
+ *            [0,12]
  *
  * Output Arguments:
- *   
- *   pFFTFwdSpec - pointer to the initialized specification structure 
+ *
+ *   pFFTFwdSpec - pointer to the initialized specification structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   pFFTFwdSpec is either NULL or violates the 8-byte alignment 
- *              restrictions 
- *    -   order < 0 or order > 12 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   pFFTFwdSpec is either NULL or violates the 8-byte alignment
+ *              restrictions
+ *    -   order < 0 or order > 12
  *
  */
 OMXResult omxSP_FFTInit_R_S16S32(
@@ -1491,34 +1491,34 @@
  * Function:  omxSP_FFTInit_R_S16
  *
  * Description:
- * These functions initialize specification structures required for the real 
- * FFT and IFFT functions. The function <FFTInit_R_S16> is used 
+ * These functions initialize specification structures required for the real
+ * FFT and IFFT functions. The function <FFTInit_R_S16> is used
  * to initialize the specification structures for functions
  * <FFTFwd_RToCCS_S16_Sfs> and <FFTInv_CCSToR_S16_Sfs>.
  *
  * Memory for *pFFTFwdSpec must be allocated before calling these functions
- * and should be 8-byte aligned. 
+ * and should be 8-byte aligned.
  *
- * The number of bytes required for *pFFTFwdSpec can be 
- * determined using <FFTGetBufSize_R_S16>. 
+ * The number of bytes required for *pFFTFwdSpec can be
+ * determined using <FFTGetBufSize_R_S16>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; valid in the range 
- *            [1,12] 
+ *
+ *   order - base-2 logarithm of the desired block length; valid in the range
+ *            [1,12]
  *
  * Output Arguments:
- *   
- *   pFFTFwdSpec - pointer to the initialized specification structure 
+ *
+ *   pFFTFwdSpec - pointer to the initialized specification structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   pFFTFwdSpec is either NULL or violates the 8-byte alignment 
- *              restrictions 
- *    -   order < 1 or order > 12 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   pFFTFwdSpec is either NULL or violates the 8-byte alignment
+ *              restrictions
+ *    -   order < 1 or order > 12
  *
  */
 OMXResult omxSP_FFTInit_R_S16 (
@@ -1530,34 +1530,34 @@
  * Function:  omxSP_FFTInit_R_S32   (2.2.4.1.4)
  *
  * Description:
- * These functions initialize specification structures required for the real 
- * FFT and IFFT functions. The function <FFTInit_R_S32> is used to initialize 
- * the specification structures for functions <FFTFwd_RToCCS_S32_Sfs> 
- * and <FFTInv_CCSToR_S32_Sfs>. 
+ * These functions initialize specification structures required for the real
+ * FFT and IFFT functions. The function <FFTInit_R_S32> is used to initialize
+ * the specification structures for functions <FFTFwd_RToCCS_S32_Sfs>
+ * and <FFTInv_CCSToR_S32_Sfs>.
  *
  * Memory for *pFFTFwdSpec must be allocated before calling these functions
- * and should be 8-byte aligned. 
+ * and should be 8-byte aligned.
  *
- * The number of bytes required for *pFFTFwdSpec can be 
- * determined using <FFTGetBufSize_R_S32>. 
+ * The number of bytes required for *pFFTFwdSpec can be
+ * determined using <FFTGetBufSize_R_S32>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; valid in the range 
- *            [0,12] 
+ *
+ *   order - base-2 logarithm of the desired block length; valid in the range
+ *            [0,12]
  *
  * Output Arguments:
- *   
- *   pFFTFwdSpec - pointer to the initialized specification structure 
+ *
+ *   pFFTFwdSpec - pointer to the initialized specification structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   pFFTFwdSpec is either NULL or violates the 8-byte alignment 
- *              restrictions 
- *    -   order < 0 or order > 12 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   pFFTFwdSpec is either NULL or violates the 8-byte alignment
+ *              restrictions
+ *    -   order < 0 or order > 12
  *
  */
 OMXResult omxSP_FFTInit_R_S32 (
@@ -1569,33 +1569,33 @@
  * Function:  omxSP_FFTInit_R_F32
  *
  * Description:
- * These functions initialize specification structures required for the real 
- * FFT and IFFT functions. The function <FFTInit_R_F32> is used to initialize 
- * the specification structures for functions <FFTFwd_RToCCS_F32_Sfs> 
- * and <FFTInv_CCSToR_F32_Sfs>. 
+ * These functions initialize specification structures required for the real
+ * FFT and IFFT functions. The function <FFTInit_R_F32> is used to initialize
+ * the specification structures for functions <FFTFwd_RToCCS_F32_Sfs>
+ * and <FFTInv_CCSToR_F32_Sfs>.
  *
  * Memory for *pFFTFwdSpec must be allocated before calling these functions
- * and should be 8-byte aligned. 
+ * and should be 8-byte aligned.
  *
- * The number of bytes required for *pFFTFwdSpec can be 
- * determined using <FFTGetBufSize_R_F32>. 
+ * The number of bytes required for *pFFTFwdSpec can be
+ * determined using <FFTGetBufSize_R_F32>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; valid in the range 
- *            [1,15] 
+ *
+ *   order - base-2 logarithm of the desired block length; valid in the range
+ *            [1,15]
  *
  * Output Arguments:
- *   
- *   pFFTFwdSpec - pointer to the initialized specification structure 
+ *
+ *   pFFTFwdSpec - pointer to the initialized specification structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -   pFFTFwdSpec is either NULL or violates the 8-byte alignment 
- *              restrictions 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -   pFFTFwdSpec is either NULL or violates the 8-byte alignment
+ *              restrictions
  *    -   order < 1 or order > 15
  *
  */
@@ -1608,28 +1608,28 @@
  * Function:  omxSP_FFTGetBufSize_C_SC16   (2.2.4.1.6)
  *
  * Description:
- * These functions compute the size of the specification structure 
- * required for the length 2^order complex FFT and IFFT functions. The function 
- * <FFTGetBufSize_C_SC16> is used in conjunction with the 16-bit functions 
- * <FFTFwd_CToC_SC16_Sfs> and <FFTInv_CToC_SC16_Sfs>. 
+ * These functions compute the size of the specification structure
+ * required for the length 2^order complex FFT and IFFT functions. The function
+ * <FFTGetBufSize_C_SC16> is used in conjunction with the 16-bit functions
+ * <FFTFwd_CToC_SC16_Sfs> and <FFTInv_CToC_SC16_Sfs>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; valid in the range 
- *            [0,12] 
+ *
+ *   order - base-2 logarithm of the desired block length; valid in the range
+ *            [0,12]
  *
  * Output Arguments:
- *   
- *   pSize - pointer to the number of bytes required for the specification 
- *            structure 
+ *
+ *   pSize - pointer to the number of bytes required for the specification
+ *            structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    pSize is NULL 
- *    -    order < 0 or order > 12 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    pSize is NULL
+ *    -    order < 0 or order > 12
  *
  */
 OMXResult omxSP_FFTGetBufSize_C_SC16 (
@@ -1643,28 +1643,28 @@
  * Function:  omxSP_FFTGetBufSize_C_SC32   (2.2.4.1.6)
  *
  * Description:
- * These functions compute the size of the specification structure 
- * required for the length 2^order complex FFT and IFFT functions. The function 
- * <FFTGetBufSize_C_SC32> is used in conjunction with the 32-bit functions 
- * <FFTFwd_CToC_SC32_Sfs> and <FFTInv_CToC_SC32_Sfs>. 
+ * These functions compute the size of the specification structure
+ * required for the length 2^order complex FFT and IFFT functions. The function
+ * <FFTGetBufSize_C_SC32> is used in conjunction with the 32-bit functions
+ * <FFTFwd_CToC_SC32_Sfs> and <FFTInv_CToC_SC32_Sfs>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; valid in the range 
- *            [0,12] 
+ *
+ *   order - base-2 logarithm of the desired block length; valid in the range
+ *            [0,12]
  *
  * Output Arguments:
- *   
- *   pSize - pointer to the number of bytes required for the specification 
- *            structure 
+ *
+ *   pSize - pointer to the number of bytes required for the specification
+ *            structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    pSize is NULL 
- *    -    order < 0 or order > 12 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    pSize is NULL
+ *    -    order < 0 or order > 12
  *
  */
 OMXResult omxSP_FFTGetBufSize_C_SC32 (
@@ -1676,28 +1676,28 @@
  * Function:  omxSP_FFTGetBufSize_C_FC32
  *
  * Description:
- * These functions compute the size of the specification structure 
- * required for the length 2^order complex FFT and IFFT functions. The function 
- * <FFTGetBufSize_C_FC32> is used in conjunction with the 32-bit functions 
- * <FFTFwd_CToC_FC32_Sfs> and <FFTInv_CToC_FC32_Sfs>. 
+ * These functions compute the size of the specification structure
+ * required for the length 2^order complex FFT and IFFT functions. The function
+ * <FFTGetBufSize_C_FC32> is used in conjunction with the 32-bit functions
+ * <FFTFwd_CToC_FC32_Sfs> and <FFTInv_CToC_FC32_Sfs>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the desired block length; valid in the range 
- *            [1,15] 
+ *
+ *   order - base-2 logarithm of the desired block length; valid in the range
+ *            [1,15]
  *
  * Output Arguments:
- *   
- *   pSize - pointer to the number of bytes required for the specification 
- *            structure 
+ *
+ *   pSize - pointer to the number of bytes required for the specification
+ *            structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the 
- *              following is true: 
- *    -    pSize is NULL 
- *    -    order < 1 or order > 15 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments; returned if one or more of the
+ *              following is true:
+ *    -    pSize is NULL
+ *    -    order < 1 or order > 15
  *
  */
 OMXResult omxSP_FFTGetBufSize_C_FC32(
@@ -1710,27 +1710,27 @@
  * Function:  omxSP_FFTGetBufSize_R_S16S32   (2.2.4.1.8)
  *
  * Description:
- * order These functions compute the size of the specification structure 
- * required for the length 2^order real FFT and IFFT functions. The function 
- * <FFTGetBufSize_R_S16S32> is used in conjunction with the 16-bit functions 
- * <FFTFwd_RToCCS_S16S32_Sfs> and <FFTInv_CCSToR_S32S16_Sfs>. 
+ * order These functions compute the size of the specification structure
+ * required for the length 2^order real FFT and IFFT functions. The function
+ * <FFTGetBufSize_R_S16S32> is used in conjunction with the 16-bit functions
+ * <FFTFwd_RToCCS_S16S32_Sfs> and <FFTInv_CCSToR_S32S16_Sfs>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the length; valid in the range [0,12] 
+ *
+ *   order - base-2 logarithm of the length; valid in the range [0,12]
  *
  * Output Arguments:
- *   
- *   pSize - pointer to the number of bytes required for the specification 
- *            structure 
+ *
+ *   pSize - pointer to the number of bytes required for the specification
+ *            structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments The function returns 
- *              OMX_Sts_BadArgErr if one or more of the following is true: 
- *    pSize is NULL 
- *    order < 0 or order > 12 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments The function returns
+ *              OMX_Sts_BadArgErr if one or more of the following is true:
+ *    pSize is NULL
+ *    order < 0 or order > 12
  *
  */
 OMXResult omxSP_FFTGetBufSize_R_S16S32(
@@ -1743,28 +1743,28 @@
  * Function:  omxSP_FFTGetBufSize_R_S16
  *
  * Description:
- * These functions compute the size of the specification structure 
- * required for the length 2^order real FFT and IFFT functions.  The function 
- * <FFTGetBufSize_R_S16> is used in conjunction with the 16-bit 
- * functions <FFTFwd_RToCCS_S16_Sfs> and <FFTInv_CCSToR_S16_Sfs>. 
+ * These functions compute the size of the specification structure
+ * required for the length 2^order real FFT and IFFT functions.  The function
+ * <FFTGetBufSize_R_S16> is used in conjunction with the 16-bit
+ * functions <FFTFwd_RToCCS_S16_Sfs> and <FFTInv_CCSToR_S16_Sfs>.
  *
  * Input Arguments:
- *   
+ *
  *   order - base-2 logarithm of the length; valid in the range
  *   [1,12]
  *
  * Output Arguments:
- *   
- *   pSize - pointer to the number of bytes required for the specification 
- *            structure 
+ *
+ *   pSize - pointer to the number of bytes required for the specification
+ *            structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments The function returns 
- *              OMX_Sts_BadArgErr if one or more of the following is true: 
- *    pSize is NULL 
- *    order < 1 or order > 12 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments The function returns
+ *              OMX_Sts_BadArgErr if one or more of the following is true:
+ *    pSize is NULL
+ *    order < 1 or order > 12
  *
  */
 OMXResult omxSP_FFTGetBufSize_R_S16 (
@@ -1776,27 +1776,27 @@
  * Function:  omxSP_FFTGetBufSize_R_S32   (2.2.4.1.8)
  *
  * Description:
- * These functions compute the size of the specification structure 
- * required for the length 2^order real FFT and IFFT functions.  The function 
- * <FFTGetBufSize_R_S32> is used in conjunction with the 32-bit functions 
- * <FFTFwd_RToCCS_S32_Sfs> and <FFTInv_CCSToR_S32_Sfs>. 
+ * These functions compute the size of the specification structure
+ * required for the length 2^order real FFT and IFFT functions.  The function
+ * <FFTGetBufSize_R_S32> is used in conjunction with the 32-bit functions
+ * <FFTFwd_RToCCS_S32_Sfs> and <FFTInv_CCSToR_S32_Sfs>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the length; valid in the range [0,12] 
+ *
+ *   order - base-2 logarithm of the length; valid in the range [0,12]
  *
  * Output Arguments:
- *   
- *   pSize - pointer to the number of bytes required for the specification 
- *            structure 
+ *
+ *   pSize - pointer to the number of bytes required for the specification
+ *            structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments The function returns 
- *              OMX_Sts_BadArgErr if one or more of the following is true: 
- *    pSize is NULL 
- *    order < 0 or order > 12 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments The function returns
+ *              OMX_Sts_BadArgErr if one or more of the following is true:
+ *    pSize is NULL
+ *    order < 0 or order > 12
  *
  */
 OMXResult omxSP_FFTGetBufSize_R_S32 (
@@ -1808,26 +1808,26 @@
  * Function:  omxSP_FFTGetBufSize_R_F32
  *
  * Description:
- * These functions compute the size of the specification structure 
- * required for the length 2^order real FFT and IFFT functions.  The function 
- * <FFTGetBufSize_R_F32> is used in conjunction with the 32-bit functions 
- * <FFTFwd_RToCCS_F32_Sfs> and <FFTInv_CCSToR_F32_Sfs>. 
+ * These functions compute the size of the specification structure
+ * required for the length 2^order real FFT and IFFT functions.  The function
+ * <FFTGetBufSize_R_F32> is used in conjunction with the 32-bit functions
+ * <FFTFwd_RToCCS_F32_Sfs> and <FFTInv_CCSToR_F32_Sfs>.
  *
  * Input Arguments:
- *   
- *   order - base-2 logarithm of the length; valid in the range [1,15] 
+ *
+ *   order - base-2 logarithm of the length; valid in the range [1,15]
  *
  * Output Arguments:
- *   
- *   pSize - pointer to the number of bytes required for the specification 
- *            structure 
+ *
+ *   pSize - pointer to the number of bytes required for the specification
+ *            structure
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments The function returns 
- *              OMX_Sts_BadArgErr if one or more of the following is true: 
- *    pSize is NULL 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments The function returns
+ *              OMX_Sts_BadArgErr if one or more of the following is true:
+ *    pSize is NULL
  *    order < 1 or order > 15
  *
  */
@@ -1842,37 +1842,37 @@
  * Function:  omxSP_FFTFwd_CToC_SC16_Sfs   (2.2.4.2.2)
  *
  * Description:
- * Compute an FFT for a complex signal of length of 2^order, 
- * where 0 <= order <= 12. 
- * Transform length is determined by the specification structure, which 
- * must be initialized prior to calling the FFT function using the appropriate 
- * helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship 
- * between the input and output sequences can be expressed in terms of the 
- * DFT, i.e., 
+ * Compute an FFT for a complex signal of length of 2^order,
+ * where 0 <= order <= 12.
+ * Transform length is determined by the specification structure, which
+ * must be initialized prior to calling the FFT function using the appropriate
+ * helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship
+ * between the input and output sequences can be expressed in terms of the
+ * DFT, i.e.,
  *
  *      X[k] = 2^(-scaleFactor) . SUM[n=0...N-1]x[n].e^(-jnk.2.pi/N)
  *      k = 0,1,2,..., N-1
  *      N = 2^order
  *
  * Input Arguments:
- *   pSrc - pointer to the input signal, a complex-valued vector of length 2^order; 
- *            must be aligned on a 32 byte boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
- *   scaleFactor - output scale factor; the range for is [0,16] 
+ *   pSrc - pointer to the input signal, a complex-valued vector of length 2^order;
+ *            must be aligned on a 32 byte boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
+ *   scaleFactor - output scale factor; the range for is [0,16]
  *
  * Output Arguments:
- *   pDst - pointer to the complex-valued output vector, of length 2^order; 
- *          must be aligned on an 32-byte boundary. 
+ *   pDst - pointer to the complex-valued output vector, of length 2^order;
+ *          must be aligned on an 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - returned if one or more of the following conditions 
- *              is true: 
- *    -   one or more of the following pointers is NULL: pSrc, pDst, or 
- *              pFFTSpec. 
- *    -    pSrc or pDst is not 32-byte aligned 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - returned if one or more of the following conditions
+ *              is true:
+ *    -   one or more of the following pointers is NULL: pSrc, pDst, or
+ *              pFFTSpec.
+ *    -    pSrc or pDst is not 32-byte aligned
  *    -    scaleFactor<0 or scaleFactor>16
  *
  */
@@ -1895,38 +1895,38 @@
  * Function:  omxSP_FFTFwd_CToC_SC32_Sfs   (2.2.4.2.2)
  *
  * Description:
- * Compute an FFT for a complex signal of length of 2^order, 
- * where 0 <= order <= 12. 
- * Transform length is determined by the specification structure, which 
- * must be initialized prior to calling the FFT function using the appropriate 
- * helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship 
- * between the input and output sequences can be expressed in terms of the 
- * DFT, i.e., 
+ * Compute an FFT for a complex signal of length of 2^order,
+ * where 0 <= order <= 12.
+ * Transform length is determined by the specification structure, which
+ * must be initialized prior to calling the FFT function using the appropriate
+ * helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship
+ * between the input and output sequences can be expressed in terms of the
+ * DFT, i.e.,
  *
  *      X[k] = 2^(-scaleFactor) . SUM[n=0...N-1]x[n].e^(-jnk.2.pi/N)
  *      k = 0,1,2,..., N-1
  *      N = 2^order
  *
  * Input Arguments:
- *   pSrc - pointer to the input signal, a complex-valued vector of length 2^order; 
- *            must be aligned on a 32 byte boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
- *   scaleFactor - output scale factor; the range is [0,32] 
+ *   pSrc - pointer to the input signal, a complex-valued vector of length 2^order;
+ *            must be aligned on a 32 byte boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
+ *   scaleFactor - output scale factor; the range is [0,32]
  *
  * Output Arguments:
- *   pDst - pointer to the complex-valued output vector, of length 2^order; must be 
- *            aligned on an 32-byte boundary. 
+ *   pDst - pointer to the complex-valued output vector, of length 2^order; must be
+ *            aligned on an 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - returned if one or more of the following conditions 
- *              is true: 
- *    -   one or more of the following pointers is NULL: pSrc, pDst, or 
- *              pFFTSpec. 
- *    -    pSrc or pDst is not 32-byte aligned 
- *    -    scaleFactor<0 or scaleFactor >32 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - returned if one or more of the following conditions
+ *              is true:
+ *    -   one or more of the following pointers is NULL: pSrc, pDst, or
+ *              pFFTSpec.
+ *    -    pSrc or pDst is not 32-byte aligned
+ *    -    scaleFactor<0 or scaleFactor >32
  *
  */
 OMXResult omxSP_FFTFwd_CToC_SC32_Sfs (
@@ -1943,38 +1943,38 @@
  *
  * Description:
  * These functions compute an inverse FFT for a complex signal of  length
- * of 2^order, where 0 <= order <= 12. Transform length is determined by the 
- * specification structure, which must be initialized prior to calling the FFT 
- * function using the appropriate helper, i.e., <FFTInit_C_sc32> or 
- * <FFTInit_C_SC16>. The relationship between the input and output sequences 
- * can be expressed in terms of the IDFT, i.e.: 
+ * of 2^order, where 0 <= order <= 12. Transform length is determined by the
+ * specification structure, which must be initialized prior to calling the FFT
+ * function using the appropriate helper, i.e., <FFTInit_C_sc32> or
+ * <FFTInit_C_SC16>. The relationship between the input and output sequences
+ * can be expressed in terms of the IDFT, i.e.:
  *
  *     x[n] = (2^(-scalefactor)/N)  . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
  *     n=0,1,2,...N-1
  *     N=2^order.
  *
  * Input Arguments:
- *   pSrc - pointer to the complex-valued input signal, of length 2^order ; 
- *          must be aligned on a 32-byte boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
+ *   pSrc - pointer to the complex-valued input signal, of length 2^order ;
+ *          must be aligned on a 32-byte boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
  *   scaleFactor - scale factor of the output. Valid range is [0,16].
  *
  * Output Arguments:
- *   order 
- *   pDst - pointer to the complex-valued output signal, of length 2^order; 
- *          must be aligned on a 32-byte boundary. 
+ *   order
+ *   pDst - pointer to the complex-valued output signal, of length 2^order;
+ *          must be aligned on a 32-byte boundary.
  *
  * Return Value:
- *  
+ *
  *    Positive value - the shift scale that was performed inside
  *    OMX_Sts_NoErr - no error
- *    OMX_Sts_BadArgErr - returned if one or more of the following conditions 
- *              is true: 
- *    -   one or more of the following pointers is NULL: pSrc, pDst, or 
- *              pFFTSpec. 
- *    -   pSrc or pDst is not 32-byte aligned 
- *    -   scaleFactor<0 or scaleFactor>16 
+ *    OMX_Sts_BadArgErr - returned if one or more of the following conditions
+ *              is true:
+ *    -   one or more of the following pointers is NULL: pSrc, pDst, or
+ *              pFFTSpec.
+ *    -   pSrc or pDst is not 32-byte aligned
+ *    -   scaleFactor<0 or scaleFactor>16
  *
  */
 OMXResult omxSP_FFTInv_CToC_SC16_Sfs (
@@ -1999,36 +1999,36 @@
  *
  * Description:
  * These functions compute an inverse FFT for a complex signal of length
- * of 2^order, where 0 <= order <= 12. Transform length is determined by the 
- * specification structure, which must be initialized prior to calling the FFT 
- * function using the appropriate helper, i.e., <FFTInit_C_sc32> or 
- * <FFTInit_C_SC16>. The relationship between the input and output sequences 
- * can be expressed in terms of the IDFT, i.e.: 
+ * of 2^order, where 0 <= order <= 12. Transform length is determined by the
+ * specification structure, which must be initialized prior to calling the FFT
+ * function using the appropriate helper, i.e., <FFTInit_C_sc32> or
+ * <FFTInit_C_SC16>. The relationship between the input and output sequences
+ * can be expressed in terms of the IDFT, i.e.:
  *
  *     x[n] = (2^(-scalefactor)/N)  . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
  *     n=0,1,2,...N-1
  *     N=2^order.
  *
  * Input Arguments:
- *   pSrc - pointer to the complex-valued input signal, of length 2^order ; 
- *          must be aligned on a 32-byte boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
- *   scaleFactor - scale factor of the output. Valid range is [0,32]. 
+ *   pSrc - pointer to the complex-valued input signal, of length 2^order ;
+ *          must be aligned on a 32-byte boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
+ *   scaleFactor - scale factor of the output. Valid range is [0,32].
  *
  * Output Arguments:
- *   order 
- *   pDst - pointer to the complex-valued output signal, of length 2^order; 
- *          must be aligned on a 32-byte boundary. 
+ *   order
+ *   pDst - pointer to the complex-valued output signal, of length 2^order;
+ *          must be aligned on a 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - returned if one or more of the following conditions 
- *              is true: 
- *    -   one or more of the following pointers is NULL: pSrc, pDst, or 
- *              pFFTSpec. 
- *    -   pSrc or pDst is not 32-byte aligned 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - returned if one or more of the following conditions
+ *              is true:
+ *    -   one or more of the following pointers is NULL: pSrc, pDst, or
+ *              pFFTSpec.
+ *    -   pSrc or pDst is not 32-byte aligned
  *    -   scaleFactor<0 or scaleFactor>32
  *
  */
@@ -2046,45 +2046,45 @@
  *
  * Description:
  * These functions compute an FFT for a real-valued signal of length of 2^order,
- * where 0 <= order <= 12. Transform length is determined by the 
- * specification structure, which must be initialized prior to calling the FFT 
- * function using the appropriate helper, i.e., <FFTInit_R_S16S32>. 
- * The relationship between the input and output sequences 
+ * where 0 <= order <= 12. Transform length is determined by the
+ * specification structure, which must be initialized prior to calling the FFT
+ * function using the appropriate helper, i.e., <FFTInit_R_S16S32>.
+ * The relationship between the input and output sequences
  * can be expressed in terms of the DFT, i.e.:
  *
  *     x[n] = (2^(-scalefactor)/N)  . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
  *     n=0,1,2,...N-1
  *     N=2^order.
  *
- * The conjugate-symmetric output sequence is represented using a CCS vector, 
- * which is of length N+2, and is organized as follows: 
+ * The conjugate-symmetric output sequence is represented using a CCS vector,
+ * which is of length N+2, and is organized as follows:
  *
- *   Index:      0  1  2  3  4  5   . . .   N-2       N-1       N       N+1 
- *   Component:  R0 0  R1 I1 R2 I2  . . .   R[N/2-1]  I[N/2-1]  R[N/2]  0 
+ *   Index:      0  1  2  3  4  5   . . .   N-2       N-1       N       N+1
+ *   Component:  R0 0  R1 I1 R2 I2  . . .   R[N/2-1]  I[N/2-1]  R[N/2]  0
  *
- * where R[n] and I[n], respectively, denote the real and imaginary components 
- * for FFT bin 'n'. Bins  are numbered from 0 to N/2, where N is the FFT length. 
- * Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to the 
- * foldover frequency. 
+ * where R[n] and I[n], respectively, denote the real and imaginary components
+ * for FFT bin 'n'. Bins  are numbered from 0 to N/2, where N is the FFT length.
+ * Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to the
+ * foldover frequency.
  *
  * Input Arguments:
- *   pSrc - pointer to the real-valued input sequence, of length 2^order; 
- *          must be aligned on a 32-byte boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
- *   scaleFactor - output scale factor; valid range is [0, 32] 
+ *   pSrc - pointer to the real-valued input sequence, of length 2^order;
+ *          must be aligned on a 32-byte boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
+ *   scaleFactor - output scale factor; valid range is [0, 32]
  *
  * Output Arguments:
- *   pDst - pointer to output sequence, represented using CCS format, of 
- *            length (2^order)+2; must be aligned on a 32-byte boundary. 
+ *   pDst - pointer to output sequence, represented using CCS format, of
+ *            length (2^order)+2; must be aligned on a 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments, if one or more of the following is true: 
- *    -    one of the pointers pSrc, pDst, or pFFTSpec is NULL 
- *    -    pSrc or pDst is not aligned on a 32-byte boundary 
- *    -    scaleFactor<0 or scaleFactor >32 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments, if one or more of the following is true:
+ *    -    one of the pointers pSrc, pDst, or pFFTSpec is NULL
+ *    -    pSrc or pDst is not aligned on a 32-byte boundary
+ *    -    scaleFactor<0 or scaleFactor >32
  *
  */
 OMXResult omxSP_FFTFwd_RToCCS_S16S32_Sfs (
@@ -2154,45 +2154,45 @@
  *
  * Description:
  * These functions compute an FFT for a real-valued signal of length of 2^order,
- * where 0 <= order <= 12. Transform length is determined by the 
- * specification structure, which must be initialized prior to calling the FFT 
- * function using the appropriate helper, i.e., <FFTInit_R_S32>. 
- * The relationship between the input and output sequences 
+ * where 0 <= order <= 12. Transform length is determined by the
+ * specification structure, which must be initialized prior to calling the FFT
+ * function using the appropriate helper, i.e., <FFTInit_R_S32>.
+ * The relationship between the input and output sequences
  * can be expressed in terms of the DFT, i.e.:
  *
  *     x[n] = (2^(-scalefactor)/N)  . SUM[k=0,...,N-1] X[k].e^(jnk.2.pi/N)
  *     n=0,1,2,...N-1
  *     N=2^order.
  *
- * The conjugate-symmetric output sequence is represented using a CCS vector, 
- * which is of length N+2, and is organized as follows: 
+ * The conjugate-symmetric output sequence is represented using a CCS vector,
+ * which is of length N+2, and is organized as follows:
  *
- *   Index:      0  1  2  3  4  5   . . .   N-2       N-1       N       N+1 
- *   Component:  R0 0  R1 I1 R2 I2  . . .   R[N/2-1]  I[N/2-1]  R[N/2]  0 
+ *   Index:      0  1  2  3  4  5   . . .   N-2       N-1       N       N+1
+ *   Component:  R0 0  R1 I1 R2 I2  . . .   R[N/2-1]  I[N/2-1]  R[N/2]  0
  *
- * where R[n] and I[n], respectively, denote the real and imaginary components 
- * for FFT bin 'n'. Bins  are numbered from 0 to N/2, where N is the FFT length. 
- * Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to the 
- * foldover frequency. 
+ * where R[n] and I[n], respectively, denote the real and imaginary components
+ * for FFT bin 'n'. Bins  are numbered from 0 to N/2, where N is the FFT length.
+ * Bin index 0 corresponds to the DC component, and bin index N/2 corresponds to the
+ * foldover frequency.
  *
  * Input Arguments:
- *   pSrc - pointer to the real-valued input sequence, of length 2^order; 
- *          must be aligned on a 32-byte boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
- *   scaleFactor - output scale factor; valid range is [0, 32] 
+ *   pSrc - pointer to the real-valued input sequence, of length 2^order;
+ *          must be aligned on a 32-byte boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
+ *   scaleFactor - output scale factor; valid range is [0, 32]
  *
  * Output Arguments:
- *   pDst - pointer to output sequence, represented using CCS format, of 
- *            length (2^order)+2; must be aligned on a 32-byte boundary. 
+ *   pDst - pointer to output sequence, represented using CCS format, of
+ *            length (2^order)+2; must be aligned on a 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments, if one or more of the following is true: 
- *    -    one of the pointers pSrc, pDst, or pFFTSpec is NULL 
- *    -    pSrc or pDst is not aligned on a 32-byte boundary 
- *    -    scaleFactor<0 or scaleFactor >32 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments, if one or more of the following is true:
+ *    -    one of the pointers pSrc, pDst, or pFFTSpec is NULL
+ *    -    pSrc or pDst is not aligned on a 32-byte boundary
+ *    -    scaleFactor<0 or scaleFactor >32
  *
  */
 OMXResult omxSP_FFTFwd_RToCCS_S32_Sfs (
@@ -2206,13 +2206,13 @@
  * Function:  omxSP_FFTFwd_CToC_FC32_Sfs   (2.2.4.2.2)
  *
  * Description:
- * Compute an FFT for a complex signal of length of 2^order, 
- * where 0 <= order <= 15. 
- * Transform length is determined by the specification structure, which 
- * must be initialized prior to calling the FFT function using the appropriate 
- * helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship 
- * between the input and output sequences can be expressed in terms of the 
- * DFT, i.e., 
+ * Compute an FFT for a complex signal of length of 2^order,
+ * where 0 <= order <= 15.
+ * Transform length is determined by the specification structure, which
+ * must be initialized prior to calling the FFT function using the appropriate
+ * helper, i.e., <FFTInit_C_sc32> or <FFTInit_C_SC16>. The relationship
+ * between the input and output sequences can be expressed in terms of the
+ * DFT, i.e.,
  *
  *      X[k] = SUM[n=0...N-1]x[n].e^(-jnk.2.pi/N)
  *      k = 0,1,2,..., N-1
@@ -2220,23 +2220,23 @@
  *
  * Input Arguments:
  *   pSrc - pointer to the input signal, a complex-valued vector of length
- *            2^order; must be aligned on a 32 byte boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
+ *            2^order; must be aligned on a 32 byte boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
  *
  * Output Arguments:
  *   pDst - pointer to the complex-valued output vector, of length 2^order;
- *            must be aligned on an 32-byte boundary. 
+ *            must be aligned on an 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - returned if one or more of the following conditions 
- *              is true: 
- *    -   one or more of the following pointers is NULL: pSrc, pDst, or 
- *              pFFTSpec. 
- *    -    pSrc or pDst is not 32-byte aligned 
- *    -    scaleFactor<0 or scaleFactor >32 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - returned if one or more of the following conditions
+ *              is true:
+ *    -   one or more of the following pointers is NULL: pSrc, pDst, or
+ *              pFFTSpec.
+ *    -    pSrc or pDst is not 32-byte aligned
+ *    -    scaleFactor<0 or scaleFactor >32
  *
  */
 OMXResult omxSP_FFTFwd_CToC_FC32_Sfs (
@@ -2244,16 +2244,6 @@
     OMX_FC32 *pDst,
     const OMXFFTSpec_C_FC32 *pFFTSpec
 );
-#ifdef __arm__
-/*
- * Non-NEON version
- */    
-OMXResult omxSP_FFTFwd_CToC_FC32_Sfs_vfp (
-    const OMX_FC32 *pSrc,
-    OMX_FC32 *pDst,
-    const OMXFFTSpec_C_FC32 *pFFTSpec
-);
-#endif
 
 /**
  * Function:  omxSP_FFTFwd_RToCCS_F32_Sfs
@@ -2270,11 +2260,11 @@
  *     n=0,1,2,...N-1
  *     N=2^order.
  *
- * The conjugate-symmetric output sequence is represented using a CCS vector, 
- * which is of length N+2, and is organized as follows: 
+ * The conjugate-symmetric output sequence is represented using a CCS vector,
+ * which is of length N+2, and is organized as follows:
  *
- *   Index:      0  1  2  3  4  5   . . .   N-2       N-1       N       N+1 
- *   Component:  R0 0  R1 I1 R2 I2  . . .   R[N/2-1]  I[N/2-1]  R[N/2]  0 
+ *   Index:      0  1  2  3  4  5   . . .   N-2       N-1       N       N+1
+ *   Component:  R0 0  R1 I1 R2 I2  . . .   R[N/2-1]  I[N/2-1]  R[N/2]  0
  *
  * where R[n] and I[n], respectively, denote the real and imaginary
  * components for FFT bin 'n'. Bins are numbered from 0 to N/2, where
@@ -2282,18 +2272,18 @@
  * and bin index N/2 corresponds to the foldover frequency.
  *
  * Input Arguments:
- *   pSrc - pointer to the real-valued input sequence, of length 2^order; 
- *          must be aligned on a 32-byte boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
+ *   pSrc - pointer to the real-valued input sequence, of length 2^order;
+ *          must be aligned on a 32-byte boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
  *
  * Output Arguments:
- *   pDst - pointer to output sequence, represented using CCS format, of 
- *            length (2^order)+2; must be aligned on a 32-byte boundary. 
+ *   pDst - pointer to output sequence, represented using CCS format, of
+ *            length (2^order)+2; must be aligned on a 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
+ *
+ *    OMX_Sts_NoErr - no error
 
  *    OMX_Sts_BadArgErr - bad arguments, if one or more of the
  *    following is true: - one of the pointers pSrc, pDst, or pFFTSpec
@@ -2306,67 +2296,43 @@
     const OMXFFTSpec_R_F32* pFFTSpec
 );
 
-#ifdef __arm__
-/*
- * Non-NEON version of omxSP_FFTFwd_RToCCS_F32_Sfs
- */    
-OMXResult omxSP_FFTFwd_RToCCS_F32_Sfs_vfp(
-    const OMX_F32* pSrc,
-    OMX_F32* pDst,
-    const OMXFFTSpec_R_F32* pFFTSpec
-);
-
-/*
- * Just like omxSP_FFTFwd_RToCCS_F32_Sfs, but automatically detects
- * whether NEON is available or not and chooses the appropriate
- * routine.
- */    
-extern OMXResult (*omxSP_FFTFwd_RToCCS_F32)(
-    const OMX_F32* pSrc,
-    OMX_F32* pDst,
-    const OMXFFTSpec_R_F32* pFFTSpec
-);
-#else
-#define omxSP_FFTFwd_RToCCS_F32 omxSP_FFTFwd_RToCCS_F32_Sfs
-#endif
-
 /**
  * Function:  omxSP_FFTInv_CCSToR_S32S16_Sfs   (2.2.4.4.4)
  *
  * Description:
- * These functions compute the inverse FFT for a conjugate-symmetric input 
- * sequence.  Transform length is determined by the specification structure, 
- * which must be initialized prior to calling the FFT function using 
- * <FFTInit_R_S16S32>. For a transform of length M, the input sequence is 
- * represented using a packed CCS vector of length M+2, and is organized 
- * as follows: 
+ * These functions compute the inverse FFT for a conjugate-symmetric input
+ * sequence.  Transform length is determined by the specification structure,
+ * which must be initialized prior to calling the FFT function using
+ * <FFTInit_R_S16S32>. For a transform of length M, the input sequence is
+ * represented using a packed CCS vector of length M+2, and is organized
+ * as follows:
  *
- *   Index:     0    1  2    3    4    5    . . .  M-2       M-1      M      M+1 
- *   Component  R[0] 0  R[1] I[1] R[2] I[2] . . .  R[M/2-1]  I[M/2-1] R[M/2] 0 
+ *   Index:     0    1  2    3    4    5    . . .  M-2       M-1      M      M+1
+ *   Component  R[0] 0  R[1] I[1] R[2] I[2] . . .  R[M/2-1]  I[M/2-1] R[M/2] 0
  *
- * where R[n] and I[n], respectively, denote the real and imaginary components for FFT bin n. 
- * Bins are numbered from 0 to M/2, where M is the FFT length.  Bin index 0 
- * corresponds to the DC component, and bin index M/2 corresponds to the 
- * foldover frequency. 
+ * where R[n] and I[n], respectively, denote the real and imaginary components for FFT bin n.
+ * Bins are numbered from 0 to M/2, where M is the FFT length.  Bin index 0
+ * corresponds to the DC component, and bin index M/2 corresponds to the
+ * foldover frequency.
  *
  * Input Arguments:
- *   pSrc - pointer to the complex-valued input sequence represented using 
- *            CCS format, of length (2^order) + 2; must be aligned on a 32-byte 
- *            boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
+ *   pSrc - pointer to the complex-valued input sequence represented using
+ *            CCS format, of length (2^order) + 2; must be aligned on a 32-byte
+ *            boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
  *   scaleFactor - output scalefactor; range is [0,16]
  *
  * Output Arguments:
- *   pDst - pointer to the real-valued output sequence, of length 2^order ; must be 
- *            aligned on a 32-byte boundary. 
+ *   pDst - pointer to the real-valued output sequence, of length 2^order ; must be
+ *            aligned on a 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments if one or more of the following is true: 
- *    -    pSrc, pDst, or pFFTSpec is NULL 
- *    -    pSrc or pDst is not aligned on a 32-byte boundary 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments if one or more of the following is true:
+ *    -    pSrc, pDst, or pFFTSpec is NULL
+ *    -    pSrc or pDst is not aligned on a 32-byte boundary
  *    -    scaleFactor<0 or scaleFactor >16
  *
  */
@@ -2430,39 +2396,39 @@
  * Function:  omxSP_FFTInv_CCSToR_S32_Sfs   (2.2.4.4.4)
  *
  * Description:
- * These functions compute the inverse FFT for a conjugate-symmetric input 
- * sequence.  Transform length is determined by the specification structure, 
- * which must be initialized prior to calling the FFT function using 
- * <FFTInit_R_S32>. For a transform of length M, the input sequence is 
- * represented using a packed CCS vector of length M+2, and is organized 
- * as follows: 
+ * These functions compute the inverse FFT for a conjugate-symmetric input
+ * sequence.  Transform length is determined by the specification structure,
+ * which must be initialized prior to calling the FFT function using
+ * <FFTInit_R_S32>. For a transform of length M, the input sequence is
+ * represented using a packed CCS vector of length M+2, and is organized
+ * as follows:
  *
- *   Index:     0    1  2    3    4    5    . . .  M-2       M-1      M      M+1 
- *   Component  R[0] 0  R[1] I[1] R[2] I[2] . . .  R[M/2-1]  I[M/2-1] R[M/2] 0 
+ *   Index:     0    1  2    3    4    5    . . .  M-2       M-1      M      M+1
+ *   Component  R[0] 0  R[1] I[1] R[2] I[2] . . .  R[M/2-1]  I[M/2-1] R[M/2] 0
  *
- * where R[n] and I[n], respectively, denote the real and imaginary components for FFT bin n. 
- * Bins are numbered from 0 to M/2, where M is the FFT length.  Bin index 0 
- * corresponds to the DC component, and bin index M/2 corresponds to the 
- * foldover frequency. 
+ * where R[n] and I[n], respectively, denote the real and imaginary components for FFT bin n.
+ * Bins are numbered from 0 to M/2, where M is the FFT length.  Bin index 0
+ * corresponds to the DC component, and bin index M/2 corresponds to the
+ * foldover frequency.
  *
  * Input Arguments:
- *   pSrc - pointer to the complex-valued input sequence represented using 
- *            CCS format, of length (2^order) + 2; must be aligned on a 32-byte 
- *            boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
- *   scaleFactor - output scalefactor; range is [0,32] 
+ *   pSrc - pointer to the complex-valued input sequence represented using
+ *            CCS format, of length (2^order) + 2; must be aligned on a 32-byte
+ *            boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
+ *   scaleFactor - output scalefactor; range is [0,32]
  *
  * Output Arguments:
- *   pDst - pointer to the real-valued output sequence, of length 2^order ; must be 
- *            aligned on a 32-byte boundary. 
+ *   pDst - pointer to the real-valued output sequence, of length 2^order ; must be
+ *            aligned on a 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - bad arguments if one or more of the following is true: 
- *    -    pSrc, pDst, or pFFTSpec is NULL 
- *    -    pSrc or pDst is not aligned on a 32-byte boundary 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - bad arguments if one or more of the following is true:
+ *    -    pSrc, pDst, or pFFTSpec is NULL
+ *    -    pSrc or pDst is not aligned on a 32-byte boundary
  *    -    scaleFactor<0 or scaleFactor >32
  *
  */
@@ -2489,24 +2455,24 @@
  *     N=2^order.
  *
  * Input Arguments:
- *   pSrc - pointer to the complex-valued input signal, of length 2^order ; 
- *          must be aligned on a 32-byte boundary. 
- *   pFFTSpec - pointer to the preallocated and initialized specification 
- *            structure 
+ *   pSrc - pointer to the complex-valued input signal, of length 2^order ;
+ *          must be aligned on a 32-byte boundary.
+ *   pFFTSpec - pointer to the preallocated and initialized specification
+ *            structure
  *
  * Output Arguments:
- *   order 
- *   pDst - pointer to the complex-valued output signal, of length 2^order; 
- *          must be aligned on a 32-byte boundary. 
+ *   order
+ *   pDst - pointer to the complex-valued output signal, of length 2^order;
+ *          must be aligned on a 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
- *    OMX_Sts_BadArgErr - returned if one or more of the following conditions 
- *              is true: 
- *    -   one or more of the following pointers is NULL: pSrc, pDst, or 
- *              pFFTSpec. 
- *    -   pSrc or pDst is not 32-byte aligned 
+ *
+ *    OMX_Sts_NoErr - no error
+ *    OMX_Sts_BadArgErr - returned if one or more of the following conditions
+ *              is true:
+ *    -   one or more of the following pointers is NULL: pSrc, pDst, or
+ *              pFFTSpec.
+ *    -   pSrc or pDst is not 32-byte aligned
  *    -   scaleFactor<0 or scaleFactor>32
  *
  */
@@ -2515,30 +2481,20 @@
     OMX_FC32 *pDst,
     const OMXFFTSpec_C_FC32 *pFFTSpec
 );
-#ifdef __arm__
-/*
- * Non-NEON version
- */    
-OMXResult omxSP_FFTInv_CToC_FC32_Sfs_vfp (
-    const OMX_FC32 *pSrc,
-    OMX_FC32 *pDst,
-    const OMXFFTSpec_C_FC32 *pFFTSpec
-);
-#endif
 
 /**
  * Function:  omxSP_FFTInv_CCSToR_F32_Sfs
  *
  * Description:
- * These functions compute the inverse FFT for a conjugate-symmetric input 
- * sequence.  Transform length is determined by the specification structure, 
- * which must be initialized prior to calling the FFT function using 
- * <FFTInit_R_F32>. For a transform of length M, the input sequence is 
- * represented using a packed CCS vector of length M+2, and is organized 
- * as follows: 
+ * These functions compute the inverse FFT for a conjugate-symmetric input
+ * sequence.  Transform length is determined by the specification structure,
+ * which must be initialized prior to calling the FFT function using
+ * <FFTInit_R_F32>. For a transform of length M, the input sequence is
+ * represented using a packed CCS vector of length M+2, and is organized
+ * as follows:
  *
- *   Index:   0  1  2    3    4    5    . . .  M-2       M-1      M      M+1 
- *   Comp:  R[0] 0  R[1] I[1] R[2] I[2] . . .  R[M/2-1]  I[M/2-1] R[M/2] 0 
+ *   Index:   0  1  2    3    4    5    . . .  M-2       M-1      M      M+1
+ *   Comp:  R[0] 0  R[1] I[1] R[2] I[2] . . .  R[M/2-1]  I[M/2-1] R[M/2] 0
  *
  * where R[n] and I[n], respectively, denote the real and imaginary
  * components for FFT bin n. Bins are numbered from 0 to M/2, where M
@@ -2557,13 +2513,13 @@
  *          2^order ; must be aligned on a 32-byte boundary.
  *
  * Return Value:
- *    
- *    OMX_Sts_NoErr - no error 
-
+ *
+ *    OMX_Sts_NoErr - no error
+ *
  *    OMX_Sts_BadArgErr - bad arguments if one or more of the
  *      following is true:
- *    -    pSrc, pDst, or pFFTSpec is NULL 
- *    -    pSrc or pDst is not aligned on a 32-byte boundary 
+ *    -    pSrc, pDst, or pFFTSpec is NULL
+ *    -    pSrc or pDst is not aligned on a 32-byte boundary
  *    -    scaleFactor<0 or scaleFactor >32
  *
  */
@@ -2573,28 +2529,67 @@
     const OMXFFTSpec_R_F32* pFFTSpec
 );
 
-#ifdef __arm__
 /*
- * Non-NEON version of omxSP_FFTInv_CCSToR_F32_Sfs
- */    
+ * This block sets things up appropriately for run-time or build-time selection
+ * of NEON implementations.
+ */
+#if defined(__arm__) || defined(__aarch64__)
+/*
+ * Generic versions. Just like their *_Sfs counterparts, but automatically
+ * detect whether NEON is available or not and choose the appropriate routine.
+ */
+#if defined(DL_ARM_NEON_OPTIONAL)
+extern OMXResult (*omxSP_FFTFwd_RToCCS_F32)(
+    const OMX_F32* pSrc,
+    OMX_F32* pDst,
+    const OMXFFTSpec_R_F32* pFFTSpec
+);
+extern OMXResult (*omxSP_FFTInv_CCSToR_F32)(
+    const OMX_F32* pSrc,
+    OMX_F32* pDst,
+    const OMXFFTSpec_R_F32* pFFTSpec);
+#elif defined(DL_ARM_NEON)
+/* Build-time NEON selection. */
+#define omxSP_FFTFwd_RToCCS_F32 omxSP_FFTFwd_RToCCS_F32_Sfs
+#define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_Sfs
+#else
+/* Build-time non-NEON selection. */
+#define omxSP_FFTFwd_RToCCS_F32 omxSP_FFTFwd_CCSToR_F32_vfp
+#define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_vfp
+#endif  /* defined(DL_ARM_NEON_OPTIONAL) */
+
+#if defined(DL_ARM_NEON_OPTIONAL) || !defined(DL_ARM_NEON)
+/* Non-NEON versions. */
+OMXResult omxSP_FFTFwd_RToCCS_F32_Sfs_vfp(
+    const OMX_F32* pSrc,
+    OMX_F32* pDst,
+    const OMXFFTSpec_R_F32* pFFTSpec
+);
+
 OMXResult omxSP_FFTInv_CCSToR_F32_Sfs_vfp(
     const OMX_F32* pSrc,
     OMX_F32* pDst,
     const OMXFFTSpec_R_F32* pFFTSpec
 );
 
-/*
- * Just like omxSP_FFTInv_CCSToR_F32_Sfs, but automatically detects
- * whether NEON is available or not and chooses the appropriate
- * routine.
- */    
-extern OMXResult (*omxSP_FFTInv_CCSToR_F32)(
-    const OMX_F32* pSrc,
-    OMX_F32* pDst,
-    const OMXFFTSpec_R_F32* pFFTSpec);
+OMXResult omxSP_FFTFwd_CToC_FC32_Sfs_vfp (
+    const OMX_FC32 *pSrc,
+    OMX_FC32 *pDst,
+    const OMXFFTSpec_C_FC32 *pFFTSpec
+);
+
+OMXResult omxSP_FFTInv_CToC_FC32_Sfs_vfp (
+    const OMX_FC32 *pSrc,
+    OMX_FC32 *pDst,
+    const OMXFFTSpec_C_FC32 *pFFTSpec
+);
+#endif  /* defined(DL_ARM_NEON_OPTIONAL) || !defined(DL_ARM_NEON) */
+
 #else
-#define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_Sfs    
-#endif
+/* Build-time non-ARM selection. */
+#define omxSP_FFTInv_RToCCS_F32 omxSP_FFTInv_RToCCS_F32_Sfs
+#define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_Sfs
+#endif  /* defined(__arm__) || defined(__aarch64__) */
 
 #ifdef __cplusplus
 }
diff --git a/dl/sp/src/test/test_fft.gyp b/dl/sp/src/test/test_fft.gyp
index c1be018..859ea46 100644
--- a/dl/sp/src/test/test_fft.gyp
+++ b/dl/sp/src/test/test_fft.gyp
@@ -151,6 +151,11 @@
       'dependencies!' : [
         'test_utilities'
       ],
+      'link_settings': {
+        'libraries': [
+          '-lm',
+        ],
+      },
       'sources' : [
         'aligned_ptr.c',
         'compare.c',
@@ -173,7 +178,7 @@
             'support/float_rfft_neon.c',
           ],
         }],
-        ['target_arch == "ia32"', {
+        ['target_arch == "ia32" or target_arch == "x64"', {
           'sources': [
             'support/float_rfft_x86.c',
           ],
@@ -193,7 +198,7 @@
         'test_fft_time.c',
       ],
       'conditions': [
-        ['target_arch == "ia32" or target_arch == "arm64" or target_arch == "mipsel"', {
+        ['target_arch == "ia32" or target_arch == "x64" or target_arch == "arm64" or target_arch == "mipsel"', {
           'defines': [
             # Timing test only for float FFTs on x86 and arm64 and MIPSEL.
             'FLOAT_ONLY',
@@ -207,32 +212,44 @@
       'type': 'none',
       'conditions' : [
         ['target_arch == "arm"', {
-          # Supported test programs for ARM
-          'dependencies': [
-            'test_fft16',
-            'test_fft32',
-            'test_float_fft',
-            'test_float_rfft',
-            'test_rfft16_s32',
-            'test_rfft16_s16',
-            'test_rfft32',
-            # Non-Neon tests
-            'test_fft_time_armv7',
-            'test_float_fft_armv7',
-            'test_float_rfft_armv7',
-            # Tests with detection
-            'test_float_rfft_detect',
+          'conditions' : [
+            ['arm_neon==1 or OS=="android"', {
+              # NEON tests.
+              'dependencies': [
+                'test_fft16',
+                'test_fft32',
+                'test_float_fft',
+                'test_float_rfft',
+                'test_rfft16_s32',
+                'test_rfft16_s16',
+                'test_rfft32',
+              ],
+            }],
+            ['arm_neon==0 or OS=="android"', {
+              # Non-NEON tests.
+              'dependencies': [
+                'test_fft_time_armv7',
+                'test_float_fft_armv7',
+                'test_float_rfft_armv7',
+              ],
+            }],
+            ['OS=="android"', {
+              # Tests with detection.
+              'dependencies': [
+                'test_float_rfft_detect',
+              ],
+            }],
           ],
         }],
         ['target_arch == "arm64"', {
-          # Supported test programs for ARM64
+          # Supported test programs for ARM64.
           'dependencies': [
             'test_float_fft',
            ],
         }],
       ],
       'dependencies' : [
-        # All architectures must support at least the float rfft test
+        # All architectures must support at least the float rfft test.
         'test_float_rfft',
         'test_fft_time',
       ],
diff --git a/dl/sp/src/test/test_fft_time.c b/dl/sp/src/test/test_fft_time.c
index 6154228..beaa895 100644
--- a/dl/sp/src/test/test_fft_time.c
+++ b/dl/sp/src/test/test_fft_time.c
@@ -11,6 +11,7 @@
 #include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <sys/resource.h>
 #include <sys/time.h>
 #include <unistd.h>
@@ -609,11 +610,11 @@
       GetUserTime(&start_time);
       for (k = 0; k < count; ++k) {
         for (n = 0; n < fft_size; ++n) {
-          if (fabs(x[n].Re) > factor) {
-            factor = fabs(x[n].Re);
+          if (abs(x[n].Re) > factor) {
+            factor = abs(x[n].Re);
           }
-          if (fabs(x[n].Im) > factor) {
-            factor = fabs(x[n].Im);
+          if (abs(x[n].Im) > factor) {
+            factor = abs(x[n].Im);
           }
         }
 
@@ -653,11 +654,11 @@
       GetUserTime(&start_time);
       for (k = 0; k < count; ++k) {
         for (n = 0; n < fft_size; ++n) {
-          if (fabs(x[n].Re) > factor) {
-            factor = fabs(x[n].Re);
+          if (abs(x[n].Re) > factor) {
+            factor = abs(x[n].Re);
           }
-          if (fabs(x[n].Im) > factor) {
-            factor = fabs(x[n].Im);
+          if (abs(x[n].Im) > factor) {
+            factor = abs(x[n].Im);
           }
         }
         factor = ((1 << 18) - 1) / factor;
@@ -791,11 +792,11 @@
       GetUserTime(&start_time);
       for (k = 0; k < count; ++k) {
         for (n = 0; n < fft_size; ++n) {
-          if (fabs(x[n].Re) > factor) {
-            factor = fabs(x[n].Re);
+          if (abs(x[n].Re) > factor) {
+            factor = abs(x[n].Re);
           }
-          if (fabs(x[n].Im) > factor) {
-            factor = fabs(x[n].Im);
+          if (abs(x[n].Im) > factor) {
+            factor = abs(x[n].Im);
           }
         }
 
@@ -835,11 +836,11 @@
       GetUserTime(&start_time);
       for (k = 0; k < count; ++k) {
         for (n = 0; n < fft_size; ++n) {
-          if (fabs(x[n].Re) > factor) {
-            factor = fabs(x[n].Re);
+          if (abs(x[n].Re) > factor) {
+            factor = abs(x[n].Re);
           }
-          if (fabs(x[n].Im) > factor) {
-            factor = fabs(x[n].Im);
+          if (abs(x[n].Im) > factor) {
+            factor = abs(x[n].Im);
           }
         }
         factor = ((1 << 15) - 1) / factor;
@@ -1013,8 +1014,8 @@
          * Spend some time computing the max of the signal, and then scaling it.
          */
         for (n = 0; n < fft_size; ++n) {
-          if (fabs(xr[n]) > factor) {
-            factor = fabs(xr[n]);
+          if (abs(xr[n]) > factor) {
+            factor = abs(xr[n]);
           }
         }
 
@@ -1080,8 +1081,8 @@
          * Spend some time scaling the FFT signal to fixed point.
          */
         for (n = 0; n < fft_size; ++n) {
-          if (fabs(yrTrue[n]) > factor) {
-            factor = fabs(yrTrue[n]);
+          if (abs(yrTrue[n]) > factor) {
+            factor = abs(yrTrue[n]);
           }
         }
         for (n = 0; n < fft_size; ++n) {
@@ -1282,8 +1283,8 @@
          * Spend some time computing the max of the signal, and then scaling it.
          */
         for (n = 0; n < fft_size; ++n) {
-          if (fabs(xr[n]) > factor) {
-            factor = fabs(xr[n]);
+          if (abs(xr[n]) > factor) {
+            factor = abs(xr[n]);
           }
         }
 
@@ -1331,8 +1332,8 @@
          * Spend some time scaling the FFT signal to fixed point.
          */
         for (n = 0; n < fft_size + 2; ++n) {
-          if (fabs(yrTrue[n]) > factor) {
-            factor = fabs(yrTrue[n]);
+          if (abs(yrTrue[n]) > factor) {
+            factor = abs(yrTrue[n]);
           }
         }
         for (n = 0; n < fft_size + 2; ++n) {
diff --git a/dl/sp/src/test/test_util_fft.c b/dl/sp/src/test/test_util_fft.c
index 3deb041..025ee8d 100644
--- a/dl/sp/src/test/test_util_fft.c
+++ b/dl/sp/src/test/test_util_fft.c
@@ -10,6 +10,7 @@
 #include "dl/sp/src/test/test_util.h"
 
 #include "dl/sp/src/test/compare.h"
+#include "dl/sp/src/test/gensig.h"
 
 /*
  * Test results from running either forward or inverse FFT tests
