* Common properties
*/
mtime_t i_pts;
+ mtime_t i_max_stop;
/* decoder_sys_t is shared between decoder and spu units */
vlc_mutex_t lock;
* Tiger properties
*/
tiger_renderer *p_tr;
- subpicture_t *p_spu_final;
mtime_t last_render_ts;
bool b_dirty;
#endif
p_sys->b_ready = false;
p_sys->i_pts = 0;
+ p_sys->i_max_stop = VLC_TS_INVALID;
kate_comment_init( &p_sys->kc );
kate_info_init( &p_sys->ki );
p_block = *pp_block;
- if( p_block->i_flags & (BLOCK_FLAG_CORRUPTED) )
- {
- block_Release( p_block );
- return NULL;
- }
-
- if( p_block->i_flags & (BLOCK_FLAG_DISCONTINUITY) )
+ if( p_block->i_flags & (BLOCK_FLAG_DISCONTINUITY|BLOCK_FLAG_CORRUPTED) )
{
#ifdef HAVE_TIGER
- /* Hmm, should we wait before flushing the renderer ? I think not, but not certain... */
- vlc_mutex_lock( &p_sys->lock );
- tiger_renderer_seek( p_sys->p_tr, 0 );
- vlc_mutex_unlock( &p_sys->lock );
+ if( p_block->i_flags & BLOCK_FLAG_DISCONTINUITY)
+ {
+ /* Hmm, should we wait before flushing the renderer ? I think not, but not certain... */
+ vlc_mutex_lock( &p_sys->lock );
+ tiger_renderer_seek( p_sys->p_tr, 0 );
+ vlc_mutex_unlock( &p_sys->lock );
+ }
#endif
+ p_sys->i_max_stop = VLC_TS_INVALID;
block_Release( p_block );
return NULL;
}
}
}
-static void TigerPreRender( spu_t *p_spu, subpicture_t *p_subpic, const video_format_t *p_fmt )
-{
- decoder_sys_t *p_sys = p_subpic->p_sys->p_dec_sys;
-
- VLC_UNUSED( p_spu );
- VLC_UNUSED( p_fmt );
-
- p_sys->p_spu_final = p_subpic;
-}
-
/*
* We get premultiplied alpha, but VLC doesn't expect this, so we demultiply
* alpha to avoid double multiply (and thus thinner text than we should)).
/* remember what frame we've rendered already */
p_sys->last_render_ts = ts;
- if( p_subpic != p_sys->p_spu_final )
- {
- SubpictureReleaseRegions( p_subpic );
- return;
- }
-
/* time in seconds from the start of the stream */
t = (p_subpic->p_sys->i_start + ts - p_subpic->i_start ) / 1000000.0f;
p_spu->p_sys->i_start = p_block->i_pts;
DecSysHold( p_sys );
+ p_spu->i_stop = __MAX( p_sys->i_max_stop, p_spu->i_stop );
+ p_spu->b_ephemer = true;
p_spu->b_absolute = true;
/* add the event to tiger */
vlc_mutex_unlock( &p_sys->lock );
/* hookup render/update routines */
- p_spu->pf_pre_render = TigerPreRender;
p_spu->pf_update_regions = TigerUpdateRegions;
p_spu->pf_destroy = TigerDestroySubpicture;
}