#include "avcodec.h"
#include "get_bits.h"
#include "dsputil.h"
+#include "fft.h"
+#include "lsp.h"
#include <math.h>
#include <stdint.h>
}
}
-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)
{
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,
return buf_size;
}
- tctx->dsp.vector_clipf(out, out, -32700./(1<<15), 32700./(1<<15),
- avctx->channels * mtab->size);
-
*data_size = mtab->size*avctx->channels*4;
return buf_size;
}
- ff_sine_window_init(ff_sine_windows[av_log2(size_m) ], size_m );
- ff_sine_window_init(ff_sine_windows[av_log2(size_s/2) ], size_s/2);
- ff_sine_window_init(ff_sine_windows[av_log2(mtab->size)], mtab->size);
+ ff_init_ff_sine_windows(av_log2(size_m));
+ ff_init_ff_sine_windows(av_log2(size_s/2));
+ ff_init_ff_sine_windows(av_log2(mtab->size));
}
/**
int bsize_no_main_cb[3];
int bse_bits[3];
int i;
+ enum FrameType frametype;
for (i = 0; i < 3; i++)
// +1 for history usage switch
tctx->length_change[i] = num_rounded_up;
}
- for (i = 0; i < 4; i++)
- construct_perm_table(tctx, i);
+ for (frametype = FT_SHORT; frametype <= FT_PPC; frametype++)
+ construct_perm_table(tctx, frametype);
}
static av_cold int twin_decode_init(AVCodecContext *avctx)
AVCodec twinvq_decoder =
{
"twinvq",
- CODEC_TYPE_AUDIO,
+ AVMEDIA_TYPE_AUDIO,
CODEC_ID_TWINVQ,
sizeof(TwinContext),
twin_decode_init,