* modules/codec/libmpeg2.c: updated with the synchro api changes.
* vout_synchro.h: frame-dropping structures
*****************************************************************************
* Copyright (C) 1999-2003 VideoLAN
- * $Id: vout_synchro.h,v 1.2 2003/06/09 00:33:34 massiot Exp $
+ * $Id: vout_synchro.h,v 1.3 2003/11/04 17:46:18 gbazin Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Jean-Marc Dressler <polux@via.ecp.fr>
/* decoding values */
mtime_t p_tau[4]; /* average decoding durations */
unsigned int pi_meaningful[4]; /* number of durations read */
- /* and p_vout->render_time (read with p_vout->change_lock) */
+
+ /* render_time filled by SynchroChoose() */
+ int i_render_time;
/* stream context */
int i_nb_ref; /* Number of reference pictures */
/*****************************************************************************
* Prototypes
*****************************************************************************/
-#define vout_SynchroInit(a,b,c) __vout_SynchroInit(VLC_OBJECT(a),b,c)
-VLC_EXPORT( vout_synchro_t *, __vout_SynchroInit, ( vlc_object_t *, vout_thread_t *, int ) );
+#define vout_SynchroInit(a,b) __vout_SynchroInit(VLC_OBJECT(a),b)
+VLC_EXPORT( vout_synchro_t *, __vout_SynchroInit, ( vlc_object_t *, int ) );
VLC_EXPORT( void, vout_SynchroRelease, ( vout_synchro_t * ) );
VLC_EXPORT( void, vout_SynchroReset, ( vout_synchro_t * ) );
-VLC_EXPORT( vlc_bool_t, vout_SynchroChoose, ( vout_synchro_t *, int ) );
+VLC_EXPORT( vlc_bool_t, vout_SynchroChoose, ( vout_synchro_t *, int, int ) );
VLC_EXPORT( void, vout_SynchroTrash, ( vout_synchro_t * ) );
VLC_EXPORT( void, vout_SynchroDecode, ( vout_synchro_t * ) );
VLC_EXPORT( void, vout_SynchroEnd, ( vout_synchro_t *, int, vlc_bool_t ) );
* libmpeg2.c: mpeg2 video decoder module making use of libmpeg2.
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: libmpeg2.c,v 1.31 2003/10/25 00:49:13 sam Exp $
+ * $Id: libmpeg2.c,v 1.32 2003/11/04 17:46:17 gbazin Exp $
*
* Authors: Gildas Bazin <gbazin@netcourrier.com>
* Christophe Massiot <massiot@via.ecp.fr>
{
vout_SynchroRelease( p_sys->p_synchro );
}
- p_sys->p_synchro = vout_SynchroInit( p_dec, p_sys->p_vout,
+ p_sys->p_synchro = vout_SynchroInit( p_dec,
(uint32_t)((uint64_t)1001000000 * 27 /
p_sys->p_info->sequence->frame_period) );
p_sys->b_after_sequence_header = 1;
& PIC_MASK_CODING_TYPE) == P_CODING_TYPE))
&& !vout_SynchroChoose( p_sys->p_synchro,
p_sys->p_info->current_picture->flags
- & PIC_MASK_CODING_TYPE ) )
+ & PIC_MASK_CODING_TYPE,
+ p_sys->p_vout->render_time ) )
{
mpeg2_skip( p_sys->p_mpeg2dec, 1 );
p_sys->b_skip = 1;
* vout_synchro.c : frame dropping routines
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
- * $Id: vout_synchro.c,v 1.4 2003/10/17 18:38:47 gbazin Exp $
+ * $Id: vout_synchro.c,v 1.5 2003/11/04 17:46:18 gbazin Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr>
* vout_SynchroInit : You know what ?
*****************************************************************************/
vout_synchro_t * __vout_SynchroInit( vlc_object_t * p_object,
- vout_thread_t * p_vout, int i_frame_rate )
+ int i_frame_rate )
{
vout_synchro_t * p_synchro = vlc_object_create( p_object,
sizeof(vout_synchro_t) );
p_synchro->i_pic = 0;
p_synchro->i_frame_rate = i_frame_rate;
- p_synchro->p_vout = p_vout;
return p_synchro;
}
/*****************************************************************************
* vout_SynchroChoose : Decide whether we will decode a picture or not
*****************************************************************************/
-vlc_bool_t vout_SynchroChoose( vout_synchro_t * p_synchro, int i_coding_type )
+vlc_bool_t vout_SynchroChoose( vout_synchro_t * p_synchro, int i_coding_type,
+ int i_render_time )
{
#define TAU_PRIME( coding_type ) (p_synchro->p_tau[(coding_type)] \
+ (p_synchro->p_tau[(coding_type)] >> 1) \
- + tau_yuv)
+ + p_synchro->i_render_time)
#define S (*p_synchro)
/* VPAR_SYNCHRO_DEFAULT */
- mtime_t now, period, tau_yuv;
+ mtime_t now, period;
mtime_t pts = 0;
vlc_bool_t b_decode = 0;
period = 1000000 * 1001 / p_synchro->i_frame_rate
* p_synchro->i_current_rate / DEFAULT_RATE;
- vlc_mutex_lock( &p_synchro->p_vout->change_lock );
- tau_yuv = p_synchro->p_vout->render_time;
- vlc_mutex_unlock( &p_synchro->p_vout->change_lock );
+ p_synchro->i_render_time = i_render_time;
switch( i_coding_type )
{
p_synchro->i_n_p,
p_synchro->p_tau[B_CODING_TYPE],
p_synchro->i_n_b,
- p_synchro->p_vout->render_time,
+ p_synchro->i_render_time,
p_synchro->i_not_chosen_pic,
p_synchro->i_trashed_pic -
p_synchro->i_not_chosen_pic,