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 ];
{
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:
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;
/* 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;
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 ) ) )
#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;
{
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:
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 )
}
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;
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
{