]> git.sesse.net Git - vlc/commitdiff
Fix some crashes
authorClément Stenac <zorglub@videolan.org>
Sat, 8 Jul 2006 11:16:20 +0000 (11:16 +0000)
committerClément Stenac <zorglub@videolan.org>
Sat, 8 Jul 2006 11:16:20 +0000 (11:16 +0000)
modules/stream_out/transcode.c
src/misc/stats.c

index 00162fc7cdbc5b9b2a477a7122aa97f8ae24d9a3..935cfe5574ab85ee39661562d9224dc4a6cd9c1c 100644 (file)
@@ -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 )
         {
index c2638ee0cc1e45c9c7fc2590a103289565dce763..e6a273573e84a98361c3cbb743060e651c34eb71 100644 (file)
@@ -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;