Commit 4a1f3a16 authored by vitor's avatar vitor

Make sorting function used in TwinVQ a shared function


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@20584 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent c69efdc7
...@@ -173,3 +173,12 @@ void ff_acelp_lspd2lpc(const double *lsp, float *lpc, int lp_half_order) ...@@ -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); 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]);
}
...@@ -97,4 +97,11 @@ void ff_acelp_lp_decode(int16_t* lp_1st, int16_t* lp_2nd, const int16_t* lsp_2nd ...@@ -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); 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 */ #endif /* AVCODEC_LSP_H */
...@@ -536,17 +536,6 @@ static void rearrange_lsp(int order, float *lsp, float min_dist) ...@@ -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, static void decode_lsp(TwinContext *tctx, int lpc_idx1, uint8_t *lpc_idx2,
int lpc_hist_idx, float *lsp, float *hist) 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, ...@@ -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.0001);
rearrange_lsp(mtab->n_lsp, lsp, 0.000095); 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, static void dec_lpc_spectrum_inv(TwinContext *tctx, float *lsp,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment