FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavdevice
timefilter.h
Go to the documentation of this file.
1
/*
2
* Delay Locked Loop based time filter prototypes and declarations
3
* Copyright (c) 2009 Samalyse
4
* Copyright (c) 2009 Michael Niedermayer
5
* Author: Olivier Guilyardi <olivier samalyse com>
6
* Michael Niedermayer <michaelni gmx at>
7
*
8
* This file is part of FFmpeg.
9
*
10
* FFmpeg is free software; you can redistribute it and/or
11
* modify it under the terms of the GNU Lesser General Public
12
* License as published by the Free Software Foundation; either
13
* version 2.1 of the License, or (at your option) any later version.
14
*
15
* FFmpeg is distributed in the hope that it will be useful,
16
* but WITHOUT ANY WARRANTY; without even the implied warranty of
17
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18
* Lesser General Public License for more details.
19
*
20
* You should have received a copy of the GNU Lesser General Public
21
* License along with FFmpeg; if not, write to the Free Software
22
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23
*/
24
25
#ifndef AVDEVICE_TIMEFILTER_H
26
#define AVDEVICE_TIMEFILTER_H
27
28
/**
29
* Opaque type representing a time filter state
30
*
31
* The purpose of this filter is to provide a way to compute accurate time
32
* stamps that can be compared to wall clock time, especially when dealing
33
* with two clocks: the system clock and a hardware device clock, such as
34
* a soundcard.
35
*/
36
typedef
struct
TimeFilter
TimeFilter
;
37
38
39
/**
40
* Create a new Delay Locked Loop time filter
41
*
42
* feedback2_factor and feedback3_factor are the factors used for the
43
* multiplications that are respectively performed in the second and third
44
* feedback paths of the loop.
45
*
46
* Unless you know what you are doing, you should set these as follow:
47
*
48
* o = 2 * M_PI * bandwidth * period_in_seconds
49
* feedback2_factor = sqrt(2) * o
50
* feedback3_factor = o * o
51
*
52
* Where bandwidth is up to you to choose. Smaller values will filter out more
53
* of the jitter, but also take a longer time for the loop to settle. A good
54
* starting point is something between 0.3 and 3 Hz.
55
*
56
* @param time_base period of the hardware clock in seconds
57
* (for example 1.0/44100)
58
* @param period expected update interval, in input units
59
* @param brandwidth filtering bandwidth, in Hz
60
*
61
* @return a pointer to a TimeFilter struct, or NULL on error
62
*
63
* For more details about these parameters and background concepts please see:
64
* http://www.kokkinizita.net/papers/usingdll.pdf
65
*/
66
TimeFilter
*
ff_timefilter_new
(
double
clock_period
,
double
feedback2_factor
,
double
feedback3_factor
);
67
68
/**
69
* Update the filter
70
*
71
* This function must be called in real time, at each process cycle.
72
*
73
* @param period the device cycle duration in clock_periods. For example, at
74
* 44.1kHz and a buffer size of 512 frames, period = 512 when clock_period
75
* was 1.0/44100, or 512/44100 if clock_period was 1.
76
*
77
* system_time, in seconds, should be the value of the system clock time,
78
* at (or as close as possible to) the moment the device hardware interrupt
79
* occurred (or any other event the device clock raises at the beginning of a
80
* cycle).
81
*
82
* @return the filtered time, in seconds
83
*/
84
double
ff_timefilter_update
(
TimeFilter
*
self
,
double
system_time,
double
period);
85
86
/**
87
* Evaluate the filter at a specified time
88
*
89
* @param delta difference between the requested time and the current time
90
* (last call to ff_timefilter_update).
91
* @return the filtered time
92
*/
93
double
ff_timefilter_eval
(
TimeFilter
*
self
,
double
delta
);
94
95
/**
96
* Reset the filter
97
*
98
* This function should mainly be called in case of XRUN.
99
*
100
* Warning: after calling this, the filter is in an undetermined state until
101
* the next call to ff_timefilter_update()
102
*/
103
void
ff_timefilter_reset
(
TimeFilter
*);
104
105
/**
106
* Free all resources associated with the filter
107
*/
108
void
ff_timefilter_destroy
(
TimeFilter
*);
109
110
#endif
/* AVDEVICE_TIMEFILTER_H */
Generated on Sun Mar 23 2014 23:50:07 for FFmpeg by
1.8.2