From 3ebf4f3016482567cd87ecbfea6bf2035c24a159 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Cl=C3=A9ment=20Stenac?= Date: Sat, 8 Jul 2006 11:16:20 +0000 Subject: [PATCH] Fix some crashes --- modules/stream_out/transcode.c | 20 ++++++++++++++++---- src/misc/stats.c | 4 ++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/modules/stream_out/transcode.c b/modules/stream_out/transcode.c index 00162fc7cd..935cfe5574 100644 --- a/modules/stream_out/transcode.c +++ b/modules/stream_out/transcode.c @@ -1419,12 +1419,18 @@ static int transcode_audio_process( sout_stream_t *p_stream, block_t *p_block, *p_audio_block; int i; *out = NULL; + input_thread_t *p_input = NULL; + + if( p_stream->p_parent->p_parent && p_stream->p_parent->p_parent-> + i_object_type == VLC_OBJECT_INPUT ) + p_input = (input_thread_t *)p_stream->p_parent->p_parent; while( (p_audio_buf = id->p_decoder->pf_decode_audio( id->p_decoder, &in )) ) { - stats_UpdateInteger( p_stream->p_parent->p_parent, STATS_DECODED_AUDIO, - 1, NULL ); + if( p_input ) + stats_UpdateInteger( p_input, p_input->counters.p_decoded_audio, + 1, NULL ); if( p_sys->b_master_sync ) { mtime_t i_dts = date_Get( &id->interpolated_pts ) + 1; @@ -2006,12 +2012,18 @@ static int transcode_video_process( sout_stream_t *p_stream, int i_duplicate = 1, i; picture_t *p_pic, *p_pic2 = NULL; *out = NULL; + input_thread_t *p_input = NULL; + if( p_stream->p_parent->p_parent && p_stream->p_parent->p_parent-> + i_object_type == VLC_OBJECT_INPUT ) + p_input = (input_thread_t *)p_stream->p_parent->p_parent; + while( (p_pic = id->p_decoder->pf_decode_video( id->p_decoder, &in )) ) { subpicture_t *p_subpic = 0; - stats_UpdateInteger( p_stream->p_parent->p_parent, STATS_DECODED_VIDEO, - 1, NULL ); + if( p_input ) + stats_UpdateInteger( p_input, p_input->counters.p_decoded_video, + 1, NULL ); if( p_stream->p_sout->i_out_pace_nocontrol && p_sys->b_hurry_up ) { diff --git a/src/misc/stats.c b/src/misc/stats.c index c2638ee0cc..e6a273573e 100644 --- a/src/misc/stats.c +++ b/src/misc/stats.c @@ -81,7 +81,7 @@ counter_t * __stats_CounterCreate( vlc_object_t *p_this, int __stats_Update( vlc_object_t *p_this, counter_t *p_counter, vlc_value_t val, vlc_value_t *val_new ) { - if( !p_this->p_libvlc->b_stats ) return VLC_EGENERIC; + if( !p_this->p_libvlc->b_stats || !p_counter ) return VLC_EGENERIC; return CounterUpdate( p_this, p_counter, val, val_new ); } @@ -94,7 +94,7 @@ int __stats_Update( vlc_object_t *p_this, counter_t *p_counter, */ int __stats_Get( vlc_object_t *p_this, counter_t *p_counter, vlc_value_t *val ) { - if( !p_this->p_libvlc->b_stats || p_counter->i_samples == 0 ) + if( !p_this->p_libvlc->b_stats || !p_counter || p_counter->i_samples == 0 ) { val->i_int = val->f_float = 0.0; return VLC_EGENERIC; -- 2.39.2