Commit ef801bc9 authored by Laurent Aimar's avatar Laurent Aimar

Fixed spu_RenderSubpictures prototype.

It now requires source format instead of scaling parameters.
parent 6d7931bf
...@@ -122,7 +122,14 @@ VLC_EXPORT( subpicture_region_t *,__spu_CreateRegion, ( vlc_object_t *, video_fo ...@@ -122,7 +122,14 @@ VLC_EXPORT( subpicture_region_t *,__spu_CreateRegion, ( vlc_object_t *, video_fo
#define spu_DestroyRegion(a,b) __spu_DestroyRegion(VLC_OBJECT(a),b) #define spu_DestroyRegion(a,b) __spu_DestroyRegion(VLC_OBJECT(a),b)
VLC_EXPORT( void, __spu_DestroyRegion, ( vlc_object_t *, subpicture_region_t * ) ); VLC_EXPORT( void, __spu_DestroyRegion, ( vlc_object_t *, subpicture_region_t * ) );
VLC_EXPORT( subpicture_t *, spu_SortSubpictures, ( spu_t *, mtime_t display_date, bool b_paused, bool b_subtitle_only ) ); VLC_EXPORT( subpicture_t *, spu_SortSubpictures, ( spu_t *, mtime_t display_date, bool b_paused, bool b_subtitle_only ) );
VLC_EXPORT( void, spu_RenderSubpictures, ( spu_t *, video_format_t *, picture_t *, subpicture_t *, int, int ) );
/**
* This function renders a list of subpicture_t on the provided picture.
*
* \param p_fmt_dst is the format of the destination picture.
* \param p_fmt_src is the format of the original(source) video.
*/
VLC_EXPORT( void, spu_RenderSubpictures, ( spu_t *, picture_t *, video_format_t *p_fmt_dst, subpicture_t *p_list, const video_format_t *p_fmt_src ) );
/** @}*/ /** @}*/
......
...@@ -1988,14 +1988,8 @@ static int transcode_video_process( sout_stream_t *p_stream, ...@@ -1988,14 +1988,8 @@ static int transcode_video_process( sout_stream_t *p_stream,
/* Overlay subpicture */ /* Overlay subpicture */
if( p_subpic ) if( p_subpic )
{ {
int i_scale_width, i_scale_height;
video_format_t fmt; video_format_t fmt;
i_scale_width = id->p_encoder->fmt_in.video.i_width * 1000 /
id->p_decoder->fmt_out.video.i_width;
i_scale_height = id->p_encoder->fmt_in.video.i_height * 1000 /
id->p_decoder->fmt_out.video.i_height;
if( p_pic->i_refcount && !filter_chain_GetLength( id->p_f_chain ) ) if( p_pic->i_refcount && !filter_chain_GetLength( id->p_f_chain ) )
{ {
/* We can't modify the picture, we need to duplicate it */ /* We can't modify the picture, we need to duplicate it */
...@@ -2017,8 +2011,8 @@ static int transcode_video_process( sout_stream_t *p_stream, ...@@ -2017,8 +2011,8 @@ static int transcode_video_process( sout_stream_t *p_stream,
fmt.i_sar_num = fmt.i_aspect * fmt.i_height / fmt.i_width; fmt.i_sar_num = fmt.i_aspect * fmt.i_height / fmt.i_width;
fmt.i_sar_den = VOUT_ASPECT_FACTOR; fmt.i_sar_den = VOUT_ASPECT_FACTOR;
spu_RenderSubpictures( p_sys->p_spu, &fmt, p_pic, p_subpic, spu_RenderSubpictures( p_sys->p_spu, p_pic, &fmt,
i_scale_width, i_scale_height ); p_subpic, &id->p_decoder->fmt_out.video );
} }
/* Run user specified filter chain */ /* Run user specified filter chain */
......
...@@ -320,21 +320,11 @@ static void vout_UnlockPicture( vout_thread_t *p_vout, picture_t *p_picture ) ...@@ -320,21 +320,11 @@ static void vout_UnlockPicture( vout_thread_t *p_vout, picture_t *p_picture )
* before rendering, does the subpicture magic, and tells the video output * before rendering, does the subpicture magic, and tells the video output
* thread which direct buffer needs to be displayed. * thread which direct buffer needs to be displayed.
*/ */
picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, picture_t *vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
subpicture_t *p_subpic ) subpicture_t *p_subpic )
{ {
int i_scale_width, i_scale_height;
if( p_pic == NULL ) if( p_pic == NULL )
{
/* XXX: subtitles */
return NULL; return NULL;
}
i_scale_width = p_vout->fmt_out.i_visible_width * 1000 /
p_vout->fmt_in.i_visible_width;
i_scale_height = p_vout->fmt_out.i_visible_height * 1000 /
p_vout->fmt_in.i_visible_height;
if( p_pic->i_type == DIRECT_PICTURE ) if( p_pic->i_type == DIRECT_PICTURE )
{ {
...@@ -350,9 +340,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -350,9 +340,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
vout_CopyPicture( p_vout, PP_OUTPUTPICTURE[0], p_pic ); vout_CopyPicture( p_vout, PP_OUTPUTPICTURE[0], p_pic );
spu_RenderSubpictures( p_vout->p_spu, &p_vout->fmt_out, spu_RenderSubpictures( p_vout->p_spu,
PP_OUTPUTPICTURE[0], p_subpic, PP_OUTPUTPICTURE[0], &p_vout->fmt_out,
i_scale_width, i_scale_height ); p_subpic, &p_vout->fmt_in );
vout_UnlockPicture( p_vout, PP_OUTPUTPICTURE[0] ); vout_UnlockPicture( p_vout, PP_OUTPUTPICTURE[0] );
...@@ -377,9 +367,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -377,9 +367,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
return NULL; return NULL;
vout_CopyPicture( p_vout, PP_OUTPUTPICTURE[0], p_pic ); vout_CopyPicture( p_vout, PP_OUTPUTPICTURE[0], p_pic );
spu_RenderSubpictures( p_vout->p_spu, &p_vout->fmt_out, spu_RenderSubpictures( p_vout->p_spu,
PP_OUTPUTPICTURE[0], PP_OUTPUTPICTURE[0], &p_vout->fmt_out,
p_subpic, i_scale_width, i_scale_height ); p_subpic, &p_vout->fmt_in );
vout_UnlockPicture( p_vout, PP_OUTPUTPICTURE[0] ); vout_UnlockPicture( p_vout, PP_OUTPUTPICTURE[0] );
...@@ -415,9 +405,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -415,9 +405,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
p_vout->p_chroma->pf_video_filter( p_vout->p_chroma, p_pic ); p_vout->p_chroma->pf_video_filter( p_vout->p_chroma, p_pic );
/* Render subpictures on the first direct buffer */ /* Render subpictures on the first direct buffer */
spu_RenderSubpictures( p_vout->p_spu, &p_vout->fmt_out, spu_RenderSubpictures( p_vout->p_spu,
p_tmp_pic, p_subpic, p_tmp_pic, &p_vout->fmt_out,
i_scale_width, i_scale_height ); p_subpic, &p_vout->fmt_in );
if( vout_LockPicture( p_vout, &p_vout->p_picture[0] ) ) if( vout_LockPicture( p_vout, &p_vout->p_picture[0] ) )
return NULL; return NULL;
...@@ -434,9 +424,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic, ...@@ -434,9 +424,9 @@ picture_t * vout_RenderPicture( vout_thread_t *p_vout, picture_t *p_pic,
p_vout->p_chroma->pf_video_filter( p_vout->p_chroma, p_pic ); p_vout->p_chroma->pf_video_filter( p_vout->p_chroma, p_pic );
/* Render subpictures on the first direct buffer */ /* Render subpictures on the first direct buffer */
spu_RenderSubpictures( p_vout->p_spu, &p_vout->fmt_out, spu_RenderSubpictures( p_vout->p_spu,
&p_vout->p_picture[0], &p_vout->p_picture[0], &p_vout->fmt_out,
p_subpic, i_scale_width, i_scale_height ); p_subpic, &p_vout->fmt_in );
} }
vout_UnlockPicture( p_vout, &p_vout->p_picture[0] ); vout_UnlockPicture( p_vout, &p_vout->p_picture[0] );
......
...@@ -949,17 +949,16 @@ exit: ...@@ -949,17 +949,16 @@ exit:
p_region->fmt = fmt_original; p_region->fmt = fmt_original;
} }
void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt_a, void spu_RenderSubpictures( spu_t *p_spu,
picture_t *p_pic_dst, picture_t *p_pic_dst, video_format_t *p_fmt_dst,
subpicture_t *p_subpic_list, subpicture_t *p_subpic_list,
int i_scale_width_orig, int i_scale_height_orig ) const video_format_t *p_fmt_src )
{ {
video_format_t fmt = *p_fmt_a, *p_fmt = &fmt; video_format_t *p_fmt = p_fmt_dst;
const mtime_t i_current_date = mdate(); const mtime_t i_current_date = mdate();
int i_source_video_width; int i_source_video_width;
int i_source_video_height; int i_source_video_height;
subpicture_t *p_subpic; subpicture_t *p_subpic;
spu_scale_t scale_size_org;
/* Get lock */ /* Get lock */
vlc_mutex_lock( &p_spu->subpicture_lock ); vlc_mutex_lock( &p_spu->subpicture_lock );
...@@ -971,10 +970,8 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt_a, ...@@ -971,10 +970,8 @@ void spu_RenderSubpictures( spu_t *p_spu, video_format_t *p_fmt_a,
return; return;
} }
scale_size_org = spu_scale_create( i_scale_width_orig, i_scale_height_orig ); i_source_video_width = p_fmt_src->i_width;
i_source_video_height = p_fmt_src->i_height;
i_source_video_width = p_fmt->i_width * SCALE_UNIT / scale_size_org.w;
i_source_video_height = p_fmt->i_height * SCALE_UNIT / scale_size_org.h;
/* */ /* */
for( p_subpic = p_subpic_list; for( p_subpic = p_subpic_list;
......
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