Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-2-2
Commits
baacaea3
Commit
baacaea3
authored
Jun 15, 2006
by
Clément Stenac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Partial rewrite of stats to avoid lookups (Closes:#693)
parent
7a6b8a51
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
365 additions
and
445 deletions
+365
-445
include/main.h
include/main.h
+3
-1
include/vlc_httpd.h
include/vlc_httpd.h
+4
-0
include/vlc_input.h
include/vlc_input.h
+20
-0
include/vlc_messages.h
include/vlc_messages.h
+25
-36
include/vlc_symbols.h
include/vlc_symbols.h
+16
-11
src/audio_output/dec.c
src/audio_output/dec.c
+10
-4
src/audio_output/input.c
src/audio_output/input.c
+9
-6
src/input/decoder.c
src/input/decoder.c
+32
-14
src/input/es_out.c
src/input/es_out.c
+6
-3
src/input/input.c
src/input/input.c
+46
-23
src/input/stream.c
src/input/stream.c
+28
-16
src/libvlc.c
src/libvlc.c
+5
-10
src/misc/objects.c
src/misc/objects.c
+0
-4
src/misc/stats.c
src/misc/stats.c
+131
-283
src/network/httpd.c
src/network/httpd.c
+8
-8
src/playlist/control.c
src/playlist/control.c
+0
-1
src/playlist/thread.c
src/playlist/thread.c
+1
-1
src/stream_output/stream_output.c
src/stream_output/stream_output.c
+5
-16
src/video_output/video_output.c
src/video_output/video_output.c
+16
-8
No files found.
include/main.h
View file @
baacaea3
...
...
@@ -56,7 +56,9 @@ struct libvlc_t
/* Do stats ? - We keep this boolean to avoid unneeded lookups */
vlc_bool_t
b_stats
;
stats_handler_t
*
p_stats
;
vlc_mutex_t
timer_lock
;
int
i_timers
;
counter_t
**
pp_timers
;
/* Arch-specific variables */
#if !defined( WIN32 )
...
...
include/vlc_httpd.h
View file @
baacaea3
...
...
@@ -77,6 +77,10 @@ struct httpd_host_t
int
i_port
;
int
*
fd
;
/* Statistics */
counter_t
*
p_active_counter
;
counter_t
*
p_total_counter
;
vlc_mutex_t
lock
;
/* all registered url (becarefull that 2 httpd_url_t could point at the same url)
...
...
include/vlc_input.h
View file @
baacaea3
...
...
@@ -421,6 +421,26 @@ struct input_thread_t
int
i_slave
;
input_source_t
**
slave
;
/* Stats counters */
struct
{
counter_t
*
p_read_packets
;
counter_t
*
p_read_bytes
;
counter_t
*
p_input_bitrate
;
counter_t
*
p_demux_read
;
counter_t
*
p_demux_bitrate
;
counter_t
*
p_decoded_audio
;
counter_t
*
p_decoded_video
;
counter_t
*
p_decoded_sub
;
counter_t
*
p_sout_sent_packets
;
counter_t
*
p_sout_sent_bytes
;
counter_t
*
p_sout_send_bitrate
;
counter_t
*
p_played_abuffers
;
counter_t
*
p_lost_abuffers
;
counter_t
*
p_displayed_pictures
;
counter_t
*
p_lost_pictures
;
vlc_mutex_t
counters_lock
;
}
counters
;
/* Buffer of pending actions */
vlc_mutex_t
lock_control
;
int
i_control
;
...
...
include/vlc_messages.h
View file @
baacaea3
...
...
@@ -228,8 +228,7 @@ struct counter_sample_t
struct
counter_t
{
/* The list is *NOT* sorted at the moment, it could be ... */
uint64_t
i_index
;
unsigned
int
i_id
;
char
*
psz_name
;
int
i_type
;
int
i_compute_type
;
...
...
@@ -267,70 +266,58 @@ enum
STATS_TIMER_SKINS_PLAYTREE_IMAGE
,
};
struct
stats_handler_t
{
VLC_COMMON_MEMBERS
int
i_counters
;
counter_t
**
pp_counters
;
};
#define stats_Update(a,b,c) __stats_Update( VLC_OBJECT(a), b, c )
VLC_EXPORT
(
int
,
__stats_Update
,
(
vlc_object_t
*
,
counter_t
*
,
vlc_value_t
,
vlc_value_t
*
)
);
#define stats_CounterCreate(a,b,c) __stats_CounterCreate( VLC_OBJECT(a), b, c )
VLC_EXPORT
(
counter_t
*
,
__stats_CounterCreate
,
(
vlc_object_t
*
,
int
,
int
)
);
#define stats_Get(a,b,c) __stats_Get( VLC_OBJECT(a), b, c)
VLC_EXPORT
(
int
,
__stats_Get
,
(
vlc_object_t
*
,
counter_t
*
,
vlc_value_t
*
)
);
VLC_EXPORT
(
void
,
stats_HandlerDestroy
,
(
stats_handler_t
*
)
);
VLC_EXPORT
(
void
,
stats_CounterClean
,
(
counter_t
*
)
);
#define stats_Update(a,b,c,d) __stats_Update( VLC_OBJECT( a ), b, c, d )
VLC_EXPORT
(
int
,
__stats_Update
,
(
vlc_object_t
*
,
unsigned
int
,
vlc_value_t
,
vlc_value_t
*
)
);
#define stats_Create(a,b,c,d,e) __stats_Create( VLC_OBJECT(a), b, c, d,e )
VLC_EXPORT
(
int
,
__stats_Create
,
(
vlc_object_t
*
,
const
char
*
,
unsigned
int
,
int
,
int
)
);
#define stats_Get(a,b,c,d) __stats_Get( VLC_OBJECT(a), b, c, d )
VLC_EXPORT
(
int
,
__stats_Get
,
(
vlc_object_t
*
,
int
,
unsigned
int
,
vlc_value_t
*
)
);
#define stats_CounterGet(a,b,c) __stats_CounterGet( VLC_OBJECT(a), b, c )
VLC_EXPORT
(
counter_t
*
,
__stats_CounterGet
,
(
vlc_object_t
*
,
int
,
unsigned
int
)
);
#define stats_GetInteger(a,b,c,d) __stats_GetInteger( VLC_OBJECT(a), b, c, d )
static
inline
int
__stats_GetInteger
(
vlc_object_t
*
p_obj
,
int
i_id
,
unsigned
int
i_counter
,
int
*
value
)
#define stats_GetInteger(a,b,c) __stats_GetInteger( VLC_OBJECT(a), b, c )
static
inline
int
__stats_GetInteger
(
vlc_object_t
*
p_obj
,
counter_t
*
p_counter
,
int
*
value
)
{
int
i_ret
;
vlc_value_t
val
;
val
.
i_int
=
0
;
i_ret
=
__stats_Get
(
p_obj
,
i_id
,
i
_counter
,
&
val
);
i_ret
=
__stats_Get
(
p_obj
,
p
_counter
,
&
val
);
*
value
=
val
.
i_int
;
return
i_ret
;
}
#define stats_GetFloat(a,b,c
,d) __stats_GetFloat( VLC_OBJECT(a), b, c, d
)
static
inline
int
__stats_GetFloat
(
vlc_object_t
*
p_obj
,
int
i_id
,
unsigned
int
i_counter
,
float
*
value
)
#define stats_GetFloat(a,b,c
) __stats_GetFloat( VLC_OBJECT(a), b, c
)
static
inline
int
__stats_GetFloat
(
vlc_object_t
*
p_obj
,
counter_t
*
p_counter
,
float
*
value
)
{
int
i_ret
;
int
i_ret
;
vlc_value_t
val
;
val
.
f_float
=
0
.
0
;
i_ret
=
__stats_Get
(
p_obj
,
i_id
,
i
_counter
,
&
val
);
i_ret
=
__stats_Get
(
p_obj
,
p
_counter
,
&
val
);
*
value
=
val
.
f_float
;
return
i_ret
;
}
#define stats_UpdateInteger(a,b,c,d) __stats_UpdateInteger( VLC_OBJECT(a),b,c,d )
static
inline
int
__stats_UpdateInteger
(
vlc_object_t
*
p_obj
,
unsigned
int
i_counter
,
int
i
,
int
*
pi_new
)
static
inline
int
__stats_UpdateInteger
(
vlc_object_t
*
p_obj
,
counter_t
*
p_co
,
int
i
,
int
*
pi_new
)
{
int
i_ret
;
vlc_value_t
val
;
vlc_value_t
new_val
;
new_val
.
i_int
=
0
;
val
.
i_int
=
i
;
i_ret
=
__stats_Update
(
p_obj
,
i_counter
,
val
,
&
new_val
);
i_ret
=
__stats_Update
(
p_obj
,
p_co
,
val
,
&
new_val
);
if
(
pi_new
)
*
pi_new
=
new_val
.
i_int
;
return
i_ret
;
}
#define stats_UpdateFloat(a,b,c,d) __stats_UpdateFloat( VLC_OBJECT(a),b,c,d )
static
inline
int
__stats_UpdateFloat
(
vlc_object_t
*
p_obj
,
unsigned
int
i_counter
,
float
f
,
float
*
pf_new
)
static
inline
int
__stats_UpdateFloat
(
vlc_object_t
*
p_obj
,
counter_t
*
p_co
,
float
f
,
float
*
pf_new
)
{
vlc_value_t
val
;
int
i_ret
;
vlc_value_t
new_val
;
new_val
.
f_float
=
0
.
0
;
val
.
f_float
=
f
;
i_ret
=
__stats_Update
(
p_obj
,
i_counter
,
val
,
&
new_val
);
i_ret
=
__stats_Update
(
p_obj
,
p_co
,
val
,
&
new_val
);
if
(
pf_new
)
*
pf_new
=
new_val
.
f_float
;
return
i_ret
;
...
...
@@ -413,3 +400,5 @@ VLC_EXPORT( void,__stats_TimerStart, (vlc_object_t*, const char *, unsigned int
VLC_EXPORT
(
void
,
__stats_TimerStop
,
(
vlc_object_t
*
,
unsigned
int
)
);
VLC_EXPORT
(
void
,
__stats_TimerDump
,
(
vlc_object_t
*
,
unsigned
int
)
);
VLC_EXPORT
(
void
,
__stats_TimersDumpAll
,
(
vlc_object_t
*
)
);
#define stats_TimersClean(a) __stats_TimersClean( VLC_OBJECT(a) )
VLC_EXPORT
(
void
,
__stats_TimersClean
,
(
vlc_object_t
*
)
);
include/vlc_symbols.h
View file @
baacaea3
...
...
@@ -438,16 +438,15 @@ struct module_symbols_t
int
(
*
__intf_UserProgress_inner
)
(
vlc_object_t
*
,
const
char
*
,
const
char
*
,
float
);
void
(
*
__intf_UserProgressUpdate_inner
)
(
vlc_object_t
*
,
int
,
const
char
*
,
float
);
void
(
*
__intf_UserHide_inner
)
(
vlc_object_t
*
,
int
);
int
(
*
__stats_Create_inner
)
(
vlc_object_t
*
,
const
char
*
,
unsigned
int
,
int
,
int
)
;
int
(
*
__stats_Update_inner
)
(
vlc_object_t
*
,
unsigned
int
,
vlc_value_t
,
vlc_value_t
*
);
int
(
*
__stats_Get_inner
)
(
vlc_object_t
*
,
int
,
unsigned
int
,
vlc_value_t
*
);
void
*
__stats_Create_deprecated
;
int
(
*
__stats_Update_inner
)
(
vlc_object_t
*
,
counter_t
*
,
vlc_value_t
,
vlc_value_t
*
);
int
(
*
__stats_Get_inner
)
(
vlc_object_t
*
,
counter_t
*
,
vlc_value_t
*
);
void
(
*
stats_ComputeInputStats_inner
)
(
input_thread_t
*
,
input_stats_t
*
);
void
(
*
stats_DumpInputStats_inner
)
(
input_stats_t
*
);
void
(
*
stats_ReinitInputStats_inner
)
(
input_stats_t
*
);
counter_t
*
(
*
__stats_CounterGet_inner
)
(
vlc_object_t
*
,
int
,
unsigned
int
);
void
*
__stats_CounterGet_deprecated
;
input_thread_t
*
(
*
__input_CreateThread2_inner
)
(
vlc_object_t
*
,
input_item_t
*
,
char
*
);
void
(
*
stats_HandlerDestroy_inner
)
(
stats_handler_t
*
)
;
void
*
stats_HandlerDestroy_deprecated
;
vlc_t
*
(
*
vlc_current_object_inner
)
(
int
);
void
(
*
__var_OptionParse_inner
)
(
vlc_object_t
*
,
const
char
*
);
void
*
__stats_TimerDumpAll_deprecated
;
...
...
@@ -514,6 +513,10 @@ struct module_symbols_t
int
(
*
__intf_UserStringInput_inner
)
(
vlc_object_t
*
,
const
char
*
,
const
char
*
,
char
**
);
void
(
*
playlist_NodesCreateForSD_inner
)
(
playlist_t
*
,
char
*
,
playlist_item_t
**
,
playlist_item_t
**
);
vlc_bool_t
(
*
input_AddSubtitles_inner
)
(
input_thread_t
*
,
char
*
,
vlc_bool_t
);
counter_t
*
(
*
__stats_CounterCreate_inner
)
(
vlc_object_t
*
,
int
,
int
);
void
*
stats_TimerClean_deprecated
;
void
*
stats_TimersClean_deprecated
;
void
(
*
__stats_TimersClean_inner
)
(
vlc_object_t
*
);
};
# if defined (__PLUGIN__)
# define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner
...
...
@@ -909,15 +912,12 @@ struct module_symbols_t
# define __intf_UserProgress (p_symbols)->__intf_UserProgress_inner
# define __intf_UserProgressUpdate (p_symbols)->__intf_UserProgressUpdate_inner
# define __intf_UserHide (p_symbols)->__intf_UserHide_inner
# define __stats_Create (p_symbols)->__stats_Create_inner
# define __stats_Update (p_symbols)->__stats_Update_inner
# define __stats_Get (p_symbols)->__stats_Get_inner
# define stats_ComputeInputStats (p_symbols)->stats_ComputeInputStats_inner
# define stats_DumpInputStats (p_symbols)->stats_DumpInputStats_inner
# define stats_ReinitInputStats (p_symbols)->stats_ReinitInputStats_inner
# define __stats_CounterGet (p_symbols)->__stats_CounterGet_inner
# define __input_CreateThread2 (p_symbols)->__input_CreateThread2_inner
# define stats_HandlerDestroy (p_symbols)->stats_HandlerDestroy_inner
# define vlc_current_object (p_symbols)->vlc_current_object_inner
# define __var_OptionParse (p_symbols)->__var_OptionParse_inner
# define __stats_TimerDump (p_symbols)->__stats_TimerDump_inner
...
...
@@ -982,6 +982,8 @@ struct module_symbols_t
# define __intf_UserStringInput (p_symbols)->__intf_UserStringInput_inner
# define playlist_NodesCreateForSD (p_symbols)->playlist_NodesCreateForSD_inner
# define input_AddSubtitles (p_symbols)->input_AddSubtitles_inner
# define __stats_CounterCreate (p_symbols)->__stats_CounterCreate_inner
# define __stats_TimersClean (p_symbols)->__stats_TimersClean_inner
# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
/******************************************************************
* STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.
...
...
@@ -1380,15 +1382,12 @@ struct module_symbols_t
((p_symbols)->__intf_UserProgress_inner) = __intf_UserProgress; \
((p_symbols)->__intf_UserProgressUpdate_inner) = __intf_UserProgressUpdate; \
((p_symbols)->__intf_UserHide_inner) = __intf_UserHide; \
((p_symbols)->__stats_Create_inner) = __stats_Create; \
((p_symbols)->__stats_Update_inner) = __stats_Update; \
((p_symbols)->__stats_Get_inner) = __stats_Get; \
((p_symbols)->stats_ComputeInputStats_inner) = stats_ComputeInputStats; \
((p_symbols)->stats_DumpInputStats_inner) = stats_DumpInputStats; \
((p_symbols)->stats_ReinitInputStats_inner) = stats_ReinitInputStats; \
((p_symbols)->__stats_CounterGet_inner) = __stats_CounterGet; \
((p_symbols)->__input_CreateThread2_inner) = __input_CreateThread2; \
((p_symbols)->stats_HandlerDestroy_inner) = stats_HandlerDestroy; \
((p_symbols)->vlc_current_object_inner) = vlc_current_object; \
((p_symbols)->__var_OptionParse_inner) = __var_OptionParse; \
((p_symbols)->__stats_TimerDump_inner) = __stats_TimerDump; \
...
...
@@ -1453,6 +1452,8 @@ struct module_symbols_t
((p_symbols)->__intf_UserStringInput_inner) = __intf_UserStringInput; \
((p_symbols)->playlist_NodesCreateForSD_inner) = playlist_NodesCreateForSD; \
((p_symbols)->input_AddSubtitles_inner) = input_AddSubtitles; \
((p_symbols)->__stats_CounterCreate_inner) = __stats_CounterCreate; \
((p_symbols)->__stats_TimersClean_inner) = __stats_TimersClean; \
(p_symbols)->net_ConvertIPv4_deprecated = NULL; \
(p_symbols)->__playlist_ItemCopy_deprecated = NULL; \
(p_symbols)->playlist_ItemAddParent_deprecated = NULL; \
...
...
@@ -1479,9 +1480,13 @@ struct module_symbols_t
(p_symbols)->playlist_Sort_deprecated = NULL; \
(p_symbols)->playlist_Move_deprecated = NULL; \
(p_symbols)->playlist_NodeRemoveParent_deprecated = NULL; \
(p_symbols)->__stats_Create_deprecated = NULL; \
(p_symbols)->__stats_CounterGet_deprecated = NULL; \
(p_symbols)->stats_HandlerDestroy_deprecated = NULL; \
(p_symbols)->__stats_TimerDumpAll_deprecated = NULL; \
(p_symbols)->playlist_ItemNewFromInput_deprecated = NULL; \
(p_symbols)->stats_TimerClean_deprecated = NULL; \
(p_symbols)->stats_TimersClean_deprecated = NULL; \
# endif
/* __PLUGIN__ */
#endif
/* __VLC_SYMBOLS_H */
src/audio_output/dec.c
View file @
baacaea3
...
...
@@ -312,8 +312,11 @@ int aout_DecPlay( aout_instance_t * p_aout, aout_input_t * p_input,
p_buffer
->
start_date
-
mdate
());
if
(
p_input
->
p_input_thread
)
{
stats_UpdateInteger
(
p_input
->
p_input_thread
,
STATS_LOST_ABUFFERS
,
1
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_aout
,
p_input
->
p_input_thread
->
counters
.
p_lost_abuffers
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
}
aout_BufferFree
(
p_buffer
);
return
-
1
;
...
...
@@ -367,8 +370,11 @@ int aout_DecPlay( aout_instance_t * p_aout, aout_input_t * p_input,
aout_MixerRun
(
p_aout
);
if
(
p_input
->
p_input_thread
)
{
stats_UpdateInteger
(
p_input
->
p_input_thread
,
STATS_PLAYED_ABUFFERS
,
1
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_aout
,
p_input
->
p_input_thread
->
counters
.
p_lost_abuffers
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
}
vlc_mutex_unlock
(
&
p_aout
->
mixer_lock
);
...
...
src/audio_output/input.c
View file @
baacaea3
...
...
@@ -449,8 +449,9 @@ int aout_InputPlay( aout_instance_t * p_aout, aout_input_t * p_input,
start_date
=
0
;
if
(
p_input
->
p_input_thread
)
{
stats_UpdateInteger
(
p_input
->
p_input_thread
,
STATS_LOST_ABUFFERS
,
1
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_aout
,
p_input
->
p_input_thread
->
counters
.
p_lost_abuffers
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
}
}
...
...
@@ -462,8 +463,9 @@ int aout_InputPlay( aout_instance_t * p_aout, aout_input_t * p_input,
mdate
()
-
p_buffer
->
start_date
);
if
(
p_input
->
p_input_thread
)
{
stats_UpdateInteger
(
p_input
->
p_input_thread
,
STATS_LOST_ABUFFERS
,
1
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_aout
,
p_input
->
p_input_thread
->
counters
.
p_lost_abuffers
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
}
aout_BufferFree
(
p_buffer
);
p_input
->
i_resampling_type
=
AOUT_RESAMPLING_NONE
;
...
...
@@ -504,8 +506,9 @@ int aout_InputPlay( aout_instance_t * p_aout, aout_input_t * p_input,
aout_BufferFree
(
p_buffer
);
if
(
p_input
->
p_input_thread
)
{
stats_UpdateInteger
(
p_input
->
p_input_thread
,
STATS_LOST_ABUFFERS
,
1
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_aout
,
p_input
->
p_input_thread
->
counters
.
p_lost_abuffers
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
p_input_thread
->
counters
.
counters_lock
);
}
return
0
;
}
...
...
src/input/decoder.c
View file @
baacaea3
...
...
@@ -429,12 +429,6 @@ static decoder_t * CreateDecoder( input_thread_t *p_input,
vlc_object_attach
(
p_dec
,
p_input
);
stats_Create
(
p_dec
->
p_parent
,
"decoded_audio"
,
STATS_DECODED_AUDIO
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
p_dec
->
p_parent
,
"decoded_video"
,
STATS_DECODED_VIDEO
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
p_dec
->
p_parent
,
"decoded_sub"
,
STATS_DECODED_SUB
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
/* Find a suitable decoder/packetizer module */
if
(
i_object_type
==
VLC_OBJECT_DECODER
)
p_dec
->
p_module
=
module_Need
(
p_dec
,
"decoder"
,
"$codec"
,
0
);
...
...
@@ -627,9 +621,14 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
while
(
(
p_aout_buf
=
p_dec
->
pf_decode_audio
(
p_dec
,
&
p_packetized_block
))
)
{
stats_UpdateInteger
(
p_dec
->
p_parent
,
STATS_DECODED_AUDIO
,
1
,
NULL
);
/* FIXME the best would be to handle the case start_date < preroll < end_date
input_thread_t
*
p_i
=
(
input_thread_t
*
)(
p_dec
->
p_parent
);
vlc_mutex_lock
(
&
p_i
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_dec
,
p_i
->
counters
.
p_decoded_audio
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_i
->
counters
.
counters_lock
);
/* FIXME the best would be to handle the case
* start_date < preroll < end_date
* but that's not easy with non raw audio stream */
if
(
p_dec
->
p_owner
->
i_preroll_end
>
0
&&
p_aout_buf
->
start_date
<
p_dec
->
p_owner
->
i_preroll_end
)
...
...
@@ -652,7 +651,12 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
}
else
while
(
(
p_aout_buf
=
p_dec
->
pf_decode_audio
(
p_dec
,
&
p_block
))
)
{
stats_UpdateInteger
(
p_dec
->
p_parent
,
STATS_DECODED_AUDIO
,
1
,
NULL
);
input_thread_t
*
p_i
=
(
input_thread_t
*
)(
p_dec
->
p_parent
);
vlc_mutex_lock
(
&
p_i
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_dec
,
p_i
->
counters
.
p_decoded_audio
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_i
->
counters
.
counters_lock
);
if
(
p_dec
->
p_owner
->
i_preroll_end
>
0
&&
p_aout_buf
->
start_date
<
p_dec
->
p_owner
->
i_preroll_end
)
{
...
...
@@ -698,8 +702,12 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
while
(
(
p_pic
=
p_dec
->
pf_decode_video
(
p_dec
,
&
p_packetized_block
))
)
{
stats_UpdateInteger
(
p_dec
->
p_parent
,
STATS_DECODED_VIDEO
,
1
,
NULL
);
input_thread_t
*
p_i
=
(
input_thread_t
*
)(
p_dec
->
p_parent
);
vlc_mutex_lock
(
&
p_i
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_dec
,
p_i
->
counters
.
p_decoded_video
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_i
->
counters
.
counters_lock
);
if
(
p_dec
->
p_owner
->
i_preroll_end
>
0
&&
p_pic
->
date
<
p_dec
->
p_owner
->
i_preroll_end
)
{
...
...
@@ -720,7 +728,12 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
}
else
while
(
(
p_pic
=
p_dec
->
pf_decode_video
(
p_dec
,
&
p_block
))
)
{
stats_UpdateInteger
(
p_dec
->
p_parent
,
STATS_DECODED_VIDEO
,
1
,
NULL
);
input_thread_t
*
p_i
=
(
input_thread_t
*
)(
p_dec
->
p_parent
);
vlc_mutex_lock
(
&
p_i
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_dec
,
p_i
->
counters
.
p_decoded_video
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_i
->
counters
.
counters_lock
);
if
(
p_dec
->
p_owner
->
i_preroll_end
>
0
&&
p_pic
->
date
<
p_dec
->
p_owner
->
i_preroll_end
)
{
...
...
@@ -740,7 +753,12 @@ static int DecoderDecode( decoder_t *p_dec, block_t *p_block )
subpicture_t
*
p_spu
;
while
(
(
p_spu
=
p_dec
->
pf_decode_sub
(
p_dec
,
&
p_block
)
)
)
{
stats_UpdateInteger
(
p_dec
->
p_parent
,
STATS_DECODED_SUB
,
1
,
NULL
);
input_thread_t
*
p_i
=
(
input_thread_t
*
)(
p_dec
->
p_parent
);
vlc_mutex_lock
(
&
p_i
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_dec
,
p_i
->
counters
.
p_decoded_sub
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_i
->
counters
.
counters_lock
);
if
(
p_dec
->
p_owner
->
i_preroll_end
>
0
&&
p_spu
->
i_start
<
p_dec
->
p_owner
->
i_preroll_end
&&
(
p_spu
->
i_stop
<=
0
||
p_spu
->
i_stop
<=
p_dec
->
p_owner
->
i_preroll_end
)
)
...
...
src/input/es_out.c
View file @
baacaea3
...
...
@@ -1025,9 +1025,12 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block )
if
(
p_input
->
p_libvlc
->
b_stats
)
{
stats_UpdateInteger
(
p_input
,
STATS_DEMUX_READ
,
p_block
->
i_buffer
,
&
i_total
);
stats_UpdateFloat
(
p_input
,
STATS_DEMUX_BITRATE
,
(
float
)
i_total
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_input
,
p_input
->
counters
.
p_demux_read
,
p_block
->
i_buffer
,
&
i_total
);
stats_UpdateFloat
(
p_input
,
p_input
->
counters
.
p_demux_bitrate
,
(
float
)
i_total
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
counters
.
counters_lock
);
}
/* Mark preroll blocks */
...
...
src/input/input.c
View file @
baacaea3
...
...
@@ -679,29 +679,27 @@ static int Init( input_thread_t * p_input, vlc_bool_t b_quick )
if
(
!
b_quick
)
{
/* Prepare statistics */
counter_t
*
p_counter
;
stats_Create
(
p_input
,
"read_bytes"
,
STATS_READ_BYTES
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
p_input
,
"read_packets"
,
STATS_READ_PACKETS
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
p_input
,
"demux_read"
,
STATS_DEMUX_READ
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
p_input
,
"input_bitrate"
,
STATS_INPUT_BITRATE
,
VLC_VAR_FLOAT
,
STATS_DERIVATIVE
);
stats_Create
(
p_input
,
"demux_bitrate"
,
STATS_DEMUX_BITRATE
,
VLC_VAR_FLOAT
,
STATS_DERIVATIVE
);
p_counter
=
stats_CounterGet
(
p_input
,
p_input
->
i_object_id
,
STATS_INPUT_BITRATE
);
if
(
p_counter
)
p_counter
->
update_interval
=
1000000
;
p_counter
=
stats_CounterGet
(
p_input
,
p_input
->
i_object_id
,
STATS_DEMUX_BITRATE
);
if
(
p_counter
)
p_counter
->
update_interval
=
1000000
;
stats_Create
(
p_input
,
"played_abuffers"
,
STATS_PLAYED_ABUFFERS
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
p_input
,
"lost_abuffers"
,
STATS_LOST_ABUFFERS
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
#define INIT_COUNTER( p, type, compute ) p_input->counters.p_##p = \
stats_CounterCreate( p_input, VLC_VAR_##type, STATS_##compute);
INIT_COUNTER
(
read_bytes
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
read_packets
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
demux_read
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
input_bitrate
,
FLOAT
,
DERIVATIVE
);
INIT_COUNTER
(
demux_bitrate
,
FLOAT
,
DERIVATIVE
);
INIT_COUNTER
(
played_abuffers
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
lost_abuffers
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
displayed_pictures
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
lost_pictures
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
decoded_audio
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
decoded_video
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
decoded_sub
,
INTEGER
,
COUNTER
);
p_input
->
counters
.
p_sout_send_bitrate
=
NULL
;
p_input
->
counters
.
p_sout_sent_packets
=
NULL
;
p_input
->
counters
.
p_sout_sent_bytes
=
NULL
;
p_input
->
counters
.
p_demux_bitrate
->
update_interval
=
1000000
;
p_input
->
counters
.
p_input_bitrate
->
update_interval
=
1000000
;
vlc_mutex_init
(
p_input
,
&
p_input
->
counters
.
counters_lock
);
/* handle sout */
psz
=
var_GetString
(
p_input
,
"sout"
);
...
...
@@ -715,6 +713,10 @@ static int Init( input_thread_t * p_input, vlc_bool_t b_quick )
free
(
psz
);
return
VLC_EGENERIC
;
}
INIT_COUNTER
(
sout_sent_packets
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
sout_sent_bytes
,
INTEGER
,
COUNTER
);
INIT_COUNTER
(
sout_send_bitrate
,
FLOAT
,
DERIVATIVE
);
p_input
->
counters
.
p_sout_send_bitrate
->
update_interval
=
1000000
;
}
free
(
psz
);
}
...
...
@@ -1105,6 +1107,22 @@ static void End( input_thread_t * p_input )
if
(
p_input
->
p_es_out
)
input_EsOutDelete
(
p_input
->
p_es_out
);
#define CL_CO( c ) stats_CounterClean( p_input->counters.p_##c )
CL_CO
(
read_bytes
);
CL_CO
(
read_packets
);
CL_CO
(
demux_read
);
CL_CO
(
input_bitrate
);
CL_CO
(
demux_bitrate
);
CL_CO
(
played_abuffers
);
CL_CO
(
lost_abuffers
);
CL_CO
(
displayed_pictures
);
CL_CO
(
lost_pictures
);
CL_CO
(
decoded_audio
)
;
CL_CO
(
decoded_video
);
CL_CO
(
decoded_sub
)
;
CL_CO
(
read_bytes
);
/* Close optional stream output instance */
if
(
p_input
->
p_sout
)
{
...
...
@@ -1112,6 +1130,10 @@ static void End( input_thread_t * p_input )
vlc_object_find
(
p_input
,
VLC_OBJECT_PLAYLIST
,
FIND_ANYWHERE
);
vlc_value_t
keep
;
CL_CO
(
sout_sent_packets
);
CL_CO
(
sout_sent_bytes
);
CL_CO
(
sout_send_bitrate
);
if
(
var_Get
(
p_input
,
"sout-keep"
,
&
keep
)
>=
0
&&
keep
.
b_bool
&&
p_pl
)
{
/* attach sout to the playlist */
...
...
@@ -1128,6 +1150,7 @@ static void End( input_thread_t * p_input )
vlc_object_release
(
p_pl
);
}
#undef CL_CO
/* Tell we're dead */
p_input
->
b_dead
=
VLC_TRUE
;
}
...
...
src/input/stream.c
View file @
baacaea3
...
...
@@ -24,6 +24,7 @@
#include <stdlib.h>
#include <vlc/vlc.h>
#include <vlc/input.h>
#include <assert.h>
#include "input_internal.h"
...
...
@@ -1577,15 +1578,19 @@ static int AReadStream( stream_t *s, void *p_read, int i_read )
int
i_read_orig
=
i_read
;
int
i_total
;
input_thread_t
*
p_input
=
(
input_thread_t
*
)
s
->
p_parent
->
p_parent
;
assert
(
p_input
);
if
(
!
p_sys
->
i_list
)
{
i_read
=
p_access
->
pf_read
(
p_access
,
p_read
,
i_read
);
stats_UpdateInteger
(
s
->
p_parent
->
p_parent
,
STATS_READ_BYTES
,
i_read
,
vlc_mutex_lock
(
&
p_input
->
counters
.
counters_lock
);
stats_UpdateInteger
(
s
,
p_input
->
counters
.
p_read_bytes
,
i_read
,
&
i_total
);
stats_UpdateFloat
(
s
->
p_parent
->
p_parent
,
STATS_INPUT_BITRATE
,
stats_UpdateFloat
(
s
,
p_input
->
counters
.
p_input_bitrate
,
(
float
)
i_total
,
NULL
);
stats_UpdateInteger
(
s
->
p_parent
->
p_parent
,
STATS_READ_PACKETS
,
1
,
NULL
);
stats_UpdateInteger
(
s
,
p_input
->
counters
.
p_read_packets
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
counters
.
counters_lock
);
return
i_read
;
}
...
...
@@ -1614,11 +1619,12 @@ static int AReadStream( stream_t *s, void *p_read, int i_read )
}
/* Update read bytes in input */
stats_UpdateInteger
(
s
->
p_parent
->
p_parent
,
STATS_READ_BYTES
,
i_read
,
&
i_total
);
stats_UpdateFloat
(
s
->
p_parent
->
p_parent
,
STATS_INPUT_BITRATE
,
(
float
)
i_total
,
NULL
);
stats_UpdateInteger
(
s
->
p_parent
->
p_parent
,
STATS_READ_PACKETS
,
1
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
counters
.
counters_lock
);
stats_UpdateInteger
(
s
,
p_input
->
counters
.
p_read_bytes
,
i_read
,
&
i_total
);
stats_UpdateFloat
(
s
,
p_input
->
counters
.
p_input_bitrate
,
(
float
)
i_total
,
NULL
);
stats_UpdateInteger
(
s
,
p_input
->
counters
.
p_read_packets
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
counters
.
counters_lock
);
return
i_read
;
}
...
...
@@ -1630,17 +1636,22 @@ static block_t *AReadBlock( stream_t *s, vlc_bool_t *pb_eof )
vlc_bool_t
b_eof
;
int
i_total
;
input_thread_t
*
p_input
=
(
input_thread_t
*
)
s
->
p_parent
->
p_parent
;
assert
(
p_input
);
if
(
!
p_sys
->
i_list
)
{
p_block
=
p_access
->
pf_block
(
p_access
);
if
(
pb_eof
)
*
pb_eof
=
p_access
->
info
.
b_eof
;
if
(
p_block
&&
p_access
->
p_libvlc
->
b_stats
)
{
stats_UpdateInteger
(
s
->
p_parent
->
p_parent
,
STATS_READ_BYTES
,
vlc_mutex_lock
(
&
p_input
->
counters
.
counters_lock
);
stats_UpdateInteger
(
s
,
p_input
->
counters
.
p_read_bytes
,
p_block
->
i_buffer
,
&
i_total
);
stats_UpdateFloat
(
s
->
p_parent
->
p_parent
,
STATS_INPUT_BITRATE
,
stats_UpdateFloat
(
s
,
p_input
->
counters
.
p_input_bitrate
,
(
float
)
i_total
,
NULL
);
stats_UpdateInteger
(
s
->
p_parent
->
p_parent
,
STATS_READ_PACKETS
,
1
,
NULL
);
stats_UpdateInteger
(
s
,
p_input
->
counters
.
p_read_packets
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
counters
.
counters_lock
);
}
return
p_block
;
}
...
...
@@ -1671,14 +1682,15 @@ static block_t *AReadBlock( stream_t *s, vlc_bool_t *pb_eof )
}
if
(
p_block
)
{
stats_UpdateInteger
(
s
->
p_parent
->
p_parent
,
STATS_READ_BYTES
,
vlc_mutex_lock
(
&
p_input
->
counters
.
counters_lock
);
stats_UpdateInteger
(
s
,
p_input
->
counters
.
p_read_bytes
,
p_block
->
i_buffer
,
&
i_total
);
stats_UpdateFloat
(
s
->
p_parent
->
p_parent
,
STATS_INPUT_BITRATE
,
stats_UpdateFloat
(
s
,
p_input
->
counters
.
p_input_bitrate
,
(
float
)
i_total
,
NULL
);
stats_UpdateInteger
(
s
->
p_parent
->
p_parent
,
STATS_READ_PACKETS
,
stats_UpdateInteger
(
s
,
p_input
->
counters
.
p_read_packets
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
counters
.
counters_lock
);
}
return
p_block
;
}
...
...
src/libvlc.c
View file @
baacaea3
...
...
@@ -686,7 +686,9 @@ int VLC_Init( int i_object, int i_argc, char *ppsz_argv[] )
}
libvlc
.
b_stats
=
config_GetInt
(
p_vlc
,
"stats"
);
libvlc
.
p_stats
=
NULL
;
libvlc
.
i_timers
=
0
;
libvlc
.
pp_timers
=
NULL
;
vlc_mutex_init
(
p_vlc
,
&
libvlc
.
timer_lock
);
/*
* Initialize hotkey handling
...
...
@@ -887,7 +889,6 @@ int VLC_CleanUp( int i_object )
vout_thread_t
*
p_vout
;
aout_instance_t
*
p_aout
;
announce_handler_t
*
p_announce
;
stats_handler_t
*
p_stats
;
vlc_t
*
p_vlc
=
vlc_current_object
(
i_object
);
/* Check that the handle is valid */
...
...
@@ -942,14 +943,8 @@ int VLC_CleanUp( int i_object )
aout_Delete
(
p_aout
);
}
while
(
(
p_stats
=
vlc_object_find
(
p_vlc
,
VLC_OBJECT_STATS
,
FIND_CHILD
)
))
{
stats_TimersDumpAll
(
p_vlc
);
stats_HandlerDestroy
(
p_stats
);
vlc_object_detach
(
(
vlc_object_t
*
)
p_stats
);
vlc_object_release
(
(
vlc_object_t
*
)
p_stats
);
// TODO: Delete it
}
stats_TimersDumpAll
(
p_vlc
);
stats_TimersClean
(
p_vlc
);
/*
* Free announce handler(s?)
...
...
src/misc/objects.c
View file @
baacaea3
...
...
@@ -216,10 +216,6 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type )
i_size
=
sizeof
(
osd_menu_t
);
psz_type
=
"osd menu"
;
break
;
case
VLC_OBJECT_STATS
:
i_size
=
sizeof
(
stats_handler_t
);
psz_type
=
"statistics"
;
break
;
default:
i_size
=
i_type
>
(
int
)
sizeof
(
vlc_object_t
)
?
i_type
:
(
int
)
sizeof
(
vlc_object_t
);
...
...
src/misc/stats.c
View file @
baacaea3
This diff is collapsed.
Click to expand it.
src/network/httpd.c
View file @
baacaea3
...
...
@@ -1942,10 +1942,10 @@ static void httpd_HostThread( httpd_host_t *host )
{
tls_session_t
*
p_tls
=
NULL
;
stats_Create
(
host
,
"client_connections"
,
STATS_CLIENT_CONNECTIONS
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
host
,
"active_connections"
,
STATS_ACTIVE_CONNECTIONS
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
host
->
p_total_counter
=
stats_CounterCreate
(
host
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
host
->
p_active_counter
=
stats_CounterCreate
(
host
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
while
(
!
host
->
b_die
)
{
...
...
@@ -1995,7 +1995,7 @@ static void httpd_HostThread( httpd_host_t *host )
cl
->
i_activity_date
+
cl
->
i_activity_timeout
<
mdate
())
)
)
)
{
httpd_ClientClean
(
cl
);
stats_UpdateInteger
(
host
,
STATS_ACTIVE_CONNECTIONS
,
-
1
,
NULL
);
stats_UpdateInteger
(
host
,
host
->
p_active_counter
,
-
1
,
NULL
);
TAB_REMOVE
(
host
->
i_client
,
host
->
client
,
cl
);
free
(
cl
);
i_client
--
;
...
...
@@ -2490,10 +2490,10 @@ static void httpd_HostThread( httpd_host_t *host )
{
httpd_client_t
*
cl
;
char
ip
[
NI_MAXNUMERICHOST
];
stats_UpdateInteger
(
host
,
STATS_CLIENT_CONNECTIONS
,
stats_UpdateInteger
(
host
,
host
->
p_total_counter
,
1
,
NULL
);
stats_UpdateInteger
(
host
,
host
->
p_active_counter
,
1
,
NULL
);
stats_UpdateInteger
(
host
,
STATS_ACTIVE_CONNECTIONS
,
1
,
NULL
);
cl
=
httpd_ClientNew
(
fd
,
&
sock
,
i_sock_size
,
p_tls
);
httpd_ClientIP
(
cl
,
ip
);
msg_Dbg
(
host
,
"Connection from %s"
,
ip
);
...
...
src/playlist/control.c
View file @
baacaea3
...
...
@@ -80,7 +80,6 @@ int playlist_Control( playlist_t * p_playlist, int i_query, ... )
int
PlaylistVAControl
(
playlist_t
*
p_playlist
,
int
i_query
,
va_list
args
)
{
int
i_view
;
playlist_item_t
*
p_item
,
*
p_node
;
vlc_value_t
val
;
...
...
src/playlist/thread.c
View file @
baacaea3
...
...
@@ -188,7 +188,7 @@ static void EndPlaylist( playlist_t *p_playlist )
*****************************************************************************/
static
void
RunPreparse
(
playlist_preparse_t
*
p_obj
)
{
playlist_t
*
p_playlist
=
p_obj
->
p_parent
;
playlist_t
*
p_playlist
=
(
playlist_t
*
)
p_obj
->
p_parent
;
/* Tell above that we're ready */
vlc_thread_ready
(
p_obj
);
...
...
src/stream_output/stream_output.c
View file @
baacaea3
...
...
@@ -72,7 +72,6 @@ sout_instance_t *__sout_NewInstance( vlc_object_t *p_parent, char * psz_dest )
{
sout_instance_t
*
p_sout
;
vlc_value_t
keep
;
counter_t
*
p_counter
;
if
(
var_Get
(
p_parent
,
"sout-keep"
,
&
keep
)
<
0
)
{
...
...
@@ -142,17 +141,6 @@ sout_instance_t *__sout_NewInstance( vlc_object_t *p_parent, char * psz_dest )
/* attach it for inherit */
vlc_object_attach
(
p_sout
,
p_parent
);
/* Create statistics */
stats_Create
(
p_parent
,
"sout_sent_packets"
,
STATS_SOUT_SENT_PACKETS
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
p_parent
,
"sout_sent_bytes"
,
STATS_SOUT_SENT_BYTES
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
p_parent
,
"sout_send_bitrate"
,
STATS_SOUT_SEND_BITRATE
,
VLC_VAR_FLOAT
,
STATS_DERIVATIVE
);
p_counter
=
stats_CounterGet
(
p_parent
,
p_parent
->
i_object_id
,
STATS_SOUT_SEND_BITRATE
);
if
(
p_counter
)
p_counter
->
update_interval
=
1000000
;
p_sout
->
p_stream
=
sout_StreamNew
(
p_sout
,
p_sout
->
psz_chain
);
if
(
p_sout
->
p_stream
==
NULL
)
...
...
@@ -383,11 +371,12 @@ int sout_AccessOutWrite( sout_access_out_t *p_access, block_t *p_buffer )
FIND_PARENT
);
if
(
p_input
)
{
stats_UpdateInteger
(
p_input
,
STATS_SOUT_SENT_PACKETS
,
30
,
NULL
);
stats_UpdateInteger
(
p_input
,
STATS_SOUT_SENT_BYTES
,
stats_UpdateInteger
(
p_input
,
p_input
->
counters
.
p_sout_sent_packets
,
30
,
NULL
);
stats_UpdateInteger
(
p_input
,
p_input
->
counters
.
p_sout_sent_bytes
,
p_access
->
i_sent_bytes
,
&
i_total
);
stats_UpdateFloat
(
p_input
,
STATS_SOUT_SEND_BITRATE
,
(
float
)
i_total
,
NULL
);
stats_UpdateFloat
(
p_input
,
p_input
->
counters
.
p_sout_send_bitrate
,
(
float
)
i_total
,
NULL
);
p_access
->
i_sent_bytes
=
0
;
vlc_object_release
(
p_input
);
}
...
...
src/video_output/video_output.c
View file @
baacaea3
...
...
@@ -229,11 +229,6 @@ vout_thread_t * __vout_Create( vlc_object_t *p_parent, video_format_t *p_fmt )
return
NULL
;
}
stats_Create
(
p_vout
,
"displayed_pictures"
,
STATS_DISPLAYED_PICTURES
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
stats_Create
(
p_vout
,
"lost_pictures"
,
STATS_LOST_PICTURES
,
VLC_VAR_INTEGER
,
STATS_COUNTER
);
/* Initialize pictures - translation tables and functions
* will be initialized later in InitThread */
for
(
i_index
=
0
;
i_index
<
2
*
VOUT_MAX_PICTURES
+
1
;
i_index
++
)
...
...
@@ -701,6 +696,8 @@ static void RunThread( vout_thread_t *p_vout)
subpicture_t
*
p_subpic
=
NULL
;
/* subpicture pointer */
input_thread_t
*
p_input
=
NULL
;
/* Parent input, if it exists */
vlc_value_t
val
;
vlc_bool_t
b_drop_late
;
...
...
@@ -723,6 +720,8 @@ static void RunThread( vout_thread_t *p_vout)
return
;
}
p_input
=
vlc_object_find
(
p_vout
,
VLC_OBJECT_INPUT
,
FIND_PARENT
);
/*
* Main loop - it is not executed if an error occurred during
* initialization
...
...
@@ -820,7 +819,10 @@ static void RunThread( vout_thread_t *p_vout)
}
msg_Warn
(
p_vout
,
"late picture skipped ("
I64Fd
")"
,
current_date
-
display_date
);
stats_UpdateInteger
(
p_vout
,
STATS_LOST_PICTURES
,
1
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_vout
,
p_input
->
counters
.
p_lost_pictures
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
counters
.
counters_lock
);
vlc_mutex_unlock
(
&
p_vout
->
picture_lock
);
continue
;
...
...
@@ -843,7 +845,10 @@ static void RunThread( vout_thread_t *p_vout)
p_picture
->
i_status
=
DESTROYED_PICTURE
;
p_vout
->
i_heap_size
--
;
}
stats_UpdateInteger
(
p_vout
,
STATS_LOST_PICTURES
,
1
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_vout
,
p_input
->
counters
.
p_lost_pictures
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
counters
.
counters_lock
);
msg_Warn
(
p_vout
,
"vout warning: early picture skipped "
"("
I64Fd
")"
,
display_date
-
current_date
-
p_vout
->
i_pts_delay
);
...
...
@@ -901,7 +906,10 @@ static void RunThread( vout_thread_t *p_vout)
/*
* Perform rendering
*/
stats_UpdateInteger
(
p_vout
,
STATS_DISPLAYED_PICTURES
,
1
,
NULL
);
vlc_mutex_lock
(
&
p_input
->
counters
.
counters_lock
);
stats_UpdateInteger
(
p_vout
,
p_input
->
counters
.
p_displayed_pictures
,
1
,
NULL
);
vlc_mutex_unlock
(
&
p_input
->
counters
.
counters_lock
);
p_directbuffer
=
vout_RenderPicture
(
p_vout
,
p_picture
,
p_subpic
);
/*
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment