av_cold int ff_alsa_close(AVFormatContext *s1) { AlsaData *s = s1->priv_data; av_freep(&s->reorder_buf); if (CONFIG_ALSA_INDEV) ff_timefilter_destroy(s->timefilter); snd_pcm_close(s->h); return 0; }
static void stop_jack(JackData *self) { if (self->client) { if (self->activated) jack_deactivate(self->client); jack_client_close(self->client); } sem_destroy(&self->packet_count); free_pkt_fifo(self->new_pkts); free_pkt_fifo(self->filled_pkts); av_freep(&self->ports); ff_timefilter_destroy(self->timefilter); }
int main(void) { AVLFG prng; double n0,n1; #define SAMPLES 1000 double ideal[SAMPLES]; double samples[SAMPLES]; #if 1 for(n0= 0; n0<40; n0=2*n0+1){ for(n1= 0; n1<10; n1=2*n1+1){ #else {{ n0=7; n1=1; #endif double best_error= 1000000000; double bestpar0=1; double bestpar1=0.001; int better, i; av_lfg_init(&prng, 123); for(i=0; i<SAMPLES; i++){ ideal[i] = 10 + i + n1*i/(1000); samples[i] = ideal[i] + n0 * (av_lfg_get(&prng) - LFG_MAX / 2) / (LFG_MAX * 10LL); } do{ double par0, par1; better=0; for(par0= bestpar0*0.8; par0<=bestpar0*1.21; par0+=bestpar0*0.05){ for(par1= bestpar1*0.8; par1<=bestpar1*1.21; par1+=bestpar1*0.05){ double error=0; TimeFilter *tf= ff_timefilter_new(1, par0, par1); for(i=0; i<SAMPLES; i++){ double filtered; filtered= ff_timefilter_update(tf, samples[i], 1); error += (filtered - ideal[i]) * (filtered - ideal[i]); } ff_timefilter_destroy(tf); if(error < best_error){ best_error= error; bestpar0= par0; bestpar1= par1; better=1; } } } }while(better); #if 0 double lastfil=9; TimeFilter *tf= ff_timefilter_new(1, bestpar0, bestpar1); for(i=0; i<SAMPLES; i++){ double filtered; filtered= ff_timefilter_update(tf, samples[i], 1); printf("%f %f %f %f\n", i - samples[i] + 10, filtered - samples[i], samples[FFMAX(i, 1)] - samples[FFMAX(i-1, 0)], filtered - lastfil); lastfil= filtered; } ff_timefilter_destroy(tf); #else printf(" [%f %f %9f]", bestpar0, bestpar1, best_error); #endif } printf("\n"); } return 0; }