# HG changeset patch # User vitor # Date 1258928758 0 # Node ID f2f4d6fe3f6d7c32df444556fe1ea066a8eccc6d # Parent 54e32204475081198f1759f5d0bca5ed34ed61d8 Make sorting function used in TwinVQ a shared function diff -r 54e322044750 -r f2f4d6fe3f6d lsp.c --- a/lsp.c Sun Nov 22 21:08:46 2009 +0000 +++ b/lsp.c Sun Nov 22 22:25:58 2009 +0000 @@ -173,3 +173,12 @@ 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]); +} diff -r 54e322044750 -r f2f4d6fe3f6d lsp.h --- a/lsp.h Sun Nov 22 21:08:46 2009 +0000 +++ b/lsp.h Sun Nov 22 22:25:58 2009 +0000 @@ -97,4 +97,11 @@ */ 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 */ diff -r 54e322044750 -r f2f4d6fe3f6d twinvq.c --- a/twinvq.c Sun Nov 22 21:08:46 2009 +0000 +++ b/twinvq.c Sun Nov 22 22:25:58 2009 +0000 @@ -536,17 +536,6 @@ } } -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 @@ 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,