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
input
clock.h
Go to the documentation of this file.
1
/*****************************************************************************
2
* clock.h: clocks synchronisation
3
*****************************************************************************
4
* Copyright (C) 2008 VLC authors and VideoLAN
5
* Copyright (C) 2008 Laurent Aimar
6
* $Id: ee1492ba7af8eba578a8ce822e3a223817609ab4 $
7
*
8
* Authors: Laurent Aimar < fenrir _AT_ videolan _DOT_ org >
9
*
10
* This program is free software; you can redistribute it and/or modify it
11
* under the terms of the GNU Lesser General Public License as published by
12
* the Free Software Foundation; either version 2.1 of the License, or
13
* (at your option) any later version.
14
*
15
* This program 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
18
* GNU Lesser General Public License for more details.
19
*
20
* You should have received a copy of the GNU Lesser General Public License
21
* along with this program; if not, write to the Free Software Foundation,
22
* Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
23
*****************************************************************************/
24
25
#ifndef LIBVLC_INPUT_CLOCK_H
26
#define LIBVLC_INPUT_CLOCK_H 1
27
28
#include <
vlc_common.h
>
29
#include <
vlc_input.h
>
/* FIXME Needed for input_clock_t */
30
31
/** @struct input_clock_t
32
* This structure is used to manage clock drift and reception jitters
33
*
34
* XXX input_clock_GetTS can be called from any threads. All others functions
35
* MUST be called from one and only one thread.
36
*/
37
typedef
struct
input_clock_t
input_clock_t
;
38
39
/**
40
* This function creates a new input_clock_t.
41
* You must use input_clock_Delete to delete it once unused.
42
*/
43
input_clock_t
*
input_clock_New
(
int
i_rate
);
44
45
/**
46
* This function destroys a input_clock_t created by input_clock_New.
47
*/
48
void
input_clock_Delete
(
input_clock_t
* );
49
50
/**
51
* This function will update a input_clock_t with a new clock reference point.
52
* It will also tell if the clock point is late regarding our buffering.
53
*
54
* \param b_buffering_allowed tells if we are allowed to bufferize more data in
55
* advanced (if possible).
56
*/
57
void
input_clock_Update
(
input_clock_t
*,
vlc_object_t
*p_log,
58
bool
*pb_late,
59
bool
b_can_pace_control,
bool
b_buffering_allowed,
60
mtime_t
i_clock,
mtime_t
i_system );
61
/**
62
* This function will reset the drift of a input_clock_t.
63
*
64
* The actual jitter estimation will not be reseted by it.
65
*/
66
void
input_clock_Reset
(
input_clock_t
* );
67
68
/**
69
* This functions will return a deadline used to control the reading speed.
70
*/
71
mtime_t
input_clock_GetWakeup
(
input_clock_t
* );
72
73
/**
74
* This functions allows changing the actual reading speed.
75
*/
76
void
input_clock_ChangeRate
(
input_clock_t
*,
int
i_rate
);
77
78
/**
79
* This function allows changing the pause status.
80
*/
81
void
input_clock_ChangePause
(
input_clock_t
*,
bool
b_paused
,
mtime_t
i_date );
82
83
/**
84
* This function returns the original system value date and the delay for the current
85
* reference point (a valid reference point must have been set).
86
*/
87
void
input_clock_GetSystemOrigin
(
input_clock_t
*,
mtime_t
*pi_system,
mtime_t
*pi_delay );
88
89
/**
90
* This function allows rebasing the original system value date (a valid
91
* reference point must have been set).
92
* When using the absolute mode, it will create a discontinuity unless
93
* called imediatly after a input_clock_Update.
94
*/
95
void
input_clock_ChangeSystemOrigin
(
input_clock_t
*,
bool
b_absolute,
mtime_t
i_system );
96
97
/**
98
* This function converts a pair of timestamp from stream clock to system clock.
99
*
100
* If pi_rate is provided it will be filled with the rate value used for
101
* the conversion.
102
* p_ts0 is a pointer to a timestamp to be converted (in place) and must be non NULL.
103
* p_ts1 is a pointer to a timestamp to be converted (in place) and can be NULL.
104
*
105
* It will return VLC_EGENERIC if i_ts_bound is not INT64_MAX and if the value *p_ts0
106
* after conversion is not before the deadline mdate() + i_pts_delay + i_ts_bound.
107
* It will also return VLC_EGENERIC if the conversion cannot be done successfully. In
108
* this case, *p_ts0 and *p_ts1 will hold an invalid timestamp.
109
* Otherwise it will return VLC_SUCCESS.
110
*/
111
int
input_clock_ConvertTS
(
input_clock_t
*,
int
*pi_rate,
mtime_t
*pi_ts0,
mtime_t
*pi_ts1,
mtime_t
i_ts_bound );
112
113
/**
114
* This function returns the current rate.
115
*/
116
int
input_clock_GetRate
(
input_clock_t
* );
117
118
/**
119
* This function returns current clock state or VLC_EGENERIC if there is not a
120
* reference point.
121
*/
122
int
input_clock_GetState
(
input_clock_t
*,
123
mtime_t
*pi_stream_start,
mtime_t
*pi_system_start,
124
mtime_t
*pi_stream_duration,
mtime_t
*pi_system_duration );
125
126
/**
127
* This function allows the set the minimal configuration for the jitter estimation algo.
128
*/
129
void
input_clock_SetJitter
(
input_clock_t
*,
130
mtime_t
i_pts_delay
,
int
i_cr_average );
131
132
/**
133
* This function returns an estimation of the pts_delay needed to avoid rebufferization.
134
* XXX in the current implementation, the pts_delay will never be decreased.
135
*/
136
mtime_t
input_clock_GetJitter
(
input_clock_t
* );
137
138
#endif
Generated by
1.8.1.2