1
mirror of https://code.videolan.org/videolan/vlc synced 2024-09-04 09:11:33 +02:00

Use p_block->i_dts as spu->i_start instead of p_block->i_pts. This fixes timing issues while transcoding and streaming Teletext subtitles as DVB subtitles.

This commit is contained in:
Jean-Paul Saman 2007-10-26 08:35:53 +00:00
parent 0afe6776db
commit a8de7281d4

View File

@ -183,6 +183,7 @@ static int Open( vlc_object_t *p_this )
}
#endif
p_sys->b_update = VLC_FALSE;
p_sys->p_vbi_dec = vbi_decoder_new();
p_sys->p_dvb_demux = vbi_dvb_pes_demux_new( NULL, NULL );
@ -258,6 +259,7 @@ static subpicture_t *Decode( decoder_t *p_dec, block_t **pp_block )
if( (pp_block == NULL) || (*pp_block == NULL) )
return NULL;
p_block = *pp_block;
*pp_block = NULL;
@ -290,8 +292,8 @@ static subpicture_t *Decode( decoder_t *p_dec, block_t **pp_block )
( p_sys->b_update != VLC_TRUE ) )
goto error;
p_sys->i_last_page = p_sys->i_wanted_page;
p_sys->b_update = VLC_FALSE;
p_sys->i_last_page = p_sys->i_wanted_page;
#if 0
msg_Dbg( p_dec, "we now have page: %d ready for display",
p_sys->i_wanted_page );
@ -334,7 +336,7 @@ static subpicture_t *Decode( decoder_t *p_dec, block_t **pp_block )
/* Normal text subs, easy markup */
p_spu->i_flags = SUBPICTURE_ALIGN_TOP;
p_spu->i_start = (mtime_t) p_block->i_pts;
p_spu->i_start = (mtime_t) p_block->i_dts;
p_spu->i_stop = (mtime_t) 0;
p_spu->b_ephemer = VLC_TRUE;
p_spu->b_absolute = VLC_FALSE;
@ -387,7 +389,6 @@ static subpicture_t *Decode( decoder_t *p_dec, block_t **pp_block )
vout_AllocatePicture( VLC_OBJECT(p_dec), p_pic, fmt_in.i_chroma,
fmt_in.i_width, fmt_in.i_height, fmt_in.i_aspect );
if( !p_pic->i_planes )
{
free( p_pic->p_data_orig );
@ -492,7 +493,7 @@ static int OpaquePage( decoder_t *p_dec, vbi_page p_page,
{
decoder_sys_t *p_sys = (decoder_sys_t *) p_dec->p_sys;
uint32_t *p_begin, *p_end;
unsigned int x = 0, y = 0;
unsigned int x = 0, y = 0;
vbi_opacity opacity;
/* Kludge since zvbi doesn't provide an option to specify opacity. */
@ -507,7 +508,8 @@ static int OpaquePage( decoder_t *p_dec, vbi_page p_page,
{
case VLC_FOURCC('R','G','B','A' ):
p_begin = (uint32_t *)(*p_src)->p->p_pixels;
p_end = (uint32_t *)(*p_src)->p->p_pixels+(fmt.i_width * fmt.i_height);
p_end = (uint32_t *)(*p_src)->p->p_pixels +
( fmt.i_width * fmt.i_height );
break;
case VLC_FOURCC('Y','U','V','A' ):
p_begin = (uint32_t *)(*p_src)->p[A_PLANE].p_pixels;
@ -536,13 +538,13 @@ static int OpaquePage( decoder_t *p_dec, vbi_page p_page,
break;
/* Full text transparency. only foreground color is show */
case VBI_TRANSPARENT_FULL:
*p_begin = 0;
break;
/* Transparency for boxed text */
case VBI_SEMI_TRANSPARENT:
if( (*p_begin & 0xffffff00) == 0xff )
if( (*p_begin & 0xffffff00) == 0xff )
*p_begin = 0;
break;
default:
break;
}
x++;
if( x >= fmt.i_width )