]> git.sesse.net Git - vlc/blobdiff - src/video_parser/vpar_synchro.c
. rajout de l'option -Winline
[vlc] / src / video_parser / vpar_synchro.c
index 764b718142b39fa0cfef73ee07220a133c113fe3..fe813eeada747af39072edaab7b500e57867be7a 100644 (file)
@@ -65,9 +65,9 @@
 void vpar_SynchroUpdateStructures( vpar_thread_t * p_vpar,
                                    int i_coding_type, boolean_t b_kept )
 {
-    mtime_t         i_delay;
+    double          i_can_display;
     mtime_t         i_pts;
-    pes_packet_t *  p_pes = p_vpar->bit_stream.p_decoder_fifo->buffer[ 
+    pes_packet_t *  p_pes = p_vpar->bit_stream.p_decoder_fifo->buffer[
                                p_vpar->bit_stream.p_decoder_fifo->i_start ];
 
     /* try to guess the current DTS and PTS */
@@ -126,59 +126,53 @@ void vpar_SynchroUpdateStructures( vpar_thread_t * p_vpar,
             }
 
             /* now we calculated all statistics, it's time to
-             * decide what we have the time to display
-             */
-            i_delay = i_pts - p_vpar->synchro.i_last_kept_I_pts;
+             * decide what we have the time to display */
+            i_can_display = (float)(i_pts - p_vpar->synchro.i_last_kept_I_pts)
+                                / p_vpar->synchro.i_delay;
 
-            p_vpar->synchro.b_all_I
-                = ( p_vpar->synchro.i_delay < i_delay );
+            p_vpar->synchro.b_all_I = 0;
+            p_vpar->synchro.b_all_B = 0;
+            p_vpar->synchro.b_all_P = 0;
+            p_vpar->synchro.displayable_p = 0;
+            p_vpar->synchro.displayable_b = 0;
 
-            p_vpar->synchro.b_all_P
-                    = ( p_vpar->synchro.i_delay
-                    * (1 + p_vpar->synchro.i_P_seen) < i_delay );
-
-            if( !p_vpar->synchro.b_all_P )
-            {
-                p_vpar->synchro.displayable_p
-                    //= -1.0 + (float)i_delay / (float)p_vpar->synchro.i_delay;
-                    = (-1.0 + (float)p_vpar->synchro.displayable_p + (float)i_delay / (float)p_vpar->synchro.i_delay) / 2.0;
-                if( p_vpar->synchro.displayable_p < 0 )
-                    p_vpar->synchro.displayable_p = 0;
-
-                p_vpar->synchro.b_all_B = 0;
-                p_vpar->synchro.displayable_b = 0;
-            }
-            else
+            if( ( p_vpar->synchro.b_all_I = ( i_can_display > 1 ) ) )
             {
-                p_vpar->synchro.displayable_p = p_vpar->synchro.i_P_seen;
+                i_can_display -= 1;
 
-                if( !(p_vpar->synchro.b_all_B
-                        = ( p_vpar->synchro.i_delay
-                        * (1 + p_vpar->synchro.i_B_seen
-                            + p_vpar->synchro.i_P_seen)) < i_delay) )
+                if( !( p_vpar->synchro.b_all_P
+                        = ( i_can_display > p_vpar->synchro.i_P_seen ) ) )
                 {
-                    p_vpar->synchro.displayable_b
-                        //= -2.0 + i_delay / p_vpar->synchro.i_delay - p_vpar->synchro.b_all_P;
-                        = ( -2.0 + (float)p_vpar->synchro.displayable_b + (float)i_delay / (float)p_vpar->synchro.i_delay - (float)p_vpar->synchro.b_all_P) / 2.0;
+                    p_vpar->synchro.displayable_p = i_can_display;
                 }
                 else
                 {
-                    p_vpar->synchro.displayable_b = p_vpar->synchro.i_B_seen;
+                    i_can_display -= p_vpar->synchro.i_P_seen;
+
+                    if( !( p_vpar->synchro.b_all_B
+                            = ( i_can_display > p_vpar->synchro.i_B_seen ) ) )
+                    {
+                        p_vpar->synchro.displayable_b = i_can_display;
+                    }
                 }
             }
 
 #if 1
             if( p_vpar->synchro.b_all_I )
-                intf_ErrMsg( "I: all  " );
+                intf_ErrMsg( " I: 1/1  " );
             if( p_vpar->synchro.b_all_P )
-                intf_ErrMsg( "P: all  " );
+                intf_ErrMsg( "P: %i/%i  ", p_vpar->synchro.i_P_seen,
+                                           p_vpar->synchro.i_P_seen );
             else if( p_vpar->synchro.displayable_p > 0 )
-                intf_ErrMsg( "P: %f  ", p_vpar->synchro.displayable_p );
+                intf_ErrMsg( "P: %.2f/%i  ", p_vpar->synchro.displayable_p,
+                                             p_vpar->synchro.i_P_seen );
             if( p_vpar->synchro.b_all_B )
-                intf_ErrMsg( "B: all" );
+                intf_ErrMsg( "B: %i/%i", p_vpar->synchro.i_B_seen,
+                                         p_vpar->synchro.i_B_seen );
             else if( p_vpar->synchro.displayable_b > 0 )
-                intf_ErrMsg( "B: %f", p_vpar->synchro.displayable_b );
-            intf_ErrMsg( "\n" );
+                intf_ErrMsg( "B: %.2f/%i", p_vpar->synchro.displayable_b,
+                                           p_vpar->synchro.i_B_seen );
+            intf_ErrMsg( "                    \r" );
 #endif
             p_vpar->synchro.i_P_seen = 0;
             p_vpar->synchro.i_B_seen = 0;
@@ -203,6 +197,8 @@ boolean_t vpar_SynchroChoose( vpar_thread_t * p_vpar, int i_coding_type,
 {
     mtime_t i_delay = p_vpar->synchro.i_last_pts - mdate();
 
+    //return (i_coding_type == I_CODING_TYPE);
+
     switch( i_coding_type )
     {
         case I_CODING_TYPE:
@@ -212,6 +208,7 @@ boolean_t vpar_SynchroChoose( vpar_thread_t * p_vpar, int i_coding_type,
 
         case P_CODING_TYPE:
 
+            //return(1);
             if( p_vpar->synchro.b_all_P )
             {
                 //intf_ErrMsg( " p  " );