Commit ed6c9819 authored by Gildas Bazin's avatar Gildas Bazin

* src/video_output/vout_synchro.c, include/vout_synchro.h: got rid of the dependency on the vout.
* modules/codec/libmpeg2.c: updated with the synchro api changes.
parent d9f10b40
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* vout_synchro.h: frame-dropping structures * vout_synchro.h: frame-dropping structures
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2003 VideoLAN * 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> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Jean-Marc Dressler <polux@via.ecp.fr> * Jean-Marc Dressler <polux@via.ecp.fr>
...@@ -46,7 +46,9 @@ struct vout_synchro_t ...@@ -46,7 +46,9 @@ struct vout_synchro_t
/* decoding values */ /* decoding values */
mtime_t p_tau[4]; /* average decoding durations */ mtime_t p_tau[4]; /* average decoding durations */
unsigned int pi_meaningful[4]; /* number of durations read */ 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 */ /* stream context */
int i_nb_ref; /* Number of reference pictures */ int i_nb_ref; /* Number of reference pictures */
...@@ -80,11 +82,11 @@ struct vout_synchro_t ...@@ -80,11 +82,11 @@ struct vout_synchro_t
/***************************************************************************** /*****************************************************************************
* Prototypes * Prototypes
*****************************************************************************/ *****************************************************************************/
#define vout_SynchroInit(a,b,c) __vout_SynchroInit(VLC_OBJECT(a),b,c) #define vout_SynchroInit(a,b) __vout_SynchroInit(VLC_OBJECT(a),b)
VLC_EXPORT( vout_synchro_t *, __vout_SynchroInit, ( vlc_object_t *, vout_thread_t *, int ) ); VLC_EXPORT( vout_synchro_t *, __vout_SynchroInit, ( vlc_object_t *, int ) );
VLC_EXPORT( void, vout_SynchroRelease, ( vout_synchro_t * ) ); VLC_EXPORT( void, vout_SynchroRelease, ( vout_synchro_t * ) );
VLC_EXPORT( void, vout_SynchroReset, ( 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_SynchroTrash, ( vout_synchro_t * ) );
VLC_EXPORT( void, vout_SynchroDecode, ( vout_synchro_t * ) ); VLC_EXPORT( void, vout_SynchroDecode, ( vout_synchro_t * ) );
VLC_EXPORT( void, vout_SynchroEnd, ( vout_synchro_t *, int, vlc_bool_t ) ); VLC_EXPORT( void, vout_SynchroEnd, ( vout_synchro_t *, int, vlc_bool_t ) );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* libmpeg2.c: mpeg2 video decoder module making use of libmpeg2. * libmpeg2.c: mpeg2 video decoder module making use of libmpeg2.
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * 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> * Authors: Gildas Bazin <gbazin@netcourrier.com>
* Christophe Massiot <massiot@via.ecp.fr> * Christophe Massiot <massiot@via.ecp.fr>
...@@ -352,7 +352,7 @@ static int RunDecoder( decoder_t *p_dec, block_t *p_block ) ...@@ -352,7 +352,7 @@ static int RunDecoder( decoder_t *p_dec, block_t *p_block )
{ {
vout_SynchroRelease( p_sys->p_synchro ); 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 / (uint32_t)((uint64_t)1001000000 * 27 /
p_sys->p_info->sequence->frame_period) ); p_sys->p_info->sequence->frame_period) );
p_sys->b_after_sequence_header = 1; p_sys->b_after_sequence_header = 1;
...@@ -410,7 +410,8 @@ static int RunDecoder( decoder_t *p_dec, block_t *p_block ) ...@@ -410,7 +410,8 @@ static int RunDecoder( decoder_t *p_dec, block_t *p_block )
& PIC_MASK_CODING_TYPE) == P_CODING_TYPE)) & PIC_MASK_CODING_TYPE) == P_CODING_TYPE))
&& !vout_SynchroChoose( p_sys->p_synchro, && !vout_SynchroChoose( p_sys->p_synchro,
p_sys->p_info->current_picture->flags 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 ); mpeg2_skip( p_sys->p_mpeg2dec, 1 );
p_sys->b_skip = 1; p_sys->b_skip = 1;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* vout_synchro.c : frame dropping routines * vout_synchro.c : frame dropping routines
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * 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> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* Samuel Hocevar <sam@via.ecp.fr> * Samuel Hocevar <sam@via.ecp.fr>
...@@ -118,7 +118,7 @@ ...@@ -118,7 +118,7 @@
* vout_SynchroInit : You know what ? * vout_SynchroInit : You know what ?
*****************************************************************************/ *****************************************************************************/
vout_synchro_t * __vout_SynchroInit( vlc_object_t * p_object, 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, vout_synchro_t * p_synchro = vlc_object_create( p_object,
sizeof(vout_synchro_t) ); sizeof(vout_synchro_t) );
...@@ -143,7 +143,6 @@ vout_synchro_t * __vout_SynchroInit( vlc_object_t * p_object, ...@@ -143,7 +143,6 @@ vout_synchro_t * __vout_SynchroInit( vlc_object_t * p_object,
p_synchro->i_pic = 0; p_synchro->i_pic = 0;
p_synchro->i_frame_rate = i_frame_rate; p_synchro->i_frame_rate = i_frame_rate;
p_synchro->p_vout = p_vout;
return p_synchro; return p_synchro;
} }
...@@ -169,14 +168,15 @@ void vout_SynchroReset( vout_synchro_t * p_synchro ) ...@@ -169,14 +168,15 @@ void vout_SynchroReset( vout_synchro_t * p_synchro )
/***************************************************************************** /*****************************************************************************
* vout_SynchroChoose : Decide whether we will decode a picture or not * 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)] \ #define TAU_PRIME( coding_type ) (p_synchro->p_tau[(coding_type)] \
+ (p_synchro->p_tau[(coding_type)] >> 1) \ + (p_synchro->p_tau[(coding_type)] >> 1) \
+ tau_yuv) + p_synchro->i_render_time)
#define S (*p_synchro) #define S (*p_synchro)
/* VPAR_SYNCHRO_DEFAULT */ /* VPAR_SYNCHRO_DEFAULT */
mtime_t now, period, tau_yuv; mtime_t now, period;
mtime_t pts = 0; mtime_t pts = 0;
vlc_bool_t b_decode = 0; vlc_bool_t b_decode = 0;
...@@ -184,9 +184,7 @@ vlc_bool_t vout_SynchroChoose( vout_synchro_t * p_synchro, int i_coding_type ) ...@@ -184,9 +184,7 @@ vlc_bool_t vout_SynchroChoose( vout_synchro_t * p_synchro, int i_coding_type )
period = 1000000 * 1001 / p_synchro->i_frame_rate period = 1000000 * 1001 / p_synchro->i_frame_rate
* p_synchro->i_current_rate / DEFAULT_RATE; * p_synchro->i_current_rate / DEFAULT_RATE;
vlc_mutex_lock( &p_synchro->p_vout->change_lock ); p_synchro->i_render_time = i_render_time;
tau_yuv = p_synchro->p_vout->render_time;
vlc_mutex_unlock( &p_synchro->p_vout->change_lock );
switch( i_coding_type ) switch( i_coding_type )
{ {
...@@ -384,7 +382,7 @@ void vout_SynchroNewPicture( vout_synchro_t * p_synchro, int i_coding_type, ...@@ -384,7 +382,7 @@ void vout_SynchroNewPicture( vout_synchro_t * p_synchro, int i_coding_type,
p_synchro->i_n_p, p_synchro->i_n_p,
p_synchro->p_tau[B_CODING_TYPE], p_synchro->p_tau[B_CODING_TYPE],
p_synchro->i_n_b, 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_not_chosen_pic,
p_synchro->i_trashed_pic - p_synchro->i_trashed_pic -
p_synchro->i_not_chosen_pic, p_synchro->i_not_chosen_pic,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment