本文整理汇总了C++中FFTContext::imdct_half方法的典型用法代码示例。如果您正苦于以下问题:C++ FFTContext::imdct_half方法的具体用法?C++ FFTContext::imdct_half怎么用?C++ FFTContext::imdct_half使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FFTContext
的用法示例。
在下文中一共展示了FFTContext::imdct_half方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: imdct_and_window
static void imdct_and_window(TwinVQContext *tctx, enum TwinVQFrameType ftype,
int wtype, float *in, float *prev, int ch)
{
FFTContext *mdct = &tctx->mdct_ctx[ftype];
const TwinVQModeTab *mtab = tctx->mtab;
int bsize = mtab->size / mtab->fmode[ftype].sub;
int size = mtab->size;
float *buf1 = tctx->tmp_buf;
int j, first_wsize, wsize; // Window size
float *out = tctx->curr_frame + 2 * ch * mtab->size;
float *out2 = out;
float *prev_buf;
int types_sizes[] = {
mtab->size / mtab->fmode[TWINVQ_FT_LONG].sub,
mtab->size / mtab->fmode[TWINVQ_FT_MEDIUM].sub,
mtab->size / (mtab->fmode[TWINVQ_FT_SHORT].sub * 2),
};
wsize = types_sizes[wtype_to_wsize[wtype]];
first_wsize = wsize;
prev_buf = prev + (size - bsize) / 2;
for (j = 0; j < mtab->fmode[ftype].sub; j++) {
int sub_wtype = ftype == TWINVQ_FT_MEDIUM ? 8 : wtype;
if (!j && wtype == 4)
sub_wtype = 4;
else if (j == mtab->fmode[ftype].sub - 1 && wtype == 7)
sub_wtype = 7;
wsize = types_sizes[wtype_to_wsize[sub_wtype]];
mdct->imdct_half(mdct, buf1 + bsize * j, in + bsize * j);
tctx->fdsp.vector_fmul_window(out2, prev_buf + (bsize - wsize) / 2,
buf1 + bsize * j,
ff_sine_windows[av_log2(wsize)],
wsize / 2);
out2 += wsize;
memcpy(out2, buf1 + bsize * j + wsize / 2,
(bsize - wsize / 2) * sizeof(float));
out2 += ftype == TWINVQ_FT_MEDIUM ? (bsize - wsize) / 2 : bsize - wsize;
prev_buf = buf1 + bsize * j + bsize / 2;
}
tctx->last_block_pos[ch] = (size + first_wsize) / 2;
}