]> rtime.felk.cvut.cz Git - frescor/ffmpeg.git/commitdiff
Make sorting function used in TwinVQ a shared function
authorvitor <vitor@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sun, 22 Nov 2009 22:25:58 +0000 (22:25 +0000)
committervitor <vitor@9553f0bf-9b14-0410-a0b8-cfaf0461ba5b>
Sun, 22 Nov 2009 22:25:58 +0000 (22:25 +0000)
git-svn-id: file:///var/local/repositories/ffmpeg/trunk@20584 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b

libavcodec/lsp.c
libavcodec/lsp.h
libavcodec/twinvq.c

index ce0fbc28b85d6935c41203d553d1e9c54c37b5b7..739e1e0bfa72ebccf27a1249cf4ba73ce8d4ab03 100644 (file)
@@ -173,3 +173,12 @@ void ff_acelp_lspd2lpc(const double *lsp, float *lpc, int lp_half_order)
         lpc2[-lp_half_order] = 0.5*(paf-qaf);
     }
 }
+
+void ff_sort_nearly_sorted_floats(float *vals, int len)
+{
+    int i,j;
+
+    for (i = 0; i < len - 1; i++)
+        for (j = i; j >= 0 && vals[j] > vals[j+1]; j--)
+            FFSWAP(float, vals[j], vals[j+1]);
+}
index 9c02000aaa5674c7235e413e2b32f00c96d29db8..5a9d47b0e87056dbada4be09e923a4412566afb1 100644 (file)
@@ -97,4 +97,11 @@ void ff_acelp_lp_decode(int16_t* lp_1st, int16_t* lp_2nd, const int16_t* lsp_2nd
  */
 void ff_acelp_lspd2lpc(const double *lsp, float *lpc, int lp_half_order);
 
+/**
+ * Sort values in ascending order.
+ *
+ * @note O(n) if data already sorted, O(n^2) - otherwise
+ */
+void ff_sort_nearly_sorted_floats(float *vals, int len);
+
 #endif /* AVCODEC_LSP_H */
index 814a0b081af2c6286a1b3acb9e5c106aaa9c22c1..8e198ea10050369a827ca4cee68e241dbe1406cc 100644 (file)
@@ -536,17 +536,6 @@ static void rearrange_lsp(int order, float *lsp, float min_dist)
         }
 }
 
-static void bubblesort(float *lsp, int lp_order)
-{
-    int i,j;
-
-    /* sort lsp in ascending order. float bubble agorithm,
-       O(n) if data already sorted, O(n^2) - otherwise */
-    for (i = 0; i < lp_order - 1; i++)
-        for (j = i; j >= 0 && lsp[j] > lsp[j+1]; j--)
-            FFSWAP(float, lsp[j], lsp[j+1]);
-}
-
 static void decode_lsp(TwinContext *tctx, int lpc_idx1, uint8_t *lpc_idx2,
                        int lpc_hist_idx, float *lsp, float *hist)
 {
@@ -583,7 +572,7 @@ static void decode_lsp(TwinContext *tctx, int lpc_idx1, uint8_t *lpc_idx2,
 
     rearrange_lsp(mtab->n_lsp, lsp, 0.0001);
     rearrange_lsp(mtab->n_lsp, lsp, 0.000095);
-    bubblesort(lsp, mtab->n_lsp);
+    ff_sort_nearly_sorted_floats(lsp, mtab->n_lsp);
 }
 
 static void dec_lpc_spectrum_inv(TwinContext *tctx, float *lsp,