diff options
author | Thom Johansen <thomj@rockbox.org> | 2007-11-24 19:14:29 +0000 |
---|---|---|
committer | Thom Johansen <thomj@rockbox.org> | 2007-11-24 19:14:29 +0000 |
commit | 929443cca52e53696d776661af42d5737a0af10d (patch) | |
tree | fe118429b9c1467b721fe2e1cab5b7ae4a0fa873 /apps/codecs/libspeex/nb_celp.c | |
parent | d6e22443c4406d94038fdf19955371d38e2ab71f (diff) | |
download | rockbox-929443cca52e53696d776661af42d5737a0af10d.tar.gz rockbox-929443cca52e53696d776661af42d5737a0af10d.zip |
Sync to SVN.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15792 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libspeex/nb_celp.c')
-rw-r--r-- | apps/codecs/libspeex/nb_celp.c | 79 |
1 files changed, 29 insertions, 50 deletions
diff --git a/apps/codecs/libspeex/nb_celp.c b/apps/codecs/libspeex/nb_celp.c index 84cf1bb6d7..d29b9ae540 100644 --- a/apps/codecs/libspeex/nb_celp.c +++ b/apps/codecs/libspeex/nb_celp.c @@ -293,8 +293,8 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) ALLOC(interp_qlpc, st->lpcSize, spx_coef_t); /* Move signals 1 frame towards the past */ - speex_move(st->excBuf, st->excBuf+st->frameSize, (st->max_pitch+2)*sizeof(spx_word16_t)); - speex_move(st->swBuf, st->swBuf+st->frameSize, (st->max_pitch+2)*sizeof(spx_word16_t)); + SPEEX_MOVE(st->excBuf, st->excBuf+st->frameSize, st->max_pitch+2); + SPEEX_MOVE(st->swBuf, st->swBuf+st->frameSize, st->max_pitch+2); if (st->highpass_enabled) highpass(in, in, st->frameSize, (st->isWideband?HIGHPASS_WIDEBAND:HIGHPASS_NARROWBAND)|HIGHPASS_INPUT, st->mem_hp); @@ -337,6 +337,7 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) /* Whole frame analysis (open-loop estimation of pitch and excitation gain) */ { + int diff = st->windowSize-st->frameSize; if (st->first) for (i=0;i<st->lpcSize;i++) interp_lsp[i] = lsp[i]; @@ -361,11 +362,9 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) bw_lpc(st->gamma1, interp_lpc, bw_lpc1, st->lpcSize); bw_lpc(st->gamma2, interp_lpc, bw_lpc2, st->lpcSize); - - for (i=0;i<st->windowSize-st->frameSize;i++) - st->sw[i] = st->winBuf[i]; - for (;i<st->frameSize;i++) - st->sw[i] = in[i-st->windowSize+st->frameSize]; + + SPEEX_COPY(st->sw, st->winBuf, diff); + SPEEX_COPY(st->sw+diff, in, st->frameSize-diff); filter_mem16(st->sw, bw_lpc1, bw_lpc2, st->sw, st->frameSize, st->lpcSize, st->mem_sw_whole, stack); open_loop_nbest_pitch(st->sw, st->min_pitch, st->max_pitch, st->frameSize, @@ -397,10 +396,8 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) } /*Compute "real" excitation*/ - for (i=0;i<st->windowSize-st->frameSize;i++) - st->exc[i] = st->winBuf[i]; - for (;i<st->frameSize;i++) - st->exc[i] = in[i-st->windowSize+st->frameSize]; + SPEEX_COPY(st->exc, st->winBuf, diff); + SPEEX_COPY(st->exc+diff, in, st->frameSize-diff); fir_mem16(st->exc, interp_lpc, st->exc, st->frameSize, st->lpcSize, st->mem_exc, stack); /* Compute open-loop excitation gain */ @@ -415,15 +412,12 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) } #ifdef VORBIS_PSYCHO - for(i=0;i<256-st->frameSize;i++) - st->psy_window[i] = st->psy_window[i+st->frameSize]; - for(i=0;i<st->frameSize;i++) - st->psy_window[256-st->frameSize+i] = in[i]; + SPEEX_MOVE(st->psy_window, st->psy_window+st->frameSize, 256-st->frameSize); + SPEEX_COPY(&st->psy_window[256-st->frameSize], in, st->frameSize); compute_curve(st->psy, st->psy_window, st->curve); /*print_vec(st->curve, 128, "curve");*/ if (st->first) - for (i=0;i<128;i++) - st->old_curve[i] = st->curve[i]; + SPEEX_COPY(st->old_curve, st->curve, 128); #endif /*VBR stuff*/ @@ -562,7 +556,7 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) st->first=1; st->bounded_pitch = 1; - speex_move(st->winBuf, in+2*st->frameSize-st->windowSize, (st->windowSize-st->frameSize)*sizeof(spx_word16_t)); + SPEEX_COPY(st->winBuf, in+2*st->frameSize-st->windowSize, st->windowSize-st->frameSize); /* Clear memory (no need to really compute it) */ for (i=0;i<st->lpcSize;i++) @@ -739,8 +733,7 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) for (i=0;i<st->lpcSize;i++) mem[i]=SHL32(st->mem_sw[i],1); filter_mem16(ringing, st->bw_lpc1, st->bw_lpc2, ringing, response_bound, st->lpcSize, mem, stack); - for (i=response_bound;i<st->subframeSize;i++) - ringing[i]=0; + SPEEX_MEMSET(&ringing[response_bound], 0, st->subframeSize-response_bound); #else iir_mem16(ringing, interp_qlpc, ringing, st->subframeSize, st->lpcSize, mem, stack); for (i=0;i<st->lpcSize;i++) @@ -762,8 +755,7 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) target[i]=EXTRACT16(SATURATE(SUB32(sw[i],PSHR32(ringing[i],1)),32767)); /* Reset excitation */ - for (i=0;i<st->subframeSize;i++) - exc[i]=0; + SPEEX_MEMSET(exc, 0, st->subframeSize); /* If we have a long-term predictor (otherwise, something's wrong) */ speex_assert (SUBMODE(ltp_quant)); @@ -804,8 +796,7 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) st->pitch[sub]=pitch; } /* Quantization of innovation */ - for (i=0;i<st->subframeSize;i++) - innov[i]=0; + SPEEX_MEMSET(innov, 0, st->subframeSize); /* FIXME: Make sure this is save from overflows (so far so good) */ for (i=0;i<st->subframeSize;i++) @@ -867,8 +858,7 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) char *tmp_stack=stack; VARDECL(spx_sig_t *innov2); ALLOC(innov2, st->subframeSize, spx_sig_t); - for (i=0;i<st->subframeSize;i++) - innov2[i]=0; + SPEEX_MEMSET(innov2, 0, st->subframeSize); for (i=0;i<st->subframeSize;i++) target[i]=MULT16_16_P13(QCONST16(2.2f,13), target[i]); SUBMODE(innovation_quant)(target, interp_qlpc, bw_lpc1, bw_lpc2, @@ -887,10 +877,8 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) } } - for (i=0;i<st->subframeSize;i++) - sw[i] = exc[i]; /* Final signal synthesis from excitation */ - iir_mem16(sw, interp_qlpc, sw, st->subframeSize, st->lpcSize, st->mem_sp, stack); + iir_mem16(exc, interp_qlpc, sw, st->subframeSize, st->lpcSize, st->mem_sp, stack); /* Compute weighted signal again, from synthesized speech (not sure it's the right thing) */ if (st->complexity!=0) @@ -909,10 +897,7 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) #ifdef VORBIS_PSYCHO if (st->submodeID>=1) - { - for (i=0;i<128;i++) - st->old_curve[i] = st->curve[i]; - } + SPEEX_COPY(st->old_curve, st->curve, 128); #endif if (st->submodeID==1) @@ -927,7 +912,7 @@ int nb_encode(void *state, void *vin, SpeexBits *bits) /* The next frame will not be the first (Duh!) */ st->first = 0; - speex_move(st->winBuf, in+2*st->frameSize-st->windowSize, (st->windowSize-st->frameSize)*sizeof(spx_word16_t)); + SPEEX_COPY(st->winBuf, in+2*st->frameSize-st->windowSize, st->windowSize-st->frameSize); if (SUBMODE(innovation_quant) == noise_codebook_quant || st->submodeID==0) st->bounded_pitch = 1; @@ -980,8 +965,7 @@ void *nb_decoder_init(const SpeexMode *m) /* st->excBuf = (spx_word16_t*)speex_alloc((st->frameSize + 2*st->max_pitch + st->subframeSize + 12)*sizeof(spx_word16_t)); */ st->exc = st->excBuf + 2*st->max_pitch + st->subframeSize + 6; - for (i=0;i<st->frameSize + st->max_pitch + 1;i++) - st->excBuf[i]=0; + SPEEX_MEMSET(st->excBuf, 0, st->frameSize + st->max_pitch); /* st->interp_qlpc = (spx_coef_t*)speex_alloc(st->lpcSize*sizeof(spx_coef_t)); */ /* st->old_qlsp = (spx_lsp_t*)speex_alloc(st->lpcSize*sizeof(spx_lsp_t)); */ @@ -1079,7 +1063,7 @@ static void nb_decode_lost(DecState *st, spx_word16_t *out, char *stack) innov_gain = compute_rms16(st->exc, st->frameSize); noise_gain = MULT16_16_Q15(innov_gain, MULT16_16_Q15(fact, SUB16(Q15ONE,MULT16_16_Q15(pitch_gain,pitch_gain)))); /* Shift all buffers by one frame */ - speex_move(st->excBuf, st->excBuf+st->frameSize, (2*st->max_pitch + st->subframeSize + 12)*sizeof(spx_word16_t)); + SPEEX_MOVE(st->excBuf, st->excBuf+st->frameSize, 2*st->max_pitch + st->subframeSize + 12); pitch_val = st->last_pitch + SHR32((spx_int32_t)speex_rand(1+st->count_lost, &st->seed),SIG_SHIFT); @@ -1094,8 +1078,8 @@ static void nb_decode_lost(DecState *st, spx_word16_t *out, char *stack) } bw_lpc(QCONST16(.98,15), st->interp_qlpc, st->interp_qlpc, st->lpcSize); - iir_mem16(&st->exc[-st->subframeSize], st->interp_qlpc, out, - st->frameSize, st->lpcSize, st->mem_sp, stack); + iir_mem16(&st->exc[-st->subframeSize], st->interp_qlpc, out, st->frameSize, + st->lpcSize, st->mem_sp, stack); highpass(out, out, st->frameSize, HIGHPASS_NARROWBAND|HIGHPASS_OUTPUT, st->mem_hp); st->first = 0; @@ -1229,7 +1213,7 @@ int nb_decode(void *state, SpeexBits *bits, void *vout) } /* Shift all buffers by one frame */ - speex_move(st->excBuf, st->excBuf+st->frameSize, (2*st->max_pitch + st->subframeSize + 12)*sizeof(spx_word16_t)); + SPEEX_MOVE(st->excBuf, st->excBuf+st->frameSize, 2*st->max_pitch + st->subframeSize + 12); /* If null mode (no transmission), just set a couple things to zero*/ if (st->submodes[st->submodeID] == NULL) @@ -1346,8 +1330,7 @@ int nb_decode(void *state, SpeexBits *bits, void *vout) /* Reset excitation */ - for (i=0;i<st->subframeSize;i++) - exc[i]=0; + SPEEX_MEMSET(exc, 0, st->subframeSize); /*Adaptive codebook contribution*/ speex_assert (SUBMODE(ltp_unquant)); @@ -1411,8 +1394,7 @@ int nb_decode(void *state, SpeexBits *bits, void *vout) int q_energy; spx_word32_t ener; - for (i=0;i<st->subframeSize;i++) - innov[i]=0; + SPEEX_MEMSET(innov, 0, st->subframeSize); /* Decode sub-frame gain correction */ if (SUBMODE(have_subframe_gain)==3) @@ -1441,8 +1423,7 @@ int nb_decode(void *state, SpeexBits *bits, void *vout) char *tmp_stack=stack; VARDECL(spx_sig_t *innov2); ALLOC(innov2, st->subframeSize, spx_sig_t); - for (i=0;i<st->subframeSize;i++) - innov2[i]=0; + SPEEX_MEMSET(innov2, 0, st->subframeSize); SUBMODE(innovation_unquant)(innov2, SUBMODE(innovation_params), st->subframeSize, bits, stack, &st->seed); signal_mul(innov2, innov2, MULT16_32_Q15(QCONST16(0.454545f,15),ener), st->subframeSize); for (i=0;i<st->subframeSize;i++) @@ -1469,8 +1450,7 @@ int nb_decode(void *state, SpeexBits *bits, void *vout) if (g>GAIN_SCALING) g=GAIN_SCALING; - for (i=0;i<st->subframeSize;i++) - exc[i]=0; + SPEEX_MEMSET(exc, 0, st->subframeSize); while (st->voc_offset<st->subframeSize) { /* exc[st->voc_offset]= g*sqrt(2*ol_pitch)*ol_gain; @@ -1505,8 +1485,7 @@ int nb_decode(void *state, SpeexBits *bits, void *vout) multicomb(st->exc-st->subframeSize, out, st->interp_qlpc, st->lpcSize, 2*st->subframeSize, best_pitch, 40, SUBMODE(comb_gain), stack); multicomb(st->exc+st->subframeSize, out+2*st->subframeSize, st->interp_qlpc, st->lpcSize, 2*st->subframeSize, best_pitch, 40, SUBMODE(comb_gain), stack); } else { - for (i=0;i<st->frameSize;i++) - out[i]=st->exc[i-st->subframeSize]; + SPEEX_COPY(out, &st->exc[-st->subframeSize], st->frameSize); } /* If the last packet was lost, re-scale the excitation to obtain the same energy as encoded in ol_gain */ |