]> git.sesse.net Git - vlc/blobdiff - src/video_parser/vpar_synchro.c
* vlc.init becomes ~/.vlcrc
[vlc] / src / video_parser / vpar_synchro.c
index fe813eeada747af39072edaab7b500e57867be7a..49f8849b11381e4ce05e575acc648be28fd772de 100644 (file)
@@ -65,7 +65,7 @@
 void vpar_SynchroUpdateStructures( vpar_thread_t * p_vpar,
                                    int i_coding_type, boolean_t b_kept )
 {
-    double          i_can_display;
+    int             i_can_display;
     mtime_t         i_pts;
     pes_packet_t *  p_pes = p_vpar->bit_stream.p_decoder_fifo->buffer[
                                p_vpar->bit_stream.p_decoder_fifo->i_start ];
@@ -100,13 +100,13 @@ void vpar_SynchroUpdateStructures( vpar_thread_t * p_vpar,
     {
         case P_CODING_TYPE:
 
-            p_vpar->synchro.i_P_seen++;
-            if( b_kept ) p_vpar->synchro.i_P_kept++;
+            p_vpar->synchro.i_P_seen += 1024;
+            if( b_kept ) p_vpar->synchro.i_P_kept += 1024;
             break;
 
         case B_CODING_TYPE:
-            p_vpar->synchro.i_B_seen++;
-            if( b_kept ) p_vpar->synchro.i_B_kept++;
+            p_vpar->synchro.i_B_seen += 1024;
+            if( b_kept ) p_vpar->synchro.i_B_kept += 1024;
             break;
 
         case I_CODING_TYPE:
@@ -118,8 +118,8 @@ void vpar_SynchroUpdateStructures( vpar_thread_t * p_vpar,
                 if ( p_vpar->synchro.i_last_seen_I_pts )
                 {
                     p_vpar->synchro.i_theorical_delay =
-                            ( i_pts - p_vpar->synchro.i_last_seen_I_pts )
-                          / ( 1 + p_vpar->synchro.i_B_seen
+                      1024 * ( i_pts - p_vpar->synchro.i_last_seen_I_pts )
+                          / ( 1024 + p_vpar->synchro.i_B_seen
                                 + p_vpar->synchro.i_P_seen);
                 }
                 p_vpar->synchro.i_last_seen_I_pts = i_pts;
@@ -127,7 +127,8 @@ 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_can_display = (float)(i_pts - p_vpar->synchro.i_last_kept_I_pts)
+            i_can_display = 
+                ( (i_pts - p_vpar->synchro.i_last_kept_I_pts) << 10 )
                                 / p_vpar->synchro.i_delay;
 
             p_vpar->synchro.b_all_I = 0;
@@ -136,9 +137,9 @@ void vpar_SynchroUpdateStructures( vpar_thread_t * p_vpar,
             p_vpar->synchro.displayable_p = 0;
             p_vpar->synchro.displayable_b = 0;
 
-            if( ( p_vpar->synchro.b_all_I = ( i_can_display > 1 ) ) )
+            if( ( p_vpar->synchro.b_all_I = ( i_can_display >= 1024 ) ) )
             {
-                i_can_display -= 1;
+                i_can_display -= 1024;
 
                 if( !( p_vpar->synchro.b_all_P
                         = ( i_can_display > p_vpar->synchro.i_P_seen ) ) )
@@ -159,20 +160,21 @@ void vpar_SynchroUpdateStructures( vpar_thread_t * p_vpar,
 
 #if 1
             if( p_vpar->synchro.b_all_I )
-                intf_ErrMsg( " I: 1/1  " );
+                intf_ErrMsg( " I: 1024/1024  " );
             if( p_vpar->synchro.b_all_P )
                 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: %.2f/%i  ", p_vpar->synchro.displayable_p,
+                intf_ErrMsg( "P: %i/%i  ", p_vpar->synchro.displayable_p,
                                              p_vpar->synchro.i_P_seen );
             if( p_vpar->synchro.b_all_B )
                 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: %.2f/%i", p_vpar->synchro.displayable_b,
+                intf_ErrMsg( "B: %i/%i", p_vpar->synchro.displayable_b,
                                            p_vpar->synchro.i_B_seen );
-            intf_ErrMsg( "                    \r" );
+//            intf_ErrMsg( "                             \r" );
+            intf_ErrMsg( "\n" );
 #endif
             p_vpar->synchro.i_P_seen = 0;
             p_vpar->synchro.i_B_seen = 0;
@@ -197,8 +199,6 @@ 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:
@@ -407,7 +407,8 @@ void vpar_SynchroDecode( vpar_thread_t * p_vpar, int i_coding_type,
 mtime_t vpar_SynchroDate( vpar_thread_t * p_vpar )
 {
     return( p_vpar->synchro.kludge_date
-            + p_vpar->synchro.kludge_nbframes*1000000/(p_vpar->sequence.r_frame_rate ) );
+            + p_vpar->synchro.kludge_nbframes * 1000000
+                / (p_vpar->sequence.i_frame_rate ) * 1001 );
 }
 
 void vpar_SynchroEnd( vpar_thread_t * p_vpar )
@@ -481,7 +482,7 @@ void vpar_SynchroSetCurrentDate( vpar_thread_t * p_vpar, int i_coding_type )
         }
         else
         {
-            p_vpar->synchro.i_current_frame_date += 1000000/(p_vpar->sequence.r_frame_rate);
+            p_vpar->synchro.i_current_frame_date += 1000000 / (p_vpar->sequence.i_frame_rate) * 1001;
         }
         break;
 
@@ -489,7 +490,7 @@ void vpar_SynchroSetCurrentDate( vpar_thread_t * p_vpar, int i_coding_type )
 
         if( p_vpar->synchro.i_backward_frame_date == 0 )
         {
-            p_vpar->synchro.i_current_frame_date += 1000000/(p_vpar->sequence.r_frame_rate);
+            p_vpar->synchro.i_current_frame_date += 1000000 / (p_vpar->sequence.i_frame_rate) * 1001;
         }
         else
         {