Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>tags/n2.1
@@ -188,6 +188,10 @@ static int start_jack(AVFormatContext *context) | |||||
/* Create time filter */ | /* Create time filter */ | ||||
self->timefilter = ff_timefilter_new (1.0 / self->sample_rate, self->buffer_size, 1.5); | self->timefilter = ff_timefilter_new (1.0 / self->sample_rate, self->buffer_size, 1.5); | ||||
if (!self->timefilter) { | |||||
jack_client_close(self->client); | |||||
return AVERROR(ENOMEM); | |||||
} | |||||
/* Create FIFO buffers */ | /* Create FIFO buffers */ | ||||
self->filled_pkts = av_fifo_alloc(FIFO_PACKETS_NUM * sizeof(AVPacket)); | self->filled_pkts = av_fifo_alloc(FIFO_PACKETS_NUM * sizeof(AVPacket)); | ||||
@@ -49,6 +49,10 @@ TimeFilter *ff_timefilter_new(double time_base, | |||||
{ | { | ||||
TimeFilter *self = av_mallocz(sizeof(TimeFilter)); | TimeFilter *self = av_mallocz(sizeof(TimeFilter)); | ||||
double o = 2 * M_PI * bandwidth * period * time_base; | double o = 2 * M_PI * bandwidth * period * time_base; | ||||
if (!self) | |||||
return NULL; | |||||
self->clock_period = time_base; | self->clock_period = time_base; | ||||
self->feedback2_factor = qexpneg(M_SQRT2 * o); | self->feedback2_factor = qexpneg(M_SQRT2 * o); | ||||
self->feedback3_factor = qexpneg(o * o) / period; | self->feedback3_factor = qexpneg(o * o) / period; | ||||
@@ -121,6 +125,10 @@ int main(void) | |||||
for (par1 = bestpar1 * 0.8; par1 <= bestpar1 * 1.21; par1 += bestpar1 * 0.05) { | for (par1 = bestpar1 * 0.8; par1 <= bestpar1 * 1.21; par1 += bestpar1 * 0.05) { | ||||
double error = 0; | double error = 0; | ||||
TimeFilter *tf = ff_timefilter_new(1, par0, par1); | TimeFilter *tf = ff_timefilter_new(1, par0, par1); | ||||
if (!tf) { | |||||
printf("Could not alocate memory for timefilter.\n"); | |||||
exit(1); | |||||
} | |||||
for (i = 0; i < SAMPLES; i++) { | for (i = 0; i < SAMPLES; i++) { | ||||
double filtered; | double filtered; | ||||
filtered = ff_timefilter_update(tf, samples[i], i ? (samplet[i] - samplet[i-1]) : 1); | filtered = ff_timefilter_update(tf, samples[i], i ? (samplet[i] - samplet[i-1]) : 1); | ||||
@@ -58,6 +58,8 @@ typedef struct TimeFilter TimeFilter; | |||||
* @param period expected update interval, in input units | * @param period expected update interval, in input units | ||||
* @param brandwidth filtering bandwidth, in Hz | * @param brandwidth filtering bandwidth, in Hz | ||||
* | * | ||||
* @return a pointer to a TimeFilter struct, or NULL on error | |||||
* | |||||
* For more details about these parameters and background concepts please see: | * For more details about these parameters and background concepts please see: | ||||
* http://www.kokkinizita.net/papers/usingdll.pdf | * http://www.kokkinizita.net/papers/usingdll.pdf | ||||
*/ | */ | ||||
@@ -455,6 +455,8 @@ static int init_convert_timestamp(AVFormatContext *ctx, int64_t ts) | |||||
av_log(ctx, AV_LOG_INFO, "Detected monotonic timestamps, converting\n"); | av_log(ctx, AV_LOG_INFO, "Detected monotonic timestamps, converting\n"); | ||||
/* microseconds instead of seconds, MHz instead of Hz */ | /* microseconds instead of seconds, MHz instead of Hz */ | ||||
s->timefilter = ff_timefilter_new(1, period, 1.0E-6); | s->timefilter = ff_timefilter_new(1, period, 1.0E-6); | ||||
if (!s->timefilter) | |||||
return AVERROR(ENOMEM); | |||||
s->ts_mode = V4L_TS_CONVERT_READY; | s->ts_mode = V4L_TS_CONVERT_READY; | ||||
return 0; | return 0; | ||||
} | } | ||||