]> git.sesse.net Git - vlc/blobdiff - src/input/decoder.c
decoder: remove tautology, add asserts to waiting code
[vlc] / src / input / decoder.c
index fd615d767a654c4bdd2651a6c17f0d787ebf8d42..720df86c0392484cca3685b0a0e41f7f88dd7da2 100644 (file)
@@ -54,7 +54,7 @@
 #include "../video_output/vout_control.h"
 
 static decoder_t *CreateDecoder( vlc_object_t *, input_thread_t *,
-                                 es_format_t *, bool, input_resource_t *,
+                                 const es_format_t *, bool, input_resource_t *,
                                  sout_instance_t *p_sout );
 static void       DeleteDecoder( decoder_t * );
 
@@ -223,7 +223,7 @@ int decoder_GetDisplayRate( decoder_t *p_dec )
 
 /* TODO: pass p_sout through p_resource? -- Courmisch */
 static decoder_t *decoder_New( vlc_object_t *p_parent, input_thread_t *p_input,
-                               es_format_t *fmt, input_clock_t *p_clock,
+                               const es_format_t *fmt, input_clock_t *p_clock,
                                input_resource_t *p_resource,
                                sout_instance_t *p_sout  )
 {
@@ -290,7 +290,7 @@ decoder_t *input_DecoderNew( input_thread_t *p_input,
 /**
  * Spawn a decoder thread outside of the input thread.
  */
-decoder_t *input_DecoderCreate( vlc_object_t *p_parent, es_format_t *fmt,
+decoder_t *input_DecoderCreate( vlc_object_t *p_parent, const es_format_t *fmt,
                                 input_resource_t *p_resource )
 {
     return decoder_New( p_parent, NULL, fmt, NULL, p_resource, NULL );
@@ -382,9 +382,9 @@ bool input_DecoderIsEmpty( decoder_t * p_dec )
     {
         vlc_mutex_lock( &p_owner->lock );
         /* TODO subtitles support */
-        if( p_dec->fmt_out.i_cat == VIDEO_ES && p_owner->p_vout )
+        if( p_owner->fmt.i_cat == VIDEO_ES && p_owner->p_vout )
             b_empty = vout_IsEmpty( p_owner->p_vout );
-        else if( p_dec->fmt_out.i_cat == AUDIO_ES && p_owner->p_aout )
+        else if( p_owner->fmt.i_cat == AUDIO_ES && p_owner->p_aout )
             b_empty = aout_DecIsEmpty( p_owner->p_aout );
         vlc_mutex_unlock( &p_owner->lock );
     }
@@ -516,17 +516,15 @@ void input_DecoderStartWait( decoder_t *p_dec )
 {
     decoder_owner_sys_t *p_owner = p_dec->p_owner;
 
-    vlc_mutex_lock( &p_owner->lock );
+    assert( !p_owner->b_waiting );
 
+    vlc_mutex_lock( &p_owner->lock );
     DecoderFlush( p_dec );
 
     p_owner->b_first = true;
     p_owner->b_has_data = false;
-
     p_owner->b_waiting = true;
-
     vlc_cond_signal( &p_owner->wait_request );
-
     vlc_mutex_unlock( &p_owner->lock );
 }
 
@@ -534,12 +532,11 @@ void input_DecoderStopWait( decoder_t *p_dec )
 {
     decoder_owner_sys_t *p_owner = p_dec->p_owner;
 
-    vlc_mutex_lock( &p_owner->lock );
+    assert( p_owner->b_waiting );
 
+    vlc_mutex_lock( &p_owner->lock );
     p_owner->b_waiting = false;
-
     vlc_cond_signal( &p_owner->wait_request );
-
     vlc_mutex_unlock( &p_owner->lock );
 }
 
@@ -547,14 +544,14 @@ void input_DecoderWait( decoder_t *p_dec )
 {
     decoder_owner_sys_t *p_owner = p_dec->p_owner;
 
-    vlc_mutex_lock( &p_owner->lock );
+    assert( p_owner->b_waiting );
 
-    while( p_owner->b_waiting && !p_owner->b_has_data )
+    vlc_mutex_lock( &p_owner->lock );
+    while( !p_owner->b_has_data )
     {
         block_FifoWake( p_owner->p_fifo );
         vlc_cond_wait( &p_owner->wait_acknowledge, &p_owner->lock );
     }
-
     vlc_mutex_unlock( &p_owner->lock );
 }
 
@@ -656,7 +653,7 @@ static mtime_t DecoderGetDisplayDate( decoder_t *p_dec, mtime_t i_ts )
     if( !p_owner->p_clock || i_ts <= VLC_TS_INVALID )
         return i_ts;
 
-    if( input_clock_ConvertTS( p_owner->p_clock, NULL, &i_ts, NULL, INT64_MAX ) ) {
+    if( input_clock_ConvertTS( VLC_OBJECT(p_dec), p_owner->p_clock, NULL, &i_ts, NULL, INT64_MAX ) ) {
         msg_Err(p_dec, "Could not get display date for timestamp %"PRId64"", i_ts);
         return VLC_TS_INVALID;
     }
@@ -701,7 +698,7 @@ static void DecoderUnsupportedCodec( decoder_t *p_dec, vlc_fourcc_t codec )
  */
 static decoder_t * CreateDecoder( vlc_object_t *p_parent,
                                   input_thread_t *p_input,
-                                  es_format_t *fmt, bool b_packetizer,
+                                  const es_format_t *fmt, bool b_packetizer,
                                   input_resource_t *p_resource,
                                   sout_instance_t *p_sout )
 {
@@ -878,8 +875,6 @@ static void *DecoderThread( void *p_data )
          * If you need one, be sure to push cleanup of p_block. */
         bool end_wait = !p_block || p_block->i_flags & BLOCK_FLAG_CORE_EOS;
         DecoderSignalWait( p_dec, end_wait );
-        if (end_wait)
-            input_DecoderStopWait( p_dec );
 
         if( p_block )
         {
@@ -1032,7 +1027,7 @@ static void DecoderFixTs( decoder_t *p_dec, mtime_t *pi_ts0, mtime_t *pi_ts1,
         *pi_ts0 += i_es_delay;
         if( pi_ts1 && *pi_ts1 > VLC_TS_INVALID )
             *pi_ts1 += i_es_delay;
-        if( input_clock_ConvertTS( p_clock, &i_rate, pi_ts0, pi_ts1, i_ts_bound ) ) {
+        if( input_clock_ConvertTS( VLC_OBJECT(p_dec), p_clock, &i_rate, pi_ts0, pi_ts1, i_ts_bound ) ) {
             if( pi_ts1 != NULL )
                 msg_Err(p_dec, "Could not convert timestamps %"PRId64
                         ", %"PRId64"", *pi_ts0, *pi_ts1);
@@ -1808,7 +1803,6 @@ static void DeleteDecoder( decoder_t * p_dec )
              (unsigned)block_FifoCount( p_owner->p_fifo ) );
 
     /* Free all packets still in the decoder fifo. */
-    block_FifoEmpty( p_owner->p_fifo );
     block_FifoRelease( p_owner->p_fifo );
 
     /* Cleanup */