annotate timefilter.h @ 6118:6780dc315f36 libavformat

Remove support for pre-Haiku, non-POSIX, non-C99 BeOS variants. BeOS support has been broken for many years and the "maintainer" of the port has not reacted to countless requests to get the port fixed. approved by Mans
author diego
date Thu, 10 Jun 2010 16:51:14 +0000
parents aed6cf383ca2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4650
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
1 /*
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
2 * Delay Locked Loop based time filter prototypes and declarations
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
3 * Copyright (c) 2009 Samalyse
4665
aed6cf383ca2 Add my name to copyright & author as requested by the original author.
michael
parents: 4657
diff changeset
4 * Copyright (c) 2009 Michael Niedermayer
4650
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
5 * Author: Olivier Guilyardi <olivier samalyse com>
4665
aed6cf383ca2 Add my name to copyright & author as requested by the original author.
michael
parents: 4657
diff changeset
6 * Michael Niedermayer <michaelni gmx at>
4650
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
7 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
8 * This file is part of FFmpeg.
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
9 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
10 * FFmpeg is free software; you can redistribute it and/or
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
11 * modify it under the terms of the GNU Lesser General Public
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
12 * License as published by the Free Software Foundation; either
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
13 * version 2.1 of the License, or (at your option) any later version.
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
14 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
15 * FFmpeg is distributed in the hope that it will be useful,
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
18 * Lesser General Public License for more details.
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
19 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
20 * You should have received a copy of the GNU Lesser General Public
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
21 * License along with FFmpeg; if not, write to the Free Software
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
23 */
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
24
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
25 #ifndef AVFORMAT_TIMEFILTER_H
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
26 #define AVFORMAT_TIMEFILTER_H
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
27
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
28 /**
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
29 * Opaque type representing a time filter state
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
30 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
31 * The purpose of this filter is to provide a way to compute accurate time
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
32 * stamps that can be compared to wall clock time, especially when dealing
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
33 * with two clocks: the system clock and a hardware device clock, such as
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
34 * a soundcard.
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
35 */
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
36 typedef struct TimeFilter TimeFilter;
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
37
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
38
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
39 /**
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
40 * Create a new Delay Locked Loop time filter
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
41 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
42 * feedback2_factor and feedback3_factor are the factors used for the
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
43 * multiplications that are respectively performed in the second and third
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
44 * feedback paths of the loop.
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
45 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
46 * Unless you know what you are doing, you should set these as follow:
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
47 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
48 * o = 2 * M_PI * bandwidth * period
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
49 * feedback2_factor = sqrt(2 * o)
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
50 * feedback3_factor = o * o
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
51 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
52 * Where bandwidth is up to you to choose. Smaller values will filter out more
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
53 * of the jitter, but also take a longer time for the loop to settle. A good
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
54 * starting point is something between 0.3 and 3 Hz.
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
55 *
4657
6b24b7aa7351 Add clock_period parameter, this should make the code easier to use.
michael
parents: 4653
diff changeset
56 * @param clock_period period of the hardware clock in seconds
6b24b7aa7351 Add clock_period parameter, this should make the code easier to use.
michael
parents: 4653
diff changeset
57 * (for example 1.0/44100)
6b24b7aa7351 Add clock_period parameter, this should make the code easier to use.
michael
parents: 4653
diff changeset
58 *
4650
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
59 * For more details about these parameters and background concepts please see:
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
60 * http://www.kokkinizita.net/papers/usingdll.pdf
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
61 */
4657
6b24b7aa7351 Add clock_period parameter, this should make the code easier to use.
michael
parents: 4653
diff changeset
62 TimeFilter * ff_timefilter_new(double clock_period, double feedback2_factor, double feedback3_factor);
4650
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
63
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
64 /**
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
65 * Update the filter
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
66 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
67 * This function must be called in real time, at each process cycle.
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
68 *
4657
6b24b7aa7351 Add clock_period parameter, this should make the code easier to use.
michael
parents: 4653
diff changeset
69 * @param period the device cycle duration in clock_periods. For example, at
6b24b7aa7351 Add clock_period parameter, this should make the code easier to use.
michael
parents: 4653
diff changeset
70 * 44.1kHz and a buffer size of 512 frames, period = 512 when clock_period
6b24b7aa7351 Add clock_period parameter, this should make the code easier to use.
michael
parents: 4653
diff changeset
71 * was 1.0/44100, or 512/44100 if clock_period was 1.
4652
28b80bbf6288 Allow timespans to vary.
michael
parents: 4650
diff changeset
72 *
4650
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
73 * system_time, in seconds, should be the value of the system clock time,
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
74 * at (or as close as possible to) the moment the device hardware interrupt
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
75 * occured (or any other event the device clock raises at the beginning of a
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
76 * cycle).
4653
34a843f958b7 Merge ff_timefilter_read() and ff_timefilter_update(), this simplifies API and
michael
parents: 4652
diff changeset
77 *
34a843f958b7 Merge ff_timefilter_read() and ff_timefilter_update(), this simplifies API and
michael
parents: 4652
diff changeset
78 * @return the filtered time, in seconds
4650
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
79 */
4653
34a843f958b7 Merge ff_timefilter_read() and ff_timefilter_update(), this simplifies API and
michael
parents: 4652
diff changeset
80 double ff_timefilter_update(TimeFilter *self, double system_time, double period);
4650
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
81
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
82 /**
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
83 * Reset the filter
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
84 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
85 * This function should mainly be called in case of XRUN.
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
86 *
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
87 * Warning: after calling this, the filter is in an undetermined state until
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
88 * the next call to ff_timefilter_update()
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
89 */
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
90 void ff_timefilter_reset(TimeFilter *);
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
91
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
92 /**
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
93 * Free all resources associated with the filter
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
94 */
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
95 void ff_timefilter_destroy(TimeFilter *);
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
96
5090afc3cd19 Timefilter code by Olivier Guilyardi o list O samalyse o com
michael
parents:
diff changeset
97 #endif /* AVFORMAT_TIMEFILTER_H */