VLC  3.0.21
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$
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 #include <assert.h>
28 
29 typedef struct {
30  int shift;
31  vlc_tick_t avg;
32  vlc_tick_t avg_initial;
33 
34  int shift_var;
35  vlc_tick_t var;
36 
37  vlc_tick_t start;
39 
40 static inline void vout_chrono_Init(vout_chrono_t *chrono, int shift, vlc_tick_t avg_initial)
41 {
42  chrono->shift = shift;
43  chrono->avg_initial =
44  chrono->avg = avg_initial;
45 
46  chrono->shift_var = shift+1;
47  chrono->var = avg_initial / 2;
48 
50 }
51 static inline void vout_chrono_Clean(vout_chrono_t *chrono)
52 {
53  VLC_UNUSED(chrono);
54 }
55 static inline void vout_chrono_Start(vout_chrono_t *chrono)
56 {
57  chrono->start = mdate();
58 }
59 static inline vlc_tick_t vout_chrono_GetHigh(vout_chrono_t *chrono)
60 {
61  return chrono->avg + 2 * chrono->var;
62 }
63 static inline vlc_tick_t vout_chrono_GetLow(vout_chrono_t *chrono)
64 {
65  return __MAX(chrono->avg - 2 * chrono->var, 0);
66 }
67 
68 static inline void vout_chrono_Stop(vout_chrono_t *chrono)
69 {
70  assert(chrono->start != VLC_TICK_INVALID);
71 
72  /* */
73  const vlc_tick_t duration = mdate() - chrono->start;
74  const vlc_tick_t var = llabs( duration - chrono->avg );
75 
76  /* Update average only if the current point is 'valid' */
77  if( duration < vout_chrono_GetHigh( chrono ) )
78  chrono->avg = (((1 << chrono->shift) - 1) * chrono->avg + duration) >> chrono->shift;
79  /* Always update the variance */
80  chrono->var = (((1 << chrono->shift_var) - 1) * chrono->var + var) >> chrono->shift_var;
81 
82  /* For assert */
83  chrono->start = VLC_TICK_INVALID;
84 }
85 static inline void vout_chrono_Reset(vout_chrono_t *chrono)
86 {
87  vout_chrono_t ch = *chrono;
88  vout_chrono_Clean(chrono);
89  vout_chrono_Init(chrono, ch.shift, ch.avg_initial);
90 }
91 
92 #endif
vlc_uri_resolve
char * vlc_uri_resolve(const char *base, const char *ref)
Resolves an URI reference.
Definition: url.c:767
vout_chrono_t::shift_var
int shift_var
Definition: chrono.h:53
VLC_TICK_INVALID
#define VLC_TICK_INVALID
Definition: vlc_common.h:153
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:196
vlc_memstream_flush
int vlc_memstream_flush(struct vlc_memstream *ms)
Definition: memstream.c:114
vlc_memstream
Definition: vlc_memstream.h:27
vlc_iconv
size_t vlc_iconv(vlc_iconv_t, const char **, size_t *, char **, size_t *)
vlc_uri_component_validate
static bool vlc_uri_component_validate(const char *str, const char *extras)
Definition: url.c:371
input_item_GetName
char * input_item_GetName(input_item_t *p_item)
Definition: item.c:301
vout_chrono_Reset
static void vout_chrono_Reset(vout_chrono_t *chrono)
Definition: chrono.h:84
urihex
static const char urihex[]
Definition: url.c:99
vlc_uri_fixup
char * vlc_uri_fixup(const char *str)
Fixes up a URI string.
Definition: url.c:863
vlc_xml_encode
char * vlc_xml_encode(const char *str)
Encodes XML entites.
Definition: strings.c:288
mdate
vlc_tick_t mdate(void)
Precision monotonic clock.
Definition: thread.c:406
vlc_meta_Album
Definition: vlc_meta.h:39
vlc_uri_path_validate
static bool vlc_uri_path_validate(const char *str)
Definition: url.c:398
vlc_memstream::ptr
char * ptr
Definition: vlc_memstream.h:51
vlc_b64_decode_binary_to_buffer
size_t vlc_b64_decode_binary_to_buffer(uint8_t *p_dst, size_t i_dst, const char *p_src)
Definition: strings.c:404
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:66
vlc_common.h
lldiv_t::rem
long long rem
Definition: vlc_fixups.h:77
vout_chrono_t::shift
int shift
Definition: chrono.h:49
isurisubdelim
static bool isurisubdelim(int c)
Definition: url.c:87
DIR_SEP
#define DIR_SEP
Definition: vlc_common.h:1032
write_meta
static int write_meta(struct vlc_memstream *stream, input_item_t *item, vlc_meta_type_t type)
Definition: strings.c:524
write_duration
static void write_duration(struct vlc_memstream *stream, int64_t duration)
Definition: strings.c:512
vlc_memstream::length
size_t length
Definition: vlc_memstream.h:52
vlc_meta_URL
Definition: vlc_meta.h:45
input_item_t
Describes an input and is used to spawn input_thread_t objects.
Definition: vlc_input_item.h:58
vlc_tick_t
int64_t vlc_tick_t
High precision date or time interval.
Definition: vlc_common.h:150
vlc_uri2path
char * vlc_uri2path(const char *url)
Converts a URI to a local path.
Definition: url.c:240
iso639_lang_t::psz_eng_name
const char * psz_eng_name
Definition: vlc_iso_lang.h:32
vlc_charset.h
isurihex
static bool isurihex(int c)
Definition: url.c:92
vlc_UrlClean
void vlc_UrlClean(vlc_url_t *restrict url)
Definition: url.c:594
vout_chrono_t
Definition: chrono.h:28
vlc_memstream_vprintf
int vlc_memstream_vprintf(struct vlc_memstream *ms, const char *fmt, va_list args)
Definition: memstream.c:155
vlc_UrlParse
int vlc_UrlParse(vlc_url_t *url, const char *str)
Parses an URI or IRI.
Definition: url.c:554
vlc_url_t::psz_password
char * psz_password
Definition: vlc_url.h:149
iso-639_def.h
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:162
lldiv_t
Definition: vlc_fixups.h:74
vlc_towc
size_t vlc_towc(const char *str, uint32_t *restrict pwc)
Decodes a code point from UTF-8.
Definition: unicode.c:111
vlc_uri_fixup_inner
static char * vlc_uri_fixup_inner(const char *str, const char *extras)
Definition: url.c:831
vlc_input.h
vlc_url_t::psz_option
char * psz_option
Definition: vlc_url.h:153
vlc_iri2uri
static char * vlc_iri2uri(const char *iri)
Definition: url.c:329
input_GetItem
input_item_t * input_GetItem(input_thread_t *p_input)
Get the item from an input thread FIXME it does not increase ref count of the item.
Definition: input.c:272
vlc_b64_decode
char * vlc_b64_decode(const char *psz_src)
Definition: strings.c:468
vout_chrono_t::var
vlc_tick_t var
Definition: chrono.h:54
vlc_b64_encode
char * vlc_b64_encode(const char *src)
Definition: strings.c:395
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:50
isurisafe
static bool isurisafe(int c)
Definition: url.c:78
asprintf
int asprintf(char **, const char *,...)
vlc_b64_encode_binary
char * vlc_b64_encode_binary(const uint8_t *src, size_t i_src)
Definition: strings.c:349
vlc_UrlParseInner
static int vlc_UrlParseInner(vlc_url_t *restrict url, const char *str)
Definition: url.c:403
vlc_uri_decode
char * vlc_uri_decode(char *str)
Decodes an URI component in place.
Definition: url.c:53
vlc_uri_decode_duplicate
char * vlc_uri_decode_duplicate(const char *str)
Decodes an URI component.
Definition: url.c:42
strndup
char * strndup(const char *, size_t)
clz8
#define clz8(x)
Definition: vlc_common.h:529
vlc_memstream_open
int vlc_memstream_open(struct vlc_memstream *ms)
Definition: memstream.c:104
lldiv
lldiv_t lldiv(long long, long long)
vout_chrono_GetHigh
static vlc_tick_t vout_chrono_GetHigh(vout_chrono_t *chrono)
Definition: chrono.h:58
vlc_iconv_t
void * vlc_iconv_t
Definition: vlc_charset.h:113
vlc_getcwd
char * vlc_getcwd(void)
Determines the current working directory.
Definition: filesystem.c:215
vlc_uri_encode
char * vlc_uri_encode(const char *str)
Encodes a URI component.
Definition: url.c:129
iso639_lang_t::psz_iso639_2B
const char psz_iso639_2B[4]
Definition: vlc_iso_lang.h:35
xml_entities
static const struct xml_entity_s xml_entities[]
encode_URI_bytes
static char * encode_URI_bytes(const char *str, size_t *restrict lenp)
Definition: url.c:101
vlc_meta_Title
Definition: vlc_meta.h:35
var_GetFloat
#define var_GetFloat(a, b)
Definition: vlc_variables.h:657
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:911
vlc_meta_EncodedBy
Definition: vlc_meta.h:50
CLOCK_FREQ
#define CLOCK_FREQ
Definition: vlc_config.h:45
audio_output
Audio output object.
Definition: vlc_aout.h:114
lldiv_t::quot
long long quot
Definition: vlc_fixups.h:76
vlc_object_release
#define vlc_object_release(a)
Definition: vlc_objects.h:63
filename_sanitize
void filename_sanitize(char *str)
Sanitize a file name.
Definition: strings.c:875
vlc_uri_host_validate
static bool vlc_uri_host_validate(const char *str)
Definition: url.c:393
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:65
vlc_url_t::psz_protocol
char * psz_protocol
Definition: vlc_url.h:147
aout_VolumeGet
float aout_VolumeGet(audio_output_t *aout)
Gets the volume of the audio output stream (independent of mute).
Definition: output.c:727
xml_entity_s
Definition: strings.c:56
vlc_memstream.h
input_item_GetTitleFbName
char * input_item_GetTitleFbName(input_item_t *p_item)
Definition: item.c:279
vlc_url_t::psz_username
char * psz_username
Definition: vlc_url.h:148
vlc_strings.h
vlc_uri_merge_paths
static char * vlc_uri_merge_paths(const char *base, const char *ref)
Merge paths.
Definition: url.c:606
vlc_meta_Date
Definition: vlc_meta.h:43
memrchr
void * memrchr(const void *, int, size_t)
vlc_meta_TrackTotal
Definition: vlc_meta.h:53
vlc_filenamecmp
int vlc_filenamecmp(const char *a, const char *b)
Definition: strings.c:829
input_item_GetNowPlayingFb
char * input_item_GetNowPlayingFb(input_item_t *p_item)
Definition: item.c:428
vlc_iso_lang.h
input_item_GetDuration
vlc_tick_t input_item_GetDuration(input_item_t *p_i)
Definition: item.c:398
input_GetAout
static audio_output_t * input_GetAout(input_thread_t *p_input)
Return the audio output (if any) associated with an input.
Definition: vlc_input.h:605
unknown_language
static const iso639_lang_t unknown_language
Definition: iso_lang.c:41
vlc_uri_remove_dot_segments
static char * vlc_uri_remove_dot_segments(char *str)
Remove dot segments.
Definition: url.c:635
GetLang_2T
const iso639_lang_t * GetLang_2T(const char *psz_code)
Definition: iso_lang.c:55
var_GetInteger
#define var_GetInteger(a, b)
Definition: vlc_variables.h:655
input_item_GetMeta
char * input_item_GetMeta(input_item_t *p_i, vlc_meta_type_t meta_type)
Definition: item.c:260
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:569
vlc_meta_Genre
Definition: vlc_meta.h:37
vlc_iconv_open
vlc_iconv_t vlc_iconv_open(const char *, const char *)
GetLang_1
const iso639_lang_t * GetLang_1(const char *psz_code)
Definition: iso_lang.c:44
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:277
vlc_strftime
char * vlc_strftime(const char *tformat)
Convenience wrapper for strftime().
Definition: strings.c:482
vlc_uri_compose
char * vlc_uri_compose(const vlc_url_t *uri)
Composes an URI.
Definition: url.c:706
vlc_fs.h
vout_chrono_Clean
static void vout_chrono_Clean(vout_chrono_t *chrono)
Definition: chrono.h:50
vlc_memstream_putc
int vlc_memstream_putc(struct vlc_memstream *ms, int c)
Definition: memstream.c:144
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:1031
likely
#define likely(p)
Definition: vlc_common.h:113
vlc_url_t
Definition: vlc_url.h:145
xml_entity_s::psz_entity
char psz_entity[8]
Definition: strings.c:58
EnsureUTF8
static char * EnsureUTF8(char *str)
Removes non-UTF-8 sequences.
Definition: vlc_charset.h:94
var_GetNonEmptyString
#define var_GetNonEmptyString(a, b)
Definition: vlc_variables.h:659
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:916
iso639_lang_t
Definition: vlc_iso_lang.h:30
vlc_meta_Copyright
Definition: vlc_meta.h:38
vlc_xml_decode
void vlc_xml_decode(char *psz_value)
Decodes XML entities.
Definition: strings.c:196
strdup
char * strdup(const char *)
xml_entity_s::psz_char
char psz_char[4]
Definition: strings.c:59
psz_value
char psz_value[8]
Definition: vout_intf.c:91
vlc_iconv_close
int vlc_iconv_close(vlc_iconv_t)
vlc_url_t::i_port
unsigned i_port
Definition: vlc_url.h:151
vlc_memstream_puts
int() vlc_memstream_puts(struct vlc_memstream *ms, const char *str)
Definition: memstream.c:149
input_item_GetURI
char * input_item_GetURI(input_item_t *p_i)
Definition: item.c:320
p_languages
static const iso639_lang_t p_languages[]
Definition: iso-639_def.h:37
strcoll
#define strcoll
Definition: strings.c:41
vout_chrono_Stop
static void vout_chrono_Stop(vout_chrono_t *chrono)
Definition: chrono.h:67
name
const char name[16]
Definition: httpd.c:1251
vlc_meta_Publisher
Definition: vlc_meta.h:49
vlc_url_t::psz_pathbuffer
char * psz_pathbuffer
Definition: vlc_url.h:156
vlc_path2uri
char * vlc_path2uri(const char *path, const char *scheme)
Converts local path to URL.
Definition: url.c:138
GetLang_2B
const iso639_lang_t * GetLang_2B(const char *psz_code)
Definition: iso_lang.c:66
vlc_meta_Rating
Definition: vlc_meta.h:42
vout_chrono_t::avg_initial
vlc_tick_t avg_initial
Definition: chrono.h:51
vlc_memstream_write
size_t vlc_memstream_write(struct vlc_memstream *ms, const void *ptr, size_t len)
Definition: memstream.c:126
vlc_mutex_unlock
void vlc_mutex_unlock(vlc_mutex_t *p_mutex)
Releases a mutex.
Definition: thread.c:138
unlikely
#define unlikely(p)
Definition: vlc_common.h:114
vlc_memstream_printf
int vlc_memstream_printf(struct vlc_memstream *ms, const char *fmt,...)
Definition: memstream.c:184
vlc_meta_TrackNumber
Definition: vlc_meta.h:40
localtime_r
struct tm * localtime_r(const time_t *, struct tm *)
libvlc.h
vlc_assert_unreachable
#define vlc_assert_unreachable()
Definition: vlc_common.h:118
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:100
vlc_aout.h
vlc_arrays.h
DECLARE_VLC_VERSION
#define DECLARE_VLC_VERSION(func, var)
Definition: version.c:35
input_thread_t
Main structure representing an input thread.
Definition: vlc_input.h:221
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:957
cmp_entity
static int cmp_entity(const void *key, const void *elem)
Definition: strings.c:188
vlc_meta_Description
Definition: vlc_meta.h:41
vlc_meta.h
vout_chrono_t::start
vlc_tick_t start
Definition: chrono.h:56
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:235
vlc_url_t::psz_path
char * psz_path
Definition: vlc_url.h:152
vlc_mutex_lock
void vlc_mutex_lock(vlc_mutex_t *p_mutex)
Acquires a mutex.
Definition: thread.c:123
vlc_memstream_close
int vlc_memstream_close(struct vlc_memstream *ms)
Definition: memstream.c:119
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_b64_decode_binary
size_t vlc_b64_decode_binary(uint8_t **pp_dst, const char *psz_src)
Definition: strings.c:458
p
#define p(t)
vlc_strfinput
char * vlc_strfinput(input_thread_t *input, const char *s)
Formats input meta-data.
Definition: strings.c:539