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..249217b 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 (
@@ -2247,7 +2247,7 @@
 #ifdef __arm__
 /*
  * Non-NEON version
- */    
+ */
 OMXResult omxSP_FFTFwd_CToC_FC32_Sfs_vfp (
     const OMX_FC32 *pSrc,
     OMX_FC32 *pDst,
@@ -2270,11 +2270,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 +2282,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
@@ -2309,7 +2309,7 @@
 #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,
@@ -2320,7 +2320,7 @@
  * 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,
@@ -2334,39 +2334,39 @@
  * 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 +2430,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 +2489,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
  *
  */
@@ -2518,7 +2518,7 @@
 #ifdef __arm__
 /*
  * Non-NEON version
- */    
+ */
 OMXResult omxSP_FFTInv_CToC_FC32_Sfs_vfp (
     const OMX_FC32 *pSrc,
     OMX_FC32 *pDst,
@@ -2530,15 +2530,15 @@
  * 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 +2557,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
  *
  */
@@ -2576,7 +2576,7 @@
 #ifdef __arm__
 /*
  * Non-NEON version of omxSP_FFTInv_CCSToR_F32_Sfs
- */    
+ */
 OMXResult omxSP_FFTInv_CCSToR_F32_Sfs_vfp(
     const OMX_F32* pSrc,
     OMX_F32* pDst,
@@ -2587,13 +2587,13 @@
  * 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);
 #else
-#define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_Sfs    
+#define omxSP_FFTInv_CCSToR_F32 omxSP_FFTInv_CCSToR_F32_Sfs
 #endif
 
 #ifdef __cplusplus
