VLC  4.0.0-dev
chrono.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * chrono.h: vout chrono
3  *****************************************************************************
4  * Copyright (C) 2009-2010 Laurent Aimar
5  *
6  * Authors: Laurent Aimar <fenrir _AT_ videolan _DOT_ org>
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU Lesser General Public License as published by
10  * the Free Software Foundation; either version 2.1 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this program; if not, write to the Free Software Foundation,
20  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
21  *****************************************************************************/
22 
23 #ifndef LIBVLC_VOUT_CHRONO_H
24 #define LIBVLC_VOUT_CHRONO_H
25 
26 #include <assert.h>
27 
28 typedef struct {
29  int shift;
30  vlc_tick_t avg;
31  vlc_tick_t avg_initial;
32 
33  int shift_var;
35 
36  vlc_tick_t start;
38 
39 static inline void vout_chrono_Init(vout_chrono_t *chrono, int shift, vlc_tick_t avg_initial)
40 {
41  chrono->shift = shift;
42  chrono->avg_initial =
43  chrono->avg = avg_initial;
44 
45  chrono->shift_var = shift+1;
46  chrono->var = avg_initial / 2;
47 
48  chrono->start = VLC_TICK_INVALID;
49 }
50 static inline void vout_chrono_Clean(vout_chrono_t *chrono)
51 {
52  VLC_UNUSED(chrono);
53 }
54 static inline void vout_chrono_Start(vout_chrono_t *chrono)
55 {
56  chrono->start = vlc_tick_now();
57 }
59 {
60  return chrono->avg + 2 * chrono->var;
61 }
63 {
64  return __MAX(chrono->avg - 2 * chrono->var, 0);
65 }
66 
67 static inline void vout_chrono_Stop(vout_chrono_t *chrono)
68 {
69  assert(chrono->start != VLC_TICK_INVALID);
70 
71  /* */
72  const vlc_tick_t duration = vlc_tick_now() - chrono->start;
73  const vlc_tick_t var = llabs( duration - chrono->avg );
74 
75  /* Update average only if the current point is 'valid' */
76  if( duration < vout_chrono_GetHigh( chrono ) )
77  chrono->avg = (((1 << chrono->shift) - 1) * chrono->avg + duration) >> chrono->shift;
78  /* Always update the variance */
79  chrono->var = (((1 << chrono->shift_var) - 1) * chrono->var + var) >> chrono->shift_var;
80 
81  /* For assert */
82  chrono->start = VLC_TICK_INVALID;
83 }
84 static inline void vout_chrono_Reset(vout_chrono_t *chrono)
85 {
86  vout_chrono_t ch = *chrono;
87  vout_chrono_Clean(chrono);
88  vout_chrono_Init(chrono, ch.shift, ch.avg_initial);
89 }
90 
91 #endif
vlc_player_t
Definition: player.h:227
vlc_iconv_t
void * vlc_iconv_t
Definition: vlc_charset.h:140
vlc_player_GetCategoryLanguage
char * vlc_player_GetCategoryLanguage(vlc_player_t *player, enum es_format_category_e cat)
Get the language of an ES category.
Definition: player.c:725
vlc_towc
size_t vlc_towc(const char *str, uint32_t *restrict pwc)
Decodes a code point from UTF-8.
Definition: unicode.c:113
vout_chrono_t::shift_var
int shift_var
Definition: chrono.h:53
vlc_uri_decode_duplicate
char * vlc_uri_decode_duplicate(const char *str)
Decodes an URI component.
Definition: url.c:43
vlc_player.h
add_overflow
#define add_overflow(a, b, r)
Overflowing addition.
Definition: vlc_common.h:860
vlc_memstream
In-memory stream object.
Definition: vlc_memstream.h:41
vlc_strfplayer
char * vlc_strfplayer(vlc_player_t *player, input_item_t *item, const char *s)
Formats input meta-data.
Definition: strings.c:542
vlc_uri_component_validate
static bool vlc_uri_component_validate(const char *str, const char *extras)
Definition: url.c:378
input_item_GetName
char * input_item_GetName(input_item_t *p_item)
Definition: item.c:270
vout_chrono_Reset
static void vout_chrono_Reset(vout_chrono_t *chrono)
Definition: chrono.h:84
urihex
static const char urihex[]
Definition: url.c:104
vlc_xml_decode
void vlc_xml_decode(char *psz_value)
Decodes XML entities.
Definition: strings.c:197
es_format_t::i_bitrate
unsigned int i_bitrate
bitrate of this ES
Definition: vlc_es.h:650
vlc_player_GetTime
vlc_tick_t vlc_player_GetTime(vlc_player_t *player)
Get the time of the current media.
Definition: player.c:1356
clz
#define clz(x)
Count leading zeroes.
Definition: vlc_common.h:697
vlc_meta_Album
@ vlc_meta_Album
Definition: vlc_meta.h:39
vlc_uri_path_validate
static bool vlc_uri_path_validate(const char *str)
Definition: url.c:405
vlc_memstream::ptr
char * ptr
Buffer start address.
Definition: vlc_memstream.h:48
unlikely
#define unlikely(p)
Predicted false condition.
Definition: vlc_common.h:227
vlc_meta_Language
@ vlc_meta_Language
Definition: vlc_meta.h:46
vout_chrono_t::avg
vlc_tick_t avg
Definition: chrono.h:50
vlc_memstream::error
int error
Definition: vlc_memstream.h:46
aout_VolumeGet
float aout_VolumeGet(audio_output_t *aout)
Gets the volume of the audio output stream (independent of mute).
Definition: output.c:645
vlc_common.h
lldiv_t::rem
long long rem
Definition: vlc_fixups.h:78
vout_chrono_t::shift
int shift
Definition: chrono.h:49
isurisubdelim
static bool isurisubdelim(int c)
Definition: url.c:92
DIR_SEP
#define DIR_SEP
Definition: vlc_common.h:1221
write_meta
static int write_meta(struct vlc_memstream *stream, input_item_t *item, vlc_meta_type_t type)
Definition: strings.c:527
vlc_memstream::length
size_t length
Buffer length in bytes.
Definition: vlc_memstream.h:49
vlc_meta_URL
@ vlc_meta_URL
Definition: vlc_meta.h:45
vlc_iconv_close
VLC_EXPORT int vlc_iconv_close(vlc_iconv_t)
input_item_t
Describes an input and is used to spawn input_thread_t objects.
Definition: vlc_input_item.h:77
vlc_player_GetSelectedChapterIdx
ssize_t vlc_player_GetSelectedChapterIdx(vlc_player_t *player)
Get the selected chapter index for the current media.
Definition: player.c:895
vlc_player_GetCurrentMedia
input_item_t * vlc_player_GetCurrentMedia(vlc_player_t *player)
Get the current played media.
Definition: player.c:1043
input_item_t::lock
vlc_mutex_t lock
Lock for the item.
Definition: vlc_input_item.h:112
iso639_lang_t::psz_eng_name
const char * psz_eng_name
Definition: vlc_iso_lang.h:32
vlc_b64_decode_binary
size_t vlc_b64_decode_binary(uint8_t **pp_dst, const char *psz_src)
Definition: strings.c:461
vlc_memstream_puts
int() vlc_memstream_puts(struct vlc_memstream *ms, const char *str)
Appends a nul-terminated string to a byte stream.
Definition: memstream.c:156
vlc_charset.h
isurihex
static bool isurihex(int c)
Definition: url.c:97
vlc_UrlClean
void vlc_UrlClean(vlc_url_t *restrict url)
Definition: url.c:598
vout_chrono_t
Definition: chrono.h:28
vlc_url_t::psz_password
char * psz_password
Definition: vlc_url.h:149
vlc_player_track
Player track structure.
Definition: vlc_player.h:1334
vlc_memstream_vprintf
int vlc_memstream_vprintf(struct vlc_memstream *ms, const char *fmt, va_list args)
Appends a formatted string to a byte stream.
Definition: memstream.c:162
vlc_strcasestr
char * vlc_strcasestr(const char *haystack, const char *needle)
Look for an UTF-8 string within another one in a case-insensitive fashion.
Definition: unicode.c:198
iso-639_def.h
vlc_memstream_open
int vlc_memstream_open(struct vlc_memstream *ms)
Initializes a byte stream object.
Definition: memstream.c:105
iso639_lang_t::psz_iso639_1
const char psz_iso639_1[3]
Definition: vlc_iso_lang.h:33
ARRAY_SIZE
#define ARRAY_SIZE(x)
Definition: vlc_arrays.h:178
lldiv_t
Definition: vlc_fixups.h:75
vlc_memstream_close
int vlc_memstream_close(struct vlc_memstream *ms)
Closes a byte stream object.
Definition: memstream.c:120
EnsureUTF8
static char * EnsureUTF8(char *str)
Removes non-UTF-8 sequences.
Definition: vlc_charset.h:115
vlc_uri_fixup_inner
static char * vlc_uri_fixup_inner(const char *str, const char *extras)
Definition: url.c:836
vlc_url_t::psz_option
char * psz_option
Definition: vlc_url.h:153
vlc_UrlParseFixup
int vlc_UrlParseFixup(vlc_url_t *url, const char *str)
Parses an URI or IRI and fix up the path part.
Definition: url.c:573
vlc_iri2uri
static char * vlc_iri2uri(const char *iri)
Definition: url.c:336
audio_format_t::i_rate
unsigned int i_rate
audio sample-rate
Definition: vlc_es.h:84
vout_chrono_t::var
vlc_tick_t var
Definition: chrono.h:54
isurisafe
static bool isurisafe(int c)
Definition: url.c:86
asprintf
int asprintf(char **, const char *,...)
vlc_UrlParseInner
static int vlc_UrlParseInner(vlc_url_t *restrict url, const char *str)
Definition: url.c:410
strndup
char * strndup(const char *, size_t)
lldiv
lldiv_t lldiv(long long, long long)
vlc_b64_decode_binary_to_buffer
size_t vlc_b64_decode_binary_to_buffer(void *dst, size_t size, const char *restrict src)
Definition: strings.c:416
vout_chrono_GetHigh
static vlc_tick_t vout_chrono_GetHigh(vout_chrono_t *chrono)
Definition: chrono.h:58
aout_Release
void aout_Release(audio_output_t *aout)
Definition: output.c:382
iso639_lang_t::psz_iso639_2B
const char psz_iso639_2B[4]
Definition: vlc_iso_lang.h:35
write_duration
static void write_duration(struct vlc_memstream *stream, vlc_tick_t duration)
Definition: strings.c:515
encode_URI_bytes
static char * encode_URI_bytes(const char *str, size_t *restrict lenp)
Definition: url.c:106
vlc_meta_Title
@ vlc_meta_Title
Definition: vlc_meta.h:35
vlc_player_GetPosition
float vlc_player_GetPosition(vlc_player_t *player)
Get the position of the current media.
Definition: player.c:1367
vlc_url_t::psz_host
char * psz_host
Definition: vlc_url.h:150
vlc_idna_to_ascii
static char * vlc_idna_to_ascii(const char *)
Converts a UTF-8 nul-terminated IDN to nul-terminated ASCII domain name.
Definition: url.c:943
vlc_meta_EncodedBy
@ vlc_meta_EncodedBy
Definition: vlc_meta.h:50
CLOCK_FREQ
#define CLOCK_FREQ
Definition: vlc_config.h:47
vlc_path2uri
char * vlc_path2uri(const char *path, const char *scheme)
Converts local path to URL.
Definition: url.c:143
audio_output
Audio output object.
Definition: vlc_aout.h:141
lldiv_t::quot
long long quot
Definition: vlc_fixups.h:77
vlc_player_GetSelectedTrack
static const struct vlc_player_track * vlc_player_GetSelectedTrack(vlc_player_t *player, enum es_format_category_e cat)
Helper to get the selected track from an ES category.
Definition: vlc_player.h:1513
input_stats_t::i_displayed_pictures
int64_t i_displayed_pictures
Definition: vlc_input_item.h:528
vlc_assert_unreachable
#define vlc_assert_unreachable()
Impossible branch assertion.
Definition: vlc_common.h:253
filename_sanitize
void filename_sanitize(char *str)
Sanitize a file name.
Definition: strings.c:915
vlc_iconv
VLC_EXPORT size_t vlc_iconv(vlc_iconv_t, const char **, size_t *, char **, size_t *)
vlc_url_t::psz_fragment
char * psz_fragment
Definition: vlc_url.h:154
vlc_uri_host_validate
static bool vlc_uri_host_validate(const char *str)
Definition: url.c:400
vlc_memstream_printf
int vlc_memstream_printf(struct vlc_memstream *ms, const char *fmt,...)
Appends a formatted string to a byte stream.
Definition: memstream.c:194
vlc_tick_now
vlc_tick_t vlc_tick_now(void)
Precision monotonic clock.
Definition: thread.c:261
vlc_uri_putc
static void vlc_uri_putc(struct vlc_memstream *s, int c, const char *extras)
Definition: url.c:868
vlc_meta_Artist
@ vlc_meta_Artist
Definition: vlc_meta.h:36
vout_chrono_GetLow
static vlc_tick_t vout_chrono_GetLow(vout_chrono_t *chrono)
Definition: chrono.h:62
vlc_memstream::stream
FILE * stream
Definition: vlc_memstream.h:45
vlc_url_t::psz_protocol
char * psz_protocol
Definition: vlc_url.h:147
vlc_UrlParse
int vlc_UrlParse(vlc_url_t *url, const char *str)
Parses an URI or IRI.
Definition: url.c:558
xml_entity_s
Definition: strings.c:57
vlc_memstream.h
vlc_tick_t
int64_t vlc_tick_t
High precision date or time interval.
Definition: vlc_tick.h:45
input_item_GetTitleFbName
char * input_item_GetTitleFbName(input_item_t *p_item)
Definition: item.c:255
vlc_url_t::psz_username
char * psz_username
Definition: vlc_url.h:148
vlc_strings.h
vlc_uri2path
char * vlc_uri2path(const char *url)
Converts a URI to a local path.
Definition: url.c:247
vlc_uri_merge_paths
static char * vlc_uri_merge_paths(const char *base, const char *ref)
Merge paths.
Definition: url.c:610
vlc_player_GetLength
vlc_tick_t vlc_player_GetLength(vlc_player_t *player)
Get the length of the current media.
Definition: player.c:1349
vlc_meta_Date
@ vlc_meta_Date
Definition: vlc_meta.h:43
memrchr
void * memrchr(const void *, int, size_t)
vlc_meta_TrackTotal
@ vlc_meta_TrackTotal
Definition: vlc_meta.h:53
vlc_hex_encode_binary
void vlc_hex_encode_binary(const void *input, size_t size, char *output)
Encode binary data as hex string.
Definition: strings.c:350
vlc_b64_encode_binary
char * vlc_b64_encode_binary(const void *src, size_t length)
Base64 encoding.
Definition: strings.c:360
vlc_b64_decode
char * vlc_b64_decode(const char *psz_src)
Definition: strings.c:471
VLC_TICK_INVALID
#define VLC_TICK_INVALID
Definition: vlc_config.h:44
vlc_iconv_open
VLC_EXPORT vlc_iconv_t vlc_iconv_open(const char *, const char *)
input_item_GetNowPlayingFb
char * input_item_GetNowPlayingFb(input_item_t *p_item)
Definition: item.c:401
vlc_iso_lang.h
input_item_GetDuration
vlc_tick_t input_item_GetDuration(input_item_t *p_i)
Definition: item.c:367
vlc_memstream_putc
int vlc_memstream_putc(struct vlc_memstream *ms, int c)
Appends a single byte to a byte stream.
Definition: memstream.c:151
unknown_language
static const iso639_lang_t unknown_language
Definition: iso_lang.c:43
vlc_uri_remove_dot_segments
static char * vlc_uri_remove_dot_segments(char *str)
Remove dot segments.
Definition: url.c:639
vlc_strftime
char * vlc_strftime(const char *tformat)
Convenience wrapper for strftime().
Definition: strings.c:485
GetLang_2T
const iso639_lang_t * GetLang_2T(const char *psz_code)
Definition: iso_lang.c:57
input_item_GetMeta
char * input_item_GetMeta(input_item_t *p_i, vlc_meta_type_t meta_type)
Definition: item.c:245
FromCharset
char * FromCharset(const char *charset, const void *data, size_t data_size)
Converts a string from the given character encoding to utf-8.
Definition: unicode.c:237
es_format_t::audio
audio_format_t audio
description of audio format
Definition: vlc_es.h:643
vlc_meta_Genre
@ vlc_meta_Genre
Definition: vlc_meta.h:37
xml_entities
static const struct xml_entity_s xml_entities[]
GetLang_1
const iso639_lang_t * GetLang_1(const char *psz_code)
Definition: iso_lang.c:46
static_assert
#define static_assert
Definition: vlc_fixups.h:370
vlc_player_GetSelectedTitleIdx
ssize_t vlc_player_GetSelectedTitleIdx(vlc_player_t *player)
Get the selected title index for the current media.
Definition: player.c:821
AUDIO_ES
@ AUDIO_ES
Definition: vlc_es.h:604
vlc_fs.h
vout_chrono_Clean
static void vout_chrono_Clean(vout_chrono_t *chrono)
Definition: chrono.h:50
vlc_url.h
iso639_lang_t::psz_iso639_2T
const char psz_iso639_2T[4]
Definition: vlc_iso_lang.h:34
DIR_SEP_CHAR
#define DIR_SEP_CHAR
Definition: vlc_common.h:1220
vlc_url_t
Definition: vlc_url.h:145
xml_entity_s::psz_entity
char psz_entity[8]
Definition: strings.c:59
vlc_filenamecmp
int vlc_filenamecmp(const char *a, const char *b)
Definition: strings.c:869
vout_chrono_Start
static void vout_chrono_Start(vout_chrono_t *chrono)
Definition: chrono.h:54
VLC_UNUSED
#define VLC_UNUSED(x)
Definition: vlc_common.h:1105
isurialnum
static bool isurialnum(int c)
Definition: url.c:79
iso639_lang_t
Definition: vlc_iso_lang.h:30
vlc_meta_Copyright
@ vlc_meta_Copyright
Definition: vlc_meta.h:38
strdup
char * strdup(const char *)
xml_entity_s::psz_char
char psz_char[4]
Definition: strings.c:60
psz_value
char psz_value[8]
Definition: vout_intf.c:99
vlc_url_t::i_port
unsigned i_port
Definition: vlc_url.h:151
input_item_GetURI
char * input_item_GetURI(input_item_t *p_i)
Definition: item.c:289
p_languages
static const iso639_lang_t p_languages[]
Definition: iso-639_def.h:37
vlc_mutex_lock
void vlc_mutex_lock(vlc_mutex_t *mtx)
Acquires a mutex.
Definition: threads.c:158
strcoll
#define strcoll
Definition: strings.c:42
vout_chrono_Stop
static void vout_chrono_Stop(vout_chrono_t *chrono)
Definition: chrono.h:67
name
const char name[16]
Definition: httpd.c:1268
vlc_getcwd
char * vlc_getcwd(void)
Determines the current working directory.
Definition: filesystem.c:218
vlc_meta_Publisher
@ vlc_meta_Publisher
Definition: vlc_meta.h:49
vlc_uri_encode
char * vlc_uri_encode(const char *str)
Encodes a URI component.
Definition: url.c:134
vlc_uri_resolve
char * vlc_uri_resolve(const char *base, const char *ref)
Resolves an URI reference.
Definition: url.c:772
vlc_url_t::psz_pathbuffer
char * psz_pathbuffer
Definition: vlc_url.h:157
SPU_ES
@ SPU_ES
Definition: vlc_es.h:605
GetLang_2B
const iso639_lang_t * GetLang_2B(const char *psz_code)
Definition: iso_lang.c:68
vlc_b64_encode
char * vlc_b64_encode(const char *src)
Base64 encoding (string).
Definition: strings.c:408
ToCharset
void * ToCharset(const char *charset, const char *in, size_t *outsize)
Converts a nul-terminated UTF-8 string to a given character encoding.
Definition: unicode.c:279
vlc_meta_Rating
@ vlc_meta_Rating
Definition: vlc_meta.h:42
vout_chrono_t::avg_initial
vlc_tick_t avg_initial
Definition: chrono.h:51
vlc_xml_encode
char * vlc_xml_encode(const char *str)
Encodes XML entites.
Definition: strings.c:289
vlc_meta_TrackNumber
@ vlc_meta_TrackNumber
Definition: vlc_meta.h:40
localtime_r
struct tm * localtime_r(const time_t *, struct tm *)
libvlc.h
utf8_vfprintf
int utf8_vfprintf(FILE *stream, const char *fmt, va_list ap)
Formats an UTF-8 string as vfprintf(), then print it, with appropriate conversion to local encoding.
Definition: unicode.c:52
vlc_player_GetRate
float vlc_player_GetRate(vlc_player_t *player)
Get the rate of the player.
Definition: player.c:1282
vlc_player_aout_Hold
audio_output_t * vlc_player_aout_Hold(vlc_player_t *player)
Get the audio output.
Definition: aout.c:44
likely
#define likely(p)
Predicted true condition.
Definition: vlc_common.h:218
vlc_uri_decode
char * vlc_uri_decode(char *str)
Decodes an URI component in place.
Definition: url.c:54
vlc_aout.h
vlc_arrays.h
DECLARE_VLC_VERSION
#define DECLARE_VLC_VERSION(func, var)
Definition: version.c:37
input_item_t::p_stats
input_stats_t * p_stats
Statistics.
Definition: vlc_input_item.h:97
vlc_player_track::fmt
es_format_t fmt
Es format.
Definition: vlc_player.h:1341
vlc_meta_type_t
vlc_meta_type_t
Definition: vlc_meta.h:33
vlc_alloc
static void * vlc_alloc(size_t count, size_t size)
Definition: vlc_common.h:1144
cmp_entity
static int cmp_entity(const void *key, const void *elem)
Definition: strings.c:189
vlc_meta_Description
@ vlc_meta_Description
Definition: vlc_meta.h:41
vlc_meta.h
vout_chrono_t::start
vlc_tick_t start
Definition: chrono.h:56
vlc_memstream_write
size_t vlc_memstream_write(struct vlc_memstream *ms, const void *ptr, size_t len)
Appends a binary blob to a byte stream.
Definition: memstream.c:127
vlc_memstream_flush
int vlc_memstream_flush(struct vlc_memstream *ms)
Flushes a byte stream object.
Definition: memstream.c:115
vlc_uri_fixup
char * vlc_uri_fixup(const char *str)
Fixes up a URI string.
Definition: url.c:876
vlc_url_t::psz_path
char * psz_path
Definition: vlc_url.h:152
vlc_mutex_unlock
void vlc_mutex_unlock(vlc_mutex_t *mtx)
Releases a mutex.
Definition: threads.c:209
var
const char var[sizeof("video")]
Definition: player.c:1732
utf8_fprintf
int utf8_fprintf(FILE *stream, const char *fmt,...)
Formats an UTF-8 string as fprintf(), then print it, with appropriate conversion to local encoding.
Definition: unicode.c:102
vasprintf
int vasprintf(char **, const char *, va_list)
vout_chrono_Init
static void vout_chrono_Init(vout_chrono_t *chrono, int shift, vlc_tick_t avg_initial)
Definition: chrono.h:39
vlc_uri_compose
char * vlc_uri_compose(const vlc_url_t *uri)
Composes an URI.
Definition: url.c:710
p
#define p(t)