X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Ftimefilter.h;h=ded8ec7bede6cde478dd3cdafc49ec84b01778ef;hb=855e7732c6bcc7d52cd0863407a721c2bf00fcf1;hp=c5252de3e8055d1a44d3f91f38e5b6679f7c088e;hpb=f982c6d87a34bd33857f9d070c0dafaf91f8071c;p=ffmpeg diff --git a/libavformat/timefilter.h b/libavformat/timefilter.h index c5252de3e80..ded8ec7bede 100644 --- a/libavformat/timefilter.h +++ b/libavformat/timefilter.h @@ -1,7 +1,9 @@ /* * Delay Locked Loop based time filter prototypes and declarations * Copyright (c) 2009 Samalyse + * Copyright (c) 2009 Michael Niedermayer * Author: Olivier Guilyardi + * Michael Niedermayer * * This file is part of FFmpeg. * @@ -37,10 +39,6 @@ typedef struct TimeFilter TimeFilter; /** * Create a new Delay Locked Loop time filter * - * period is the device cycle duration in seconds. For example, at - * 44.1Hz and a buffer size of 512 frames, period = 512 / 44100. The filter - * only works if the cycle duration is fixed. - * * feedback2_factor and feedback3_factor are the factors used for the * multiplications that are respectively performed in the second and third * feedback paths of the loop. @@ -55,36 +53,31 @@ typedef struct TimeFilter TimeFilter; * of the jitter, but also take a longer time for the loop to settle. A good * starting point is something between 0.3 and 3 Hz. * + * @param clock_period period of the hardware clock in seconds + * (for example 1.0/44100) + * * For more details about these parameters and background concepts please see: * http://www.kokkinizita.net/papers/usingdll.pdf */ -TimeFilter * ff_timefilter_new(double period, double feedback2_factor, double feedback3_factor); +TimeFilter * ff_timefilter_new(double clock_period, double feedback2_factor, double feedback3_factor); /** * Update the filter * * This function must be called in real time, at each process cycle. * + * @param period the device cycle duration in clock_periods. For example, at + * 44.1kHz and a buffer size of 512 frames, period = 512 when clock_period + * was 1.0/44100, or 512/44100 if clock_period was 1. + * * system_time, in seconds, should be the value of the system clock time, * at (or as close as possible to) the moment the device hardware interrupt * occured (or any other event the device clock raises at the beginning of a * cycle). - */ -void ff_timefilter_update(TimeFilter *self, double system_time); - -/** - * Retrieve the filtered time - * - * The returned value represents the filtered time, in seconds, of the - * beginning of the current cycle as updated by the last call to - * ff_timefilter_update() - * - * This is the value that should be used for timestamping. * - * Warning: you must call ff_timefilter_update() before this, otherwise the - * result is undetermined. + * @return the filtered time, in seconds */ -double ff_timefilter_read(TimeFilter *); +double ff_timefilter_update(TimeFilter *self, double system_time, double period); /** * Reset the filter