[vlc-devel] commit: Used new filter blend helpers in vout_subpictures. (Laurent Aimar )
git version control
git at videolan.org
Fri Jun 5 20:24:28 CEST 2009
vlc | branch: master | Laurent Aimar <fenrir at videolan.org> | Thu Jun 4 23:54:23 2009 +0200| [e059c65cf35dbf71f913234d24c897d9f5d69fb1] | committer: Laurent Aimar
Used new filter blend helpers in vout_subpictures.
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=e059c65cf35dbf71f913234d24c897d9f5d69fb1
---
src/video_output/vout_subpictures.c | 77 ++++-------------------------------
1 files changed, 8 insertions(+), 69 deletions(-)
diff --git a/src/video_output/vout_subpictures.c b/src/video_output/vout_subpictures.c
index 415e8c6..ccceb13 100644
--- a/src/video_output/vout_subpictures.c
+++ b/src/video_output/vout_subpictures.c
@@ -175,7 +175,6 @@ static void SubFilterAllocationClean( filter_t * );
/* */
static void SpuRenderCreateAndLoadText( spu_t * );
static void SpuRenderCreateAndLoadScale( spu_t * );
-static void SpuRenderCreateBlend( spu_t *, vlc_fourcc_t i_chroma, int i_aspect );
static void FilterRelease( filter_t *p_filter );
/*****************************************************************************
@@ -263,7 +262,7 @@ void spu_Destroy( spu_t *p_spu )
var_DelCallback( p_spu, "sub-filter", SubFilterCallback, p_spu );
if( p_sys->p_blend )
- FilterRelease( p_sys->p_blend );
+ filter_DeleteBlend( p_sys->p_blend );
if( p_sys->p_text )
FilterRelease( p_sys->p_text );
@@ -421,7 +420,7 @@ void spu_RenderSubpictures( spu_t *p_spu,
/* Create the blending module */
if( !p_sys->p_blend )
- SpuRenderCreateBlend( p_spu, p_fmt_dst->i_chroma, p_fmt_dst->i_aspect );
+ p_spu->p->p_blend = filter_NewBlend( VLC_OBJECT(p_spu), p_fmt_dst->i_chroma );
/* Process all subpictures and regions (in the right order) */
for( unsigned int i_index = 0; i_index < i_subpicture; i_index++ )
@@ -945,62 +944,6 @@ static void FilterRelease( filter_t *p_filter )
vlc_object_release( p_filter );
}
-static void SpuRenderCreateBlend( spu_t *p_spu, vlc_fourcc_t i_chroma, int i_aspect )
-{
- filter_t *p_blend;
-
- assert( !p_spu->p->p_blend );
-
- p_spu->p->p_blend =
- p_blend = vlc_custom_create( p_spu, sizeof(filter_t),
- VLC_OBJECT_GENERIC, "blend" );
- if( !p_blend )
- return;
-
- es_format_Init( &p_blend->fmt_in, VIDEO_ES, 0 );
-
- es_format_Init( &p_blend->fmt_out, VIDEO_ES, 0 );
- p_blend->fmt_out.video.i_x_offset = 0;
- p_blend->fmt_out.video.i_y_offset = 0;
- p_blend->fmt_out.video.i_chroma = i_chroma;
- p_blend->fmt_out.video.i_aspect = i_aspect;
-
- /* The blend module will be loaded when needed with the real
- * input format */
- p_blend->p_module = NULL;
-
- /* */
- vlc_object_attach( p_blend, p_spu );
-}
-static void SpuRenderUpdateBlend( spu_t *p_spu, int i_out_width, int i_out_height,
- const video_format_t *p_in_fmt )
-{
- filter_t *p_blend = p_spu->p->p_blend;
-
- assert( p_blend );
-
- /* */
- if( p_blend->p_module && p_blend->fmt_in.video.i_chroma != p_in_fmt->i_chroma )
- {
- /* The chroma is not the same, we need to reload the blend module
- * XXX to match the old behaviour just test !p_blend->fmt_in.video.i_chroma */
- module_unneed( p_blend, p_blend->p_module );
- p_blend->p_module = NULL;
- }
-
- /* */
- p_blend->fmt_in.video = *p_in_fmt;
-
- /* */
- p_blend->fmt_out.video.i_width =
- p_blend->fmt_out.video.i_visible_width = i_out_width;
- p_blend->fmt_out.video.i_height =
- p_blend->fmt_out.video.i_visible_height = i_out_height;
-
- /* */
- if( !p_blend->p_module )
- p_blend->p_module = module_need( p_blend, "video blending", NULL, false );
-}
static void SpuRenderCreateAndLoadText( spu_t *p_spu )
{
filter_t *p_text;
@@ -1630,16 +1573,12 @@ static void SpuRenderRegion( spu_t *p_spu,
}
/* Update the blender */
- SpuRenderUpdateBlend( p_spu, p_fmt->i_width, p_fmt->i_height, ®ion_fmt );
-
- if( p_sys->p_blend->p_module )
- {
- const int i_alpha = SpuRegionAlpha( p_subpic, p_region );
-
- p_sys->p_blend->pf_video_blend( p_sys->p_blend, p_pic_dst,
- p_region_picture, i_x_offset, i_y_offset, i_alpha );
- }
- else
+ if( filter_ConfigureBlend( p_spu->p->p_blend,
+ p_fmt->i_width, p_fmt->i_height,
+ ®ion_fmt ) ||
+ filter_Blend( p_spu->p->p_blend,
+ p_pic_dst, i_x_offset, i_y_offset,
+ p_region_picture, SpuRegionAlpha( p_subpic, p_region ) ) )
{
msg_Err( p_spu, "blending %4.4s to %4.4s failed",
(char *)&p_sys->p_blend->fmt_out.video.i_chroma,
More information about the vlc-devel
mailing list