VLC
2.1.0-git
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
src
video_output
chrono.h
Go to the documentation of this file.
1
/*****************************************************************************
2
* chrono.h: vout chrono
3
*****************************************************************************
4
* Copyright (C) 2009-2010 Laurent Aimar
5
* $Id: 8a22511c5a72b3164f4b3ab6798fb1d7e879c1b4 $
6
*
7
* Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
8
*
9
* This program is free software; you can redistribute it and/or modify it
10
* under the terms of the GNU Lesser General Public License as published by
11
* the Free Software Foundation; either version 2.1 of the License, or
12
* (at your option) any later version.
13
*
14
* This program is distributed in the hope that it will be useful,
15
* but WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
* GNU Lesser General Public License for more details.
18
*
19
* You should have received a copy of the GNU Lesser General Public License
20
* along with this program; if not, write to the Free Software Foundation,
21
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22
*****************************************************************************/
23
24
#ifndef LIBVLC_VOUT_CHRONO_H
25
#define LIBVLC_VOUT_CHRONO_H
26
27
typedef
struct
{
28
int
shift
;
29
mtime_t
avg
;
30
mtime_t
avg_initial
;
31
32
int
shift_var
;
33
mtime_t
var
;
34
35
mtime_t
start
;
36
}
vout_chrono_t
;
37
38
static
inline
void
vout_chrono_Init
(
vout_chrono_t
*chrono,
int
shift,
mtime_t
avg_initial)
39
{
40
chrono->
shift
= shift;
41
chrono->
avg_initial
=
42
chrono->
avg
= avg_initial;
43
44
chrono->
shift_var
= shift+1;
45
chrono->
var
= avg_initial / 2;
46
47
chrono->
start
=
VLC_TS_INVALID
;
48
}
49
static
inline
void
vout_chrono_Clean
(
vout_chrono_t
*chrono)
50
{
51
VLC_UNUSED
(chrono);
52
}
53
static
inline
void
vout_chrono_Start
(
vout_chrono_t
*chrono)
54
{
55
chrono->
start
=
mdate
();
56
}
57
static
inline
mtime_t
vout_chrono_GetHigh
(
vout_chrono_t
*chrono)
58
{
59
return
chrono->
avg
+ 2 * chrono->
var
;
60
}
61
static
inline
mtime_t
vout_chrono_GetLow
(
vout_chrono_t
*chrono)
62
{
63
return
__MAX(chrono->
avg
- 2 * chrono->
var
, 0);
64
}
65
66
static
inline
void
vout_chrono_Stop
(
vout_chrono_t
*chrono)
67
{
68
assert(chrono->
start
!=
VLC_TS_INVALID
);
69
70
/* */
71
const
mtime_t
duration =
mdate
() - chrono->
start
;
72
const
mtime_t
var = llabs( duration - chrono->
avg
);
73
74
/* Update average only if the current point is 'valid' */
75
if
( duration <
vout_chrono_GetHigh
( chrono ) )
76
chrono->
avg
= (((1 << chrono->
shift
) - 1) * chrono->
avg
+ duration) >> chrono->
shift
;
77
/* Always update the variance */
78
chrono->
var
= (((1 << chrono->
shift_var
) - 1) * chrono->
var
+ var) >> chrono->
shift_var
;
79
80
/* For assert */
81
chrono->
start
=
VLC_TS_INVALID
;
82
}
83
static
inline
void
vout_chrono_Reset
(
vout_chrono_t
*chrono)
84
{
85
vout_chrono_t
ch = *chrono;
86
vout_chrono_Clean
(chrono);
87
vout_chrono_Init
(chrono, ch.
shift
, ch.
avg_initial
);
88
}
89
90
#endif
Generated by
1.8.1.2