#include <vlc/vlc.h>
#include <vlc/decoder.h>
#include <vlc/sout.h>
+#include <vlc/input.h> /* hmmm, just for INPUT_RATE_DEFAULT */
#include "vlc_bits.h"
case VLC_FOURCC( 'm', 'p', '4', 's'):
case VLC_FOURCC( 'M', 'P', '4', 'S'):
case VLC_FOURCC( 'm', 'p', '4', 'v'):
+ case VLC_FOURCC( 'M', 'P', '4', 'V'):
case VLC_FOURCC( 'D', 'I', 'V', 'X'):
case VLC_FOURCC( 'd', 'i', 'v', 'x'):
case VLC_FOURCC( 'X', 'V', 'I', 'D'):
if( p_sys->i_buffer > 10*1000000 )
{
- msg_Err( p_dec, "mmh reseting context" );
+ msg_Warn( p_dec, "reseting context" );
p_sys->i_buffer = 0;
}
(i_modulo_time_base * p_dec->p_sys->i_fps_num);
}
- p_sys->i_interpolated_pts +=
- ( (i_time_ref + i_time_increment -
- p_sys->i_last_time - p_sys->i_last_timeincr) *
- I64C(1000000) / p_dec->p_sys->i_fps_num );
+ if( p_dec->p_sys->i_fps_num < 5 && /* Work-around buggy streams */
+ p_dec->fmt_in.video.i_frame_rate > 0 &&
+ p_dec->fmt_in.video.i_frame_rate_base > 0 )
+ {
+ p_sys->i_interpolated_pts += I64C(1000000) *
+ p_dec->fmt_in.video.i_frame_rate_base *
+ p_block->i_rate / INPUT_RATE_DEFAULT /
+ p_dec->fmt_in.video.i_frame_rate;
+ }
+ else if( p_dec->p_sys->i_fps_num )
+ p_sys->i_interpolated_pts +=
+ ( I64C(1000000) * (i_time_ref + i_time_increment -
+ p_sys->i_last_time - p_sys->i_last_timeincr) *
+ p_block->i_rate / INPUT_RATE_DEFAULT /
+ p_dec->p_sys->i_fps_num );
p_sys->i_last_time = i_time_ref;
p_sys->i_last_timeincr = i_time_increment;
if( p_block->i_pts > 0 )
p_sys->i_interpolated_dts = p_block->i_pts;
+ if( p_block->i_dts > 0 )
+ p_sys->i_interpolated_dts = p_block->i_dts;
p_sys->i_interpolated_pts = p_sys->i_interpolated_dts;
}